add login portal and traefik middleware auth for testing redirect login

This commit is contained in:
Milo Schwartz 2024-10-06 18:08:26 -04:00
parent 0838679120
commit 87c4fc798f
No known key found for this signature in database
14 changed files with 285 additions and 130 deletions

View file

@ -76,6 +76,9 @@ app.prepare().then(() => {
`Internal server is running on http://localhost:${internalPort}`,
);
});
internalServer.use(notFoundMiddleware)
internalServer.use(errorHandlerMiddleware);
});
declare global {

View file

@ -0,0 +1 @@
export * from "./verifyUser";

View file

@ -0,0 +1,61 @@
import lucia from "@server/auth";
import HttpCode from "@server/types/HttpCode";
import { NextFunction, Request, Response } from "express";
import createHttpError from "http-errors";
import { z } from "zod";
import { fromError } from "zod-validation-error";
import { response } from "@server/utils/response";
export const verifyUserBody = z.object({
sessionId: z.string(),
});
export type VerifyUserBody = z.infer<typeof verifyUserBody>;
export type VerifyUserResponse = {
valid: boolean;
};
export async function verifyUser(
req: Request,
res: Response,
next: NextFunction,
): Promise<any> {
const parsedBody = verifyUserBody.safeParse(req.query);
if (!parsedBody.success) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
fromError(parsedBody.error).toString(),
),
);
}
const { sessionId } = parsedBody.data;
try {
const { session, user } = await lucia.validateSession(sessionId);
if (!session || !user) {
return next(
createHttpError(HttpCode.UNAUTHORIZED, "Invalid session"),
);
}
return response<VerifyUserResponse>(res, {
data: { valid: true },
success: true,
error: false,
message: "Access allowed",
status: HttpCode.OK,
});
} catch (e) {
return next(
createHttpError(
HttpCode.INTERNAL_SERVER_ERROR,
"Failed to check user",
),
);
}
}

View file

@ -1,5 +1,6 @@
import { Router } from "express";
import * as gerbil from "@server/routers/gerbil";
import * as badger from "@server/routers/badger";
import * as traefik from "@server/routers/traefik";
import HttpCode from "@server/types/HttpCode";
@ -14,10 +15,15 @@ internalRouter.get("/traefik-config", traefik.traefikConfigProvider);
// Gerbil routes
const gerbilRouter = Router();
internalRouter.use("/gerbil", gerbilRouter);
gerbilRouter.get("/get-config", gerbil.getConfig);
gerbilRouter.post("/receive-bandwidth", gerbil.receiveBandwidth);
internalRouter.use("/gerbil", gerbilRouter);
// Badger routes
const badgerRouter = Router();
internalRouter.use("/badger", badgerRouter);
internalRouter.get("/verify-user", badger.verifyUser)
export default internalRouter;

View file

@ -5,6 +5,7 @@ import { DynamicTraefikConfig } from "./configSchema";
import { and, like, eq } from "drizzle-orm";
import logger from "@server/logger";
import HttpCode from "@server/types/HttpCode";
import env from "@server/environment";
export async function traefikConfigProvider(_: Request, res: Response) {
try {
@ -36,10 +37,8 @@ export function buildTraefikConfig(
[middlewareName]: {
plugin: {
[middlewareName]: {
// These are temporary values
apiAddress:
"http://host.docker.internal:3001/api/v1/badger",
validToken: "abc123",
apiBaseUrl: "http://localhost:3001/api/v1",
appBaseUrl: env.BASE_URL,
},
},
},