GeneIT/geneit_app/src/api/ServerApi.ts
Pierre HUBERT 1a890844ef
All checks were successful
continuous-integration/drone/push Build is passing
Add an accommodations reservations module (#188)
Add a new module to enable accommodations reservation

![](https://gitea.communiquons.org/attachments/de1f5b12-0a93-40f8-b29d-97665daa6fd5)

Reviewed-on: #188
2024-06-22 21:30:26 +00:00

102 lines
2.2 KiB
TypeScript

import { APIClient } from "./ApiClient";
export interface NumberConstraint {
min: number;
max: number;
}
export interface LenConstraint {
min: number;
max: number;
}
interface Constraints {
date_year: NumberConstraint;
date_month: NumberConstraint;
date_day: NumberConstraint;
photo_allowed_types: string[];
photo_max_size: number;
mail_len: LenConstraint;
user_name_len: LenConstraint;
password_len: LenConstraint;
family_name_len: LenConstraint;
invitation_code_len: LenConstraint;
member_first_name: LenConstraint;
member_last_name: LenConstraint;
member_birth_last_name: LenConstraint;
member_email: LenConstraint;
member_phone: LenConstraint;
member_address: LenConstraint;
member_city: LenConstraint;
member_postal_code: LenConstraint;
member_country: LenConstraint;
member_sex: LenConstraint;
member_note: LenConstraint;
accommodation_name_len: LenConstraint;
accommodation_description_len: LenConstraint;
accommodation_calendar_name_len: LenConstraint;
}
interface OIDCProvider {
id: string;
name: string;
}
export interface Country {
code: string;
en: string;
fr: string;
}
export interface CouplesStates {
code: string;
en: string;
fr: string;
}
export interface ServerConfig {
constraints: Constraints;
mail: string;
oidc_providers: OIDCProvider[];
countries: Country[];
couples_states: CouplesStates[];
}
let config: ServerConfig | null = null;
export class ServerApi {
/**
* Get server configuration
*/
static async LoadConfig(): Promise<void> {
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;
}
}