From 0a932ebfe37af8ded2506dca1d0a6df472b8deef Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 25 Nov 2020 13:56:57 +0100 Subject: [PATCH] Enable http digest authentication for CURL --- deps/deps-linux.cmake | 1 - deps/deps-macos.cmake | 1 - src/slic3r/Utils/Http.cpp | 9 +++++ src/slic3r/Utils/Http.hpp | 2 + tests/slic3rutils/slic3rutils_tests_main.cpp | 40 +++++++++++++++++++- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/deps/deps-linux.cmake b/deps/deps-linux.cmake index ae972327f..420638d2f 100644 --- a/deps/deps-linux.cmake +++ b/deps/deps-linux.cmake @@ -80,7 +80,6 @@ ExternalProject_Add(dep_libcurl --disable-smb --disable-smtp --disable-gopher - --disable-crypto-auth --without-gssapi --without-libpsl --without-libidn2 diff --git a/deps/deps-macos.cmake b/deps/deps-macos.cmake index a71a0ebfc..f985cc561 100644 --- a/deps/deps-macos.cmake +++ b/deps/deps-macos.cmake @@ -67,7 +67,6 @@ ExternalProject_Add(dep_libcurl --disable-smb --disable-smtp --disable-gopher - --disable-crypto-auth --without-gssapi --without-libpsl --without-libidn2 diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 31b23defd..94a8c9a56 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -448,6 +448,15 @@ Http& Http::auth_digest(const std::string &user, const std::string &password) return *this; } +Http& Http::auth_basic(const std::string &user, const std::string &password) +{ + curl_easy_setopt(p->curl, CURLOPT_USERNAME, user.c_str()); + curl_easy_setopt(p->curl, CURLOPT_PASSWORD, password.c_str()); + curl_easy_setopt(p->curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + + return *this; +} + Http& Http::ca_file(const std::string &name) { if (p && priv::ca_file_supported(p->curl)) { diff --git a/src/slic3r/Utils/Http.hpp b/src/slic3r/Utils/Http.hpp index b629fb328..f34a27fbc 100644 --- a/src/slic3r/Utils/Http.hpp +++ b/src/slic3r/Utils/Http.hpp @@ -67,6 +67,8 @@ public: Http& remove_header(std::string name); // Authorization by HTTP digest, based on RFC2617. Http& auth_digest(const std::string &user, const std::string &password); + // Basic HTTP authorization + Http& auth_basic(const std::string &user, const std::string &password); // Sets a CA certificate file for usage with HTTPS. This is only supported on some backends, // specifically, this is supported with OpenSSL and NOT supported with Windows and OS X native certificate store. // See also ca_file_supported(). diff --git a/tests/slic3rutils/slic3rutils_tests_main.cpp b/tests/slic3rutils/slic3rutils_tests_main.cpp index b82114976..06989c5ee 100644 --- a/tests/slic3rutils/slic3rutils_tests_main.cpp +++ b/tests/slic3rutils/slic3rutils_tests_main.cpp @@ -2,7 +2,7 @@ #include "slic3r/Utils/Http.hpp" -TEST_CASE("Http", "[Http][NotWorking]") { +TEST_CASE("Check SSL certificates paths", "[Http][NotWorking]") { Slic3r::Http g = Slic3r::Http::get("https://github.com/"); @@ -20,3 +20,41 @@ TEST_CASE("Http", "[Http][NotWorking]") { REQUIRE(status == 200); } +TEST_CASE("Http digest authentication", "[Http][NotWorking]") { + Slic3r::Http g = Slic3r::Http::get("https://jigsaw.w3.org/HTTP/Digest/"); + + g.auth_digest("guest", "guest"); + + unsigned status = 0; + g.on_error([&status](std::string, std::string, unsigned http_status) { + status = http_status; + }); + + g.on_complete([&status](std::string /* body */, unsigned http_status){ + status = http_status; + }); + + g.perform_sync(); + + REQUIRE(status == 200); +} + +TEST_CASE("Http basic authentication", "[Http][NotWorking]") { + Slic3r::Http g = Slic3r::Http::get("https://jigsaw.w3.org/HTTP/Basic/"); + + g.auth_basic("guest", "guest"); + + unsigned status = 0; + g.on_error([&status](std::string, std::string, unsigned http_status) { + status = http_status; + }); + + g.on_complete([&status](std::string /* body */, unsigned http_status){ + status = http_status; + }); + + g.perform_sync(); + + REQUIRE(status == 200); +} +