diff --git a/lib/client.js b/lib/client.js index d129bdfd..bcb1bce1 100644 --- a/lib/client.js +++ b/lib/client.js @@ -435,8 +435,6 @@ var Util, DOM, CloudFunc; owner = DOM.getCurrentOwner(current); mode = DOM.getCurrentMode(current); - mode = CloudFunc.getNumericPermissions(mode); - if (name !== '..') files.push({ name : name, diff --git a/lib/cloudfunc.js b/lib/cloudfunc.js index 3fc104e2..e0b955a9 100644 --- a/lib/cloudfunc.js +++ b/lib/cloudfunc.js @@ -188,111 +188,6 @@ var Util; return CloudFunc.NAME + ' - ' + (pPath || CloudFunc.Path); }; - /** - * Функция переводит права из цыфрового вида в символьный - * @param pPerm_s - строка с правами доступа - * к файлу в 8-миричной системе - */ - this.getSymbolicPermissions = function(pPerm_s) { - var lType, lOwner, lGroup, lAll, - perms = pPerm_s && pPerm_s.toString(), - lPermissions = perms; - /* - S_IRUSR 0000400 protection: readable by owner - S_IWUSR 0000200 writable by owner - S_IXUSR 0000100 executable by owner - S_IRGRP 0000040 readable by group - S_IWGRP 0000020 writable by group - S_IXGRP 0000010 executable by group - S_IROTH 0000004 readable by all - S_IWOTH 0000002 writable by all - S_IXOTH 0000001 executable by all - */ - if (perms) { - /* тип файла */ - lType = perms.toString().charAt(0); - - switch (lType-0) { - case 1: /* обычный файл */ - lType='-'; - break; - case 2: /* байт-ориентированное (символьное) устройство*/ - lType='c'; - break; - case 4: /* каталог */ - lType='d'; - break; - default: - lType='-'; - } - - /* оставляем последние 3 символа*/ - perms = perms.length > 5 ? perms.substr(3) : perms.substr(2); - - /* Рекомендации гугла советуют вместо string[3] - * использовать string.charAt(3) - */ - /* - http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Standards_features#Standards_features - - Always preferred over non-standards featuresFor - maximum portability and compatibility, always - prefer standards features over non-standards - features (e.g., string.charAt(3) over string[3] - and element access with DOM functions instead - of using an application-specific shorthand). - */ - /* Переводим в двоичную систему */ - lOwner = (perms[0] - 0).toString(2), - lGroup = (perms[1] - 0).toString(2), - lAll = (perms[2] - 0).toString(2), - - /* переводим в символьную систему*/ - lPermissions = - (lOwner[0] - 0 > 0 ? 'r' : '-') + - (lOwner[1] - 0 > 0 ? 'w' : '-') + - (lOwner[2] - 0 > 0 ? 'x' : '-') + - ' ' + - (lGroup[0] - 0 > 0 ? 'r' : '-') + - (lGroup[1] - 0 > 0 ? 'w' : '-') + - (lGroup[2] - 0 > 0 ? 'x' : '-') + - ' ' + - (lAll[0]- 0 > 0 ? 'r' : '-') + - (lAll[1]- 0 > 0 ? 'w' : '-') + - (lAll[2]- 0 > 0 ? 'x' : '-'); - } - - return lPermissions; - }; - - /** - * Функция конвертирует права доступа к файлам из символьного вида - * в цыфровой - */ - this.getNumericPermissions = function(pPerm_s) { - var owner, group, all, - perms = pPerm_s, - length = perms && perms.length === 11; - - if (length) { - owner = (pPerm_s[0] === 'r' ? 4 : 0) + - (pPerm_s[1] === 'w' ? 2 : 0) + - (pPerm_s[2] === 'x' ? 1 : 0), - - group = (pPerm_s[4] === 'r' ? 4 : 0) + - (pPerm_s[5] === 'w' ? 2 : 0) + - (pPerm_s[6] === 'x' ? 1 : 0), - - all = (pPerm_s[8] === 'r' ? 4 : 0) + - (pPerm_s[9] === 'w' ? 2 : 0) + - (pPerm_s[10] === 'x' ? 1 : 0); - - /* добавляем 2 цифры до 5 */ - perms = '00' + owner + group + all; - } - - return perms; - }; /** Функция получает адреса каждого каталога в пути * возвращаеться массив каталогов @@ -416,7 +311,7 @@ var Util; name : linkResult, size : '<dir>', owner : '.', - mode : CloudFunc.getSymbolicPermissions('.') + mode : '--- --- ---' }); } @@ -436,7 +331,7 @@ var Util; } owner = file.owner || 'root'; - mode = CloudFunc.getSymbolicPermissions(file.mode); + mode = file.mode; linkResult = Util.render(templateLink, { link : link, diff --git a/lib/server/commander.js b/lib/server/commander.js index 66d05bca..68759810 100644 --- a/lib/server/commander.js +++ b/lib/server/commander.js @@ -140,13 +140,11 @@ size = isDir ? 'dir' : stat.size; } - size = format.size(size); - file = { 'name' : name, - 'size' : size, + 'size' : format.size(size), 'owner' : owner, - 'mode' : mode + 'mode' : format.permissions.symbolic(mode) }; files.push(file); diff --git a/lib/server/format.js b/lib/server/format.js index abbd7a92..4bb0003e 100644 --- a/lib/server/format.js +++ b/lib/server/format.js @@ -42,4 +42,117 @@ return size; }; + + /** + * Функция переводит права из цыфрового вида в символьный + * @param perms - строка с правами доступа + * к файлу в 8-миричной системе + */ + exports.permissions = { + symbolic: function(perms) { + var type, owner, group, all, + permsStr = '', + permissions = ''; + /* + S_IRUSR 0000400 protection: readable by owner + S_IWUSR 0000200 writable by owner + S_IXUSR 0000100 executable by owner + S_IRGRP 0000040 readable by group + S_IWGRP 0000020 writable by group + S_IXGRP 0000010 executable by group + S_IROTH 0000004 readable by all + S_IWOTH 0000002 writable by all + S_IXOTH 0000001 executable by all + */ + + if (perms) { + permsStr = perms.toString(); + /* тип файла */ + type = permsStr.charAt(0); + + switch (type - 0) { + case 1: /* обычный файл */ + type='-'; + break; + case 2: /* байт-ориентированное (символьное) устройство*/ + type='c'; + break; + case 4: /* каталог */ + type='d'; + break; + default: + type='-'; + } + + /* оставляем последние 3 символа*/ + if (permsStr.length > 5) + permsStr = permsStr.substr(3); + else + permsStr = permsStr.substr(2); + + /* Рекомендации гугла советуют вместо string[3] + * использовать string.charAt(3) + */ + /* + http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Standards_features#Standards_features + + Always preferred over non-standards featuresFor + maximum portability and compatibility, always + prefer standards features over non-standards + features (e.g., string.charAt(3) over string[3] + and element access with DOM functions instead + of using an application-specific shorthand). + */ + /* Переводим в двоичную систему */ + owner = (permsStr[0] - 0).toString(2), + group = (permsStr[1] - 0).toString(2), + all = (permsStr[2] - 0).toString(2), + + /* переводим в символьную систему*/ + permissions = + (owner[0] - 0 > 0 ? 'r' : '-') + + (owner[1] - 0 > 0 ? 'w' : '-') + + (owner[2] - 0 > 0 ? 'x' : '-') + + ' ' + + (group[0] - 0 > 0 ? 'r' : '-') + + (group[1] - 0 > 0 ? 'w' : '-') + + (group[2] - 0 > 0 ? 'x' : '-') + + ' ' + + (all[0]- 0 > 0 ? 'r' : '-') + + (all[1]- 0 > 0 ? 'w' : '-') + + (all[2]- 0 > 0 ? 'x' : '-'); + } + + return permissions; + }, + + /** + * Функция конвертирует права доступа к файлам из символьного вида + * в цыфровой + */ + numeric: function(pPerm_s) { + var owner, group, all, + perms = pPerm_s, + length = perms && perms.length === 11; + + if (length) { + owner = (pPerm_s[0] === 'r' ? 4 : 0) + + (pPerm_s[1] === 'w' ? 2 : 0) + + (pPerm_s[2] === 'x' ? 1 : 0), + + group = (pPerm_s[4] === 'r' ? 4 : 0) + + (pPerm_s[5] === 'w' ? 2 : 0) + + (pPerm_s[6] === 'x' ? 1 : 0), + + all = (pPerm_s[8] === 'r' ? 4 : 0) + + (pPerm_s[9] === 'w' ? 2 : 0) + + (pPerm_s[10] === 'x' ? 1 : 0); + + /* добавляем 2 цифры до 5 */ + perms = '00' + owner + group + all; + } + + return perms; + } + } })();