Extract mock-auth into different file

This commit is contained in:
Kalle (Sendou)
2022-01-07 13:28:19 +02:00
parent 083f4a2896
commit ac15c128e5
2 changed files with 70 additions and 60 deletions

View File

@@ -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 };

57
server/mock-auth.ts Normal file
View File

@@ -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();
});
}