UNPKG

node-oauth-1.0a-ts

Version:

OAuth 1.0a Request Authorization for Node and Browser.

137 lines 9.32 kB
"use strict"; 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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