Player registration

This commit is contained in:
aronmal 2023-04-10 22:10:46 +02:00
parent ac578e9247
commit 051af9a147
Signed by: aronmal
GPG key ID: 816B7707426FC612
4 changed files with 60 additions and 44 deletions

View file

@ -1,32 +1,10 @@
import type { Player } from "@prisma/client"
import bcrypt from "bcrypt"
import prisma from "../../prisma"
import logging from "../logging"
async function createPlayerDB(
payload:
| {
username: string
password: string
}
| "anonymous",
next: (player: Player) => void
) {
let player: Player
if (payload === "anonymous") {
player = await prisma.player.create({ data: {} })
logging("Anonymous player created: " + player.id, ["debug"])
} else {
const { username, password } = payload
player = await prisma.player.create({
data: {
username,
passwordHash: await bcrypt.hash(password, 10),
anonymous: false,
},
})
logging("Player registered: " + player.id, ["debug"])
}
async function createPlayerDB(next: (player: Player) => void) {
const player = await prisma.player.create({ data: {} })
logging("Anonymous player created: " + player.id, ["debug"])
return next(player)
}

View file

@ -11,7 +11,7 @@ async function getTokenFromCookie(
// Checking for cookie presens, because it is necessary
if (!value) {
return createPlayerDB("anonymous", (player) =>
return createPlayerDB((player) =>
createTokenDB(player, type, (newToken) => next(newToken))
)
}

View file

@ -0,0 +1,21 @@
import type { Player, Prisma } from "@prisma/client"
import prisma from "../../prisma"
import sendError, { API } from "./sendError"
import { rejectionErrors } from "../errors"
async function updatePlayerDB(
context: API,
player: Player,
data: Prisma.PlayerUpdateInput,
next: (updatedPlayer: Player) => void
) {
if (!player.anonymous) return sendError(context, rejectionErrors.registered)
const updatedPlayer = await prisma.player.update({
where: { id: player.id },
data,
})
return next(updatedPlayer)
}
export default updatePlayerDB

View file

@ -1,9 +1,13 @@
import type { NextApiRequest, NextApiResponse } from "next"
import type { Player } from "@prisma/client"
import createPlayerDB from "../../lib/backend/components/createPlayerDB"
import bcrypt from "bcrypt"
import sendError from "../../lib/backend/components/sendError"
import sendResponse, { Result } from "../../lib/backend/components/sendResponse"
import sendResponse from "../../lib/backend/components/sendResponse"
import getUserFromBody from "../../lib/backend/components/getUserFromBody"
import getTokenFromCookie from "../../lib/backend/components/getTokenFromCookie"
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
import getTokenDB from "../../lib/backend/components/getTokenDB"
import updatePlayerDB from "../../lib/backend/components/updatePlayerDB"
import getPlayerByIdDB from "../../lib/backend/components/getPlayerByIdDB"
interface Data {
registered: boolean
@ -15,19 +19,32 @@ export default async function register(
) {
const context = { req, res }
return getUserFromBody(context, (username, password) =>
createPlayerDB({ username, password }, (player) => {
sendResponse(context, registerResponse(player))
}).catch((err) => sendError(context, err))
)
}
function registerResponse(player: Player): Result<Data> {
// Successfull response
return {
message: "Player created : " + player.id,
statusCode: 201,
body: { registered: true },
type: ["debug", "infoCyan"],
}
return getTokenFromCookie(context, (refreshToken) => {
checkTokenIsValid(context, refreshToken, (token) => {
getTokenDB(context, token, (tokenDB) => {
getUserFromBody(context, (username, password) =>
getPlayerByIdDB(context, tokenDB, async (player) =>
updatePlayerDB(
context,
player,
{
username,
email: "arst",
passwordHash: await bcrypt.hash(password, 10),
anonymous: false,
},
(player) => {
sendResponse(context, {
message: "Player registered : " + player.id,
statusCode: 201,
body: { registered: true },
type: ["debug", "infoCyan"],
})
}
)
)
)
})
})
}).catch((err) => sendError(context, err))
}