43 lines
1.3 KiB
TypeScript
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"],
|
|
}
|
|
}
|