Forked from an inaccessible project.
-
Quentin CHEVALIER authoredQuentin CHEVALIER authored
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[] = [];
}