customer-dashboard-api/src/routes/calendarRoutes.ts

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;