aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJohannes Zellner <johannes@nebulon.de>2015-09-08 15:05:13 +0200
committerJohannes Zellner <johannes@nebulon.de>2015-09-08 15:05:13 +0200
commit7bb99aff6337ee30a74a71f587c9a58eb5d24cb3 (patch)
tree98fcb22db6a93a7946ce453cff6d60cd6d4a2520
parentb9ad5d9155a65125f83071b409b4193ee97ce9d8 (diff)
downloadSurfer-7bb99aff6337ee30a74a71f587c9a58eb5d24cb3.tar.gz
Surfer-7bb99aff6337ee30a74a71f587c9a58eb5d24cb3.tar.zst
Surfer-7bb99aff6337ee30a74a71f587c9a58eb5d24cb3.zip
Use 222 status code to indicate folder listing and use stdout only for data
-rwxr-xr-xapp.js6
-rw-r--r--cli/actions.js37
-rwxr-xr-xcli/surfer.js2
-rw-r--r--package.json1
-rw-r--r--src/files.js4
5 files changed, 38 insertions, 12 deletions
diff --git a/app.js b/app.js
index d1619a0..90b46fb 100755
--- a/app.js
+++ b/app.js
@@ -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
33function collectFiles(filesOrFolders) { 34function collectFiles(filesOrFolders) {
@@ -110,20 +111,40 @@ function put(filePath, otherFilePaths, options) {
110function get(filePath) { 111function 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
129function del(filePath) { 150function 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
22program.command('get') 22program.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
56function getAbsolutePath(filePath) { 56function 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 });