@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
66 lines (65 loc) • 3.46 kB
JavaScript
;
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;