UNPKG

@financialforcedev/orizuru-auth

Version:

Salesforce authentication for Heroku Node applications.

69 lines 8.99 kB
"use strict"; /* * Copyright (c) 2019, FinancialForce.com, inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the FinancialForce.com, inc nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Object.defineProperty(exports, "__esModule", { value: true }); const tokenRegex = new RegExp('^Bearer (.+)$'); exports.DEFAULT_MIDDLEWARE_OPTIONS = Object.freeze({ setTokenOnContext: false }); /** * Extracts the access token from the incoming request. * * @param req The HTTP request. * @param tokenRegex The regular expression used for parsing the token. * @returns The access token from the request authorization header. */ function extractAccessToken(req) { if (!req.headers) { throw new Error('Missing required object parameter: headers.'); } if (!req.headers.authorization) { throw new Error('Missing required string parameter: headers[authorization].'); } const matches = tokenRegex.exec(req.headers.authorization); if (matches === null) { throw new Error('Authorization header with \'Bearer ***...\' required.'); } return matches[1]; } exports.extractAccessToken = extractAccessToken; /** * Sets the access token on the Orizuru context. * * @param req The HTTP request. * @param accessToken The access token. * @param setTokenOnContext If true, add the token to the Orizuru context. */ function setAccessTokenOnRequest(req, accessToken, setTokenOnContext) { if (!setTokenOnContext) { return; } const orizuru = req.orizuru || {}; orizuru.accessToken = accessToken; req.orizuru = orizuru; } exports.setAccessTokenOnRequest = setAccessTokenOnRequest; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW5kZXgvbWlkZGxld2FyZS9jb21tb24vYWNjZXNzVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7O0FBUUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFjbEMsUUFBQSwwQkFBMEIsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMxRSxpQkFBaUIsRUFBRSxLQUFLO0NBQ3hCLENBQUMsQ0FBQztBQUVIOzs7Ozs7R0FNRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLEdBQVk7SUFFOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztLQUM5RTtJQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0tBQ3pFO0lBRUQsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFbkIsQ0FBQztBQWpCRCxnREFpQkM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxHQUFZLEVBQUUsV0FBbUIsRUFBRSxpQkFBMkI7SUFFckcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1FBQ3ZCLE9BQU87S0FDUDtJQUVELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBRXZCLENBQUM7QUFWRCwwREFVQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZpbmFuY2lhbEZvcmNlLmNvbSwgaW5jXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiAgIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBGaW5hbmNpYWxGb3JjZS5jb20sIGluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnNcbiAqICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcbiAqICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTFxuICogIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EU1xuICogIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8qKlxuICogQG1vZHVsZSBtaWRkbGV3YXJlL2NvbW1vbi9hY2Nlc3NUb2tlblxuICovXG5cbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdAZmluYW5jaWFsZm9yY2VkZXYvb3JpenVydSc7XG5cbmNvbnN0IHRva2VuUmVnZXggPSBuZXcgUmVnRXhwKCdeQmVhcmVyICguKykkJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZU9wdGlvbnMge1xuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRva2VuIG9uIG9yaXp1cnUgY29udGV4dC5cblx0ICpcblx0ICogV0FSTklORzogVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlO1xuXHQgKiBtYWtlIHN1cmUgdGhhdCB0aGUgdG9rZW4gaXMgYXMgc2VjdXJlIGFzIHBvc3NpYmxlLlxuXHQgKi9cblx0c2V0VG9rZW5PbkNvbnRleHQ/OiBib29sZWFuO1xuXG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01JRERMRVdBUkVfT1BUSU9OUzogTWlkZGxld2FyZU9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcblx0c2V0VG9rZW5PbkNvbnRleHQ6IGZhbHNlXG59KTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIGluY29taW5nIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHJlcSBUaGUgSFRUUCByZXF1ZXN0LlxuICogQHBhcmFtIHRva2VuUmVnZXggVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciBwYXJzaW5nIHRoZSB0b2tlbi5cbiAqIEByZXR1cm5zIFRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgcmVxdWVzdCBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBY2Nlc3NUb2tlbihyZXE6IFJlcXVlc3QpIHtcblxuXHRpZiAoIXJlcS5oZWFkZXJzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBwYXJhbWV0ZXI6IGhlYWRlcnMuJyk7XG5cdH1cblxuXHRpZiAoIXJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgc3RyaW5nIHBhcmFtZXRlcjogaGVhZGVyc1thdXRob3JpemF0aW9uXS4nKTtcblx0fVxuXG5cdGNvbnN0IG1hdGNoZXMgPSB0b2tlblJlZ2V4LmV4ZWMocmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbik7XG5cdGlmIChtYXRjaGVzID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGhlYWRlciB3aXRoIFxcJ0JlYXJlciAqKiouLi5cXCcgcmVxdWlyZWQuJyk7XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlc1sxXTtcblxufVxuXG4vKipcbiAqIFNldHMgdGhlIGFjY2VzcyB0b2tlbiBvbiB0aGUgT3JpenVydSBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSByZXEgVGhlIEhUVFAgcmVxdWVzdC5cbiAqIEBwYXJhbSBhY2Nlc3NUb2tlbiBUaGUgYWNjZXNzIHRva2VuLlxuICogQHBhcmFtIHNldFRva2VuT25Db250ZXh0IElmIHRydWUsIGFkZCB0aGUgdG9rZW4gdG8gdGhlIE9yaXp1cnUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2Vzc1Rva2VuT25SZXF1ZXN0KHJlcTogUmVxdWVzdCwgYWNjZXNzVG9rZW46IHN0cmluZywgc2V0VG9rZW5PbkNvbnRleHQ/OiBib29sZWFuKSB7XG5cblx0aWYgKCFzZXRUb2tlbk9uQ29udGV4dCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG9yaXp1cnUgPSByZXEub3JpenVydSB8fCB7fTtcblx0b3JpenVydS5hY2Nlc3NUb2tlbiA9IGFjY2Vzc1Rva2VuO1xuXHRyZXEub3JpenVydSA9IG9yaXp1cnU7XG5cbn1cbiJdfQ==