UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

66 lines (65 loc) 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.signAndRedirect = void 0; const express_1 = __importDefault(require("express")); const lodash_1 = require("lodash"); const passport_1 = __importDefault(require("passport")); const app_config_1 = require("../../../app.config"); const jwtStrategy_1 = require("../../../modules/passports/jwtStrategy"); const mongodb_1 = require("../../../plugins/mongodb"); const router = express_1.default.Router(); // http://localhost:6969/auth/google?redirect_url=http://localhost:6969/auth/profile const signAndRedirect = async (res, data, redirectUrl) => { const { userId, workspaceId } = data; // console.log("[2] signAndRedirect > data :>> ", data); const { accessToken: access_token, refreshToken: refresh_token } = await (0, jwtStrategy_1.generateJWT)(userId, { expiresIn: process.env.JWT_EXPIRE_TIME || "2d", workspaceId, }); // console.log("[2] signAndRedirect > access_token :>>", access_token); // assign JWT access token to cookie and request headers: res.cookie("x-auth-cookie", access_token); res.cookie("refresh_token", refresh_token); res.header("Authorization", `Bearer ${access_token}`); // console.log("[2] signAndRedirect > redirectUrl :>> ", redirectUrl); // logged in successfully -> redirect to workspace: const url = new URL(redirectUrl); // const params = new URLSearchParams(url.search); // params.set("access_token", access_token); const finalUrl = url.origin + "/workspace/select?access_token=" + access_token + "&refresh_token=" + refresh_token + "&redirect_url=" + redirectUrl; console.log("[2] signAndRedirect > finalUrl", finalUrl); return res.redirect((0, lodash_1.endsWith)(finalUrl, "%23") ? finalUrl.substring(0, finalUrl.length - 3) : finalUrl); }; exports.signAndRedirect = signAndRedirect; router .get("/", (req, res, next) => passport_1.default.authenticate("google", { scope: ["email", "profile"], state: req.query.redirect_url, successRedirect: req.query.redirect_url, session: false, })(req, res, next)) .get("/callback", (req, res, next) => passport_1.default.authenticate("google", { session: false, successReturnToOrRedirect: req.query.redirect_url || req.query.state, failureRedirect: app_config_1.Config.getBasePath("/login?type=failed"), }, // callback function async (error, user, info) => { if (error) { console.log("[GOOGLE CALLBACK] error :>> ", error); return res.redirect(req.get("origin") + app_config_1.Config.getBasePath("/login?type=failed")); } console.log("[GOOGLE CALLBACK] req.query.state :>> ", req.query.state); let redirectUrl = req.query.state || app_config_1.Config.BASE_URL; const originUrl = new URL(redirectUrl).origin; if (!user) return res.redirect(originUrl + app_config_1.Config.getBasePath("/login?type=failed")); const userId = mongodb_1.MongoDB.toString(user._id); const workspaceId = user.activeWorkspace && mongodb_1.MongoDB.isValidObjectId(user.activeWorkspace) ? mongodb_1.MongoDB.toString(user.activeWorkspace) : undefined; // sign JWT, save tokens to cookies (0, exports.signAndRedirect)(res, { userId, workspaceId }, redirectUrl); })(req, res, next)); exports.default = router;