UNPKG

@financialforcedev/orizuru-auth

Version:

Salesforce authentication for Heroku Node applications.

84 lines 11.6 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 }); /** * @module client/cache */ const crypto_1 = require("crypto"); const oauth2_1 = require("./oauth2"); const oauth2Jwt_1 = require("./oauth2Jwt"); const openid_1 = require("./openid"); const salesforce_1 = require("./salesforce"); const cache = new Map(); /** * Finds the auth client for the given environment. * * If the auth client is not found, a new client is created and stored in the cache. * * @param env The auth environment parameters. */ async function findOrCreateClient(env) { const key = createKey(env); let client = cache.get(key); if (!client) { if (env.type === 'Salesforce') { client = new salesforce_1.SalesforceClient(env); } else if (env.type === 'OpenID') { client = new openid_1.OpenIdClient(env); } else if (env.type === 'OAuth2JWT') { client = new oauth2Jwt_1.OAuth2JWTClient(env); } else { client = new oauth2_1.OAuth2Client(env); } await client.init(); cache.set(key, client); } return client; } exports.findOrCreateClient = findOrCreateClient; /** * Clears the OpenID client cache. * * This results in the recreation of OpenID clients. */ function clear() { cache.clear(); } exports.clear = clear; /** * Creates a hash key for the given environment to use in the cache. * * @param env The auth environment parameters. */ function createKey(env) { const { httpTimeout, issuerURI, type } = env; return crypto_1.createHash('sha1').update(`${type}|${issuerURI}|${httpTimeout}`).digest('hex'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5kZXgvY2xpZW50L2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHOztBQUVIOztHQUVHO0FBRUgsbUNBQW9DO0FBRXBDLHFDQUFvRDtBQUNwRCwyQ0FBOEM7QUFDOUMscUNBQXdDO0FBQ3hDLDZDQUFnRDtBQUVoRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztBQXdENUM7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLEdBQWdCO0lBRXhELE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFFWixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzlCLE1BQU0sR0FBRyxJQUFJLDZCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNqQyxNQUFNLEdBQUcsSUFBSSxxQkFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUNwQyxNQUFNLEdBQUcsSUFBSSwyQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTixNQUFNLEdBQUcsSUFBSSxxQkFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FFdkI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUVmLENBQUM7QUF6QkQsZ0RBeUJDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLEtBQUs7SUFDcEIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2YsQ0FBQztBQUZELHNCQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEdBQWdCO0lBQ2xDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUM3QyxPQUFPLG1CQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRmluYW5jaWFsRm9yY2UuY29tLCBpbmNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbiAqICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEZpbmFuY2lhbEZvcmNlLmNvbSwgaW5jIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9yc1xuICogICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICogICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG4gKiAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xuICogIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMXG4gKiAgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTXG4gKiAgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiAgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuLyoqXG4gKiBAbW9kdWxlIGNsaWVudC9jYWNoZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBBdXRoQ2xpZW50LCBPQXV0aDJDbGllbnQgfSBmcm9tICcuL29hdXRoMic7XG5pbXBvcnQgeyBPQXV0aDJKV1RDbGllbnQgfSBmcm9tICcuL29hdXRoMkp3dCc7XG5pbXBvcnQgeyBPcGVuSWRDbGllbnQgfSBmcm9tICcuL29wZW5pZCc7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlQ2xpZW50IH0gZnJvbSAnLi9zYWxlc2ZvcmNlJztcblxuY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQXV0aENsaWVudD4oKTtcblxuLyoqXG4gKiBUaGUgQXV0aCBjbGllbnQgZW52aXJvbm1lbnQgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG5cblx0LyoqXG5cdCAqIFtBdXRob3JpemF0aW9uIEVuZHBvaW50XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OSNzZWN0aW9uLTMuMSkuXG5cdCAqXG5cdCAqIFRoaXMgbXVzdCBiZSBkZWZpbmVkIGZvciBPQXV0aDIgY2xpZW50czsgaXQgc2hvdWxkIGJlIG9taXR0ZWQgZm9yIE9wZW5JRCBjbGllbnRzIGFzXG5cdCAqIHRoZXkgdXNlIHRoZSBbT3BlbklEIFByb3ZpZGVyIElzc3VlciBEaXNjb3ZlcnldKGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1kaXNjb3ZlcnktMV8wLmh0bWwpLlxuXHQgKi9cblx0YXV0aG9yaXphdGlvbkVuZHBvaW50Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGUgSFRUUCB0aW1lb3V0IHVzZWQgd2hlbiBjcmVhdGluZyBhbiBBdXRoIENsaWVudC5cblx0ICovXG5cdGh0dHBUaW1lb3V0OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFtJbnRyb3NwZWN0aW9uIEVuZHBvaW50XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzY2MiNzZWN0aW9uLTIpLlxuXHQgKlxuXHQgKiBUaGlzIG1heSBiZSBkZWZpbmVkIGZvciBPQXV0aDIgY2xpZW50czsgaXQgc2hvdWxkIGJlIG9taXR0ZWQgZm9yIE9wZW5JRCBjbGllbnRzIGFzXG5cdCAqIHRoZXkgdXNlIHRoZSBbT3BlbklEIFByb3ZpZGVyIElzc3VlciBEaXNjb3ZlcnldKGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1kaXNjb3ZlcnktMV8wLmh0bWwpLlxuXHQgKi9cblx0aW50cm9zcGVjdGlvbkVuZHBvaW50Pzogc3RyaW5nIHwgbnVsbDtcblxuXHQvKipcblx0ICogVGhlIElzc3VlciBVUkkgdXNlZCB3aGVuIGNyZWF0aW5nIGFuIEF1dGggQ2xpZW50LlxuXHQgKi9cblx0aXNzdWVyVVJJOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFtSZXZvY2F0aW9uIEVuZHBvaW50XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzAwOSNzZWN0aW9uLTIuMSlcblx0ICpcblx0ICogVGhpcyBtdXN0IGJlIGRlZmluZWQgZm9yIE9BdXRoMiBjbGllbnRzOyBpdCBzaG91bGQgYmUgb21pdHRlZCBmb3IgT3BlbklEIGNsaWVudHMgYXNcblx0ICogdGhleSB1c2UgdGhlIFtPcGVuSUQgUHJvdmlkZXIgSXNzdWVyIERpc2NvdmVyeV0oaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCkuXG5cdCAqL1xuXHRyZXZvY2F0aW9uRW5kcG9pbnQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFtUb2tlbiBFbmRwb2ludF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0zLjIpXG5cdCAqXG5cdCAqIFRoaXMgbXVzdCBiZSBkZWZpbmVkIGZvciBPQXV0aDIgY2xpZW50czsgaXQgc2hvdWxkIGJlIG9taXR0ZWQgZm9yIE9wZW5JRCBjbGllbnRzIGFzXG5cdCAqIHRoZXkgdXNlIHRoZSBbT3BlbklEIFByb3ZpZGVyIElzc3VlciBEaXNjb3ZlcnldKGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1kaXNjb3ZlcnktMV8wLmh0bWwpLlxuXHQgKi9cblx0dG9rZW5FbmRwb2ludD86IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgQXV0aCBDbGllbnQuXG5cdCAqL1xuXHR0eXBlOiAnT0F1dGgyJyB8ICdPQXV0aDJKV1QnIHwgJ09wZW5JRCcgfCAnU2FsZXNmb3JjZSc7XG5cbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYXV0aCBjbGllbnQgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBJZiB0aGUgYXV0aCBjbGllbnQgaXMgbm90IGZvdW5kLCBhIG5ldyBjbGllbnQgaXMgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRoZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gZW52IFRoZSBhdXRoIGVudmlyb25tZW50IHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kT3JDcmVhdGVDbGllbnQoZW52OiBFbnZpcm9ubWVudCkge1xuXG5cdGNvbnN0IGtleSA9IGNyZWF0ZUtleShlbnYpO1xuXG5cdGxldCBjbGllbnQgPSBjYWNoZS5nZXQoa2V5KTtcblx0aWYgKCFjbGllbnQpIHtcblxuXHRcdGlmIChlbnYudHlwZSA9PT0gJ1NhbGVzZm9yY2UnKSB7XG5cdFx0XHRjbGllbnQgPSBuZXcgU2FsZXNmb3JjZUNsaWVudChlbnYpO1xuXHRcdH0gZWxzZSBpZiAoZW52LnR5cGUgPT09ICdPcGVuSUQnKSB7XG5cdFx0XHRjbGllbnQgPSBuZXcgT3BlbklkQ2xpZW50KGVudik7XG5cdFx0fSBlbHNlIGlmIChlbnYudHlwZSA9PT0gJ09BdXRoMkpXVCcpIHtcblx0XHRcdGNsaWVudCA9IG5ldyBPQXV0aDJKV1RDbGllbnQoZW52KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xpZW50ID0gbmV3IE9BdXRoMkNsaWVudChlbnYpO1xuXHRcdH1cblxuXHRcdGF3YWl0IGNsaWVudC5pbml0KCk7XG5cblx0XHRjYWNoZS5zZXQoa2V5LCBjbGllbnQpO1xuXG5cdH1cblxuXHRyZXR1cm4gY2xpZW50O1xuXG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBPcGVuSUQgY2xpZW50IGNhY2hlLlxuICpcbiAqIFRoaXMgcmVzdWx0cyBpbiB0aGUgcmVjcmVhdGlvbiBvZiBPcGVuSUQgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKCkge1xuXHRjYWNoZS5jbGVhcigpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIGtleSBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50IHRvIHVzZSBpbiB0aGUgY2FjaGUuXG4gKlxuICogQHBhcmFtIGVudiBUaGUgYXV0aCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVLZXkoZW52OiBFbnZpcm9ubWVudCkge1xuXHRjb25zdCB7IGh0dHBUaW1lb3V0LCBpc3N1ZXJVUkksIHR5cGUgfSA9IGVudjtcblx0cmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYCR7dHlwZX18JHtpc3N1ZXJVUkl9fCR7aHR0cFRpbWVvdXR9YCkuZGlnZXN0KCdoZXgnKTtcbn1cbiJdfQ==