use local relay to avoid cors
This commit is contained in:
		
							parent
							
								
									f0222baff6
								
							
						
					
					
						commit
						40d78b463f
					
				@ -15,6 +15,8 @@ var url = require('url');
 | 
			
		||||
var path = require('path');
 | 
			
		||||
var os = require('os');
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
var urequest = require('@coolaj86/urequest');
 | 
			
		||||
var urequestAsync = require('util').promisify(urequest);
 | 
			
		||||
var common = require('../lib/cli-common.js');
 | 
			
		||||
var http = require('http');
 | 
			
		||||
var TOML = require('toml');
 | 
			
		||||
@ -328,6 +330,20 @@ controllers.ssh = function (req, res, opts) {
 | 
			
		||||
  state.config.sshAuto = sshAuto;
 | 
			
		||||
  sshSuccess();
 | 
			
		||||
};
 | 
			
		||||
controllers.relay = function (req, res, opts) {
 | 
			
		||||
  if (!opts.body) {
 | 
			
		||||
    res.statusCode = 422;
 | 
			
		||||
    res.setHeader('Content-Type', 'application/json');
 | 
			
		||||
    res.end(JSON.stringify({"error":{"message":"module \'relay\' needs more arguments"}}));
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return urequestAsync(opts.body).then(function (resp) {
 | 
			
		||||
    res.setHeader('Content-Type', 'application/json');
 | 
			
		||||
    var resp = resp.toJSON();
 | 
			
		||||
    res.end(JSON.stringify(resp));
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var serveStatic = require('serve-static')(path.join(__dirname, '../lib/admin/'));
 | 
			
		||||
function handleRemoteClient(req, res) {
 | 
			
		||||
@ -668,6 +684,10 @@ function handleApi(req, res) {
 | 
			
		||||
      listSuccess();
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    if (/relay/.test(opts.pathname)) {
 | 
			
		||||
      controllers.relay(req, res, opts);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.setHeader('Content-Type', 'application/json');
 | 
			
		||||
    res.end(JSON.stringify({"error":{"message":"unrecognized rpc"}}));
 | 
			
		||||
 | 
			
		||||
@ -3,8 +3,17 @@
 | 
			
		||||
 | 
			
		||||
var common = exports.TELEBIT = {};
 | 
			
		||||
 | 
			
		||||
/* global Promise */
 | 
			
		||||
var PromiseA;
 | 
			
		||||
if ('undefined' !== typeof Promise) {
 | 
			
		||||
  PromiseA = Promise;
 | 
			
		||||
} else {
 | 
			
		||||
  throw new Error("no Promise implementation defined");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ('undefined' !== typeof fetch) {
 | 
			
		||||
  common.requestAsync = function (opts) {
 | 
			
		||||
    /*
 | 
			
		||||
    if (opts.json && true !== opts.json) {
 | 
			
		||||
      opts.body = opts.json;
 | 
			
		||||
    }
 | 
			
		||||
@ -16,13 +25,31 @@ if ('undefined' !== typeof fetch) {
 | 
			
		||||
        opts.headers.Accepts = 'application/json';
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return window.fetch(opts.url, opts).then(function (resp) {
 | 
			
		||||
    */
 | 
			
		||||
    // funnel requests through the local server
 | 
			
		||||
    // (avoid CORS, for now)
 | 
			
		||||
    var relayOpts = {
 | 
			
		||||
      url: '/api/relay'
 | 
			
		||||
    , method: 'POST'
 | 
			
		||||
    , headers: {
 | 
			
		||||
        'Content-Type': 'application/json'
 | 
			
		||||
      , 'Accepts': 'application/json'
 | 
			
		||||
      }
 | 
			
		||||
    , body: JSON.stringify(opts)
 | 
			
		||||
    };
 | 
			
		||||
    return window.fetch(relayOpts.url, relayOpts).then(function (resp) {
 | 
			
		||||
      return resp.json().then(function (json) {
 | 
			
		||||
        /*
 | 
			
		||||
        var headers = {};
 | 
			
		||||
        resp.headers.forEach(function (k, v) {
 | 
			
		||||
          headers[k] = v;
 | 
			
		||||
        });
 | 
			
		||||
        return { statusCode: resp.status, headers: headers, body: json };
 | 
			
		||||
        */
 | 
			
		||||
        if (json.error) {
 | 
			
		||||
          return PromiseA.reject(new Error(json.error && json.error.message || JSON.stringify(json.error)));
 | 
			
		||||
        }
 | 
			
		||||
        return json;
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user