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