Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
config.ts 4.51 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.
 * @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[] = [];
}