Blame view

app/services/PolyUserServ.js 5.21 KB
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
1
  var PolyUserModl = require('../models/PolyUserModl');
2ac0e575   Geoffrey PREUD'HOMME   Changé de line-re...
2
  var LineTransform = require('node-line-reader').LineTransform;
2f593328   Geoffrey PREUD'HOMME   Linting
3
  var fs = require('fs');
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
4
5
  var Client = require('ssh2').Client;
  var creds = require('../../config/sshAuth');
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
6
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
7
  var PolyUserServ = {};
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
8
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
9
  PolyUserServ.readPasswd = function (login, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
10
11
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
      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 ...
44
  PolyUserServ.readGroup = function (gid, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
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
      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 ...
76
77
78
79
80
81
82
83
84
85
86
87
88
  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()
                      });
                      PolyUserModl.create({
                          login: login,
                          nom: passwd.GECOS,
                          section: group.name.toUpperCase()
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
89
90
                      });
                  } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
91
92
                      if (group === undefined) {
                          console.error("Impossible d'ouvrir le fichier des groupes.");
725cb3f7   Geoffrey PREUD'HOMME   Vérification de l...
93
                      } else {
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
94
                          console.error("Impossible d'obtenir le groupe de " + passwd.GID + ".");
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
95
                      }
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
96
                      cb({
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
97
98
                          nom: passwd.GECOS,
                          section: passwd.GID
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
99
100
101
                      });
                  }
              });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
          } 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'
              });
          }
      });
  };
  
  PolyUserServ.addData = function (polyuser, cb) {
      cb(null, polyuser);
  };
  
  PolyUserServ.obtain = function (login, cb) {
      PolyUserModl.findOne({
          login: login
      }, {
          nom: 1,
          section: 1,
          _id: 0
      }, function (err, polyuser) {
          if (err) {
              cb(err);
          } else {
              PolyUserServ.addData(polyuser, cb);
          }
      });
  };
  
  PolyUserServ.add = function (login, cb) {
      PolyUserServ.grabInfos(login, function (data) {
          data.login = login;
          PolyUserModl.create(data, function (err, polyuser) {
              PolyUserServ.obtain(login, cb);
          });
      });
  };
  
  // PolyUserServ.remove = function (login, cb) {
  //     PolyUserModl.remove({
  //         login: login
  //     }, cb);
  // };
  
  PolyUserServ.get = function (login, cb) {
      PolyUserModl.findOne({
          login: login
      }, function (err, polyuser) {
          if (polyuser && !err && polyuser.polyuser && polyuser.section) {
              PolyUserServ.obtain(login, cb);
          } else {
              PolyUserServ.add(login, cb);
          }
      });
  };
  
  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...
175
          }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
176
177
178
179
180
      }).connect({
          host: creds.host,
          port: creds.port,
          username: login,
          password: pass
2f593328   Geoffrey PREUD'HOMME   Linting
181
182
      });
  };
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
183
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
184
  module.exports = PolyUserServ;