MAJOR: Updates for Authenticated Web UI and CLI #30
| @ -524,16 +524,28 @@ function parseConfig(err, text) { | |||||||
|       } else { |       } else { | ||||||
|         if ('http' === body.module) { |         if ('http' === body.module) { | ||||||
|           // TODO we'll support slingshot-ing in the future
 |           // TODO we'll support slingshot-ing in the future
 | ||||||
|  |           if (body.local) { | ||||||
|             if (String(body.local) === String(parseInt(body.local, 10))) { |             if (String(body.local) === String(parseInt(body.local, 10))) { | ||||||
|               console.info('> Forwarding https://' + body.remote + ' => localhost:' + body.local); |               console.info('> Forwarding https://' + body.remote + ' => localhost:' + body.local); | ||||||
|             } else { |             } else { | ||||||
|               console.info('> Serving ' + body.local + ' as https://' + body.remote); |               console.info('> Serving ' + body.local + ' as https://' + body.remote); | ||||||
|             } |             } | ||||||
|  |           } else { | ||||||
|  |             console.info('> Rejecting End-to-End Encrypted HTTPS for now'); | ||||||
|  |           } | ||||||
|         } else if ('tcp' === body.module) { |         } else if ('tcp' === body.module) { | ||||||
|  |           if (body.local) { | ||||||
|             console.info('> Forwarding ' + state.config.relay + ':' + body.remote + ' => localhost:' + body.local); |             console.info('> Forwarding ' + state.config.relay + ':' + body.remote + ' => localhost:' + body.local); | ||||||
|  |           } else { | ||||||
|  |             console.info('> Rejecting Legacy TCP'); | ||||||
|  |           } | ||||||
|         } else if ('ssh' === body.module) { |         } else if ('ssh' === body.module) { | ||||||
|           //console.info('> Forwarding ' + state.config.relay + ' -p ' + JSON.stringify(body) + ' => localhost:' + body.local);
 |           //console.info('> Forwarding ' + state.config.relay + ' -p ' + JSON.stringify(body) + ' => localhost:' + body.local);
 | ||||||
|  |           if (body.local) { | ||||||
|             console.info('> Forwarding ssh+https (openssl proxy) => localhost:' + body.local); |             console.info('> Forwarding ssh+https (openssl proxy) => localhost:' + body.local); | ||||||
|  |           } else { | ||||||
|  |             console.info('> Rejecting SSH-over-HTTPS for now'); | ||||||
|  |           } | ||||||
|         } else { |         } else { | ||||||
|           console.info(JSON.stringify(body, null, 2)); |           console.info(JSON.stringify(body, null, 2)); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -245,11 +245,11 @@ controllers.tcp = function (req, res, opts) { | |||||||
|   if (remotePort) { |   if (remotePort) { | ||||||
|     if (!state.ports[remotePort]) { |     if (!state.ports[remotePort]) { | ||||||
|       active = false; |       active = false; | ||||||
|       return; |     } else { | ||||||
|     } |  | ||||||
|       // forward-to port-or-module
 |       // forward-to port-or-module
 | ||||||
|     // TODO we can't send files over tcp until we fix the connect event bug
 |       // TODO with the connect event bug fixed, we should now be able to send files over tcp
 | ||||||
|       state.ports[remotePort].handler = portOrPath; |       state.ports[remotePort].handler = portOrPath; | ||||||
|  |     } | ||||||
|   } else { |   } else { | ||||||
|     if (!Object.keys(state.ports).some(function (key) { |     if (!Object.keys(state.ports).some(function (key) { | ||||||
|       if (!state.ports[key].handler) { |       if (!state.ports[key].handler) { | ||||||
| @ -329,7 +329,7 @@ controllers.ssh = function (req, res, opts) { | |||||||
| function serveControlsHelper() { | function serveControlsHelper() { | ||||||
|   controlServer = http.createServer(function (req, res) { |   controlServer = http.createServer(function (req, res) { | ||||||
|     var opts = url.parse(req.url, true); |     var opts = url.parse(req.url, true); | ||||||
|     if (opts.query._body) { |     if (false && opts.query._body) { | ||||||
|       try { |       try { | ||||||
|         opts.body = JSON.parse(decodeURIComponent(opts.query._body, true)); |         opts.body = JSON.parse(decodeURIComponent(opts.query._body, true)); | ||||||
|       } catch(e) { |       } catch(e) { | ||||||
| @ -591,6 +591,7 @@ function serveControlsHelper() { | |||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     function route() { | ||||||
|       if (/\b(config)\b/.test(opts.pathname) && /get/i.test(req.method)) { |       if (/\b(config)\b/.test(opts.pathname) && /get/i.test(req.method)) { | ||||||
|         getConfigOnly(); |         getConfigOnly(); | ||||||
|         return; |         return; | ||||||
| @ -648,6 +649,32 @@ function serveControlsHelper() { | |||||||
| 
 | 
 | ||||||
|       res.setHeader('Content-Type', 'application/json'); |       res.setHeader('Content-Type', 'application/json'); | ||||||
|       res.end(JSON.stringify({"error":{"message":"unrecognized rpc"}})); |       res.end(JSON.stringify({"error":{"message":"unrecognized rpc"}})); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (!req.headers['content-length'] && !req.headers['content-type']) { | ||||||
|  |       route(); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     var body = ''; | ||||||
|  |     req.on('readable', function () { | ||||||
|  |       var data; | ||||||
|  |       while (true) { | ||||||
|  |         data = req.read(); | ||||||
|  |         if (!data) { break; } | ||||||
|  |         body += data.toString(); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |     req.on('end', function () { | ||||||
|  |       try { | ||||||
|  |         opts.body = JSON.parse(body); | ||||||
|  |       } catch(e) { | ||||||
|  |         res.statusCode = 400; | ||||||
|  |         res.end('{"error":{"message":"POST body is not valid json"}}'); | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|  |       route(); | ||||||
|  |     }); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   if (fs.existsSync(state._ipc.path)) { |   if (fs.existsSync(state._ipc.path)) { | ||||||
|  | |||||||
| @ -108,6 +108,7 @@ module.exports.create = function (state) { | |||||||
|       fn(err); |       fn(err); | ||||||
|     }); |     }); | ||||||
|     if ('POST' === method && opts.data) { |     if ('POST' === method && opts.data) { | ||||||
|  |       req.setHeader("content-type", 'application/json'); | ||||||
|       req.write(json || opts.data); |       req.write(json || opts.data); | ||||||
|     } |     } | ||||||
|     req.end(); |     req.end(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user