summaryrefslogtreecommitdiff
path: root/app/relay
diff options
context:
space:
mode:
Diffstat (limited to 'app/relay')
-rw-r--r--app/relay/remote.js10
-rw-r--r--app/relay/runner.js19
2 files changed, 29 insertions, 0 deletions
diff --git a/app/relay/remote.js b/app/relay/remote.js
index 1c9875f..a0639a5 100644
--- a/app/relay/remote.js
+++ b/app/relay/remote.js
@@ -146,6 +146,16 @@ remote.on('system', (data) => {
})
})
break
+ case 'read_file':
+ runner.read_file(data.payload, (file) => {
+ remote.emit('system_res', {
+ type: 'read_file',
+ query: data.payload,
+ uuid: data.uuid,
+ file,
+ })
+ })
+ break
case 'get_status':
remote.emit('system_res', {
type: 'relay_status',
diff --git a/app/relay/runner.js b/app/relay/runner.js
index 44f2554..f1e3497 100644
--- a/app/relay/runner.js
+++ b/app/relay/runner.js
@@ -11,6 +11,7 @@ import readdir from 'fs-readdir-promise'
import * as q from './queue'
+const MAX_TRANSFER_SIZE = 1024 * 1024 * 2.5
const idle_state = { status: 'IDLE', task: {} }
export const state = {
@@ -169,6 +170,24 @@ export function module_dir(opt, dir){
return path.join(module.cwd, dir.replace(/\.\.?\//g, ''))
}
+export function read_file(opt, cb) {
+ const fn = module_dir(opt, opt.fn)
+ if (!fn) return cb([])
+ stat_promise(fn).then(stat => {
+ if (stat.size > MAX_TRANSFER_SIZE) {
+ return cb({ error: 'file too large'})
+ }
+ fs.readFile(fn, (err, buf) => cb({
+ error: err,
+ name: opt.fn,
+ path: fn,
+ date: stat.ctime,
+ size: stat.size,
+ buf
+ }))
+ }).catch(() => cb({ error: 'error reading file' }))
+}
+
export function list_directory(opt, cb) {
const dir = module_dir(opt, opt.dir)
if (!dir) return cb([])