Blame view

app/services/PolyUserServ.js 4.68 KB
2f593328   Geoffrey PREUD'HOMME   Linting
1
  var fs = require('fs');
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
2
  var async = require('async');
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
3
4
  var Client = require('ssh2').Client;
  var creds = require('../../config/sshAuth');
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
5
6
  var NodeCache = require("node-cache");
  
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
7
8
9
  var cache = new NodeCache({
      stdTTL: 24 * 60 * 60
  });
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
10
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
11
  var PolyUserServ = module.exports = {
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
12
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
      readPasswd: function (login, cb) {
          passwdF = 'config/passwd';
          fs.readFile(passwdF, function (err, file) {
              if (err) {
                  cb(err);
              } else {
                  lines = file.toString('utf8').split('\n');
                  async.detect(lines, function (line, cba) {
                      ex = line.split(':');
                      cba(ex[0] == login);
                  }, function (res) {
                      if (res) {
                          ex = res.split(':');
                          cb(null, {
                              'username': ex[0],
                              'password': ex[1],
                              'UID': ex[2],
                              'GID': ex[3],
                              'GECOS': ex[4],
                              'home': ex[5],
                              'shell': ex[6]
                          });
                      } else {
                          cb(null, null);
                      }
                  });
              }
          });
      },
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
42
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
      readGroup: function (gid, cb) {
          groupF = 'config/group';
          fs.readFile(groupF, function (err, file) {
              if (err) {
                  cb(err);
              } else {
                  lines = file.toString('utf8').split('\n');
                  async.detect(lines, function (line, cba) {
                      ex = line.split(':');
                      cba(ex[2] == gid);
                  }, function (res) {
                      if (res) {
                          ex = res.split(':');
                          cb(null, {
                              'name': ex[0],
                              'password': ex[1],
                              'GID': ex[2],
                              'list': ex[3]
                          });
                      } else {
                          cb(null, null);
                      }
                  });
              }
          });
      },
  
      grabInfos: function (login, cb) {
          async.waterfall([
              function (cba) {
                  PolyUserServ.readPasswd(login, cba);
              },
              function (passwd, cba) {
                  if (passwd && passwd.GID) {
                      PolyUserServ.readGroup(passwd.GID, function (err, group) {
                          cba(err, passwd, group);
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
79
                      });
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
80
                  } else {
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
81
                      cba(null, passwd, null);
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
82
                  }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
83
84
85
86
              }
          ], function (err, passwd, group) {
              if (err) {
                  cb(err);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
87
              } else {
d0649a9e   Geoffrey PREUD'HOMME   Gestion des non é...
88
89
90
91
92
93
94
                  var nom = (passwd && passwd.GECOS) ? passwd.GECOS : login.toUpperCase(); 
                  var section = (group && group.name) ? group.name.toUpperCase() : ((passwd && passwd.GID) ? passwd.GID : 'Inconnu'); 
                  var ancien = !!section.match("[0-9]{4}");
                  var enseignant  = !!section.match("ENS$");
                  var personnel = enseignant;
                  var etudiant = !personnel;
                  var enCours = etudiant && !ancien;
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
95
                  cb(null, {
19fe6c67   Geoffrey PREUD'HOMME   Ajout du login da...
96
                      login: login,
d0649a9e   Geoffrey PREUD'HOMME   Gestion des non é...
97
98
99
100
101
102
103
104
                      nom: nom,
                      prenom: nom.split(' ')[0],
                      section: section,
                      ancien: ancien,
                      enseignant: enseignant,
                      personnel: personnel,
                      etudiant: etudiant,
                      enCours: enCours
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
105
                  });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
106
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
107
108
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
109
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
110
111
112
113
114
      add: function (login, cb) {
          PolyUserServ.grabInfos(login, function (err, data) {
              if (err) {
                  cb(err);
              } else {
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
115
                  cb(null, data);
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
116
117
118
119
120
121
122
123
124
                  cache.set(login, data);
              }
          });
      },
  
      get: function (login, cb) {
          cache.get(login, function (err, data) {
              if (err) {
                  cb(err);
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
125
              } else {
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
126
127
128
129
130
                  if (data) {
                      cb(null, data);
                  } else {
                      PolyUserServ.add(login, cb);
                  }
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
131
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
132
133
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
134
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
      verify: function (login, pass, cb) {
          var conn = new Client();
          conn.on('ready', function () {
              cb(null, true);
          }).on('error', function (err) {
              if (err.level === 'client-authentication') {
                  cb(null, false);
              } else {
                  cb(err);
              }
          }).connect({
              host: creds.host,
              port: creds.port,
              username: login,
              password: pass
          });
      }
2f593328   Geoffrey PREUD'HOMME   Linting
152
  };