Player registration
This commit is contained in:
parent
ac578e9247
commit
051af9a147
4 changed files with 60 additions and 44 deletions
|
@ -1,32 +1,10 @@
|
||||||
import type { Player } from "@prisma/client"
|
import type { Player } from "@prisma/client"
|
||||||
import bcrypt from "bcrypt"
|
|
||||||
import prisma from "../../prisma"
|
import prisma from "../../prisma"
|
||||||
import logging from "../logging"
|
import logging from "../logging"
|
||||||
|
|
||||||
async function createPlayerDB(
|
async function createPlayerDB(next: (player: Player) => void) {
|
||||||
payload:
|
const player = await prisma.player.create({ data: {} })
|
||||||
| {
|
logging("Anonymous player created: " + player.id, ["debug"])
|
||||||
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"])
|
|
||||||
}
|
|
||||||
|
|
||||||
return next(player)
|
return next(player)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ async function getTokenFromCookie(
|
||||||
|
|
||||||
// Checking for cookie presens, because it is necessary
|
// Checking for cookie presens, because it is necessary
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return createPlayerDB("anonymous", (player) =>
|
return createPlayerDB((player) =>
|
||||||
createTokenDB(player, type, (newToken) => next(newToken))
|
createTokenDB(player, type, (newToken) => next(newToken))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
21
leaky-ships/lib/backend/components/updatePlayerDB.ts
Normal file
21
leaky-ships/lib/backend/components/updatePlayerDB.ts
Normal 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
|
|
@ -1,9 +1,13 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next"
|
import type { NextApiRequest, NextApiResponse } from "next"
|
||||||
import type { Player } from "@prisma/client"
|
import bcrypt from "bcrypt"
|
||||||
import createPlayerDB from "../../lib/backend/components/createPlayerDB"
|
|
||||||
import sendError from "../../lib/backend/components/sendError"
|
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 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 {
|
interface Data {
|
||||||
registered: boolean
|
registered: boolean
|
||||||
|
@ -15,19 +19,32 @@ export default async function register(
|
||||||
) {
|
) {
|
||||||
const context = { req, res }
|
const context = { req, res }
|
||||||
|
|
||||||
return getUserFromBody(context, (username, password) =>
|
return getTokenFromCookie(context, (refreshToken) => {
|
||||||
createPlayerDB({ username, password }, (player) => {
|
checkTokenIsValid(context, refreshToken, (token) => {
|
||||||
sendResponse(context, registerResponse(player))
|
getTokenDB(context, token, (tokenDB) => {
|
||||||
}).catch((err) => sendError(context, err))
|
getUserFromBody(context, (username, password) =>
|
||||||
)
|
getPlayerByIdDB(context, tokenDB, async (player) =>
|
||||||
}
|
updatePlayerDB(
|
||||||
|
context,
|
||||||
function registerResponse(player: Player): Result<Data> {
|
player,
|
||||||
// Successfull response
|
{
|
||||||
return {
|
username,
|
||||||
message: "Player created : " + player.id,
|
email: "arst",
|
||||||
statusCode: 201,
|
passwordHash: await bcrypt.hash(password, 10),
|
||||||
body: { registered: true },
|
anonymous: false,
|
||||||
type: ["debug", "infoCyan"],
|
},
|
||||||
}
|
(player) => {
|
||||||
|
sendResponse(context, {
|
||||||
|
message: "Player registered : " + player.id,
|
||||||
|
statusCode: 201,
|
||||||
|
body: { registered: true },
|
||||||
|
type: ["debug", "infoCyan"],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}).catch((err) => sendError(context, err))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue