mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-04 01:55:10 +02:00
add login portal and traefik middleware auth for testing redirect login
This commit is contained in:
parent
0838679120
commit
87c4fc798f
14 changed files with 285 additions and 130 deletions
|
@ -76,6 +76,9 @@ app.prepare().then(() => {
|
|||
`Internal server is running on http://localhost:${internalPort}`,
|
||||
);
|
||||
});
|
||||
|
||||
internalServer.use(notFoundMiddleware)
|
||||
internalServer.use(errorHandlerMiddleware);
|
||||
});
|
||||
|
||||
declare global {
|
||||
|
|
1
server/routers/badger/index.ts
Normal file
1
server/routers/badger/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export * from "./verifyUser";
|
61
server/routers/badger/verifyUser.ts
Normal file
61
server/routers/badger/verifyUser.ts
Normal 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",
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue