UNPKG

@mvx/identity

Version:

identity is oidc for mvc, type-mvc is base on koa. Decorator, Ioc, AOP mvc framework on server.

160 lines (158 loc) 3.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contextExtends = void 0; require("./IAuthenticator"); /** * Intiate a login session for `user`. * * Options: * - `session` Save login state in session, defaults to `true` * * Examples: * * await req.logIn(user, { session: false }); * * @api public */ async function login(user) { if (!this.passport) { throw new Error('passport.initialize() middleware not in use'); } const property = (this.passport && this.passport.userProperty); this.state[property] = user; let obj; try { obj = await this.passport.serializeUser(user, this); } catch (err) { this.state[property] = null; throw err; } if (!this.session) { throw new Error('Should use session middleware before passport middleware'); } this.session.passport.user = obj; } /** * get current login user. * * @api public */ function getUser() { if (!this.passport || !this.session) { return null; } const property = this.passport.userProperty; return this.state[property]; } /** * get current login user roles. * * @api public */ function getRoles() { if (!this.passport || !this.session) { return null; } const property = this.passport.rolesProperty; return this.state[property]; } /** * Terminate an existing login session. * * @api public */ function logout() { if (!this.passport || !this.session) { return; } const property = this.passport.userProperty; delete this.state[property]; delete this.session.passport.user; } /** * Test if request is authenticated. * * @api public */ function isAuthenticated() { if (!this.passport) { return false; } const property = this.passport.userProperty; return (this.state[property]) ? true : false; } /** * Test if request is unauthenticated. * * @api public */ function isUnauthenticated() { return !this.isAuthenticated(); } function hasRole(...roles) { if (!this.passport) { return false; } if (!roles.length) { return true; } const property = this.passport.rolesProperty; if ((this.state[property])) { return this.state[property].some(role => roles.indexOf(role) > 0); } return false; } /** * context extends. * * @export * @param {BaseContext} ctx * @returns {void} */ function contextExtends(ctx) { // add passport http.IncomingMessage extensions if (ctx.hasOwnProperty('login') || ctx.hasOwnProperty('logout') || ctx.hasOwnProperty('isAuthenticated') || ctx.hasOwnProperty('isUnauthenticated')) { return; } Object.defineProperties(ctx, { login: { value: login, writable: false, enumerable: false }, logout: { value: logout, writable: false, enumerable: false }, getUser: { value: getUser, writable: false, enumerable: false }, hasRole: { value: hasRole, writable: false, enumerable: false }, getRoles: { value: getRoles, writable: false, enumerable: false }, isAuthenticated: { value: isAuthenticated, writable: false, enumerable: false }, isUnauthenticated: { value: isUnauthenticated, writable: false, enumerable: false } }); } exports.contextExtends = contextExtends; //# sourceMappingURL=../sourcemaps/passports/ContextExtends.js.map