/** * 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. * @author hawkspar * @memberof LDAP */ import fs from 'fs'; import path from 'path'; import colors from 'colors'; import dotenv from 'dotenv'; // Chargement de l'environnement let path_env = path.resolve(__dirname, '..', '..', '..', './.env'); console.log(colors.red("Loading .env config file from "+path_env)); dotenv.config({ path: path_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.green("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"]; /** * @memberof LDAP * @class partUserData * @desc Interface avec les données visibles au mponde extérieur. * @var {string} uid - Identifiant utilisateur * @var {string} givenName - Prénom * @var {string} lastName - Nom * @var {string?} gender - Sexe * @var {string?} photo - Bytestring de la photo de l'utilisateur * @var {string?} address - Adresse(s) * @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 */ export class partUserData { uid: string; givenName: string; lastName: string; gender?: 'M'|'F'|'U'; photo?: string; address?: string; admins: string[] = []; speakers: string[] = []; members: string[] = []; followers: string[] = []; } /** * @memberof LDAP * @class userData * @desc Interface avec toutes les données extractables pour un utilisateur. * @var {string?} password - Mot de passe (jamais transmis en clair) * @var {string?} nickname - Surnom * @var {string?} phone - Numéro(s) de téléphone * @var {string?} mail - Adresse(s) courriel * @var {string} birthdate - Date d'anniversaire * @var {string} nationality - Nationalité d'origine */ export class userData extends partUserData { nickname?: string; password?: string; phone?: string; mail?: string; birthdate: string; nationality?: string; } /** * @memberof LDAP * @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[]} parents - Liste des groupes directement parents de celui-ci * @var {string[]} childs - Liste des groupes directement enfants de celui-ci * @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 */ export class groupData { gid: string; password?: string; name: string; logo?: string; description?: string; site?: string; category: string; parents: string[] = []; //childs: string[] = []; admins: string[] = []; speakers: string[] = []; members: string[] = []; followers: string[] = []; }