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