Blame view

app/services/PolyUserServ.js 3.71 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
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
11
  var PolyUserServ = {};
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
12
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
13
  PolyUserServ.readPasswd = function (login, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
14
      passwdF = 'config/passwd';
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
15
16
17
18
19
20
      fs.readFile(passwdF, function (err, file) {
          if (err) {
              cb(err);
          } else {
              lines = file.toString('utf8').split('\n');
              async.detect(lines, function (line, cba) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
21
                  ex = line.split(':');
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
22
23
24
25
26
                  cba(ex[0] == login);
              }, function (res) {
                  if (res) {
                      ex = res.split(':');
                      cb(null, {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
27
28
29
30
31
32
33
34
                          'username': ex[0],
                          'password': ex[1],
                          'UID': ex[2],
                          'GID': ex[3],
                          'GECOS': ex[4],
                          'home': ex[5],
                          'shell': ex[6]
                      });
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
35
36
                  } else {
                      cb(null, null);
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
37
38
                  }
              });
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
39
40
41
42
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
43
  PolyUserServ.readGroup = function (gid, cb) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
44
      groupF = 'config/group';
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
45
46
47
48
49
50
      fs.readFile(groupF, function (err, file) {
          if (err) {
              cb(err);
          } else {
              lines = file.toString('utf8').split('\n');
              async.detect(lines, function (line, cba) {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
51
                  ex = line.split(':');
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
52
53
54
55
56
                  cba(ex[2] == gid);
              }, function (res) {
                  if (res) {
                      ex = res.split(':');
                      cb(null, {
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
57
58
59
60
61
                          'name': ex[0],
                          'password': ex[1],
                          'GID': ex[2],
                          'list': ex[3]
                      });
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
62
63
                  } else {
                      cb(null, null);
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
64
65
                  }
              });
e4fff96c   Geoffrey PREUD'HOMME   Récupération des ...
66
67
68
69
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
70
  PolyUserServ.grabInfos = function (login, cb) {
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
71
72
73
74
75
76
77
78
79
      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);
                  });
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
80
              } else {
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
81
                  cba(null, passwd, null);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
82
              }
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
83
84
85
86
87
88
89
90
          }
      ], function (err, passwd, group) {
          if (err) {
              cb(err);
          } else {
              cb(null, {
                  nom: (passwd && passwd.GECOS) ? passwd.GECOS : login.toUpperCase(),
                  section: (group && group.name) ? group.name.toUpperCase() : ((passwd && passwd.GID) ? passwd.GID : 'Inconnu')
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
91
92
93
94
95
              });
          }
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
96
  PolyUserServ.add = function (login, cb) {
9bd5849b   Geoffrey PREUD'HOMME   Amelioré PolyUser...
97
98
99
100
101
102
103
      PolyUserServ.grabInfos(login, function (err, data) {
          if (err) {
              cb(err);
          } else {
              cb(null, data);
              cache.set(login, data);
          }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
104
105
106
      });
  };
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
107
  PolyUserServ.get = function (login, cb) {
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
108
109
110
      cache.get(login, function (err, data) {
          if (err) {
              cb(err);
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
111
          } else {
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
112
113
              if (data) {
                  cb(null, data);
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
114
              } else {
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
115
                  PolyUserServ.add(login, cb);
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
116
              }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
117
118
119
120
121
122
123
124
125
126
127
128
129
          }
      });
  };
  
  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...
130
          }
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
131
132
133
134
135
      }).connect({
          host: creds.host,
          port: creds.port,
          username: login,
          password: pass
2f593328   Geoffrey PREUD'HOMME   Linting
136
137
      });
  };
dafb4eeb   Geoffrey PREUD'HOMME   Affichage des nom...
138
  
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
139
  module.exports = PolyUserServ;