cloudcmd/lib/server/users.js
2014-06-20 09:45:26 -04:00

75 lines
2.3 KiB
JavaScript

(function(object) {
'use strict';
/*
* users.js'
* -----------
* get names from uids on unix from /etc/passwd'
*/
var fs = require('fs'),
time = require('./time'),
Util = require('../util'),
FILE = '/etc/passwd',
FileTime,
Names;
object.getNames = function(callback) {
getTime(function(error, names) {
Util.exec(callback, error, names);
});
};
function getTime(callback) {
time.get(FILE, 'raw', function(error, time) {
if (error)
callback(error);
else if (FileTime === time) {
if (!Names)
error = 'user: parse error of ' + FILE;
callback(error, Names);
} else {
FileTime = time;
read(callback);
}
});
}
function read(callback) {
fs.readFile(FILE, 'utf8', function(error, passwd) {
if (!error)
Names = get(passwd);
callback(error, Names);
});
}
/** Функция парсит uid и имена пользователей
* из переданного в строке вычитаного файла /etc/passwd
* и возвращает массив обьектов имён и uid пользователей
* @param passwd - строка, в которой находиться файл /etc/passwd
*/
function get(passwd) {
var uid, name,
passwdArray = passwd.split('\n'),
users = {};
passwdArray.forEach(function(line) {
passwd = Util.rmStr(passwd, line);
/* получаем первое слово строки */
name = line.substr(line, line.indexOf(':'));
line = Util.rmStr(line, name + ':x:');
/* получаем uid */
uid = line.substr(line, line.indexOf(':'));
if (uid)
users[uid] = name;
});
return users;
}
})(this);