diff options
-rwxr-xr-x | app.js | 6 | ||||
-rw-r--r-- | cli/actions.js | 37 | ||||
-rwxr-xr-x | cli/surfer.js | 2 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | src/files.js | 4 |
5 files changed, 38 insertions, 12 deletions
@@ -15,6 +15,7 @@ var express = require('express'), | |||
15 | cookieParser = require('cookie-parser'), | 15 | cookieParser = require('cookie-parser'), |
16 | lastMile = require('connect-lastmile'), | 16 | lastMile = require('connect-lastmile'), |
17 | multipart = require('./src/multipart'), | 17 | multipart = require('./src/multipart'), |
18 | mkdirp = require('mkdirp'), | ||
18 | auth = require('./src/auth.js'), | 19 | auth = require('./src/auth.js'), |
19 | files = require('./src/files.js')(path.resolve(__dirname, process.argv[2] || 'files')); | 20 | files = require('./src/files.js')(path.resolve(__dirname, process.argv[2] || 'files')); |
20 | 21 | ||
@@ -49,6 +50,9 @@ var server = app.listen(3000, function () { | |||
49 | var host = server.address().address; | 50 | var host = server.address().address; |
50 | var port = server.address().port; | 51 | var port = server.address().port; |
51 | 52 | ||
53 | var basePath = path.resolve(__dirname, process.argv[2] || 'files'); | ||
54 | mkdirp.sync(basePath); | ||
55 | |||
52 | console.log('Surfer listening at http://%s:%s', host, port); | 56 | console.log('Surfer listening at http://%s:%s', host, port); |
53 | console.log('Using base path', path.resolve(__dirname, process.argv[2] || 'files')); | 57 | console.log('Using base path', basePath); |
54 | }); \ No newline at end of file | 58 | }); \ No newline at end of file |
diff --git a/cli/actions.js b/cli/actions.js index bdfc066..119b2ba 100644 --- a/cli/actions.js +++ b/cli/actions.js | |||
@@ -10,6 +10,7 @@ var superagent = require('superagent'), | |||
10 | readlineSync = require('readline-sync'), | 10 | readlineSync = require('readline-sync'), |
11 | async = require('async'), | 11 | async = require('async'), |
12 | fs = require('fs'), | 12 | fs = require('fs'), |
13 | request = require('request'), | ||
13 | url = require('url'), | 14 | url = require('url'), |
14 | path = require('path'); | 15 | path = require('path'); |
15 | 16 | ||
@@ -27,7 +28,7 @@ function checkConfig() { | |||
27 | 28 | ||
28 | gQuery = { username: config.username(), password: config.password() }; | 29 | gQuery = { username: config.username(), password: config.password() }; |
29 | 30 | ||
30 | console.log('Using server %s', config.server().yellow); | 31 | console.error('Using server %s', config.server().yellow); |
31 | } | 32 | } |
32 | 33 | ||
33 | function collectFiles(filesOrFolders) { | 34 | function collectFiles(filesOrFolders) { |
@@ -110,20 +111,40 @@ function put(filePath, otherFilePaths, options) { | |||
110 | function get(filePath) { | 111 | function get(filePath) { |
111 | checkConfig(); | 112 | checkConfig(); |
112 | 113 | ||
113 | superagent.get(config.server() + API + filePath).query(gQuery).end(function (error, result) { | 114 | // if no argument provided, fetch root |
114 | if (error && error.status === 401) return console.log('Login failed'); | 115 | filePath = filePath || '/'; |
115 | if (error && error.status === 404) return console.log('No such file or directory'); | 116 | |
116 | if (error) return console.log('Failed', result ? result.body : error); | 117 | request.get(config.server() + API + filePath, { qs: gQuery }, function (error, result, body) { |
118 | if (error) return console.error(error); | ||
119 | if (result.statusCode === 401) return console.log('Login failed'); | ||
120 | if (result.statusCode === 404) return console.log('No such file or directory'); | ||
117 | 121 | ||
118 | if (result.body && result.body.entries) { | 122 | // 222 indicates directory listing |
123 | if (result.statusCode === 222) { | ||
119 | console.log('Files:'); | 124 | console.log('Files:'); |
120 | result.body.entries.forEach(function (entry) { | 125 | JSON.parse(body).entries.forEach(function (entry) { |
121 | console.log('\t %s', entry); | 126 | console.log('\t %s', entry); |
122 | }); | 127 | }); |
123 | } else { | 128 | } else { |
124 | console.log(result.text); | 129 | console.log(body); |
125 | } | 130 | } |
126 | }); | 131 | }); |
132 | // var req = superagent.get(config.server() + API + filePath); | ||
133 | // req.query(gQuery); | ||
134 | // req.end(function (error, result) { | ||
135 | // if (error && error.status === 401) return console.log('Login failed'); | ||
136 | // if (error && error.status === 404) return console.log('No such file or directory'); | ||
137 | // if (error) return console.log('Failed', result ? result.body : error); | ||
138 | |||
139 | // if (result.body && result.body.entries) { | ||
140 | // console.log('Files:'); | ||
141 | // result.body.entries.forEach(function (entry) { | ||
142 | // console.log('\t %s', entry); | ||
143 | // }); | ||
144 | // } else { | ||
145 | // req.pipe(process.stdout); | ||
146 | // } | ||
147 | // }); | ||
127 | } | 148 | } |
128 | 149 | ||
129 | function del(filePath) { | 150 | function del(filePath) { |
diff --git a/cli/surfer.js b/cli/surfer.js index 15a88b3..ad37917 100755 --- a/cli/surfer.js +++ b/cli/surfer.js | |||
@@ -19,7 +19,7 @@ program.command('put <file> [files...]') | |||
19 | .description('Put a file') | 19 | .description('Put a file') |
20 | .action(actions.put); | 20 | .action(actions.put); |
21 | 21 | ||
22 | program.command('get') | 22 | program.command('get [file]') |
23 | .description('Get a file or directory') | 23 | .description('Get a file or directory') |
24 | .action(actions.get); | 24 | .action(actions.get); |
25 | 25 | ||
diff --git a/package.json b/package.json index 266b77f..7981d9e 100644 --- a/package.json +++ b/package.json | |||
@@ -35,6 +35,7 @@ | |||
35 | "passport": "^0.2.2", | 35 | "passport": "^0.2.2", |
36 | "passport-ldapjs": "^1.0.2", | 36 | "passport-ldapjs": "^1.0.2", |
37 | "readline-sync": "^1.2.19", | 37 | "readline-sync": "^1.2.19", |
38 | "request": "^2.61.0", | ||
38 | "safetydance": "0.0.16", | 39 | "safetydance": "0.0.16", |
39 | "superagent": "^1.2.0", | 40 | "superagent": "^1.2.0", |
40 | "underscore": "^1.8.3" | 41 | "underscore": "^1.8.3" |
diff --git a/src/files.js b/src/files.js index 3b28d3f..d12782d 100644 --- a/src/files.js +++ b/src/files.js | |||
@@ -54,7 +54,7 @@ function copyFile(source, target, cb) { | |||
54 | } | 54 | } |
55 | 55 | ||
56 | function getAbsolutePath(filePath) { | 56 | function getAbsolutePath(filePath) { |
57 | var absoluteFilePath = path.resolve(gBasePath, filePath); | 57 | var absoluteFilePath = path.resolve(path.join(gBasePath, filePath)); |
58 | 58 | ||
59 | if (absoluteFilePath.indexOf(gBasePath) !== 0) return null; | 59 | if (absoluteFilePath.indexOf(gBasePath) !== 0) return null; |
60 | return absoluteFilePath; | 60 | return absoluteFilePath; |
@@ -71,7 +71,7 @@ function get(req, res, next) { | |||
71 | debug('get', absoluteFilePath); | 71 | debug('get', absoluteFilePath); |
72 | 72 | ||
73 | if (result.isFile()) return res.sendFile(absoluteFilePath); | 73 | if (result.isFile()) return res.sendFile(absoluteFilePath); |
74 | if (result.isDirectory()) return res.status(200).send({ entries: fs.readdirSync(absoluteFilePath) }); | 74 | if (result.isDirectory()) return res.status(222).send({ entries: fs.readdirSync(absoluteFilePath) }); |
75 | 75 | ||
76 | return next(new HttpError(500, 'unsupported type')); | 76 | return next(new HttpError(500, 'unsupported type')); |
77 | }); | 77 | }); |