zents
Version:
ZenTS is a Node.js & TypeScript MVC-Framework for building rich web applications, released as free and open-source software under the MIT License. It is designed for building web applications with modern tools and design patterns.
64 lines • 3.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SecurityProviderLoader = void 0;
const CookieSecurityStrategy_1 = require("./strategies/CookieSecurityStrategy");
const HeaderSecurityStrategy_1 = require("./strategies/HeaderSecurityStrategy");
const HybridSecurityStrategy_1 = require("./strategies/HybridSecurityStrategy");
const SecurityProvider_1 = require("./SecurityProvider");
const SecurityProviderOptions_1 = require("./SecurityProviderOptions");
const SecurityResponse_1 = require("./SecurityResponse");
const SessionStoreAdapterFactory_1 = require("./SessionStoreAdapterFactory");
const config_1 = require("../config/config");
const isObject_1 = require("../utils/isObject");
const logger_1 = require("../log/logger");
class SecurityProviderLoader {
load(entities, databaseContainer) {
const adapterFactory = new SessionStoreAdapterFactory_1.SessionStoreAdapterFactory(databaseContainer);
const providers = new Map();
if (!isObject_1.isObject(config_1.config.security) || !config_1.config.security.enable) {
return providers;
}
for (const providerConfig of config_1.config.security.providers) {
const options = new SecurityProviderOptions_1.SecurityProviderOptions(providerConfig, this.getEntities(entities, providerConfig));
if (providers.has(options.name)) {
logger_1.log.warn(`Security provider "${options.name}" is already registered!`);
continue;
}
const response = new SecurityResponse_1.SecurityResponse(options);
const adapter = adapterFactory.build(options);
const provider = new SecurityProvider_1.SecurityProvider(options, response, adapter, this.getSecurityStrategy(), databaseContainer);
providers.set(options.name, provider);
}
return providers;
}
getEntities(entities, providerConfig) {
var _a, _b;
const user = typeof providerConfig.entity === 'string'
? entities.get(providerConfig.entity.toLowerCase())
: null;
let dbStore;
if (((_a = providerConfig.store) === null || _a === void 0 ? void 0 : _a.type) === 'database') {
dbStore = entities.get((_b = providerConfig.store) === null || _b === void 0 ? void 0 : _b.entity.toLowerCase());
}
return {
user,
dbStore,
};
}
getSecurityStrategy() {
var _a, _b;
let securityStrategy;
if (((_a = config_1.config.security) === null || _a === void 0 ? void 0 : _a.strategy) === 'header') {
securityStrategy = new HeaderSecurityStrategy_1.HeaderSecurityStrategy();
}
else if (((_b = config_1.config.security) === null || _b === void 0 ? void 0 : _b.strategy) === 'hybrid') {
securityStrategy = new HybridSecurityStrategy_1.HybridSecurityStrategy();
}
else {
securityStrategy = new CookieSecurityStrategy_1.CookieSecurityStrategy();
}
return securityStrategy;
}
}
exports.SecurityProviderLoader = SecurityProviderLoader;
//# sourceMappingURL=SecurityProviderLoader.js.map