leaky-ships/leaky-ships/pages/api/auth.ts
2023-04-08 16:56:03 +02:00

42 lines
1.5 KiB
TypeScript

import { NextApiRequest, NextApiResponse } from "next"
import { Logging } from "../../lib/backend/logging"
import { Token } from "@prisma/client"
import sendError from "../../lib/backend/components/sendError"
import getTokenFromCookie from "../../lib/backend/components/getTokenFromCookie"
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
import getTokenDB from "../../lib/backend/components/getTokenDB"
import getPlayerByIdDB from "../../lib/backend/components/getPlayerByIdDB"
import createTokenDB from "../../lib/backend/components/createTokenDB"
import sendResponse from "../../lib/backend/components/sendResponse"
interface Data {
token: string
}
export default async function auth(
req: NextApiRequest,
res: NextApiResponse<Data>
) {
getTokenFromCookie(req, res, (token) => {
checkTokenIsValid(req, res, token, (tokenBody) => {
getTokenDB(req, res, tokenBody, token[1], (tokenDB) => {
getPlayerByIdDB(req, res, tokenDB, (player) => {
createTokenDB(player, "ACCESS", (newToken) => {
sendResponse(req, res, authResponse(newToken, tokenDB))
})
})
})
})
}).catch((err) => sendError(req, res, err))
}
function authResponse(newToken: [string, Token], tokenDB: Token) {
const [newTokenValue, newTokenDB] = newToken
// Successfull response
return {
message: `Access-Token generated: ${newTokenDB.id} with Refreshtoken-Token: ${tokenDB.id}`,
body: { token: newTokenValue },
type: ["debug", "info.cyan"] as Logging[],
}
}