mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-10-01 15:48:23 -05:00
Extract mock-auth into different file
This commit is contained in:
@@ -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
57
server/mock-auth.ts
Normal 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();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user