Blame view

app/services/PolyUserServ.js 4.08 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 {
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
88
89
90
91
                  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 ...
92
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
93
94
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
95
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
96
97
98
99
100
      add: function (login, cb) {
          PolyUserServ.grabInfos(login, function (err, data) {
              if (err) {
                  cb(err);
              } else {
6e7dd7b9   Geoffrey PREUD'HOMME   Mise à jour des d...
101
                  cb(null, data);
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
102
103
104
105
106
107
108
109
110
                  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 ...
111
              } else {
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
112
113
114
115
116
                  if (data) {
                      cb(null, data);
                  } else {
                      PolyUserServ.add(login, cb);
                  }
8bb44ece   Geoffrey PREUD'HOMME   PolyUser est mis ...
117
              }
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
118
119
          });
      },
43b2778d   Geoffrey PREUD'HOMME   Rassemblement de ...
120
  
63f92223   Geoffrey PREUD'HOMME   Fixé création de ...
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
      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
138
  };