summaryrefslogtreecommitdiffstats
path: root/xmrstak/http/httpd.cpp
diff options
context:
space:
mode:
authorfireice-uk <fireice-uk@users.noreply.github.com>2017-11-10 19:14:29 +0000
committerpsychocrypt <psychocrypt@users.noreply.github.com>2017-11-10 20:14:29 +0100
commit7942372e218568f8b27446115cfbb743f7cabf6c (patch)
tree3e658ac8b856fe4b78f8b808d059cfadc2776496 /xmrstak/http/httpd.cpp
parentd35893d926c74893d7c85d1b87b24ffa55744649 (diff)
downloadxmr-stak-7942372e218568f8b27446115cfbb743f7cabf6c.zip
xmr-stak-7942372e218568f8b27446115cfbb743f7cabf6c.tar.gz
Add HTTP Digest auth (#98)
Diffstat (limited to 'xmrstak/http/httpd.cpp')
-rw-r--r--xmrstak/http/httpd.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/xmrstak/http/httpd.cpp b/xmrstak/http/httpd.cpp
index a112bbb..8debfa7 100644
--- a/xmrstak/http/httpd.cpp
+++ b/xmrstak/http/httpd.cpp
@@ -62,8 +62,32 @@ int httpd::req_handler(void * cls,
if (strcmp(method, "GET") != 0)
return MHD_NO;
- *ptr = nullptr;
+ if(strlen(jconf::inst()->GetHttpUsername()) != 0)
+ {
+ char* username;
+ int ret;
+
+ username = MHD_digest_auth_get_username(connection);
+ if (username == NULL)
+ {
+ rsp = MHD_create_response_from_buffer(sHtmlAccessDeniedSize, (void*)sHtmlAccessDenied, MHD_RESPMEM_PERSISTENT);
+ ret = MHD_queue_auth_fail_response(connection, sHttpAuthRelam, sHttpAuthOpaque, rsp, MHD_NO);
+ MHD_destroy_response(rsp);
+ return ret;
+ }
+ free(username);
+ ret = MHD_digest_auth_check(connection, sHttpAuthRelam, jconf::inst()->GetHttpUsername(), jconf::inst()->GetHttpPassword(), 300);
+ if (ret == MHD_INVALID_NONCE || ret == MHD_NO)
+ {
+ rsp = MHD_create_response_from_buffer(sHtmlAccessDeniedSize, (void*)sHtmlAccessDenied, MHD_RESPMEM_PERSISTENT);
+ ret = MHD_queue_auth_fail_response(connection, sHttpAuthRelam, sHttpAuthOpaque, rsp, (ret == MHD_INVALID_NONCE) ? MHD_YES : MHD_NO);
+ MHD_destroy_response(rsp);
+ return ret;
+ }
+ }
+
+ *ptr = nullptr;
std::string str;
if(strcasecmp(url, "/style.css") == 0)
{
OpenPOWER on IntegriCloud