@loopback/authentication
Version:
A LoopBack component for authentication support.
62 lines • 2.77 kB
JavaScript
// Copyright IBM Corp. and LoopBack contributors 2019. All Rights Reserved.
// Node module: @loopback/authentication
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthenticationStrategyProvider = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@loopback/core");
const keys_1 = require("../keys");
const types_1 = require("../types");
/**
* An authentication strategy provider responsible for
* resolving an authentication strategy by name.
*
* It declares an extension point to which all authentication strategy
* implementations must register themselves as extensions.
*
* @example `context.bind('authentication.strategy').toProvider(AuthenticationStrategyProvider)`
*/
let AuthenticationStrategyProvider = class AuthenticationStrategyProvider {
constructor(authenticationStrategies, metadata) {
this.authenticationStrategies = authenticationStrategies;
this.metadata = metadata;
}
async value() {
var _a;
if (!((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.length)) {
return undefined;
}
return this.findAuthenticationStrategies(this.metadata);
}
async findAuthenticationStrategies(metadata) {
const strategies = [];
const existingStrategies = await this.authenticationStrategies();
const findStrategy = (name) => {
const strategy = existingStrategies.find(a => a.name === name);
if (!strategy) {
const error = new Error(`The strategy '${name}' is not available.`);
Object.assign(error, {
code: types_1.AUTHENTICATION_STRATEGY_NOT_FOUND,
});
throw error;
}
return strategy;
};
for (const data of metadata) {
const strategy = findStrategy(data.strategy);
strategies.push(strategy);
}
return strategies;
}
};
exports.AuthenticationStrategyProvider = AuthenticationStrategyProvider;
exports.AuthenticationStrategyProvider = AuthenticationStrategyProvider = tslib_1.__decorate([
(0, core_1.extensionPoint)(keys_1.AuthenticationBindings.AUTHENTICATION_STRATEGY_EXTENSION_POINT_NAME, { scope: core_1.BindingScope.TRANSIENT }) //this needs to be transient, e.g. for request level context.
,
tslib_1.__param(0, (0, core_1.extensions)()),
tslib_1.__param(1, (0, core_1.inject)(keys_1.AuthenticationBindings.METADATA)),
tslib_1.__metadata("design:paramtypes", [Function, Array])
], AuthenticationStrategyProvider);
//# sourceMappingURL=auth-strategy.provider.js.map
;