added CORS support for com.daplie.goldilocks api calls
This is needed in order to support set up from the installer
This commit is contained in:
parent
e96ebfc1fc
commit
78c1fb344e
|
@ -19,6 +19,27 @@ module.exports.create = function (deps, conf) {
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
function handleCors(req, res, methods) {
|
||||||
|
if (!methods) {
|
||||||
|
methods = ['GET', 'POST'];
|
||||||
|
}
|
||||||
|
if (!Array.isArray(methods)) {
|
||||||
|
methods = [ methods ];
|
||||||
|
}
|
||||||
|
|
||||||
|
res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*');
|
||||||
|
res.setHeader('Access-Control-Allow-Methods', methods.join(', '));
|
||||||
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
||||||
|
|
||||||
|
if (req.method.toUpperCase() !== 'OPTIONS') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.setHeader('Allow', methods.join(', '));
|
||||||
|
res.end();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function isAuthorized(req, res, fn) {
|
function isAuthorized(req, res, fn) {
|
||||||
var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, ''));
|
var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, ''));
|
||||||
if (!auth) {
|
if (!auth) {
|
||||||
|
@ -42,11 +63,21 @@ module.exports.create = function (deps, conf) {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
init: function (req, res) {
|
init: function (req, res) {
|
||||||
|
if (handleCors(req, res, 'POST')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (req.method !== 'POST') {
|
||||||
|
res.statusCode = 405;
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.end(JSON.stringify({ error: { message: 'method '+req.method+' not allowed'}}));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
jsonParser(req, res, function () {
|
jsonParser(req, res, function () {
|
||||||
|
|
||||||
return deps.PromiseA.resolve().then(function () {
|
return deps.PromiseA.resolve().then(function () {
|
||||||
|
console.log('init POST body', req.body);
|
||||||
|
|
||||||
console.log('req.body', req.body);
|
|
||||||
var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, ''));
|
var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, ''));
|
||||||
var token = jwt.decode(req.body.access_token);
|
var token = jwt.decode(req.body.access_token);
|
||||||
var refresh = jwt.decode(req.body.refresh_token);
|
var refresh = jwt.decode(req.body.refresh_token);
|
||||||
|
@ -109,7 +140,8 @@ module.exports.create = function (deps, conf) {
|
||||||
res.setHeader('Content-Type', 'application/json;');
|
res.setHeader('Content-Type', 'application/json;');
|
||||||
res.end(JSON.stringify({ success: true }));
|
res.end(JSON.stringify({ success: true }));
|
||||||
});
|
});
|
||||||
}, function (err) {
|
})
|
||||||
|
.catch(function (err) {
|
||||||
res.setHeader('Content-Type', 'application/json;');
|
res.setHeader('Content-Type', 'application/json;');
|
||||||
res.end(JSON.stringify({ error: { message: err.message, code: err.code, uri: err.uri } }));
|
res.end(JSON.stringify({ error: { message: err.message, code: err.code, uri: err.uri } }));
|
||||||
});
|
});
|
||||||
|
@ -117,6 +149,9 @@ module.exports.create = function (deps, conf) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
, tunnel: function (req, res) {
|
, tunnel: function (req, res) {
|
||||||
|
if (handleCors(req, res)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
isAuthorized(req, res, function () {
|
isAuthorized(req, res, function () {
|
||||||
if ('POST' !== req.method) {
|
if ('POST' !== req.method) {
|
||||||
res.setHeader('Content-Type', 'application/json');
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
@ -144,6 +179,9 @@ module.exports.create = function (deps, conf) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
, config: function (req, res) {
|
, config: function (req, res) {
|
||||||
|
if (handleCors(req, res)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
isAuthorized(req, res, function () {
|
isAuthorized(req, res, function () {
|
||||||
if ('POST' !== req.method) {
|
if ('POST' !== req.method) {
|
||||||
res.setHeader('Content-Type', 'application/json;');
|
res.setHeader('Content-Type', 'application/json;');
|
||||||
|
@ -163,6 +201,9 @@ module.exports.create = function (deps, conf) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
, request: function (req, res) {
|
, request: function (req, res) {
|
||||||
|
if (handleCors(req, res, '*')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
isAuthorized(req, res, function () {
|
isAuthorized(req, res, function () {
|
||||||
jsonParser(req, res, function () {
|
jsonParser(req, res, function () {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue