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;