101 lines
2.7 KiB
TypeScript
101 lines
2.7 KiB
TypeScript
import express, { Request } from "express";
|
|
import passport from "passport";
|
|
const router = express.Router();
|
|
import axios from "axios";
|
|
import logger from "../logger/logger";
|
|
import Session from "../models/session";
|
|
|
|
import * as calendarController from "../controllers/calendarController";
|
|
import {
|
|
PASSPORT_FAILURE_REDIRECT_URL,
|
|
PASSPORT_SUCCESS_REDIRECT_URL,
|
|
} from "../utils/constants";
|
|
|
|
router.get(
|
|
"/auth/google",
|
|
passport.authenticate("google", {
|
|
accessType: "offline",
|
|
|
|
//session: false,
|
|
scope: [
|
|
"https://www.googleapis.com/auth/calendar.app.created",
|
|
"https://www.googleapis.com/auth/calendar.events.freebusy",
|
|
"https://www.googleapis.com/auth/userinfo.profile",
|
|
],
|
|
})
|
|
);
|
|
|
|
router.get(
|
|
"/auth/google/callback",
|
|
passport.authenticate("google", {
|
|
failureRedirect: PASSPORT_FAILURE_REDIRECT_URL,
|
|
}),
|
|
function (req, res) {
|
|
// Successful authentication, redirect home.
|
|
const accessToken = (req.user as Request & { accessToken?: string })
|
|
.accessToken;
|
|
const refreshToken = (req.user as Request & { refreshToken?: string })
|
|
.refreshToken;
|
|
const sub = (req.user as Request & { profile?: any }).profile._json.sub; // google user id
|
|
|
|
const sessionId = req.cookies["session"];
|
|
|
|
if (!sessionId) {
|
|
logger.error("session cookie not found");
|
|
res.redirect(PASSPORT_FAILURE_REDIRECT_URL);
|
|
return;
|
|
}
|
|
|
|
Session.findOne({
|
|
where: {
|
|
session_id: sessionId,
|
|
},
|
|
})
|
|
.then((userSession) => {
|
|
if (!userSession) {
|
|
logger.error("user session not found");
|
|
res.redirect(PASSPORT_FAILURE_REDIRECT_URL);
|
|
return;
|
|
}
|
|
|
|
axios
|
|
.post(
|
|
`${process.env.TERMIN_PLANNER_URL}/addGoogleAccount` as string,
|
|
{
|
|
userId: userSession.user_id,
|
|
accessToken: accessToken,
|
|
refreshToken: refreshToken,
|
|
sub: sub,
|
|
pass: process.env.TERMIN_PLANNER_AUTHORIZATION_PASSWORD as string,
|
|
}
|
|
)
|
|
.then(() => {})
|
|
.catch((err) => {
|
|
logger.info("err %s", err);
|
|
});
|
|
|
|
res.redirect(PASSPORT_SUCCESS_REDIRECT_URL);
|
|
})
|
|
.catch((err) => {
|
|
logger.error(err);
|
|
res.redirect(PASSPORT_FAILURE_REDIRECT_URL);
|
|
});
|
|
|
|
// /api/v1/addGoogleAccount
|
|
}
|
|
);
|
|
|
|
router.get("/store", calendarController.GetStoreId);
|
|
router.get("/settings", calendarController.GetCalendarSettings);
|
|
router.post(
|
|
"/settings/personal",
|
|
calendarController.UpdatePersonalCalendarSettings
|
|
);
|
|
router.post("/settings/store", calendarController.UpdateStoreCalendarSettings);
|
|
router.post(
|
|
"/settings/personal/unlink",
|
|
calendarController.UnlinkGoogleCalendar
|
|
);
|
|
|
|
export default router;
|