import { type RegularTagNode, type TextNode } from "@melvdouc/xml-parser"; import { AsyncRoute } from "$fresh/src/server/types.ts"; export interface AuthenticatedState { isAuthenticated: true; isFromPolytech: boolean; role: "etudiant" | "professeur" | "administration" | "autre"; displayName: string; uid: string; availablePages: Record; } interface UnauthenticatedState { isAuthenticated: false; isFromPolytech: false; session: undefined; } export type State = AuthenticatedState | UnauthenticatedState; export interface AppProperties { name: string; icon: string; pages: Record; adminOnly: string[]; hint: string; } export interface CasTagNode extends RegularTagNode { children: [TextNode]; } export interface CasGroupNode extends RegularTagNode { children: CasTagNode[]; } export interface CasResponse extends RegularTagNode { children: [TextNode, CasGroupNode]; } export interface CasContent { amuCampus: string; amuComposante: string; amuDateValidation: string; coGroup: string; eduPersonPrimaryAffiliation: string; eduPersonPrincipalName: string; mail: string; displayName: string; givenName: string; memberOf: string[]; sn: string; supannCivilite: string; supannEntiteAffectation: string; supannEtuAnneeInscription: string; supannEtuEtape: string; uid: string; } export interface LoginJWT { iss: "PolyMPR"; iat: number; exp: number; aud: "PolyMPR"; user: CasContent; } export type EmptyObject = Record; // deno-lint-ignore no-explicit-any export type Route = AsyncRoute;