import { APIClient } from "./ApiClient"; interface LenConstraint { min: number; max: number; } interface Constraints { mail_len: LenConstraint; user_name_len: LenConstraint; password_len: LenConstraint; } interface OIDCProvider { id: string; name: string; } export interface ServerConfig { constraints: Constraints; mail: string; oidc_providers: OIDCProvider[]; } let config: ServerConfig | null = null; export class ServerApi { /** * Get server configuration */ static async LoadConfig(): Promise { config = ( await APIClient.exec({ uri: "/server/config", method: "GET", }) ).data; } /** * Get cached configuration */ static get Config(): ServerConfig { if (config === null) throw new Error("Missing configuration!"); return config; } /** * Check password against policy * * @returns The detected error (if any) or null if the password * is valid */ static CheckPassword(pwd: string): string | null { const constraint = this.Config.constraints.password_len; if (pwd.length < constraint.min || pwd.length > constraint.max) return `Le mot de passe doit comporter entre ${constraint.min} et ${constraint.max} caractères`; return null; } }