Blame view

app/services/PolyUserServ.js 4.53 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
  
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
11
12
13
14
15
16
17
  function isEmpty(obj) {
      for (var i in obj) {
          return false;
      }
      return true;
  }
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
18
  PolyUserServ.readPasswd = function (login, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
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
46
47
48
49
50
51
52
      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 ...
53
  PolyUserServ.readGroup = function (gid, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
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
79
80
81
82
83
84
      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 ...
85
86
87
88
89
90
91
92
93
  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 ...
94
                  } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
95
96
                      if (group === undefined) {
                          console.error("Impossible d'ouvrir le fichier des groupes.");
725cb3f7   Geoffrey PREUD'HOMME   Vérification de l...
97
                      } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
98
                          console.error("Impossible d'obtenir le groupe de " + passwd.GID + ".");
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
99
                      }
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
100
                      cb({
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
101
102
                          nom: passwd.GECOS,
                          section: passwd.GID
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
103
104
105
                      });
                  }
              });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
          } 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 ...
123
124
  PolyUserServ.add = function (login, cb) {
      PolyUserServ.grabInfos(login, function (data) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
125
126
          cb(null, data);
          cache.set(login, data);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
127
128
129
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
130
  PolyUserServ.get = function (login, cb) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
131
132
133
      cache.get(login, function (err, data) {
          if (err) {
              cb(err);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
134
          } else {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
135
136
137
138
139
              if (isEmpty(data)) {
                  PolyUserServ.add(login, cb);
              } else {
                  cb(null, data[login]);
              }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
140
141
142
143
144
145
146
147
148
149
150
151
152
          }
      });
  };
  
  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...
153
          }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
154
155
156
157
158
      }).connect({
          host: creds.host,
          port: creds.port,
          username: login,
          password: pass
2f593328   Geoffrey PREUD'HOMME   Linting
159
160
      });
  };
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
161
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
162
  module.exports = PolyUserServ;