@qelos/auth
Version:
Express Passport authentication service
105 lines (104 loc) • 4.69 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setMe = exports.getMe = void 0;
const users_1 = require("../services/users");
const workspaces_1 = require("../services/workspaces");
function getImpersonate(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const userId = req.headers['x-impersonate-user'];
const workspaceId = req.headers['x-impersonate-workspace'];
const [user, workspace] = yield Promise.all([
(0, users_1.getUser)({ username: req.headers['x-impersonate-user'], tenant: req.userPayload.tenant }).catch(),
workspaceId ? (0, workspaces_1.getWorkspaceForUser)(req.headers.tenant, userId, workspaceId).catch() : Promise.resolve()
]);
if (!user) {
return res.status(403).json({ message: 'user not exist' }).end();
}
if (workspaceId && !workspace) {
return res.status(403).json({ message: 'workspace not exist' }).end();
}
const firstName = user.firstName;
const lastName = user.lastName;
const fullName = user.fullName || `${firstName} ${lastName}`;
res.status(200).json({
_id: user._id,
username: user.username,
email: user.email,
name: fullName,
firstName,
lastName,
fullName,
roles: user.roles,
profileImage: user.profileImage,
metadata: user.metadata,
workspace
}).end();
});
}
function getMe(req, res) {
return __awaiter(this, void 0, void 0, function* () {
if (req.userPayload.isPrivileged && req.headers['x-impersonate-user']) {
return getImpersonate(req, res);
}
let metadata = {};
try {
metadata = yield (0, users_1.getUserMetadata)(req.userPayload.sub, req.headers.tenant);
}
catch (_a) {
//
}
const firstName = req.userPayload.firstName;
const lastName = req.userPayload.lastName;
const fullName = req.userPayload.fullName || req.userPayload.name || `${firstName} ${lastName}`;
res.status(200).json({
_id: req.userPayload.sub,
username: req.userPayload.username,
email: req.userPayload.email,
name: fullName,
firstName,
lastName,
fullName,
profileImage: req.userPayload.profileImage,
roles: req.userPayload.roles,
metadata,
workspace: req.activeWorkspace
}).end();
});
}
exports.getMe = getMe;
function setMe(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const { username, password, name, fullName, firstName, lastName, birthDate, profileImage, metadata } = req.body || {};
try {
yield (0, users_1.updateUser)({ _id: req.userPayload.sub, tenant: req.userPayload.tenant }, { password, fullName: fullName || name, firstName, lastName, birthDate, profileImage, metadata }, req.authConfig);
res.status(200).json({
_id: req.userPayload.sub,
username: username || req.userPayload.username,
email: req.userPayload.email,
phone: req.userPayload.phone,
name: name || req.userPayload.name,
fullName: fullName || req.userPayload.fullName,
firstName: firstName || req.userPayload.firstName,
lastName: lastName || req.userPayload.lastName,
birthDate: birthDate || req.userPayload.birthDate,
roles: req.userPayload.roles,
profileImage: profileImage || req.userPayload.profileImage,
metadata,
workspace: req.activeWorkspace
}).end();
}
catch (e) {
res.status(500).json({ message: 'failed to update your user information' }).end();
}
});
}
exports.setMe = setMe;