Browse Source

Enable http digest authentication for CURL

tamasmeszaros 4 years ago
parent
commit
0a932ebfe3

+ 0 - 1
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

+ 0 - 1
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

+ 9 - 0
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)) {

+ 2 - 0
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().

+ 39 - 1
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);
+}
+