1
2
Derivar 1

use local relay to avoid cors

Este cometimento está contido em:
AJ ONeal 2018-10-20 16:46:53 -06:00
ascendente f0222baff6
cometimento 40d78b463f
2 ficheiros modificados com 48 adições e 1 eliminações

Ver ficheiro

@ -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"}}));

Ver ficheiro

@ -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;
});
});
};