@kitmi/jacaranda
Version:
JavaScript application framework
122 lines (121 loc) • 4.34 kB
JavaScript
/**
* 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