Skip to content
Snippets Groups Projects
Commit 3ed9b4a9 authored by Quentin CHEVALIER's avatar Quentin CHEVALIER
Browse files

modifs Greg LDAP

parent 91272bb6
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,7 @@
"comment_1": "Tout ce fichier sert à protéger les vrais champs du LDAP dans les scripts dans src/ldap. Les champs ci-dessous contiennent le nécessaire à une première connexion par exemple.",
"server": {
"prod": "ldap://frankiz.eleves.polytechnique.fr:389",
"dev": "ldap://129.104.201.10:389"
"dev": "ldap://ldap.eleves.polytechnique.fr:389"
},
"comment_2": "Noms de domaines dans LDAP ; le niv d'après est en uid=, voir Wikipedia",
......@@ -15,51 +15,44 @@
"comment_3": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les utilisateurs",
"user": {
"uid": "uid",
"photo": "jpegPhoto",
"password": "userPassword",
"givenName": "givenName",
"lastName": "sn",
"fullName": "cn",
"cleanFullName": "gecos",
"nickname": "displayName",
"birthdate": "brBirthdate",
"nationality": "country",
"promotion": "brPromo",
"gender": "gender",
"photo": "jpegPhoto",
"phone": "telephoneNumber",
"adress": "brRoom",
"id": "uidNumber",
"password": "userPassword",
"idNum": "gidNumber",
"directory": "homeDirectory",
"adress": "roomNumber",
"mail": "email",
"birthdate": "birthdate",
"nationality": "nationality",
"admins": "adminOf",
"speakers": "speakerOf",
"members": "memberOf",
"followers": "followerOf",
"login": "loginShell",
"readPerm": "brNewsReadAccess",
"writePerm": "brNewsPostAccess",
"mail": "mail",
"ips": "brIP",
"forlifes": "brAlias",
"admins": "TBC",
"speakers": "TBC",
"members": "brMemberOf",
"followers": "TBC",
"classes": "objectClass"
"directory": "homeDirectory",
"classes": "objectClass",
"id": "uidNumber",
"cleanFullName": "gecos"
},
"comment_4": "Placeholders et indications de contenu de certains champs du LDAP généré par frankiz pour les groupes",
"group": {
"gid": "uid",
"name": "brAlias",
"category": "brNS",
"name": "sn",
"site": "website",
"description": "description",
"category": "groupCategory",
"admins": "memberUid",
"speakers": "TBC",
"members": "restrictedMemberUid",
"followers": "TBC",
"speakers": "speaker",
"members": "member",
"followers": "follower",
"adress":"cn",
"idNumber": "uidNumber",
"idNumber2": "gidNumber",
"login": "loginShell",
"idNumber": "gidNumber",
"password": "userPassword",
"directory": "homeDirectory",
"cleanFullName": "gecos",
"logo": "jpegPhoto",
"classes": "objectClass",
"childs": "TBC",
"parents": "TBC"
"childs": "child",
"parents": "parent"
}
}
\ No newline at end of file
......@@ -223,11 +223,8 @@ export class Group {
// Certains champs nécessitent de petits calculs
let vals2={};
// Encore un champ redondant
vals2[ldapConfig.group['adress']] = gid;
// ?!
vals2[ldapConfig.group['password']] = '';
vals2[ldapConfig.group['password']] = "{CRYPT}"+data['password'];
// Génération id aléatoire et test contre le LDAP
try {
......@@ -236,28 +233,16 @@ export class Group {
catch(err) {
throw "Erreur lors de la génération d'un id numérique pour créer un nouveau groupe.";
}
// FOIREUX : Hypothèse sur la structure du reste des données mais évite un test.assurerUnicite à deux variables
vals2[ldapConfig.group['idNumber2']]=vals2[ldapConfig.group['idNumber']];
// Stockage machine ; dépend du prénom
vals2[ldapConfig.group['directory']] = '/hosting/groups/'+gid;
// Code root
vals2[ldapConfig.group['cleanFullName']]=data['name'].replace(':', ';').toLowerCase().normalize('UFD');
// Adressage root
vals2[ldapConfig.group['login']] = "/sbin/nologin";
// Permissions BR
vals2[ldapConfig.group['readPerm']] = '!*';
vals2[ldapConfig.group['writePerm']] = '!*';
// Inscription des valeurs calculées par effet de bord
if (!await Basics.change("group", gid, "add", vals2)) {
throw "Erreur lors de l'ajout des valeurs intelligentes du nouveau groupe.";
}
["posixAccount", "posixGroup", "brAccount"].forEach(cst => {
["posixGroup", "brGroup"].forEach(cst => {
let vals3={};
vals3[ldapConfig.group['classes']]=cst;
Basics.change("group", gid, "add", vals3).then(res => {
......
......@@ -109,9 +109,6 @@ export class User {
// Certains champs nécessitent de petits calculs
let vals3={};
// Création d'un nom complet lisible
vals3[ldapConfig.user['fullName']]=data['givenName']+' '+data['lastName'].toUpperCase();
// ldapConfiguration du mot de passe utilisateur
// Le préfixe {CRYPT} signifie que le mdp est hashé dans OpenLDAP voir : https://www.openldap.org/doc/admin24/security.html
vals3[ldapConfig.user['password']] = "{CRYPT}"+data['password'];
......@@ -127,32 +124,16 @@ export class User {
catch(err) {
throw "Erreur lors de la génération d'un id numérique pour un nouvel utilisateur.";
}
// Stockage machine ; dépend du prénom
vals3[ldapConfig.user['directory']] = '/hosting/users/' + data['givenName'][0];
// Code root
vals3[ldapConfig.user['cleanFullName']]=data['fullName'].replace(':', ';').toLowerCase().normalize('UFD');
// Adressage root
if (data['groups'].includes("on_platal")) { vals3[ldapConfig.user['login']] = "/bin/bash"; }
else { vals3[ldapConfig.user['login']] = "/sbin/nologin"; }
// Permissions BR
vals3[ldapConfig.user['readPerm']] = 'br.*,public.*';
if (data['readPerm'].length>0) { vals3[ldapConfig.user['readPerm']] += ',' + data['readPerm']; }
vals3[ldapConfig.user['writePerm']] = 'br.*,!br.blague-du-jour,public.*,!br.campagnekes';
if (data['writePerm'].length>0) { vals3[ldapConfig.user['readPerm']] += ',' + data['writePerm']; }
// Valeur nécessaire ASKIP mais inutile
vals3[ldapConfig.user['idNum']] ='5000';
// Inscription des valeurs calculées
if (!await Basics.change("user", uid, "add", vals3)) {
throw "Erreur lors de l'ajout des valeurs calculées à la feuille du nouvel utilisateur.";
}
["posixAccount", "shadowAccount", "inetOrgPerson", "brAccount"].forEach(cst => {
["posixAccount", "shadowAccount", "brUser"].forEach(cst => {
let val3={};
vals3[ldapConfig.user['class']]=cst;
Basics.change("user", uid, "add", vals3).then(res => {
......
......@@ -36,79 +36,74 @@ export const credentialsLdapConfig = JSON.parse(fs.readFileSync(path_credentials
export const categories = ["admins","speakers","members","followers"];
/**
* @interface userData
* @class userData
* @desc Interface avec toutes les données extractables pour un utilisateur.
* @var {string?} uid - Identifiant utilisateur
* TBA @var {string[]?} admins - Liste des gid (group id, inclus section sportive, binet, PA...) dont l'utilisateur est admin ; pas forcément sous-liste de groups
* TBA @var {string[]?} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de groups
* @var {string[]?} members - Liste des gid dont l'utilisateur est membre
* TBA @var {string[]?} followers - Liste des gid dont l'utilisateur est sympathisant
* @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?} birthdate - Date d'anniversaire
* TBA @var {string?} nationality - Nationalité d'origine
* @var {string?} promotion - Année(s) de promo
* @var {string?} phone - Numéro(s) de téléphone
* @var {string[]} address - Adresse(s)
* @var {string[]?} mail - Adresse(s) courriel
* @var {string?} password - Mot de passe généré en amont (utilisé seulement à l'initialialisation, pas stocké bien sûr)
* @var {string[]?} ips - Adresse(s) ip
* @var {string?} directory - Adresse soft des données utilisateurs
* @var {string?} login - Astuce de root flemmard
* @arg {string?} readPerm - Permissions spéciales BR
* @var {string?} writePerm - Permissions spéciales BR
* @var {string[]?} forlifes - Alias BR (attention le filtre .fkz n'est plus fonctionnel)
* @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 groups
* @var {string[]?} speakers - Liste des gid dont l'utilisateur est porte-parole ; pas forcément sous-liste de groups
* @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;
admins?: string[];
speakers?: string[];
members?: string[];
followers?: string[];
password?: string;
givenName?: string;
lastName?: string;
nickname?: string;
promotion?: string;
gender?: 'M'|'F';
photo?: string;
birthdate?: string;
nationality?: string;
phone?: string;
address?: string;
mail?: string;
ips?: string[];
directory?: string;
login?: string;
readPerm?: string;
writePerm?: string;
forlifes?: string[];
sport?: string;
birthdate?: string;
nationality?: string;
admins?: string[];
speakers?: string[];
members?: string[];
followers?: string[];
}
/**
* @interface groupData
* @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} type - Statut du groupe ; binet, section sportive... (actuellement juste 'binet' ou 'free')
* @var {string[]} members - Liste des membres du groupe
* @var {string[]} admins - Liste des admins du groupe ; supposée être une sous-liste de la précédente
* @var {string} description - Description du groupe (facultatif)
* @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 (les admins du groupe seront admins de ce groupe et des enfants suivants)
* @var {string[]} parents - Liste des groupes directement parents de celui-ci (les membres du groupe seront membres de ce groupe et des parents suivants) ; 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;
type: string;
members: string[];
logo?: string;
description?: string;
site?: string;
category: string;
childs: string[];
parents: string[];
admins: string[];
speakers: string[];
members: string[];
followers: string[];
admins: string[];
description?: string;
childs?: string[];
parents?: string[];
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment