@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
JavaScript
"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