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 path = require('path');
|
||||||
var os = require('os');
|
var os = require('os');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
var urequest = require('@coolaj86/urequest');
|
||||||
|
var urequestAsync = require('util').promisify(urequest);
|
||||||
var common = require('../lib/cli-common.js');
|
var common = require('../lib/cli-common.js');
|
||||||
var http = require('http');
|
var http = require('http');
|
||||||
var TOML = require('toml');
|
var TOML = require('toml');
|
||||||
|
@ -328,6 +330,20 @@ controllers.ssh = function (req, res, opts) {
|
||||||
state.config.sshAuto = sshAuto;
|
state.config.sshAuto = sshAuto;
|
||||||
sshSuccess();
|
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/'));
|
var serveStatic = require('serve-static')(path.join(__dirname, '../lib/admin/'));
|
||||||
function handleRemoteClient(req, res) {
|
function handleRemoteClient(req, res) {
|
||||||
|
@ -668,6 +684,10 @@ function handleApi(req, res) {
|
||||||
listSuccess();
|
listSuccess();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (/relay/.test(opts.pathname)) {
|
||||||
|
controllers.relay(req, res, opts);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
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"}}));
|
||||||
|
|
|
@ -3,8 +3,17 @@
|
||||||
|
|
||||||
var common = exports.TELEBIT = {};
|
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) {
|
if ('undefined' !== typeof fetch) {
|
||||||
common.requestAsync = function (opts) {
|
common.requestAsync = function (opts) {
|
||||||
|
/*
|
||||||
if (opts.json && true !== opts.json) {
|
if (opts.json && true !== opts.json) {
|
||||||
opts.body = opts.json;
|
opts.body = opts.json;
|
||||||
}
|
}
|
||||||
|
@ -16,13 +25,31 @@ if ('undefined' !== typeof fetch) {
|
||||||
opts.headers.Accepts = 'application/json';
|
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) {
|
return resp.json().then(function (json) {
|
||||||
|
/*
|
||||||
var headers = {};
|
var headers = {};
|
||||||
resp.headers.forEach(function (k, v) {
|
resp.headers.forEach(function (k, v) {
|
||||||
headers[k] = v;
|
headers[k] = v;
|
||||||
});
|
});
|
||||||
return { statusCode: resp.status, headers: headers, body: json };
|
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…
Reference in New Issue