Blame view

app/services/PolyUserServ.js 4.44 KB
2ac0e575   Geoffrey PREUD'HOMME   Changé de line-re...
1
  var LineTransform = require('node-line-reader').LineTransform;
2f593328   Geoffrey PREUD'HOMME   Linting
2
  var fs = require('fs');
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
7
  var NodeCache = require("node-cache");
  
  var cache = new NodeCache();
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
8
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
9
  var PolyUserServ = {};
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
10
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
11
  PolyUserServ.readPasswd = function (login, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
12
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
42
43
44
45
      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);
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
46
  PolyUserServ.readGroup = function (gid, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
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
      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);
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
78
79
80
81
82
83
84
85
86
  PolyUserServ.grabInfos = function (login, cb) {
      PolyUserServ.readPasswd(login, function (passwd) {
          if (passwd) {
              PolyUserServ.readGroup(passwd.GID, function (group) {
                  if (group) {
                      cb({
                          nom: passwd.GECOS,
                          section: group.name.toUpperCase()
                      });
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
87
                  } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
88
89
                      if (group === undefined) {
                          console.error("Impossible d'ouvrir le fichier des groupes.");
725cb3f7   Geoffrey PREUD'HOMME   Vérification de l...
90
                      } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
91
                          console.error("Impossible d'obtenir le groupe de " + passwd.GID + ".");
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
92
                      }
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
93
                      cb({
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
94
95
                          nom: passwd.GECOS,
                          section: passwd.GID
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
96
97
98
                      });
                  }
              });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
          } else {
              if (passwd === undefined) {
                  console.error("Impossible d'ouvrir le fichier des noms.");
              } else {
                  console.error("Impossible d'obtenir le nom de " + login + ".");
              }
              if (!login) {
                  login = 'Inconnu';
              }
              cb({
                  nom: login.toUpperCase(),
                  section: 'Inconnue'
              });
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
116
117
  PolyUserServ.add = function (login, cb) {
      PolyUserServ.grabInfos(login, function (data) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
118
119
          cb(null, data);
          cache.set(login, data);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
120
121
122
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
123
  PolyUserServ.get = function (login, cb) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
124
125
126
      cache.get(login, function (err, data) {
          if (err) {
              cb(err);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
127
          } else {
ed964ddd   Geoffrey PREUD'HOMME   Supression de isE...
128
              if (data[login] === undefined) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
129
130
131
132
                  PolyUserServ.add(login, cb);
              } else {
                  cb(null, data[login]);
              }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
133
134
135
136
137
138
139
140
141
142
143
144
145
          }
      });
  };
  
  PolyUserServ.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);
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
146
          }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
147
148
149
150
151
      }).connect({
          host: creds.host,
          port: creds.port,
          username: login,
          password: pass
2f593328   Geoffrey PREUD'HOMME   Linting
152
153
      });
  };
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
154
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
155
  module.exports = PolyUserServ;