leaky-ships/leaky-ships/pages/api/logout.ts
2023-04-10 20:21:27 +02:00

43 lines
1.3 KiB
TypeScript

import type { NextApiRequest, NextApiResponse } from "next"
import type { Token } from "@prisma/client"
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
import sendResponse, { Result } from "../../lib/backend/components/sendResponse"
import sendError from "../../lib/backend/components/sendError"
import { deleteCookie } from "cookies-next"
import getTokenDB from "../../lib/backend/components/getTokenDB"
import getTokenFromCookie from "../../lib/backend/components/getTokenFromCookie"
interface Data {
loggedOut: boolean
}
export default async function logout(
req: NextApiRequest,
res: NextApiResponse<any>
) {
const context = { req, res }
return getTokenFromCookie(context, (refreshToken) => {
checkTokenIsValid(context, refreshToken, (token) => {
getTokenDB(context, token, (tokenDB) => {
sendResponse(context, logoutResponse(tokenDB, req, res))
})
})
}).catch((err) => sendError(context, err))
}
function logoutResponse<T>(
tokenDB: Token,
req: NextApiRequest,
res: NextApiResponse<T>
): Result<Data> {
// Set login cookie
deleteCookie("token", { req, res })
// Successfull response
return {
message: "User of Token " + tokenDB.id + " logged out.",
body: { loggedOut: true },
type: ["debug", "infoCyan"],
}
}