@icetee/ftp
Version:
An FTP client module for node.js
924 lines (917 loc) • 22.9 kB
JavaScript
const cYear = (new Date()).getFullYear();
const timezoneDiff = date => ((-new Date(date).getTimezoneOffset() / 60) * 3600000);
const resolveDate = (date, isUTC = false) => {
const d = new Date(date);
let currentYear = (new Date()).getFullYear();
if (d - 0 > new Date() - 0) {
currentYear--;
d.setFullYear(currentYear);
}
if (isUTC) return d;
return new Date(d - timezoneDiff(date));
};
const entires = [
{
source: 'drwxr-xr-x 10 root root 4096 Dec 21 2012 usr',
expected: {
type: 'd',
name: 'usr',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rx',
other: 'rx',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-12-21T00:00:00.000Z', true),
},
what: 'Normal directory',
},
{
source: 'drwxrwxrwx 1 owner group 0 Aug 31 2012 e-books',
expected: {
type: 'd',
name: 'e-books',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'owner',
group: 'group',
size: 0,
pointer: undefined,
date: resolveDate('2012-08-31T00:00:00.000Z', true),
},
what: 'Normal directory #2',
},
{
source: '-rw-rw-rw- 1 owner group 7045120 Sep 02 2012 music.mp3',
expected: {
type: '-',
name: 'music.mp3',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: 'rw',
},
acl: false,
owner: 'owner',
group: 'group',
size: 7045120,
pointer: undefined,
date: resolveDate('2012-09-02T00:00:00.000Z', true),
},
what: 'Normal file',
},
{
source: '-rw-rw-rw- 1 1234 group 7045120 Sep 02 2012 music.mp3',
expected: {
type: '-',
name: 'music.mp3',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: 'rw',
},
acl: false,
owner: '1234',
group: 'group',
size: 7045120,
pointer: undefined,
date: resolveDate('2012-09-02T00:00:00.000Z', true),
},
what: 'File with number id owner',
},
{
source: '-rw-rw-rw- 1 owner 1234 7045120 Sep 02 2012 music.mp3',
expected: {
type: '-',
name: 'music.mp3',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: 'rw',
},
acl: false,
owner: 'owner',
group: '1234',
size: 7045120,
pointer: undefined,
date: resolveDate('2012-09-02T00:00:00.000Z', true),
},
what: 'File with number id group',
},
{
source: '-rwxrwxr-x 1 1317 Domain Use 3065 May 4 11:01 xmlrpc.php',
expected: {
type: '-',
name: 'xmlrpc.php',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: '1317',
group: 'Domain Use',
size: 3065,
pointer: undefined,
date: resolveDate(`${cYear}-05-04T11:01:00.000Z`),
},
what: 'File with space in group name',
},
{
source: '-rwxrwxr-x 1 1317 Domain Use 3065 May 4 11:01 xmlrpc.php',
expected: {
type: '-',
name: 'xmlrpc.php',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: '1317',
group: 'Domain Use',
size: 3065,
pointer: undefined,
date: resolveDate(`${cYear}-05-04T11:01:00.000Z`),
},
what: 'File with double space in group name',
},
{
source: '-rwxrwxr-x 1 Domain Use 33 3065 May 4 11:01 xmlrpc.php',
expected: {
type: '-',
name: 'xmlrpc.php',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: 'Domain Use',
group: '33',
size: 3065,
pointer: undefined,
date: resolveDate(`${cYear}-05-04T11:01:00.000Z`),
},
what: 'File with space in owner name',
},
{
source: '-rwxrwxr-x 1 Domain Use 33 3065 May 4 11:01 xmlrpc.php',
expected: {
type: '-',
name: 'xmlrpc.php',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: 'Domain Use',
group: '33',
size: 3065,
pointer: undefined,
date: resolveDate(`${cYear}-05-04T11:01:00.000Z`),
},
what: 'File with double space in owner name',
},
{
source: '-rwxrwxr-x 1 Domain Use Domain Use 3065 May 4 11:01 xmlrpc.php',
expected: {
type: '-',
name: 'xmlrpc.php',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: 'Domain Use',
group: 'Domain Use',
size: 3065,
pointer: undefined,
date: resolveDate(`${cYear}-05-04T11:01:00.000Z`),
},
what: 'File with space in owner name and group name',
},
{
source: '-rw------- 1 33 www-data 14 May 15 01:52 .ftpquota',
expected: {
type: '-',
name: '.ftpquota',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: '',
other: '',
},
acl: false,
owner: '33',
group: 'www-data',
size: 14,
pointer: undefined,
date: resolveDate(`${cYear}-05-15T01:52:00.000Z`),
},
what: 'File with number owner and hyphen groupname',
},
{
source: '-rw------- 1 www-data 33 14 May 15 01:52 .ftpquota',
expected: {
type: '-',
name: '.ftpquota',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: '',
other: '',
},
acl: false,
owner: 'www-data',
group: '33',
size: 14,
pointer: undefined,
date: resolveDate(`${cYear}-05-15T01:52:00.000Z`),
},
what: 'File with hyphen owner and number groupname',
},
{
source: '-rw-rw-rw-+ 1 owner group 7045120 Sep 02 2012 music.mp3',
expected: {
type: '-',
name: 'music.mp3',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: 'rw',
},
acl: true,
owner: 'owner',
group: 'group',
size: 7045120,
pointer: undefined,
date: resolveDate('2012-09-02T00:00:00.000Z', true),
},
what: 'File with ACL set',
},
{
source: 'drwxrwxrwt 7 root root 4096 May 19 2012 tmp',
expected: {
type: 'd',
name: 'tmp',
target: undefined,
sticky: true,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-05-19T00:00:00.000Z', true),
},
what: 'Directory with sticky bit and executable for others',
},
{
source: 'drwxrwx--t 7 root root 4096 May 19 2012 tmp',
expected: {
type: 'd',
name: 'tmp',
target: undefined,
sticky: true,
rights: {
user: 'rwx',
group: 'rwx',
other: 'x',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-05-19T00:00:00.000Z', true),
},
what: 'Directory with sticky bit and executable for others #2',
},
{
source: 'drwxrwxrwT 7 root root 4096 May 19 2012 tmp',
expected: {
type: 'd',
name: 'tmp',
target: undefined,
sticky: true,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rw',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-05-19T00:00:00.000Z', true),
},
what: 'Directory with sticky bit and not executable for others',
},
{
source: 'drwxrwx--T 7 root root 4096 May 19 2012 tmp',
expected: {
type: 'd',
name: 'tmp',
target: undefined,
sticky: true,
rights: {
user: 'rwx',
group: 'rwx',
other: '',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-05-19T00:00:00.000Z', true),
},
what: 'Directory with sticky bit and not executable for others #2',
},
{
source: 'drwxrwxr-x 7 1317 Domain Use 208 May 5 11:28 wp-content',
expected: {
type: 'd',
name: 'wp-content',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: '1317',
group: 'Domain Use',
size: 208,
pointer: undefined,
date: resolveDate(`${cYear}-05-05T11:28:00.000Z`),
},
what: 'Directory with space in group name',
},
{
source: 'drwxrwxr-x 7 1317 Domain Use 208 May 5 11:28 wp-content',
expected: {
type: 'd',
name: 'wp-content',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: '1317',
group: 'Domain Use',
size: 208,
pointer: undefined,
date: resolveDate(`${cYear}-05-05T11:28:00.000Z`),
},
what: 'Directory with double space in group name',
},
{
source: 'drwxrwxr-x 7 Domain Use Domain Use 208 May 5 11:28 wp-content',
expected: {
type: 'd',
name: 'wp-content',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rx',
},
acl: false,
owner: 'Domain Use',
group: 'Domain Use',
size: 208,
pointer: undefined,
date: resolveDate(`${cYear}-05-05T11:28:00.000Z`),
},
what: 'Directory with space in group name and owner name',
},
{
source: 'drwxr-S--- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 'd',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rS',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with undefined bit-state',
},
{
source: 'drwxr-s--- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 'd',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rs',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with set the set-user-ID or set-group-ID bit',
},
{
source: 'drwx--L--- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 'd',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'L',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with mandatory lock',
},
{
source: 'brwx-w---- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 'b',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'w',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with block device simple',
},
{
source: 'brw-rw---- 1 root disk 8, 0 Nov 24 10:13 sda',
expected: {
type: 'b',
name: 'sda',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: '',
},
acl: false,
owner: 'root',
group: 'disk',
size: 0,
pointer: '8,0',
date: resolveDate(`${cYear}-11-24T10:13:00.000Z`),
},
what: 'Directory with block device',
},
{
source: 'crw-rw---- 1 root tty 0 Apr 1 20:30 vcs',
expected: {
type: 'c',
name: 'vcs',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: '',
},
acl: false,
owner: 'root',
group: 'tty',
size: 0,
pointer: undefined,
date: resolveDate(`${cYear}-04-01T20:30:00.000Z`),
},
what: 'Directory with character device without pointer',
},
{
source: 'crw-rw---- 1 root tty 7, 134 Apr 1 20:30 vcsa6',
expected: {
type: 'c',
name: 'vcsa6',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: '',
},
acl: false,
owner: 'root',
group: 'tty',
size: 0,
pointer: '7,134',
date: resolveDate(`${cYear}-04-01T20:30:00.000Z`),
},
what: 'Directory with character device with pointer',
},
{
source: 'crw-rw---- 1 root tty 7, 0 Apr 1 20:30 vcs',
expected: {
type: 'c',
name: 'vcs',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: '',
},
acl: false,
owner: 'root',
group: 'tty',
size: 0,
pointer: '7,0',
date: resolveDate(`${cYear}-04-01T20:30:00.000Z`),
},
what: 'Directory with character device',
},
{
source: 'prwx-w---- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 'p',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'w',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with named pipe',
},
{
source: 'srwx-w---- 3 105207 501 18 Jul 04 2017 .pki',
expected: {
type: 's',
name: '.pki',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'w',
other: '',
},
acl: false,
owner: '105207',
group: '501',
size: 18,
pointer: undefined,
date: resolveDate('2017-07-04T00:00:00.000Z', true),
},
what: 'Directory with socket',
},
{
source: 'lrwxrwxrwx 1 root root 51 Apr 4 23:57 www.nodeftp.github -> /etc/nginx/sites-available/www.nodeftp.github',
expected: {
type: 'l',
name: 'www.nodeftp.github',
target: '/etc/nginx/sites-available/www.nodeftp.github',
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'root',
group: 'root',
size: 51,
pointer: undefined,
date: resolveDate(`${cYear}-04-04T23:57:00.000Z`),
},
what: 'Directory with symlink',
},
// {
// source: 'drwxr-xr-x 2 oinstall 4096 Jul 25 14:33 log',
// expected: {
// type: 'd',
// name: 'usr',
// target: undefined,
// sticky: false,
// rights: {
// user: 'rwx',
// group: 'rx',
// other: 'rx',
// },
// acl: false,
// owner: 'oinstall',
// group: 'root',
// size: 4096,
// date: resolveDate('2012-12-21T00:00:00.000Z', true),
// },
// what: 'Directory without group',
// },
{
source: '-rw-rw-rw-@ 1 owner group 7045120 Sep 02 2012 music.mp3',
expected: {
type: '-',
name: 'music.mp3',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'rw',
other: 'rw',
},
acl: false,
owner: 'owner',
group: 'group',
size: 7045120,
pointer: undefined,
date: resolveDate('2012-09-02T00:00:00.000Z', true),
},
what: 'MacOS @ symbol file',
},
{
source: 'drwxr-xr-x 10 root root 4096 Dec 21 2012 1.1 Header [13]',
expected: {
type: 'd',
name: '1.1 Header [13]',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rx',
other: 'rx',
},
acl: false,
owner: 'root',
group: 'root',
size: 4096,
pointer: undefined,
date: resolveDate('2012-12-21T00:00:00.000Z', true),
},
what: 'Directory with special name #2',
},
{
source: '08-22-18 02:05PM <DIR> Test',
expected: {
type: 'd',
name: 'Test',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory #1',
},
{
source: '08-22-18 02:05PM <DIR> Name []',
expected: {
type: 'd',
name: 'Name []',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory #2',
},
{
source: '08-22-18 02:05PM <DIR> 12',
expected: {
type: 'd',
name: '12',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory with 2 digit character in filename',
},
{
source: '08-22-18 02:05PM <DIR> 2015',
expected: {
type: 'd',
name: '2015',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory with 4 digit character in filename',
},
{
source: '08-22-18 02:05PM <DIR> 1.1 Header [13]',
expected: {
type: 'd',
name: '1.1 Header [13]',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory #3',
},
{
source: '08-22-2018 02:05PM <DIR> wwwroot',
expected: {
type: 'd',
name: 'wwwroot',
size: 0,
date: resolveDate('2018-08-22T14:05:00.000Z'),
},
what: 'MSDOS Normal directory with 4 four-digit years',
},
{
source: '07-10-13 06:54AM <DIR> 1400',
expected: {
type: 'd',
name: '1400',
size: 0,
date: resolveDate('2013-07-10T06:54:00.000Z'),
},
what: 'MSDOS Normal directory without tab',
},
{
source: '08-22-18 12:59PM 99710 iisstart.png',
expected: {
type: '-',
name: 'iisstart.png',
size: 99710,
date: resolveDate('2018-08-22T12:59:00.000Z'),
},
what: 'MSDOS Normal file #1',
},
{
source: '08-22-18 12:59PM 990 2015',
expected: {
type: '-',
name: '2015',
size: 990,
date: resolveDate('2018-08-22T12:59:00.000Z'),
},
what: 'MSDOS Normal file #2',
},
{
source: '08-22-18 12:59PM 2015 2015',
expected: {
type: '-',
name: '2015',
size: 2015,
date: resolveDate('2018-08-22T12:59:00.000Z'),
},
what: 'MSDOS Normal file #3',
},
{
source: 'drwxrwxrwx 1 owner group 0 Aug 22 14:05 wwwroot',
expected: {
type: 'd',
name: 'wwwroot',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'owner',
group: 'group',
size: 0,
pointer: undefined,
date: resolveDate(`${cYear}-08-22T14:05:00.000Z`),
},
what: 'Windows with UNIX style directory #1',
},
{
source: 'drwxrwxrwx 1 owner group 0 Aug 22 14:05 Name []',
expected: {
type: 'd',
name: 'Name []',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'owner',
group: 'group',
size: 0,
pointer: undefined,
date: resolveDate(`${cYear}-08-22T14:05:00.000Z`),
},
what: 'Windows with UNIX style directory #2',
},
{
source: '-rwxrwxrwx 1 owner group 99710 Aug 22 12:59 iisstart.png',
expected: {
type: '-',
name: 'iisstart.png',
target: undefined,
sticky: false,
rights: {
user: 'rwx',
group: 'rwx',
other: 'rwx',
},
acl: false,
owner: 'owner',
group: 'group',
size: 99710,
pointer: undefined,
date: resolveDate(`${cYear}-08-22T12:59:00.000Z`),
},
what: 'Windows with UNIX style file #1',
},
{
source: '-rw-r--r-- 1 300794 AD\\Domain Users 6148 Sep 19 06:17 .DS_Store',
expected: {
type: '-',
name: '.DS_Store',
target: undefined,
sticky: false,
rights: {
user: 'rw',
group: 'r',
other: 'r',
},
acl: false,
owner: '300794',
group: 'AD\\Domain Users',
size: 6148,
pointer: undefined,
date: resolveDate(`${cYear}-09-19T06:17:00.000Z`),
},
what: 'Windows Active Directory double slash in groupname',
},
{
source: 'total 871',
expected: null,
what: 'Ignored line',
},
];
module.exports = entires;