UNPKG

@mvx/identity

Version:

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

178 lines (176 loc) 4.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contextExtends = void 0; var tslib_1 = require("tslib"); 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 */ function login(user) { return tslib_1.__awaiter(this, void 0, void 0, function () { var property, obj, err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!this.passport) { throw new Error('passport.initialize() middleware not in use'); } property = (this.passport && this.passport.userProperty); this.state[property] = user; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, this.passport.serializeUser(user, this)]; case 2: obj = _a.sent(); return [3 /*break*/, 4]; case 3: err_1 = _a.sent(); this.state[property] = null; throw err_1; case 4: if (!this.session) { throw new Error('Should use session middleware before passport middleware'); } this.session.passport.user = obj; return [2 /*return*/]; } }); }); } /** * get current login user. * * @api public */ function getUser() { if (!this.passport || !this.session) { return null; } var property = this.passport.userProperty; return this.state[property]; } /** * get current login user roles. * * @api public */ function getRoles() { if (!this.passport || !this.session) { return null; } var property = this.passport.rolesProperty; return this.state[property]; } /** * Terminate an existing login session. * * @api public */ function logout() { if (!this.passport || !this.session) { return; } var 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; } var property = this.passport.userProperty; return (this.state[property]) ? true : false; } /** * Test if request is unauthenticated. * * @api public */ function isUnauthenticated() { return !this.isAuthenticated(); } function hasRole() { var roles = []; for (var _i = 0; _i < arguments.length; _i++) { roles[_i] = arguments[_i]; } if (!this.passport) { return false; } if (!roles.length) { return true; } var property = this.passport.rolesProperty; if ((this.state[property])) { return this.state[property].some(function (role) { return 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