diff --git a/microscript/ILibDuktape_HttpStream.c b/microscript/ILibDuktape_HttpStream.c index 23308af..70e7c44 100644 --- a/microscript/ILibDuktape_HttpStream.c +++ b/microscript/ILibDuktape_HttpStream.c @@ -2726,13 +2726,20 @@ duk_ret_t ILibDuktape_HttpStream_ServerResponse_Digest_SendUnauthorized(duk_cont char *realm; duk_size_t realmLen, htmlLen = 0; void *hptr; + char *qop = NULL; + + if (!duk_is_null_or_undefined(ctx, 1) && duk_is_object(ctx, 1)) + { + // Options Object is present + qop = Duktape_GetStringPropertyValue(ctx, 1, "qop", NULL); + if (qop != NULL) { duk_push_sprintf(ctx, ", qop=\"%s\"", qop); qop = (char*)duk_get_string(ctx, -1); } + } if (nargs > 0) { duk_get_lstring(ctx, 1, &htmlLen); } - duk_push_this(ctx); // [serverResponse] duk_get_prop_string(ctx, -1, ILibDuktape_SR2HttpStream); // [serverResponse][httpStream] duk_get_prop_string(ctx, -1, ILibDuktape_HTTPStream2HTTP); // [serverResponse][httpStream][http] @@ -2749,7 +2756,7 @@ duk_ret_t ILibDuktape_HttpStream_ServerResponse_Digest_SendUnauthorized(duk_cont duk_push_string(ctx, "Unauthorized"); // [writeHead][this][401][Unauthorized] duk_push_object(ctx); // [writeHead][this][401][Unauthorized][headers] duk_push_string(ctx, "WWW-Authenticate"); // [writeHead][this][401][Unauthorized][headers][name] - int wwwLen = sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "Digest realm=\"%s\", nonce=\"%s\", opaque=\"%s\"", realm, nonce, opaque); + int wwwLen = sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "Digest realm=\"%s\", nonce=\"%s\", opaque=\"%s\"%s", realm, nonce, opaque, qop == NULL ? "" : qop); duk_push_lstring(ctx, ILibScratchPad, wwwLen); // [writeHead][this][401][Unauthorized][headers][name][value] duk_put_prop(ctx, -3); // [writeHead][this][401][Unauthorized][headers] if (htmlLen > 0) @@ -2930,9 +2937,9 @@ duk_ret_t ILibDuktape_HttpStream_IncomingMessage_Digest_ValidatePassword(duk_con MD5_CTX mctx; - char *auth, *username, *password, *opaque, *response, *uri, *realm, *method; + char *auth, *username, *password, *opaque, *response, *uri, *realm, *method, *qop, *nc, *cnonce; duk_size_t authLen, passwordLen, methodLen; - int usernameLen, opaqueLen, responseLen, uriLen, realmLen; + int usernameLen, opaqueLen, responseLen, uriLen, realmLen, qopLen, ncLen, cnonceLen; void *DigestTable = ILibInitHashTree_CaseInSensitiveEx(ILibMemory_AllocateA(8000)); void *hptr; @@ -2958,6 +2965,11 @@ duk_ret_t ILibDuktape_HttpStream_IncomingMessage_Digest_ValidatePassword(duk_con ILibGetEntryEx(DigestTable, "uri", 3, (void**)&uri, &uriLen); ILibGetEntryEx(DigestTable, "response", 8, (void**)&response, &responseLen); ILibGetEntryEx(DigestTable, "opaque", 6, (void**)&opaque, &opaqueLen); + ILibGetEntryEx(DigestTable, "qop", 3, (void**)&qop, &qopLen); + ILibGetEntryEx(DigestTable, "nc", 2, (void**)&nc, &ncLen); + ILibGetEntryEx(DigestTable, "cnonce", 6, (void**)&cnonce, &cnonceLen); + + if (username == NULL || uri == NULL || password == NULL || passwordLen == 0 || response == NULL || opaqueLen != 16) { diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index af4e092..1c12fb5 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -563,6 +563,44 @@ void ILibDuktape_Polyfills_Array(duk_context *ctx) ILibDuktape_CreateProperty_InstanceMethod_SetEnumerable(ctx, "findIndex", ILibDuktape_Polyfills_Array_findIndex, DUK_VARARGS, 0); duk_pop_2(ctx); // ... } +duk_ret_t ILibDuktape_Polyfills_String_splitEx(duk_context *ctx) +{ + duk_ret_t ret = 1; + + if (duk_is_null_or_undefined(ctx, 0)) + { + duk_push_array(ctx); // [array] + duk_push_this(ctx); // [array][string] + duk_array_push(ctx, -2); // [array] + } + else if (duk_is_string(ctx, 0)) + { + const char *delim, *str; + duk_size_t delimLen, strLen; + + duk_push_this(ctx); + delim = duk_to_lstring(ctx, 0, &delimLen); + str = duk_to_lstring(ctx, -1, &strLen); + + parser_result *pr = ILibParseStringAdv(str, 0, strLen, delim, delimLen); + parser_result_field *f = pr->FirstResult; + + duk_push_array(ctx); + while (f != NULL) + { + duk_push_lstring(ctx, f->data, f->datalength); + duk_array_push(ctx, -2); + f = f->NextResult; + } + + ILibDestructParserResults(pr); + } + else + { + ret = ILibDuktape_Error(ctx, "Invalid Arguments"); + } + return(ret); +} void ILibDuktape_Polyfills_String(duk_context *ctx) { // Polyfill 'String.startsWith' @@ -573,7 +611,9 @@ void ILibDuktape_Polyfills_String(duk_context *ctx) duk_push_c_function(ctx, ILibDuktape_Polyfills_String_endsWith, DUK_VARARGS); // [string][proto][func] duk_put_prop_string(ctx, -2, "endsWith"); // [string][proto] duk_push_c_function(ctx, ILibDuktape_Polyfills_String_padStart, DUK_VARARGS); // [string][proto][func] - duk_put_prop_string(ctx, -2, "padStart"); + duk_put_prop_string(ctx, -2, "padStart"); // [string][proto] + duk_push_c_function(ctx, ILibDuktape_Polyfills_String_splitEx, DUK_VARARGS); // [string][proto][func] + duk_put_prop_string(ctx, -2, "splitEx"); // [string][proto] duk_pop_2(ctx); } duk_ret_t ILibDuktape_Polyfills_Console_log(duk_context *ctx) @@ -2449,7 +2489,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('crc32-stream', Buffer.from('eJyNVNFu2jAUfY+Uf7jiBaiygNgbVTWxtNOiVVARuqpPk3FugrdgZ7bTFCH+fdchtKTdpPnF2Pfk3HOOrxhd+F6kyp0W+cbCZDwZQywtFhApXSrNrFDS93zvVnCUBlOoZIoa7AZhVjJOW1sJ4DtqQ2iYhGMYOECvLfWGl763UxVs2Q6kslAZJAZhIBMFAj5zLC0ICVxty0IwyRFqYTdNl5Yj9L3HlkGtLSMwI3hJp+wcBsw6tUBrY205HY3qug5ZozRUOh8VR5wZ3cbRzTy5+UBq3Rf3skBjQOPvSmiyud4BK0kMZ2uSWLAalAaWa6SaVU5srYUVMg/AqMzWTKPvpcJYLdaV7eR0kkZ+zwGUFJPQmyUQJz34PEviJPC9h3j1dXG/gofZcjmbr+KbBBZLiBbz63gVL+Z0+gKz+SN8i+fXASClRF3wudROPUkULkFMKa4EsdM+U0c5pkQuMsHJlMwrliPk6gm1JC9Qot4K417RkLjU9wqxFbYZAvPeETW5GLnwnpiGB4qjyerqFOKgT2aRbfvD8FS8dGjfyyrJHSdwqlsc0DxEy+jjhA99b398PUep0RKbxPqFfHAsurV//emWew2cwgvzgG8q+SuArKjMZtjFvvnULTeN4Q9eaY3SNT2eG1ERfCKdnNSdODvgIUyP5b9XL9/3aiQN3lYOQfecCcmKc0P/6eQf7K/Hw6lG8Z5bHp9ft86v4OVpKAWrKyS3GSsMtuDF+idyG6ZIcvFOKxoguxsQRQD9J1ZU2A9gDznacydDuiJIpaX7n+ikBYeOvgZCu7s6uMnZqrQqMKSBV9oa0rdvZ2ja7nAg6B/4IHJ3', 'base64'));"); // http-digest. Refer to /modules/http-digest.js for a human readable version - duk_peval_string_noresult(ctx, "addCompressedModule('http-digest', Buffer.from('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', 'base64'), '2021-09-29T19:36:45.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('http-digest', Buffer.from('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', 'base64'), '2022-06-30T23:16:04.000-07:00');"); // Clipboard. Refer to /modules/clipboard.js for a human readable version duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'), '2022-06-30T01:17:01.000-07:00');"); diff --git a/modules/http-digest.js b/modules/http-digest.js index ff2afc3..bdb4e41 100644 --- a/modules/http-digest.js +++ b/modules/http-digest.js @@ -42,7 +42,7 @@ function generateAuthHeaders(imsg, options, digest) { auth = { realm: null, nonce: null, opaque: null, qop: null }; var www = imsg.headers['WWW-Authenticate']; - var tokens = www.split(','); + var tokens = www.splitEx(','); var pairs; for (var i in tokens) @@ -65,8 +65,13 @@ function generateAuthHeaders(imsg, options, digest) if (auth.opaque[0] == '"') { auth.opaque = auth.opaque.substring(1, auth.opaque.length - 1); } break; case 'qop': - auth.qop = pairs[1]; - if (auth.qop[0] == '"') { auth.qop = auth.qop.substring(1, auth.qop.length - 1); } + var qop = pairs[1]; + if (qop[0] == '"') { qop = qop.substring(1, qop.length - 1); } + qop = qop.split(' ').join('').split(','); + if (options.qop != null) { auth.qop = qop.includes(options.qop) ? options.qop : null; } + else if (qop.includes('auth-int')) { auth.qop = 'auth-int'; } + else if (qop.includes('auth')) { auth.qop = 'auth'; } + console.log('QOP', auth.qop); break; } } @@ -78,13 +83,15 @@ function generateAuthHeaders(imsg, options, digest) if (!(auth = digest._auth)) { return; } } + if (digest._auth.qop == 'auth-int' && options.oneshotEntity == null) { return; } // For auth-int, we need to hash the entity body, so if we don't have it, we must return + var step1 = digest._options.username + ':' + auth.realm + ':' + digest._options.password; auth.step1 = md5.syncHash(step1).toString('hex').toLowerCase(); var step2 = options.method + ':' + options.path; + if (qop == 'auth-int' && options.oneshotEntity != null) { step2 += (':' + md5.syncHash(options.oneshotEntity).toString('hex').toLowerCase()); } auth.step2 = md5.syncHash(step2).toString('hex').toLowerCase(); - if (auth.qop == null) { var step3 = auth.step1 + ':' + auth.nonce + ':' + auth.step2; @@ -245,6 +252,7 @@ function http_digest_instance(options) console.info1('response status code => ' + imsg.statusCode); if (imsg.statusCode == 401) { + if (this.digRequest._buffered && this.digRequest._ended) { this.digRequest.options.oneshotEntity = this.digRequest._buffered; } var callend = this.digRequest._request._callend; var auth = generateAuthHeaders(imsg, this.digRequest.options, this.digRequest._digest); console.info1(JSON.stringify(auth, null, 1));