node-oauth-1.0a-ts
Version:
OAuth 1.0a Request Authorization for Node and Browser.
137 lines • 9.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const url = require("url");
/**
* @private
*/
var Utils;
(function (Utils) {
/**
* Escape string according to [OAuth 1.0 section 3.6]{@link https://tools.ietf.org/html/rfc5849#section-3.6}
* @param {String} str String to encode
* @return {String} Encoded string
*/
function percentEncode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}` // tslint:disable-line
);
}
Utils.percentEncode = percentEncode;
/**
* Build OAuth Authorization header
* @param {Object} oauth_data
* @param {string} [separator=", "] Separator between items
* @return {String} Authorization header string
*/
function toHeader(oauth_data, separator) {
separator = separator || ', ';
oauth_data = Utils.toSortedMap(oauth_data);
let params = [];
// encode each items as key="value"
for (let item of oauth_data) {
let key = Utils.percentEncode(item[0]);
let value = Utils.percentEncode(item[1]);
params.push(`${key}="${value}"`);
}
let joinedParams = params.join(separator);
return `OAuth ${joinedParams}`;
}
Utils.toHeader = toHeader;
/**
* Build parameter string part of the signing string.
*
* Parameter string consists of all request parameters and OAuth data
* sorted by key alphabetically.
*
* @param {Object} request
* @param {Object} oauth_data
* @return {Object} string Parameter string
*/
function getParameterString(request, oauth_data) {
let parsedUrl = url.parse(request.url, true);
// If we are using body hashing then request.data will be a string that should be the exact
// text of the request body (after decompression) rather than a set of key value pairs.
// In this case we take a hash of the body itself and include it in the oauth_data.
// http://web.archive.org/web/20160413130001/https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
const requestData = request.includeBodyHash ? undefined : request.data;
let data = Object.assign({}, parsedUrl.query, requestData || {}, oauth_data);
// These OAuth fields should be ignored when computing signatures even
// if they are present in the data passed to the `authorize` method.
[
"oauth_consumer_secret",
"oauth_signature",
"oauth_token_secret",
].forEach(key => delete data[key]);
data = Utils.toSortedMap(data);
return Utils.stringifyQueryMap(data, '&', '=', {
encodeURIComponent: Utils.percentEncode
});
}
Utils.getParameterString = getParameterString;
/**
* Build query string from {@link Map}
*
* This method should be the same as {@link querystring#stringify}
* but accept a `Map<string, string|Array>` instead of {@link Object}
*
* @param {Object} obj Input
* @param {string} [sep="&"] Separator between items
* @param {string} [eq="="] Separator between key and value
* @param {Object} [options]
* @param {Function} [options.encodeURIComponent=encodeURIComponent]
* Key and value escaping algorithm
* @return {string} Query string
*/
function stringifyQueryMap(obj, sep, eq, options) {
sep = sep || '&';
eq = eq || '=';
options = Object.assign({
encodeURIComponent: encodeURIComponent
}, options);
let out = [];
for (let item of obj) {
if (!Array.isArray(item[1])) {
item[1] = [item[1]];
}
item[1].sort();
let key = options.encodeURIComponent(item[0]);
for (let value of item[1]) {
// if value is an array, repeat the key multiple time
value = options.encodeURIComponent(value);
out.push(`${key}${eq}${value}`);
}
}
return out.join(sep);
}
Utils.stringifyQueryMap = stringifyQueryMap;
/**
* Strip query string from URL
*
* @param {String} url URL to strip
* @return {String} Stripped URL
*/
function getBaseUrl(url) {
return url.split('?')[0];
}
Utils.getBaseUrl = getBaseUrl;
/**
* Return a ES6 Map with same key/value pairs as object.
*
* Iterating over this map would yield key/value pairs in alphabetical
* order of keys.
*
* @param {Object} object Object to sort
* @return {Map}
*/
function toSortedMap(object) {
let keys = Object.keys(object);
keys.sort();
let out = new Map();
for (let key of keys) {
out.set(key, object[key]);
}
return out;
}
Utils.toSortedMap = toSortedMap;
})(Utils = exports.Utils || (exports.Utils = {}));
exports.default = Utils; // tslint:disable-line
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwyQkFBMkI7QUFFM0I7O0dBRUc7QUFDSCxJQUFpQixLQUFLLENBMklyQjtBQTNJRCxXQUFpQixLQUFLO0lBQ2xCOzs7O09BSUc7SUFDSCx1QkFBOEIsR0FBVztRQUNyQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FDakQsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLHNCQUFzQjtTQUMxRSxDQUFDO0lBQ04sQ0FBQztJQUplLG1CQUFhLGdCQUk1QixDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBeUIsVUFBZSxFQUFFLFNBQWtCO1FBQ3hELFNBQVMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzlCLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTNDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVoQixtQ0FBbUM7UUFDbkMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMs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