81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
import { FreshContext, Handlers } from "$fresh/server.ts";
|
|
import { CasContent, LoginJWT, State } from "$root/defaults/interfaces.ts";
|
|
import { createJwt } from "@popov/jwt";
|
|
import { setCookie } from "$std/http/cookie.ts";
|
|
import { getKey } from "$root/routes/_middleware.ts";
|
|
|
|
function makeFakeUser(
|
|
role: "employee" | "student",
|
|
numEtud?: string,
|
|
): CasContent {
|
|
if (role === "student" && numEtud) {
|
|
return {
|
|
amuCampus: "local",
|
|
amuComposante: "local",
|
|
amuDateValidation: "",
|
|
coGroup: "",
|
|
eduPersonPrimaryAffiliation: "student",
|
|
eduPersonPrincipalName: `${numEtud}@local`,
|
|
mail: `${numEtud}@local`,
|
|
displayName: `Etudiant ${numEtud}`,
|
|
givenName: "",
|
|
memberOf: [],
|
|
sn: "",
|
|
supannCivilite: "",
|
|
supannEntiteAffectation: "",
|
|
supannEtuAnneeInscription: "",
|
|
supannEtuEtape: "",
|
|
uid: `e${numEtud}`,
|
|
};
|
|
}
|
|
return {
|
|
amuCampus: "local",
|
|
amuComposante: "local",
|
|
amuDateValidation: "",
|
|
coGroup: "",
|
|
eduPersonPrimaryAffiliation: "employee",
|
|
eduPersonPrincipalName: "admin@local",
|
|
mail: "admin@local",
|
|
displayName: "Admin Local",
|
|
givenName: "Admin",
|
|
memberOf: [],
|
|
sn: "Local",
|
|
supannCivilite: "",
|
|
supannEntiteAffectation: "",
|
|
supannEtuAnneeInscription: "",
|
|
supannEtuEtape: "",
|
|
uid: "admin-local",
|
|
};
|
|
}
|
|
|
|
export const handler: Handlers<null, State> = {
|
|
async GET(request: Request, _context: FreshContext<State, null>) {
|
|
if (Deno.env.get("LOCAL") !== "true") {
|
|
return new Response("Not available outside LOCAL mode.", { status: 403 });
|
|
}
|
|
|
|
const url = new URL(request.url);
|
|
const role = url.searchParams.get("role") === "student"
|
|
? "student"
|
|
: "employee";
|
|
const numEtud = url.searchParams.get("numEtud") ?? undefined;
|
|
const user = makeFakeUser(role, numEtud);
|
|
|
|
const now = Math.floor(Date.now() / 1000);
|
|
const payload: LoginJWT = {
|
|
iss: "PolyMPR",
|
|
iat: now,
|
|
exp: now + 0xe10,
|
|
aud: "PolyMPR",
|
|
user,
|
|
};
|
|
|
|
const token = await createJwt(payload, getKey(user.uid));
|
|
const headers = new Headers();
|
|
setCookie(headers, { name: "sessionToken", value: token });
|
|
headers.set("Location", "/apps");
|
|
|
|
return new Response(null, { status: 302, headers });
|
|
},
|
|
};
|