forest-express
Version:
Official package for all Forest Express Lianas
119 lines (114 loc) • 4.78 kB
JavaScript
;
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 DEFAULT_EXPIRATION_IN_SECONDS = 30 * 60;
var OidcConfigurationRetrieverService = /*#__PURE__*/function () {
/** @type {import('./forest-server-requester')} */
/** @type {import('../context/init').Env} */
/** @type {Promise<{configuration: import('openid-client').IssuerMetadata, expiration: Date}>} */
/**
* @param {import("../context/init").Context} context
*/
function OidcConfigurationRetrieverService(context) {
(0, _classCallCheck2["default"])(this, OidcConfigurationRetrieverService);
(0, _defineProperty2["default"])(this, "forestServerRequester", void 0);
(0, _defineProperty2["default"])(this, "env", void 0);
(0, _defineProperty2["default"])(this, "cachedWellKnownConfiguration", void 0);
this.forestServerRequester = context.forestServerRequester;
this.env = context.env;
}
/**
* @private
* @returns {Promise<import('openid-client').IssuerMetadata>}
*/
(0, _createClass2["default"])(OidcConfigurationRetrieverService, [{
key: "_fetchConfiguration",
value: function () {
var _fetchConfiguration2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", this.forestServerRequester.perform('/oidc/.well-known/openid-configuration'));
case 1:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function _fetchConfiguration() {
return _fetchConfiguration2.apply(this, arguments);
}
return _fetchConfiguration;
}()
/**
* @returns {Promise<import('openid-client').IssuerMetadata>}
*/
}, {
key: "retrieve",
value: function () {
var _retrieve = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var _this = this;
var now;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
now = new Date();
_context2.t0 = this.cachedWellKnownConfiguration;
if (!_context2.t0) {
_context2.next = 8;
break;
}
_context2.next = 5;
return this.cachedWellKnownConfiguration;
case 5:
_context2.t1 = _context2.sent.expiration;
_context2.t2 = now;
_context2.t0 = _context2.t1 < _context2.t2;
case 8:
if (!_context2.t0) {
_context2.next = 10;
break;
}
this.clearCache();
case 10:
if (!this.cachedWellKnownConfiguration) {
this.cachedWellKnownConfiguration = this._fetchConfiguration().then(function (configuration) {
var expirationDuration = _this.env.FOREST_OIDC_CONFIG_EXPIRATION_IN_SECONDS || DEFAULT_EXPIRATION_IN_SECONDS;
var expiration = new Date(Date.now() + expirationDuration);
return {
configuration: configuration,
expiration: expiration
};
})["catch"](function (error) {
_this.cachedWellKnownConfiguration = null;
throw error;
});
}
_context2.next = 13;
return this.cachedWellKnownConfiguration;
case 13:
return _context2.abrupt("return", _context2.sent.configuration);
case 14:
case "end":
return _context2.stop();
}
}, _callee2, this);
}));
function retrieve() {
return _retrieve.apply(this, arguments);
}
return retrieve;
}()
}, {
key: "clearCache",
value: function clearCache() {
this.cachedWellKnownConfiguration = null;
}
}]);
return OidcConfigurationRetrieverService;
}();
module.exports = OidcConfigurationRetrieverService;