forest-express
Version:
Official package for all Forest Express Lianas
107 lines (100 loc) • 4.35 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var OidcClientManagerService = /*#__PURE__*/function () {
/**
* @private @readonly
* @type {Map<string, Promise<import('openid-client').Client>>}
*/
/** @private @readonly */
/** @private @readonly */
/** @private @readonly */
/** @private @readonly */
/**
* @param {import('../context/init').Context} dependencies
*/
function OidcClientManagerService(_ref) {
var oidcConfigurationRetrieverService = _ref.oidcConfigurationRetrieverService,
openIdClient = _ref.openIdClient,
env = _ref.env,
logger = _ref.logger,
configStore = _ref.configStore;
(0, _classCallCheck2["default"])(this, OidcClientManagerService);
(0, _defineProperty2["default"])(this, "cache", new Map());
(0, _defineProperty2["default"])(this, "oidcConfigurationRetrieverService", void 0);
(0, _defineProperty2["default"])(this, "openIdClient", void 0);
(0, _defineProperty2["default"])(this, "env", void 0);
(0, _defineProperty2["default"])(this, "logger", void 0);
this.oidcConfigurationRetrieverService = oidcConfigurationRetrieverService;
this.openIdClient = openIdClient;
this.env = env;
this.logger = logger;
this.configStore = configStore;
}
/**
* @param {string} callbackUrl
* @returns {Promise<import('openid-client').Client>}
*/
(0, _createClass2["default"])(OidcClientManagerService, [{
key: "getClientForCallbackUrl",
value: function () {
var _getClientForCallbackUrl = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(callbackUrl) {
var _this = this;
var configuration, issuer, clientId, envSecret, registration, registrationPromise;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (this.cache.has(callbackUrl)) {
_context.next = 10;
break;
}
_context.next = 3;
return this.oidcConfigurationRetrieverService.retrieve();
case 3:
configuration = _context.sent;
issuer = new this.openIdClient.Issuer(configuration);
clientId = this.configStore.lianaOptions.clientId || this.env.FOREST_CLIENT_ID || undefined;
envSecret = this.configStore.lianaOptions.envSecret || this.env.FOREST_ENV_SECRET;
registration = {
client_id: clientId,
redirect_uris: [callbackUrl],
token_endpoint_auth_method: 'none'
};
registrationPromise = clientId ? new issuer.Client(registration) : issuer.Client.register(registration, {
initialAccessToken: envSecret
})["catch"](function (error) {
_this.logger.error('Unable to register the client', {
configuration: configuration,
registration: registration,
error: error
});
_this.cache["delete"](callbackUrl);
throw error;
});
this.cache.set(callbackUrl, registrationPromise);
case 10:
return _context.abrupt("return", this.cache.get(callbackUrl));
case 11:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function getClientForCallbackUrl(_x) {
return _getClientForCallbackUrl.apply(this, arguments);
}
return getClientForCallbackUrl;
}()
}, {
key: "clearCache",
value: function clearCache() {
this.cache.clear();
}
}]);
return OidcClientManagerService;
}();
module.exports = OidcClientManagerService;