From ac15c128e5a8ebb1f2878be001423d0911902487 Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Fri, 7 Jan 2022 13:28:19 +0200 Subject: [PATCH] Extract mock-auth into different file --- server/index.ts | 73 ++++++++------------------------------------- server/mock-auth.ts | 57 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 60 deletions(-) create mode 100644 server/mock-auth.ts diff --git a/server/index.ts b/server/index.ts index 03c9151ec..10b104e4b 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,15 +1,13 @@ -import path from "path"; -import express from "express"; -import compression from "compression"; -import morgan from "morgan"; -import { z } from "zod"; import { createRequestHandler } from "@remix-run/express"; -import { setUpAuth } from "./auth"; -import { seed } from "../prisma/seed/script"; -import { LoggedInUser } from "~/validators/user"; -import { db } from "~/utils/db.server"; -import { User } from "@prisma/client"; +import compression from "compression"; +import express from "express"; +import morgan from "morgan"; +import path from "path"; import { SeedVariationsSchema } from "~/validators/seedVariations"; +import { LoggedInUser } from "~/validators/user"; +import { seed } from "../prisma/seed/script"; +import { setUpAuth } from "./auth"; +import { setUpMockAuth } from "./mock-auth"; const MODE = process.env.NODE_ENV; const BUILD_DIR = path.join(process.cwd(), "server/build"); @@ -25,14 +23,15 @@ app.use(express.static("public/build", { immutable: true, maxAge: "1y" })); app.use(morgan("tiny")); +let mockUserFromHTTPCall: { user: LoggedInUser | null } = { user: null }; + try { setUpAuth(app); + setUpMockAuth(app, mockUserFromHTTPCall); } catch (err) { console.error(err); } -let mockUserFromHTTPCall: LoggedInUser | null = null; - if (process.env.NODE_ENV === "development") { app.post("/seed", async (req, res) => { const variation = SeedVariationsSchema.optional().parse( @@ -42,52 +41,6 @@ if (process.env.NODE_ENV === "development") { res.status(200).end(); }); - - // TODO: this could be in a different file -> later this will also be for prod - app.post("/mock-auth", async (req, res) => { - try { - const data = z - .object({ username: z.string().nullish(), team: z.string().nullish() }) - .parse(req.query); - - const allUsers = await db.user.findMany({}); - - let newMockUser: User | undefined; - if (data.username) { - const username = data.username.toLowerCase().trim(); - newMockUser = allUsers.find( - (user) => user.discordName.toLowerCase() === username - ); - } else if (data.team) { - const team = data.team.toLowerCase().trim(); - const teams = await db.tournamentTeam.findMany({ - include: { members: { include: { member: true } } }, - }); - - const wantedTeam = teams.find( - (teamFromDb) => teamFromDb.name.toLowerCase() === team.toLowerCase() - ); - if (!wantedTeam) return res.status(400).end(); - - const captain = wantedTeam.members.find((member) => member.captain); - if (!captain) return res.status(400).end(); - - newMockUser = captain.member; - } - - if (!newMockUser) return res.status(400).end(); - - mockUserFromHTTPCall = { - discordAvatar: newMockUser.discordAvatar, - discordId: newMockUser.discordId, - id: newMockUser.id, - }; - } catch { - return res.status(400).end(); - } - - res.status(200).end(); - }); } function userToContext(req: Express.Request) { @@ -98,8 +51,8 @@ function userToContext(req: Express.Request) { return { user: JSON.parse(mockedUser) }; } - if (mockUserFromHTTPCall) { - return { user: mockUserFromHTTPCall }; + if (mockUserFromHTTPCall.user) { + return { user: mockUserFromHTTPCall.user }; } } return { user: req.user }; diff --git a/server/mock-auth.ts b/server/mock-auth.ts new file mode 100644 index 000000000..016065725 --- /dev/null +++ b/server/mock-auth.ts @@ -0,0 +1,57 @@ +import { User } from "@prisma/client"; +import type { Express } from "express"; +import { z } from "zod"; +import { db } from "~/utils/db.server"; +import type { LoggedInUser } from "~/validators/user"; + +export function setUpMockAuth( + app: Express, + userObj: { user: LoggedInUser | null } +): void { + if (process.env.NODE_ENV !== "development") return; + + app.post("/mock-auth", async (req, res) => { + try { + const data = z + .object({ username: z.string().nullish(), team: z.string().nullish() }) + .parse(req.query); + + const allUsers = await db.user.findMany({}); + + let newMockUser: User | undefined; + if (data.username) { + const username = data.username.toLowerCase().trim(); + newMockUser = allUsers.find( + (user) => user.discordName.toLowerCase() === username + ); + } else if (data.team) { + const team = data.team.toLowerCase().trim(); + const teams = await db.tournamentTeam.findMany({ + include: { members: { include: { member: true } } }, + }); + + const wantedTeam = teams.find( + (teamFromDb) => teamFromDb.name.toLowerCase() === team.toLowerCase() + ); + if (!wantedTeam) return res.status(400).end(); + + const captain = wantedTeam.members.find((member) => member.captain); + if (!captain) return res.status(400).end(); + + newMockUser = captain.member; + } + + if (!newMockUser) return res.status(400).end(); + + userObj.user = { + discordAvatar: newMockUser.discordAvatar, + discordId: newMockUser.discordId, + id: newMockUser.id, + }; + } catch { + return res.status(400).end(); + } + + res.status(200).end(); + }); +}