Forked from an inaccessible project.
-
Quentin CHEVALIER authoredQuentin CHEVALIER authored
config.ts 4.32 KiB
/**
* Namespace qui regroupe toutes les fonctions en rapport avec le LDAP - API et fonctions internes
* @namespace LDAP
* @file Importe la configuration du LDAP au sein de l'application, et remplace certaines valeurs en fonction des variables d'environnement.
* @memberof LDAP
* @author manifold, hawkspar
*/
import fs from 'fs';
import path from 'path';
import colors from 'colors';
import dotenv from 'dotenv';
dotenv.config({ path: path.resolve(__dirname, '..', '..', '..', '..', './.env') });
// Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement
let path_config = path.resolve(__dirname, '..', '..', '..', '..', './ldap_config.json');
console.log(colors.cyan("Loading LDAP config file from "+path_config));
export const ldapConfig = JSON.parse(fs.readFileSync(path_config).toString());
// Override config server from environment
if (process.env.LDAP_URI != null) {
ldapConfig.server = process.env.LDAP_URI;
}
else {
if (process.env.TARGET_ENV == `production`) { ldapConfig.server = ldapConfig.server_prod; }
else { ldapConfig.server = ldapConfig.server_dev; }
}
// Gestion des super-identifiants
let path_credentials = path.resolve(__dirname, '..', '..', '..', 'ldap_credentials.json');
console.log(colors.cyan("Loading LDAP credentials from "+path_credentials));
export const credentialsLdapConfig = JSON.parse(fs.readFileSync(path_credentials).toString());
// Data formats and useful constants
export const categories = ["admins","speakers","members","followers"];
/**
* @class userData
* @desc Interface avec toutes les données extractables pour un utilisateur.
* @var {string?} uid - Identifiant utilisateur
* @var {string?} password - Mot de passe généré en amont (utilisé seulement à l'initialialisation, pas stocké bien sûr)
* @var {string?} givenName - Prénom
* @var {string?} lastName - Nom
* @var {string?} nickname - Surnom
* @var {string?} gender - Sexe
* @var {string?} photo - Bytestring de la photo de l'utilisateur
* @var {string?} phone - Numéro(s) de téléphone
* @var {string?} address - Adresse(s)
* @var {string?} mail - Adresse(s) courriel
* @var {string?} birthdate - Date d'anniversaire
* @var {string?} nationality - Nationalité d'origine
* @var {string[]?} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de members
* @var {string[]?} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de members
* @var {string[]?} members - Liste des gid dont l'utilisateur est membre
* @var {string[]?} followers - Liste des gid dont l'utilisateur est sympathisant
* @memberof LDAP
*/
export class userData {
uid?: string;
password?: string;
givenName?: string;
lastName?: string;
nickname?: string;
gender?: 'M'|'F'|'U';
photo?: string;
phone?: string;
address?: string;
mail?: string;
birthdate?: string;
nationality?: string;
admins?: string[];
speakers?: string[];
members?: string[];
followers?: string[];
}
/**
* @class groupData
* @var {string} gid - Identifiant du groupe
* @var {string} password - Mot de passe du groupe
* @var {string} name - Nom du groupe (souvent son nom mais pas nécessairement)
* @var {string} logo - Logo du groupe (en bytestring)
* @var {string} description - Description du groupe (script Markdown)
* @var {string} site - Site web du groupe (URL)
* @var {string} category - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free')
* @var {string[]} childs - Liste des groupes enfants de première génération de celui-ci
* @var {string[]} parents - Liste des groupes directement parents de celui-ci ; symétrique du précédent
* @var {string[]} admins - Liste des admins du groupe
* @var {string[]} speakers - Liste des porte-parole du groupe
* @var {string[]} members - Liste des membres du groupe
* @var {string[]} followers - Liste des sympathisants du groupe
* @memberof LDAP
*/
export class groupData {
gid: string;
password?: string;
name: string;
logo?: string;
description?: string;
site?: string;
category: string;
childs: string[];
parents: string[];
admins: string[];
speakers: string[];
members: string[];
followers: string[];
}