@financialforcedev/orizuru-auth
Version:
Salesforce authentication for Heroku Node applications.
84 lines • 11.6 kB
JavaScript
;
/*
* 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==