UNPKG

@kitmi/jacaranda

Version:

JavaScript application framework

122 lines (121 loc) 4.34 kB
/** * Enable passport feature * @module Feature_Passport */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path")); const _utils = require("@kitmi/utils"); const _Feature = /*#__PURE__*/ _interop_require_default(require("../Feature")); const _loadModuleFrom_ = require("../helpers/loadModuleFrom_"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const _default = { /** * This feature is loaded at service stage * @member {string} */ stage: _Feature.default.SERVICE, packages: [ 'koa-passport', 'passport' ], /** * Load the feature * @param {Routable} app - The app module object * @param {object} options - Passport settings * @property {bool} [options.useSession=false] - Use session or not, default: false * * @property {object} options.init - Passport initialization settings * @property {string} [options.init.userProperty='user'] - User property name, default: user * @property {bool} [options.init.compat=false] - Backwards compatibility with old strategies, default: false * * @property {array} options.strategies - Passport strategies, e.g. [ 'local', 'facebook' ] * @property {bool|string} options.shareToServer - Expose the passport servcie to whole server * @returns {Promise.<*>} */ load_: async function(app, options, name) { const { strategies, useSession, init, shareToServer } = app.featureConfig(options, { schema: { strategies: { type: 'array', element: { type: 'text' } }, useSession: { type: 'bool', default: false }, init: { type: 'object', optional: true, schema: { userProperty: { type: 'text', default: 'user' }, compat: { type: 'bool', default: false } } }, shareToServer: [ { type: 'text', optional: true }, { type: 'bool', optional: true, default: false } ] } }, name); const KoaPassport = (await app.tryRequire_('koa-passport', true)).KoaPassport; const passport = new KoaPassport(); const initializeMiddleware = passport.initialize(init); passport.middleware = async (ctx, next)=>{ if (ctx.isAuthenticated != null) { return next(); } await initializeMiddleware(ctx, ()=>{ if (useSession) { return passport.session()(ctx, next); } return next(); }); }; passport.hasStrategy = (name)=>{ return name in passport._strategies; }; app.registerService(name, passport); if (shareToServer && app.host != null) { app.host.registerService(typeof shareToServer === 'string' ? shareToServer : name, passport); } return (0, _utils.batchAsync_)(strategies, async (strategy)=>{ const strategyInitiator = await (0, _loadModuleFrom_.tryLoadFrom_)(app, 'Passport strategy', { registry: { name: strategy, path: 'passports' }, project: { name: strategy, path: _nodepath.default.join(app.sourcePath, 'passports') } }); return strategyInitiator(app, passport); }); } }; //# sourceMappingURL=passport.js.map