71 lines
2.6 KiB
JavaScript
71 lines
2.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var JSCompatibility_1 = require("../helper/JSCompatibility");
|
|
var crypto = require("crypto");
|
|
function md5(value) {
|
|
return crypto.createHash('md5').update(value).digest('hex');
|
|
}
|
|
exports.md5 = md5;
|
|
function parseHTTPAuthHeader(authHeader, prefix) {
|
|
var stepOverSeparator = function (currentString, index, separator) {
|
|
while (currentString.length > index && /\s/.test(currentString[index].toString()))
|
|
++index;
|
|
if (currentString.length <= index || currentString[index] !== separator)
|
|
throw new Error('Invalid format');
|
|
++index;
|
|
while (currentString.length > index && /\s/.test(currentString[index].toString()))
|
|
++index;
|
|
if (currentString.length <= index)
|
|
throw new Error('Invalid format');
|
|
return index;
|
|
};
|
|
var getToken = function (currentString) {
|
|
var index = 0;
|
|
while (currentString.length > index && /\s/.test(currentString[index].toString()))
|
|
++index;
|
|
var match = /^([a-zA-Z]+)/.exec(currentString.substring(index));
|
|
var key = match[1];
|
|
index += key.length;
|
|
index = stepOverSeparator(currentString, index, '=');
|
|
var value;
|
|
if (currentString[index] === '"') {
|
|
++index;
|
|
value = '';
|
|
var startIndex = index;
|
|
while (currentString.length > index && currentString[index] !== '"') {
|
|
if (currentString[index] === '\\')
|
|
++index;
|
|
value += currentString[index];
|
|
++index;
|
|
}
|
|
++index;
|
|
}
|
|
else {
|
|
var match2 = /^([^\s,]+)/.exec(currentString.substring(index));
|
|
value = match2[1];
|
|
index += value.length;
|
|
}
|
|
return {
|
|
strLeft: currentString.substring(index),
|
|
key: key,
|
|
value: value
|
|
};
|
|
};
|
|
if (!JSCompatibility_1.startsWith(authHeader, prefix + ' '))
|
|
throw Error('Invalid format');
|
|
authHeader = authHeader.substring((prefix + ' ').length);
|
|
var keyValues = {};
|
|
var token;
|
|
do {
|
|
token = getToken(authHeader);
|
|
if (token) {
|
|
keyValues[token.key] = token.value;
|
|
authHeader = token.strLeft.trim();
|
|
if (authHeader.length > 0)
|
|
authHeader = authHeader.substring(stepOverSeparator(authHeader, 0, ','));
|
|
}
|
|
} while (token && authHeader);
|
|
return keyValues;
|
|
}
|
|
exports.parseHTTPAuthHeader = parseHTTPAuthHeader;
|