diff --git a/app/models/MembreModl.js b/app/models/MembreModl.js index 7a28b42..c00bdfc 100644 --- a/app/models/MembreModl.js +++ b/app/models/MembreModl.js @@ -5,14 +5,6 @@ module.exports = mongoose.model('Membre', { type: String, default: 'login' }, - section: { // TODO From /etc/groups - type: String, - default: 'IMA' - }, - promo: { // Nécessaire pour calculer le numéro de section - type: Number, - default: 2017 - }, role: { type: String, default: 'Membre' diff --git a/app/models/NomsModl.js b/app/models/NomsModl.js index 724a062..10a4b74 100644 --- a/app/models/NomsModl.js +++ b/app/models/NomsModl.js @@ -8,5 +8,9 @@ module.exports = mongoose.model('Noms', { nom: { type: String, default: 'Nom' + }, + section: { + type: String, + default: '' } }); diff --git a/app/services/MembresServ.js b/app/services/MembresServ.js index f7c9356..8f453fd 100644 --- a/app/services/MembresServ.js +++ b/app/services/MembresServ.js @@ -6,16 +6,13 @@ var MembresServ = {}; MembresServ.addData = function (membre, cb) { NomsServ.get(membre.login, function (nom) { - if (nom) { - membre.nom = nom; - } else { - membre.nom = membre.login; - } + membre.nom = nom.nom; + membre.section = nom.section; cb(null, membre); }); }; -MembresServ.get = function(id, cb) { +MembresServ.get = function (id, cb) { MembreModl.findById(id).lean().exec(function (err, membre) { if (err) cb(err); @@ -35,7 +32,7 @@ MembresServ.add = function (data, cb) { login: data.login, role: data.role, section: data.section, - }, function(err, membre) { + }, function (err, membre) { MembresServ.get(membre._id, cb); }); }; diff --git a/app/services/NomsServ.js b/app/services/NomsServ.js index 31af5aa..769200d 100644 --- a/app/services/NomsServ.js +++ b/app/services/NomsServ.js @@ -4,47 +4,121 @@ var fs = require('fs'); var noms = {}; +noms.readPasswd = function (login, cb) { + passwdF = 'config/passwd'; + fs.exists(passwdF, function (exists) { + found = false; + if (exists) { + stream = fs.createReadStream(passwdF); + transform = new LineTransform(); + stream.pipe(transform); + transform.on('data', function (line) { + ex = line.split(':'); + if (ex[0] == login) { // Si trouvé + stream.close(); + cb({ + 'username': ex[0], + 'password': ex[1], + 'UID': ex[2], + 'GID': ex[3], + 'GECOS': ex[4], + 'home': ex[5], + 'shell': ex[6] + }); + found = true; + } + }); + transform.on('end', function () { + if (!found) { + cb(false); + } + }); + } else { + cb(undefined); + } + }); +}; + +noms.readGroup = function (gid, cb) { + groupF = 'config/group'; + fs.exists(groupF, function (exists) { + found = false; + if (exists) { + stream = fs.createReadStream(groupF); + transform = new LineTransform(); + stream.pipe(transform); + transform.on('data', function (line) { + ex = line.split(':'); + if (ex[2] == gid) { // Si trouvé + stream.close(); + cb({ + 'name': ex[0], + 'password': ex[1], + 'GID': ex[2], + 'list': ex[3] + }); + found = true; + } + }); + transform.on('end', function () { + if (!found) { + cb(false); + } + }); + } else { + cb(undefined); + } + }); +}; + noms.get = function (login, cb) { NomsModl.findOne({ login: login + }, { + nom: 1, + section: 1, + _id: 0 }, function (err, nom) { - if (err) { - console.error(err); - cb(false); + if (nom && !err && nom.nom && nom.section) { + cb(nom); } else { - if (nom) { - cb(nom.nom); - } else { - passwdF = 'config/passwd'; - fs.exists(passwdF, function (exists) { - found = false; - if (exists) { - stream = fs.createReadStream(passwdF); - transform = new LineTransform(); - stream.pipe(transform); - transform.on('data', function (line) { - ex = line.split(':'); - if (ex[0] == login) { // Si trouvé - stream.close(); - cb(ex[4]); - found = true; - NomsModl.create({ - login: login, - nom: ex[4] - }); - } - }); - transform.on('end', function () { - if (!found) { - cb(false); + noms.readPasswd(login, function (passwd) { + if (passwd) { + noms.readGroup(passwd.GID, function (group) { + if (group) { + cb({ + nom: passwd.GECOS, + section: group.name.toUpperCase() + }); + NomsModl.create({ + login: login, + nom: passwd.GECOS, + section: group.name.toUpperCase() + }); + } else { + if (group === undefined) { + console.error("Impossible d'ouvrir le fichier des groupes."); + } else { + console.error("Impossible d'obtenir le groupe de " + passwd.GID + "."); } - }); + cb({ + nom: passwd.GECOS, + section: passwd.GID + }); + } + }); + } else { + if (passwd === undefined) { + console.error("Impossible d'ouvrir le fichier des noms."); } else { - console.error("Impossible de trouver le fichier passwd"); - cb(login.toUpperCase()); + console.error("Impossible d'obtenir le nom de " + login + "."); } - }); - } + cb({ + nom: login.toUpperCase(), + section: 'Inconnue' + }); + } + }); } }); }; diff --git a/app/services/SessionsServ.js b/app/services/SessionsServ.js index 77a0cb1..3ec6a82 100644 --- a/app/services/SessionsServ.js +++ b/app/services/SessionsServ.js @@ -8,11 +8,10 @@ sessions.cur = false; sessions.addData = function (session, cb) { NomsServ.get(session.login, function (nom) { - if (typeof nom == 'string') { - session.nom = nom; - } else { - session.nom = 'Inconnu'; - } + // Nom + session.nom = nom.nom; + session.section = nom.section; + // Permissions session.canAddMembre = session.login == 'gbontoux'; session.canDelMembre = session.login == 'gbontoux'; session.canAddConv = true; diff --git a/public/views/membres.html b/public/views/membres.html index fbc476c..8149426 100644 --- a/public/views/membres.html +++ b/public/views/membres.html @@ -28,11 +28,9 @@