soajs.controller 4.0.43 → 4.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +4 -2
- package/lib/parseURL.js +43 -43
- package/modules/driver/kubernetes/model/index.js +1 -1
- package/modules/registry/index.js +1 -1
- package/mw/gotoService/proxyRequest.js +4 -2
- package/mw/gotoService/simpleRTS.js +8 -6
- package/mw/mt/utils.js +1 -1
- package/mw/url/index.js +8 -4
- package/package.json +5 -5
- package/server/controller.js +4 -4
- package/test/data/provision/products/dsbrd.js +1 -1
- package/test/data/provision/resources/dash_cluster.js +2 -2
- package/test/integration/UC1-gateway-routes/index.js +1 -1
- package/test/integration/UC1-gateway-routes/manual/http.js +28 -0
- package/test/integration/UC1-gateway-routes/manual/oauth.js +9 -0
- package/test/integration/UC1-gateway-routes/manual/test.js +21 -0
- package/test/integration/UC1-gateway-routes/oauth-service-mock.js +44 -44
- package/test/integration/requester.js +2 -2
package/.travis.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
language: node_js
|
|
2
2
|
|
|
3
|
-
node_js:
|
|
3
|
+
node_js: 16
|
|
4
4
|
|
|
5
5
|
jobs:
|
|
6
6
|
include:
|
|
@@ -56,9 +56,11 @@ jobs:
|
|
|
56
56
|
- docker tag soajsorg/gateway:latest soajsorg/gateway:${MAJOR_VERSION}.x
|
|
57
57
|
|
|
58
58
|
- docker push soajsorg/gateway
|
|
59
|
+
- docker push soajsorg/gateway:${PACKAGE_VERSION}
|
|
60
|
+
- docker push soajsorg/gateway:${MAJOR_VERSION}.x
|
|
59
61
|
deploy:
|
|
60
62
|
on:
|
|
61
63
|
all_branches: true
|
|
62
64
|
provider: releases
|
|
63
65
|
api_key: ${GIT_TOKEN}
|
|
64
|
-
skip_cleanup: true
|
|
66
|
+
skip_cleanup: true
|
package/lib/parseURL.js
CHANGED
|
@@ -12,46 +12,46 @@ const url = require('url');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
module.exports = (uri, parsedUrl) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
15
|
+
let serviceInfo = parsedUrl.pathname.split('/');
|
|
16
|
+
let service_nv = serviceInfo[1];
|
|
17
|
+
let service_n = service_nv;
|
|
18
|
+
let service_v = null;
|
|
19
|
+
|
|
20
|
+
//check if there is /v1 or v1.1 in the url
|
|
21
|
+
let matches = uri.match(/\/v[0-9]+(.[0-9]+)?\//);
|
|
22
|
+
if (matches && matches.length > 0) {
|
|
23
|
+
let hit = matches[0].replace(/\//g, '');
|
|
24
|
+
if (serviceInfo[2] === hit && serviceInfo.length > 3) {
|
|
25
|
+
service_v = hit.replace("v", '');
|
|
26
|
+
serviceInfo.splice(2, 1);
|
|
27
|
+
uri = uri.replace(matches[0], "/");
|
|
28
|
+
parsedUrl = url.parse(uri, true);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//check if there is service:1 or :1.1 in the url
|
|
33
|
+
if (!service_v) {
|
|
34
|
+
let index = service_nv.indexOf(":");
|
|
35
|
+
if (index !== -1) {
|
|
36
|
+
matches = service_nv.match(/:[0-9]+(.[0-9]+)?/);
|
|
37
|
+
if (matches && matches.length > 0) {
|
|
38
|
+
service_v = service_nv.substr(index + 1);
|
|
39
|
+
}
|
|
40
|
+
service_n = service_nv.substr(0, index);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let versionRequested = false;
|
|
44
|
+
if (service_v !== null) {
|
|
45
|
+
versionRequested = true;
|
|
46
|
+
}
|
|
47
|
+
return ({
|
|
48
|
+
"url": uri,
|
|
49
|
+
"parsedUrl": parsedUrl,
|
|
50
|
+
"serviceInfo": serviceInfo,
|
|
51
|
+
"service_n": service_n,
|
|
52
|
+
"service_nv": service_nv,
|
|
53
|
+
"service_v": service_v,
|
|
54
|
+
"versionRequested": versionRequested,
|
|
55
|
+
"name": service_n
|
|
56
|
+
});
|
|
57
|
+
};
|
|
@@ -61,8 +61,10 @@ module.exports = (configuration) => {
|
|
|
61
61
|
req.soajs.controller.redirectedRequest = request(requestConfig);
|
|
62
62
|
req.soajs.controller.redirectedRequest.on('error', function (error) {
|
|
63
63
|
req.soajs.log.error(error.message);
|
|
64
|
-
req.soajs.controller.redirectedRequest
|
|
65
|
-
|
|
64
|
+
if (req.soajs.controller.redirectedRequest) {
|
|
65
|
+
req.soajs.controller.redirectedRequest.destroy();
|
|
66
|
+
req.soajs.controller.redirectedRequest = null;
|
|
67
|
+
}
|
|
66
68
|
return req.soajs.controllerResponse(core.error.getError(135));
|
|
67
69
|
});
|
|
68
70
|
|
|
@@ -25,7 +25,7 @@ module.exports = (configuration) => {
|
|
|
25
25
|
*/
|
|
26
26
|
return (req, res) => {
|
|
27
27
|
preRedirect(req, res, core, function (obj) {
|
|
28
|
-
req.pause();
|
|
28
|
+
// req.pause();
|
|
29
29
|
|
|
30
30
|
let requestOptions = url.parse(obj.uri);
|
|
31
31
|
requestOptions.headers = req.headers;
|
|
@@ -46,17 +46,19 @@ module.exports = (configuration) => {
|
|
|
46
46
|
serverResponse.resume();
|
|
47
47
|
});
|
|
48
48
|
req.soajs.controller.redirectedRequest.on('error', function (err) {
|
|
49
|
-
req.soajs.log.error(err.message);
|
|
50
|
-
req.soajs.controller.redirectedRequest
|
|
51
|
-
|
|
49
|
+
req.soajs.log.error(err.code, err.message);
|
|
50
|
+
if (req.soajs.controller.redirectedRequest) {
|
|
51
|
+
req.soajs.controller.redirectedRequest.destroy();
|
|
52
|
+
req.soajs.controller.redirectedRequest = null;
|
|
53
|
+
}
|
|
52
54
|
if (!req.soajs.controller.monitorEndingReq) {
|
|
53
55
|
return req.soajs.controllerResponse(core.error.getError(135));
|
|
54
56
|
}
|
|
55
57
|
});
|
|
56
58
|
req.pipe(req.soajs.controller.redirectedRequest, {end: true});
|
|
57
|
-
req.resume();
|
|
59
|
+
// req.resume();
|
|
58
60
|
} catch (e) {
|
|
59
|
-
req.soajs.log.error(e.message + " @catch
|
|
61
|
+
req.soajs.log.error(e.message + " @catch");
|
|
60
62
|
if (req.soajs.controller.redirectedRequest) {
|
|
61
63
|
req.soajs.controller.redirectedRequest.destroy();
|
|
62
64
|
req.soajs.controller.redirectedRequest = null;
|
package/mw/mt/utils.js
CHANGED
package/mw/url/index.js
CHANGED
|
@@ -18,7 +18,9 @@ let libParseURL = require('../../lib/parseURL');
|
|
|
18
18
|
*
|
|
19
19
|
* @returns {Function}
|
|
20
20
|
*/
|
|
21
|
-
module.exports = () => {
|
|
21
|
+
module.exports = (configuration) => {
|
|
22
|
+
let core = configuration.core;
|
|
23
|
+
|
|
22
24
|
return (req, res, next) => {
|
|
23
25
|
if (!req.soajs) {
|
|
24
26
|
throw new TypeError('soajs mw is not started');
|
|
@@ -37,8 +39,10 @@ module.exports = () => {
|
|
|
37
39
|
req.query = {};
|
|
38
40
|
}
|
|
39
41
|
req.soajs.controller.serviceParams = libParseURL(req.url, parsedUrl);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
if (!req.soajs.controller.serviceParams.service_n || req.soajs.controller.serviceParams.service_n === '') {
|
|
43
|
+
return req.soajs.controllerResponse(core.error.getError(136));
|
|
44
|
+
}
|
|
45
|
+
let key = req.headers.key || req.query.key;
|
|
42
46
|
if (!req.headers.key) {
|
|
43
47
|
req.headers.key = key;
|
|
44
48
|
}
|
|
@@ -56,4 +60,4 @@ module.exports = () => {
|
|
|
56
60
|
}
|
|
57
61
|
return next();
|
|
58
62
|
};
|
|
59
|
-
};
|
|
63
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "soajs.controller",
|
|
3
|
-
"description": "soajs API gateway",
|
|
4
|
-
"version": "4.0.
|
|
3
|
+
"description": "soajs multi tenant API gateway",
|
|
4
|
+
"version": "4.0.47",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "soajs team",
|
|
7
7
|
"email": "team@soajs.org"
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"oauth2-server": "2.4.1",
|
|
30
30
|
"path-to-regexp": "6.2.0",
|
|
31
31
|
"request": "2.88.2",
|
|
32
|
-
"useragent": "2.3.0",
|
|
33
32
|
"soajs.core.libs": "1.2.0",
|
|
34
|
-
"soajs.core.modules": "5.0.
|
|
35
|
-
"soajs.urac.driver": "3.0.
|
|
33
|
+
"soajs.core.modules": "5.0.20",
|
|
34
|
+
"soajs.urac.driver": "3.0.21",
|
|
35
|
+
"useragent": "2.3.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"express": "4.17.1",
|
package/server/controller.js
CHANGED
|
@@ -127,7 +127,7 @@ Controller.prototype.init = function (callback) {
|
|
|
127
127
|
|
|
128
128
|
app.use(enhancer_mw());
|
|
129
129
|
|
|
130
|
-
app.use(url_mw());
|
|
130
|
+
app.use(url_mw({"core": core}));
|
|
131
131
|
|
|
132
132
|
app.use(key_mw({"provision": provision, "regEnvironment": regEnvironment}));
|
|
133
133
|
|
|
@@ -181,8 +181,8 @@ Controller.prototype.init = function (callback) {
|
|
|
181
181
|
req.on("close", () => {
|
|
182
182
|
if (req.soajs.controller.redirectedRequest) {
|
|
183
183
|
req.soajs.log.info("Request closed:", req.url);
|
|
184
|
-
req.soajs.controller.redirectedRequest.destroy();
|
|
185
|
-
req.soajs.controller.redirectedRequest = null;
|
|
184
|
+
// req.soajs.controller.redirectedRequest.destroy();
|
|
185
|
+
// req.soajs.controller.redirectedRequest = null;
|
|
186
186
|
}
|
|
187
187
|
});
|
|
188
188
|
});
|
|
@@ -327,4 +327,4 @@ Controller.prototype.stop = function (registry, log, service, server, serverMain
|
|
|
327
327
|
});
|
|
328
328
|
};
|
|
329
329
|
|
|
330
|
-
module.exports = Controller;
|
|
330
|
+
module.exports = Controller;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const http = require('http');
|
|
4
|
+
const options = new URL('http://www.google.com');
|
|
5
|
+
console.log(options)
|
|
6
|
+
let redirectedRequest = http.request(options, function (serverResponse) {
|
|
7
|
+
console.log(serverResponse.headers);
|
|
8
|
+
// serverResponse.pause();
|
|
9
|
+
serverResponse.headers['access-control-allow-origin'] = '*';
|
|
10
|
+
serverResponse.on('data', (chunk) => {
|
|
11
|
+
// console.log(`BODY: ${chunk}`);
|
|
12
|
+
});
|
|
13
|
+
serverResponse.on('end', () => {
|
|
14
|
+
console.log('No more data in response.');
|
|
15
|
+
process.exit(0);
|
|
16
|
+
});
|
|
17
|
+
// serverResponse.resume();
|
|
18
|
+
});
|
|
19
|
+
redirectedRequest.on('error', function (err) {
|
|
20
|
+
console.log('error');
|
|
21
|
+
});
|
|
22
|
+
redirectedRequest.on('socket', function (err) {
|
|
23
|
+
console.log('socket');
|
|
24
|
+
});
|
|
25
|
+
redirectedRequest.on('close', function (err) {
|
|
26
|
+
console.log('close');
|
|
27
|
+
});
|
|
28
|
+
redirectedRequest.end();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const helper = require("../../../helper.js");
|
|
4
|
+
const requester = require('../../requester');
|
|
5
|
+
let localConfig = helper.requireModule('./config.js');
|
|
6
|
+
|
|
7
|
+
let extKey = "3d90163cf9d6b3076ad26aa5ed58556348069258e5c6c941ee0f18448b570ad1c5c790e2d2a1989680c55f4904e2005ff5f8e71606e4aa641e67882f4210ebbc5460ff305dcb36e6ec2a2299cf0448ef60b9e38f41950ec251c1cf41f05f3ce9";
|
|
8
|
+
let options = {
|
|
9
|
+
uri: 'http://127.0.0.1:' + localConfig.servicePort + '/oauth/passport/login',
|
|
10
|
+
headers: {
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
'Connection': 'keep-alive',
|
|
13
|
+
key: extKey
|
|
14
|
+
},
|
|
15
|
+
"qs": {
|
|
16
|
+
access_token: "cfb209a91b23896820f510aadbf1f4284b512123"
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
requester('get', options, (error, body) => {
|
|
20
|
+
console.log(body.errors)
|
|
21
|
+
});
|
|
@@ -4,53 +4,53 @@ const sApp = express();
|
|
|
4
4
|
const mApp = express();
|
|
5
5
|
|
|
6
6
|
function startServer(serverConfig, callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
7
|
+
let mReply = {
|
|
8
|
+
'result': true,
|
|
9
|
+
'ts': Date.now(),
|
|
10
|
+
'service': {
|
|
11
|
+
'service': serverConfig.name,
|
|
12
|
+
'type': 'rest',
|
|
13
|
+
'route': "/heartbeat"
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
let sReply = {
|
|
17
|
+
'result': true,
|
|
18
|
+
'data': {
|
|
19
|
+
'firstname': "antoine",
|
|
20
|
+
'lastname': "hage"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
sApp.get('/passport/login', (req, res) => res.json(sReply));
|
|
26
|
+
|
|
27
|
+
mApp.get('/heartbeat', (req, res) => res.json(mReply));
|
|
28
|
+
|
|
29
|
+
let sAppServer = sApp.listen(serverConfig.s.port, () => console.log(`${serverConfig.name} service mock listening on port ${serverConfig.s.port}!`));
|
|
30
|
+
let mAppServer = mApp.listen(serverConfig.m.port, () => console.log(`${serverConfig.name} service mock listening on port ${serverConfig.m.port}!`));
|
|
31
|
+
|
|
32
|
+
return callback(
|
|
33
|
+
{
|
|
34
|
+
"sAppServer": sAppServer,
|
|
35
|
+
"mAppServer": mAppServer,
|
|
36
|
+
"name": serverConfig.name
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
function killServer(config) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
console.log("killing server ....");
|
|
43
|
+
|
|
44
|
+
config.mAppServer.close((err) => {
|
|
45
|
+
console.log("...sAppServer: " + config.name);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
config.sAppServer.close((err) => {
|
|
49
|
+
console.log("...mAppServer: " + config.name);
|
|
50
|
+
});
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
module.exports = {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
54
|
+
startServer: startServer,
|
|
55
|
+
killServer: killServer
|
|
56
|
+
};
|
|
@@ -4,7 +4,7 @@ let request = require("request");
|
|
|
4
4
|
|
|
5
5
|
function requester(method, params, cb) {
|
|
6
6
|
let requestOptions = {
|
|
7
|
-
timeout: 30000,
|
|
7
|
+
// timeout: 30000,
|
|
8
8
|
'uri': params.uri,
|
|
9
9
|
'json': params.body || true
|
|
10
10
|
};
|
|
@@ -55,4 +55,4 @@ function requester(method, params, cb) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
module.exports = requester;
|
|
58
|
+
module.exports = requester;
|