Blame view

app/services/PolyUserServ.js 4.64 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, {
d0649a9e   Geoffrey PREUD'HOMME   Gestion des non é...
96
97
98
99
100
101
102
103
                      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 ...
104
                  });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
105
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
106
107
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
108
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
109
110
111
112
113
      add: function (login, cb) {
          PolyUserServ.grabInfos(login, function (err, data) {
              if (err) {
                  cb(err);
              } else {
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
114
                  cb(null, data);
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
115
116
117
118
119
120
121
122
123
                  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 ...
124
              } else {
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
125
126
127
128
129
                  if (data) {
                      cb(null, data);
                  } else {
                      PolyUserServ.add(login, cb);
                  }
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
130
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
131
132
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
133
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
      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
151
  };