@sassoftware/viya-serverjs 0.0.3 → 0.1.1
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/lib/core/config.js +5 -17
- package/lib/core/handlers/codeAuth.js +12 -16
- package/lib/core/handlers/getApp.js +35 -65
- package/lib/core/handlers/getApp2.js +1 -2
- package/lib/core/handlers/getUser.js +5 -6
- package/lib/core/handlers/keepAlive.js +10 -11
- package/lib/core/handlers/proxyMapUri.js +28 -41
- package/lib/core/handlers/reactDev.js +1 -1
- package/lib/core/handlers/setCookies.js +27 -27
- package/lib/core/iService.js +2 -3
- package/lib/core/index.js +47 -36
- package/lib/core/plugins/SASauth.js +1 -10
- package/lib/core/plugins/appCookie.js +10 -14
- package/lib/core/plugins/setContext.js +1 -2
- package/lib/core/plugins/setDefaultRoutes.js +5 -40
- package/lib/core/plugins/setupAuth.js +11 -12
- package/lib/core/plugins/token.js +3 -4
- package/lib/core/schemes/SASTokenScheme.js +3 -4
- package/package.json +1 -2
package/lib/core/config.js
CHANGED
|
@@ -25,12 +25,6 @@ exports["default"] = void 0;
|
|
|
25
25
|
var _parseDocker = _interopRequireDefault(require("./parseDocker"));
|
|
26
26
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
27
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
28
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
29
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
30
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
31
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
32
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
33
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
34
28
|
var fs = require('fs');
|
|
35
29
|
var configDebug = (0, _debug["default"])('config');
|
|
36
30
|
function config(appEnv, dockerFile) {
|
|
@@ -88,18 +82,12 @@ function iconfig(appEnv) {
|
|
|
88
82
|
var d = data.split(/\r?\n/);
|
|
89
83
|
d.forEach(function (l) {
|
|
90
84
|
if (l.length > 0 && l.indexOf('#') === -1) {
|
|
91
|
-
var
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (value.trim().length > 0) {
|
|
96
|
-
if (value.startsWith('$')) {
|
|
97
|
-
var envVar = value.substring(1);
|
|
98
|
-
value = process.env[envVar];
|
|
99
|
-
}
|
|
100
|
-
process.env[envName] = value;
|
|
85
|
+
var la = l.split('=');
|
|
86
|
+
var envName = la[0];
|
|
87
|
+
if (la.length === 2 && la[1].length > 0) {
|
|
88
|
+
process.env[envName] = la[1];
|
|
101
89
|
}
|
|
102
|
-
configDebug(
|
|
90
|
+
configDebug(la[1]);
|
|
103
91
|
}
|
|
104
92
|
});
|
|
105
93
|
} catch (err) {
|
|
@@ -20,7 +20,7 @@ function codeAuth(_x, _x2, _x3) {
|
|
|
20
20
|
}
|
|
21
21
|
function _codeAuth() {
|
|
22
22
|
_codeAuth = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(req, h, options) {
|
|
23
|
-
var
|
|
23
|
+
var indexHTML;
|
|
24
24
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
25
25
|
while (1) switch (_context.prev = _context.next) {
|
|
26
26
|
case 0:
|
|
@@ -28,33 +28,29 @@ function _codeAuth() {
|
|
|
28
28
|
_context.next = 3;
|
|
29
29
|
return (0, _setCookies["default"])(req, h, options);
|
|
30
30
|
case 3:
|
|
31
|
-
|
|
32
|
-
console.log('cookieResult:', cookieResult);
|
|
33
|
-
debug('options', options);
|
|
31
|
+
console.log(options);
|
|
34
32
|
indexHTML = process.env.APPENTRY == null ? 'index.html' : process.env.APPENTRY;
|
|
35
|
-
|
|
36
|
-
if (process.env.REDIRECT !== undefined) {
|
|
37
|
-
debug('..redirect', process.env.REDIRECT);
|
|
33
|
+
if (process.env.REDIRECT != null) {
|
|
38
34
|
debug('using REDIRECT env variable', process.env.REDIRECT);
|
|
39
35
|
indexHTML = process.env.REDIRECT;
|
|
40
36
|
}
|
|
41
|
-
|
|
42
|
-
debugger;
|
|
37
|
+
console.log('..................', indexHTML);
|
|
43
38
|
if (!(indexHTML.indexOf('/') === 0)) {
|
|
44
|
-
_context.next =
|
|
39
|
+
_context.next = 13;
|
|
45
40
|
break;
|
|
46
41
|
}
|
|
47
42
|
// added to support create-react-restaf-viya-app cli
|
|
48
43
|
if (indexHTML !== '/develop') {
|
|
49
|
-
|
|
50
|
-
indexHTML = "/".concat(process.env.APPNAME, "/").concat(indexHTML);
|
|
44
|
+
indexHTML = "/".concat(process.env.APPNAME).concat(indexHTML);
|
|
51
45
|
}
|
|
46
|
+
console.log("Redirecting to ".concat(indexHTML));
|
|
52
47
|
return _context.abrupt("return", h.redirect(indexHTML));
|
|
53
|
-
case
|
|
54
|
-
|
|
55
|
-
console.log('redirecting to :', "/".concat(indexHTML));
|
|
48
|
+
case 13:
|
|
49
|
+
console.log("Redirecting to ".concat(indexHTML));
|
|
56
50
|
return _context.abrupt("return", h.file(indexHTML));
|
|
57
|
-
case
|
|
51
|
+
case 15:
|
|
52
|
+
;
|
|
53
|
+
case 16:
|
|
58
54
|
case "end":
|
|
59
55
|
return _context.stop();
|
|
60
56
|
}
|
|
@@ -13,84 +13,54 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
13
13
|
* Copyright © 2019, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
14
14
|
* SPDX-License-Identifier: Apache-2.0
|
|
15
15
|
*/
|
|
16
|
-
var debug = require(
|
|
16
|
+
var debug = require('debug')('getapp');
|
|
17
17
|
function getApp(_x, _x2, _x3) {
|
|
18
18
|
return _getApp.apply(this, arguments);
|
|
19
19
|
}
|
|
20
20
|
function _getApp() {
|
|
21
|
-
_getApp = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
22
|
-
var
|
|
23
|
-
return _regeneratorRuntime().wrap(function
|
|
24
|
-
while (1) switch (
|
|
21
|
+
_getApp = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(options, req, h) {
|
|
22
|
+
var x, redirect, redirectUri, protocol, url, indexHTML;
|
|
23
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
24
|
+
while (1) switch (_context.prev = _context.next) {
|
|
25
25
|
case 0:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var x, redirect, redirectUri, protocol, url;
|
|
29
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
30
|
-
while (1) switch (_context.prev = _context.next) {
|
|
31
|
-
case 0:
|
|
32
|
-
if (!(process.env.AUTHFLOW === "implicit")) {
|
|
33
|
-
_context.next = 8;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
x = "".concat(process.env.VIYA_SERVER, "/SASLogon/oauth/authorize?response_type=token&client_id=").concat(process.env.CLIENTID);
|
|
37
|
-
redirect = "".concat(process.env.APPNAME, "/callback");
|
|
38
|
-
if (process.env.REDIRECT != null) {
|
|
39
|
-
redirect = process.env.REDIRECT.trim();
|
|
40
|
-
if (redirect.indexOf("http") === -1) {
|
|
41
|
-
redirect = "".concat(process.env.APPNAME, "/").concat(redirect);
|
|
42
|
-
protocol = process.env.HTTPS === "true" ? "https://" : "http://";
|
|
43
|
-
redirectUri = "".concat(protocol).concat(process.env.APPHOST, ":").concat(process.env.APPPORT, "/").concat(redirect, "?host=").concat(process.env.VIYA_SERVER);
|
|
44
|
-
} else {
|
|
45
|
-
redirectUri = "".concat(redirect, "?host=").concat(process.env.VIYA_SERVER);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
debug(process.env.REDIRECT);
|
|
49
|
-
url = "".concat(x, "&redirect_uri=").concat(redirectUri);
|
|
50
|
-
debug(url);
|
|
51
|
-
return _context.abrupt("return", h.redirect(url));
|
|
52
|
-
case 8:
|
|
53
|
-
case "end":
|
|
54
|
-
return _context.stop();
|
|
55
|
-
}
|
|
56
|
-
}, _callee);
|
|
57
|
-
}));
|
|
58
|
-
return _handleImplicit.apply(this, arguments);
|
|
59
|
-
};
|
|
60
|
-
handleImplicit = function _handleImplicit2(_x4, _x5, _x6) {
|
|
61
|
-
return _handleImplicit.apply(this, arguments);
|
|
62
|
-
};
|
|
63
|
-
debugger;
|
|
64
|
-
;
|
|
65
|
-
authType = process.env.AUTHFLOW.trim();
|
|
66
|
-
if (!(authType === "implicit")) {
|
|
67
|
-
_context2.next = 9;
|
|
26
|
+
if (!(process.env.AUTHFLOW === 'implicit')) {
|
|
27
|
+
_context.next = 10;
|
|
68
28
|
break;
|
|
69
29
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
30
|
+
x = "".concat(process.env.VIYA_SERVER, "/SASLogon/oauth/authorize?response_type=token&client_id=").concat(process.env.CLIENTID);
|
|
31
|
+
redirect = "".concat(process.env.APPNAME, "/callback");
|
|
32
|
+
if (process.env.REDIRECT != null) {
|
|
33
|
+
redirect = process.env.REDIRECT.trim();
|
|
34
|
+
if (redirect.indexOf('http') === -1) {
|
|
35
|
+
redirect = "".concat(process.env.APPNAME, "/").concat(redirect);
|
|
36
|
+
protocol = process.env.HTTPS === 'true' ? 'https://' : 'http://';
|
|
37
|
+
redirectUri = "".concat(protocol).concat(process.env.APPHOST, ":").concat(process.env.APPPORT, "/").concat(redirect, "?host=").concat(process.env.VIYA_SERVER);
|
|
38
|
+
} else {
|
|
39
|
+
redirectUri = "".concat(redirect, "?host=").concat(process.env.VIYA_SERVER);
|
|
40
|
+
}
|
|
77
41
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
42
|
+
debug(process.env.REDIRECT);
|
|
43
|
+
url = "".concat(x, "&redirect_uri=").concat(redirectUri);
|
|
44
|
+
debug(url);
|
|
45
|
+
return _context.abrupt("return", h.redirect(url));
|
|
46
|
+
case 10:
|
|
47
|
+
if (!(process.env.AUTHFLOW === 'server')) {
|
|
48
|
+
_context.next = 16;
|
|
83
49
|
break;
|
|
84
50
|
}
|
|
85
|
-
|
|
86
|
-
|
|
51
|
+
debugger;
|
|
52
|
+
debug('calling codeauth');
|
|
53
|
+
return _context.abrupt("return", (0, _codeAuth["default"])(req, h, options));
|
|
54
|
+
case 16:
|
|
55
|
+
debug('default getapp');
|
|
56
|
+
indexHTML = process.env.APPENTRY == null ? 'index.html' : process.env.APPENTRY;
|
|
87
57
|
console.log("Redirecting to default ".concat(indexHTML));
|
|
88
|
-
return
|
|
89
|
-
case
|
|
58
|
+
return _context.abrupt("return", h.file(indexHTML));
|
|
59
|
+
case 20:
|
|
90
60
|
case "end":
|
|
91
|
-
return
|
|
61
|
+
return _context.stop();
|
|
92
62
|
}
|
|
93
|
-
},
|
|
63
|
+
}, _callee);
|
|
94
64
|
}));
|
|
95
65
|
return _getApp.apply(this, arguments);
|
|
96
66
|
}
|
|
@@ -22,24 +22,23 @@ function _getUser() {
|
|
|
22
22
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
23
23
|
while (1) switch (_context.prev = _context.next) {
|
|
24
24
|
case 0:
|
|
25
|
-
debugger;
|
|
26
25
|
debug(req.state);
|
|
27
26
|
name = 'SAS User';
|
|
28
27
|
if (!(req.state.ocookie != null)) {
|
|
29
|
-
_context.next =
|
|
28
|
+
_context.next = 9;
|
|
30
29
|
break;
|
|
31
30
|
}
|
|
32
31
|
sid = req.state.ocookie.sid;
|
|
33
32
|
debug(sid);
|
|
34
|
-
_context.next =
|
|
33
|
+
_context.next = 7;
|
|
35
34
|
return req.server.app.cache.get(sid);
|
|
36
|
-
case
|
|
35
|
+
case 7:
|
|
37
36
|
credentials = _context.sent;
|
|
38
37
|
name = credentials.user_name;
|
|
39
|
-
case
|
|
38
|
+
case 9:
|
|
40
39
|
debug(name);
|
|
41
40
|
return _context.abrupt("return", "let USER_NAME='".concat(name, "'"));
|
|
42
|
-
case
|
|
41
|
+
case 11:
|
|
43
42
|
case "end":
|
|
44
43
|
return _context.stop();
|
|
45
44
|
}
|
|
@@ -52,7 +52,6 @@ function _refreshToken() {
|
|
|
52
52
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
53
53
|
while (1) switch (_context2.prev = _context2.next) {
|
|
54
54
|
case 0:
|
|
55
|
-
debugger;
|
|
56
55
|
credentials = req.auth.credentials;
|
|
57
56
|
sid = credentials.sid;
|
|
58
57
|
config = {
|
|
@@ -69,28 +68,28 @@ function _refreshToken() {
|
|
|
69
68
|
client_secret: process.env.CLIENTSECRET
|
|
70
69
|
})
|
|
71
70
|
};
|
|
72
|
-
_context2.prev =
|
|
73
|
-
_context2.next =
|
|
71
|
+
_context2.prev = 3;
|
|
72
|
+
_context2.next = 6;
|
|
74
73
|
return (0, _axios["default"])(config);
|
|
75
|
-
case
|
|
74
|
+
case 6:
|
|
76
75
|
r = _context2.sent;
|
|
77
76
|
newcred = _objectSpread({}, credentials);
|
|
78
77
|
newcred.token = r.data.access_token;
|
|
79
78
|
newcred.refreshToken = r.data.refresh_token;
|
|
80
|
-
_context2.next =
|
|
79
|
+
_context2.next = 12;
|
|
81
80
|
return req.server.app.cache.set(sid, credentials);
|
|
82
|
-
case
|
|
81
|
+
case 12:
|
|
83
82
|
return _context2.abrupt("return", credentials);
|
|
84
|
-
case
|
|
85
|
-
_context2.prev =
|
|
86
|
-
_context2.t0 = _context2["catch"](
|
|
83
|
+
case 15:
|
|
84
|
+
_context2.prev = 15;
|
|
85
|
+
_context2.t0 = _context2["catch"](3);
|
|
87
86
|
error = Boom.badRequest('Unable to refresh tokens in KeepAlive', JSON.stringify(_context2.t0, null, 4));
|
|
88
87
|
throw error;
|
|
89
|
-
case
|
|
88
|
+
case 19:
|
|
90
89
|
case "end":
|
|
91
90
|
return _context2.stop();
|
|
92
91
|
}
|
|
93
|
-
}, _callee2, null, [[
|
|
92
|
+
}, _callee2, null, [[3, 15]]);
|
|
94
93
|
}));
|
|
95
94
|
return _refreshToken.apply(this, arguments);
|
|
96
95
|
}
|
|
@@ -4,47 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
|
-
function
|
|
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
|
-
uri = uri + search;
|
|
36
|
-
}
|
|
37
|
-
console.log('destination= ', uri);
|
|
38
|
-
return _context.abrupt("return", {
|
|
39
|
-
uri: uri
|
|
40
|
-
});
|
|
41
|
-
case 14:
|
|
42
|
-
case "end":
|
|
43
|
-
return _context.stop();
|
|
44
|
-
}
|
|
45
|
-
}, _callee);
|
|
46
|
-
}));
|
|
47
|
-
return _proxyMapUri.apply(this, arguments);
|
|
7
|
+
function proxyMapUri(req) {
|
|
8
|
+
var credentials = req.auth.credentials;
|
|
9
|
+
console.log('------------------------------------------');
|
|
10
|
+
if (credentials != null) {
|
|
11
|
+
var sid = credentials.sid;
|
|
12
|
+
console.log('sid=', sid);
|
|
13
|
+
}
|
|
14
|
+
var path = process.env.PROXYSERVER;
|
|
15
|
+
console.log('proxying to= ', path);
|
|
16
|
+
var params = req.params;
|
|
17
|
+
console.log('params=', params);
|
|
18
|
+
var search = req.url.search;
|
|
19
|
+
console.log('query=', search);
|
|
20
|
+
var uri = path + '/' + params.param;
|
|
21
|
+
if (search != null && search.trim().length > 0) {
|
|
22
|
+
uri = uri + search;
|
|
23
|
+
}
|
|
24
|
+
console.log('destination= ', uri);
|
|
25
|
+
var r = {
|
|
26
|
+
uri: uri
|
|
27
|
+
};
|
|
28
|
+
if (credentials) {
|
|
29
|
+
console.log('credentials.token=', credentials.token);
|
|
30
|
+
r.headers = {
|
|
31
|
+
Authorization: "Bearer ".concat(credentials.token)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return r;
|
|
48
35
|
}
|
|
49
36
|
var _default = exports["default"] = proxyMapUri;
|
|
50
37
|
/*
|
|
@@ -36,7 +36,7 @@ function _reactDev() {
|
|
|
36
36
|
while (1) switch (_context.prev = _context.next) {
|
|
37
37
|
case 0:
|
|
38
38
|
console.log('Spawning the dev server');
|
|
39
|
-
spawn('
|
|
39
|
+
spawn('yarn', ['start'], {
|
|
40
40
|
stdio: 'inherit'
|
|
41
41
|
});
|
|
42
42
|
h2 = '<h2>Viya Server: ' + process.env.VIYA_SERVER + '<h2>';
|
|
@@ -19,56 +19,56 @@ function setCookies(_x, _x2, _x3) {
|
|
|
19
19
|
}
|
|
20
20
|
function _setCookies() {
|
|
21
21
|
_setCookies = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(req, h, options) {
|
|
22
|
-
var
|
|
22
|
+
var credentials, sid, redirect;
|
|
23
23
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
24
24
|
while (1) switch (_context.prev = _context.next) {
|
|
25
25
|
case 0:
|
|
26
|
-
|
|
26
|
+
credentials = req.auth.credentials;
|
|
27
27
|
debugger;
|
|
28
|
-
req.log('setcookie',
|
|
29
|
-
if (!(
|
|
30
|
-
_context.next =
|
|
28
|
+
req.log('setcookie', credentials);
|
|
29
|
+
if (!(credentials != null && req.auth.error != null)) {
|
|
30
|
+
_context.next = 8;
|
|
31
31
|
break;
|
|
32
32
|
}
|
|
33
33
|
debug('logon failed');
|
|
34
|
+
console.log(req.auth.error);
|
|
35
|
+
debug('req.auth.error', req.auth.error);
|
|
34
36
|
return _context.abrupt("return", {
|
|
35
37
|
status: false,
|
|
36
38
|
error: req.auth.error
|
|
37
39
|
});
|
|
38
|
-
case
|
|
40
|
+
case 8:
|
|
39
41
|
// create a cookie(sid) and save credentials in cache
|
|
40
42
|
sid = uuid.v4();
|
|
41
|
-
credentials =
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
sid: sid,
|
|
45
|
-
user_name: ''
|
|
46
|
-
};
|
|
47
|
-
if (process.env.USETOKEN === 'YES') {
|
|
48
|
-
options.allAppEnv.LOGONPAYLOAD.token = authCred.token;
|
|
43
|
+
credentials.sid = sid;
|
|
44
|
+
if (options != null) {
|
|
45
|
+
options.allAppEnv.LOGONPAYLOAD.token = credentials.token;
|
|
49
46
|
options.allAppEnv.LOGONPAYLOAD.tokenType = 'bearer';
|
|
50
47
|
debug(options.allAppEnv.LOGONPAYLOAD);
|
|
51
48
|
}
|
|
52
|
-
|
|
49
|
+
debug('credentials', credentials);
|
|
50
|
+
_context.next = 14;
|
|
53
51
|
return req.server.app.cache.set(sid, credentials, 0);
|
|
54
|
-
case
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
case 14:
|
|
53
|
+
// Can we get away without setting cookie for this session?
|
|
54
|
+
// Need to also modify keepAlive
|
|
55
|
+
if (process.env.COOKIES !== 'NO') {
|
|
56
|
+
req.cookieAuth.set({
|
|
57
|
+
sid: sid
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
;
|
|
61
|
+
req.log('credentialsquery', credentials.query);
|
|
62
|
+
debug(credentials.query);
|
|
63
|
+
redirect = credentials.query != null && credentials.query.next != null ? credentials.query.next : null;
|
|
64
|
+
debug('redirect', redirect);
|
|
65
65
|
req.server.log('setcookie-redirect', redirect);
|
|
66
66
|
return _context.abrupt("return", {
|
|
67
67
|
status: true,
|
|
68
68
|
error: null,
|
|
69
69
|
redirect: redirect
|
|
70
70
|
});
|
|
71
|
-
case
|
|
71
|
+
case 22:
|
|
72
72
|
case "end":
|
|
73
73
|
return _context.stop();
|
|
74
74
|
}
|
package/lib/core/iService.js
CHANGED
|
@@ -103,11 +103,10 @@ function iService(userRouteTable, useDefault, asset, allAppEnv, serverMode, user
|
|
|
103
103
|
};
|
|
104
104
|
if (process.env.HAPIDEBUG === 'YES') {
|
|
105
105
|
sConfig.debug = {
|
|
106
|
-
|
|
107
|
-
request: ['hapi']
|
|
106
|
+
request: '*'
|
|
108
107
|
};
|
|
109
108
|
}
|
|
110
|
-
debug(
|
|
109
|
+
debug(JSON.stringify(sConfig, null, 4));
|
|
111
110
|
if (!(process.env.HTTPS === 'true')) {
|
|
112
111
|
_context.next = 16;
|
|
113
112
|
break;
|
package/lib/core/index.js
CHANGED
|
@@ -27,11 +27,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
27
27
|
var debug = require("debug")("startup");
|
|
28
28
|
module.exports = function core(uTable, useDefault, serverMode, customize, swaggerfcn) {
|
|
29
29
|
var argv = require("yargs").argv;
|
|
30
|
-
debug(argv);
|
|
31
30
|
var env = argv.env == null ? null : argv.env;
|
|
32
31
|
var appenv = argv.appenv == null ? null : argv.appenv;
|
|
33
32
|
var docker = argv.docker == null ? null : argv.docker;
|
|
34
|
-
process.env.SERVERMODE = serverMode !== null ?
|
|
33
|
+
process.env.SERVERMODE = serverMode !== null ? "api" : "app";
|
|
35
34
|
if (useDefault == null) {
|
|
36
35
|
useDefault = true;
|
|
37
36
|
}
|
|
@@ -87,7 +86,6 @@ function createPayload(srcName, cb) {
|
|
|
87
86
|
function getAllEnv(userData) {
|
|
88
87
|
var env;
|
|
89
88
|
var l = null;
|
|
90
|
-
debugger;
|
|
91
89
|
if (process.env.AUTHTYPE != null) {
|
|
92
90
|
process.env.AUTHFLOW = process.env.AUTHTYPE;
|
|
93
91
|
}
|
|
@@ -96,6 +94,7 @@ function getAllEnv(userData) {
|
|
|
96
94
|
authflow = "server";
|
|
97
95
|
}
|
|
98
96
|
process.env.AUTHFLOW = authflow;
|
|
97
|
+
// let redirect = (process.env.REDIRECT != null) ? process.env.REDIRECT : null;
|
|
99
98
|
var redirect = trimit("REDIRECT");
|
|
100
99
|
var host = trimit("VIYA_SERVER");
|
|
101
100
|
var clientID = trimit("CLIENTID");
|
|
@@ -105,64 +104,76 @@ function getAllEnv(userData) {
|
|
|
105
104
|
var appName = trimit("APPNAME");
|
|
106
105
|
var ns = trimit("NAMESPACE");
|
|
107
106
|
var nsHost = trimit("NSHOST");
|
|
108
|
-
var appEntry = trimit("APPENTRY");
|
|
109
|
-
if (appEntry === null) {
|
|
110
|
-
appEntry = "index.html";
|
|
111
|
-
process.env.APPENTRY = appEntry;
|
|
112
|
-
}
|
|
113
|
-
;
|
|
114
107
|
l = {
|
|
115
108
|
authType: authflow,
|
|
116
109
|
redirect: redirect,
|
|
117
110
|
host: host,
|
|
118
111
|
clientID: clientID,
|
|
119
|
-
clientSecret: clientSecret,
|
|
120
112
|
appName: appName,
|
|
121
|
-
appEntry: appEntry,
|
|
122
113
|
keepAlive: null,
|
|
123
114
|
useToken: process.env.USETOKEN,
|
|
124
115
|
ns: ns,
|
|
125
116
|
nsHost: nsHost
|
|
126
117
|
};
|
|
127
|
-
if (authflow
|
|
118
|
+
if (authflow === "server" || authflow === "implicit") {
|
|
128
119
|
if (authflow === "implicit") {
|
|
129
120
|
if (redirect === null) {
|
|
130
121
|
redirect = "".concat(appName, "/callback");
|
|
131
|
-
;
|
|
122
|
+
process.env.REDIRECT = "callback";
|
|
123
|
+
} else {
|
|
124
|
+
if (redirect !== null && redirect.indexOf("/") !== 0) {
|
|
125
|
+
redirect = redirect.indexOf("http") != -1 ? redirect : "".concat(process.env.APPNAME, "/").concat(redirect);
|
|
126
|
+
}
|
|
132
127
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
l = {
|
|
129
|
+
authType: authflow,
|
|
130
|
+
redirect: redirect,
|
|
131
|
+
host: host,
|
|
132
|
+
clientID: clientID,
|
|
133
|
+
appName: appName,
|
|
134
|
+
keepAlive: null,
|
|
135
|
+
useToken: process.env.USETOKEN,
|
|
136
|
+
ns: ns,
|
|
137
|
+
nsHost: nsHost
|
|
138
|
+
};
|
|
139
|
+
if (authflow === "server" && keepAlive === "YES") {
|
|
140
|
+
var protocol = process.env.HTTPS === "true" ? "https://" : "http://";
|
|
141
|
+
l.keepAlive = "".concat(protocol).concat(process.env.APPHOST, ":").concat(process.env.APPPORT, "/").concat(appName, "/keepAlive");
|
|
142
|
+
l.keepAlive = l.keepAlive.replace(/0.0.0.0/, "localhost");
|
|
143
|
+
}
|
|
144
|
+
if (process.env.TIMERS != null) {
|
|
145
|
+
l.timers = process.env.TIMERS;
|
|
137
146
|
}
|
|
138
147
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
l.keepAlive = "".concat(protocol).concat(process.env.APPHOST, ":").concat(process.env.APPPORT, "/").concat(appName, "/keepAlive");
|
|
152
|
-
l.keepAlive = l.keepAlive.replace(/0.0.0.0/, "localhost");
|
|
153
|
-
}
|
|
154
|
-
if (process.env.TIMERS != null) {
|
|
155
|
-
l.timers = process.env.TIMERS;
|
|
148
|
+
// allow for no authtype
|
|
149
|
+
l = {
|
|
150
|
+
authType: authflow,
|
|
151
|
+
redirect: redirect,
|
|
152
|
+
host: host,
|
|
153
|
+
clientID: clientID,
|
|
154
|
+
appName: appName,
|
|
155
|
+
keepAlive: null,
|
|
156
|
+
useToken: process.env.USETOKEN,
|
|
157
|
+
ns: ns,
|
|
158
|
+
nsHost: nsHost
|
|
159
|
+
};
|
|
156
160
|
}
|
|
157
161
|
|
|
158
162
|
// pick up the app env's - replacement for appenv.js
|
|
159
163
|
// appenv.js still supported for backward compatibility
|
|
164
|
+
|
|
160
165
|
for (var key in process.env) {
|
|
166
|
+
debug(key);
|
|
161
167
|
if (key.indexOf("APPENV_") === 0) {
|
|
162
168
|
var k = key.substring(7);
|
|
163
169
|
var v = process.env[key];
|
|
164
170
|
if (v != null && v.trim().length > 0) {
|
|
165
|
-
|
|
171
|
+
if (v.startsWith('$')) {
|
|
172
|
+
v = process.env[v.substring(1)];
|
|
173
|
+
}
|
|
174
|
+
userData[k] = v != null ? v.trim() : null;
|
|
175
|
+
} else {
|
|
176
|
+
userData[k] = null;
|
|
166
177
|
}
|
|
167
178
|
}
|
|
168
179
|
}
|
|
@@ -176,7 +187,7 @@ function getAllEnv(userData) {
|
|
|
176
187
|
}
|
|
177
188
|
function trimit(e) {
|
|
178
189
|
var a = process.env[e];
|
|
179
|
-
if (a === undefined) {
|
|
190
|
+
if (a == null || a === undefined) {
|
|
180
191
|
return null;
|
|
181
192
|
}
|
|
182
193
|
a = a.trim();
|
|
@@ -62,17 +62,8 @@ function _iSASauth() {
|
|
|
62
62
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
63
63
|
while (1) switch (_context.prev = _context.next) {
|
|
64
64
|
case 0:
|
|
65
|
-
debugger;
|
|
66
|
-
console.log('in profile', credentials);
|
|
67
|
-
debug(credentials);
|
|
68
|
-
debug(params);
|
|
69
|
-
debugger;
|
|
70
|
-
|
|
71
|
-
//let r = await get();
|
|
72
|
-
//debug(r);
|
|
73
|
-
debugger;
|
|
74
65
|
server.log('SASAuth profile', credentials);
|
|
75
|
-
case
|
|
66
|
+
case 1:
|
|
76
67
|
case "end":
|
|
77
68
|
return _context.stop();
|
|
78
69
|
}
|
|
@@ -32,19 +32,16 @@ module.exports = /*#__PURE__*/function () {
|
|
|
32
32
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
33
33
|
while (1) switch (_context.prev = _context.next) {
|
|
34
34
|
case 0:
|
|
35
|
-
debugger;
|
|
36
|
-
debug('in validateFunc');
|
|
37
|
-
debug(req.path);
|
|
38
35
|
server.log('Cookie validateFunc', "path - ".concat(req.path));
|
|
39
36
|
if (!(session == null)) {
|
|
40
|
-
_context.next =
|
|
37
|
+
_context.next = 4;
|
|
41
38
|
break;
|
|
42
39
|
}
|
|
43
40
|
console.log('session is null');
|
|
44
41
|
return _context.abrupt("return", {
|
|
45
42
|
valid: false
|
|
46
43
|
});
|
|
47
|
-
case
|
|
44
|
+
case 4:
|
|
48
45
|
credentials = null;
|
|
49
46
|
if (Array.isArray(session) === true && session.length > 0) {
|
|
50
47
|
sid = session[0].sid;
|
|
@@ -52,29 +49,28 @@ module.exports = /*#__PURE__*/function () {
|
|
|
52
49
|
sid = session.sid;
|
|
53
50
|
}
|
|
54
51
|
if (!(sid != null)) {
|
|
55
|
-
_context.next =
|
|
52
|
+
_context.next = 10;
|
|
56
53
|
break;
|
|
57
54
|
}
|
|
58
|
-
_context.next =
|
|
55
|
+
_context.next = 9;
|
|
59
56
|
return req.server.app.cache.get(sid);
|
|
60
|
-
case
|
|
57
|
+
case 9:
|
|
61
58
|
credentials = _context.sent;
|
|
62
|
-
case
|
|
59
|
+
case 10:
|
|
63
60
|
if (!(credentials == null)) {
|
|
64
|
-
_context.next =
|
|
61
|
+
_context.next = 12;
|
|
65
62
|
break;
|
|
66
63
|
}
|
|
67
64
|
return _context.abrupt("return", {
|
|
68
65
|
valid: false
|
|
69
66
|
});
|
|
70
|
-
case
|
|
67
|
+
case 12:
|
|
71
68
|
server.log('Cookie validateFunc', sid);
|
|
72
|
-
debug(sid);
|
|
73
69
|
return _context.abrupt("return", {
|
|
74
70
|
valid: true,
|
|
75
71
|
credentials: credentials
|
|
76
72
|
});
|
|
77
|
-
case
|
|
73
|
+
case 14:
|
|
78
74
|
case "end":
|
|
79
75
|
return _context.stop();
|
|
80
76
|
}
|
|
@@ -86,8 +82,8 @@ module.exports = /*#__PURE__*/function () {
|
|
|
86
82
|
return validateFunc;
|
|
87
83
|
}()
|
|
88
84
|
}; // console.log('cookie options', cookieOptions);
|
|
89
|
-
server.log('Cookie Options', cookieOptions);
|
|
90
85
|
debug('Cookie Options', cookieOptions);
|
|
86
|
+
server.log('Cookie Options', cookieOptions);
|
|
91
87
|
server.auth.strategy('session', 'cookie', cookieOptions);
|
|
92
88
|
case 6:
|
|
93
89
|
case "end":
|
|
@@ -35,7 +35,6 @@ function _setContext() {
|
|
|
35
35
|
while (1) switch (_context.prev = _context.next) {
|
|
36
36
|
case 0:
|
|
37
37
|
credentials = req.auth.credentials;
|
|
38
|
-
debugger;
|
|
39
38
|
context = {
|
|
40
39
|
path: req.path,
|
|
41
40
|
params: req.params,
|
|
@@ -45,7 +44,7 @@ function _setContext() {
|
|
|
45
44
|
host: process.env.VIYA_SERVER
|
|
46
45
|
};
|
|
47
46
|
return _context.abrupt("return", context);
|
|
48
|
-
case
|
|
47
|
+
case 3:
|
|
49
48
|
case "end":
|
|
50
49
|
return _context.stop();
|
|
51
50
|
}
|
|
@@ -42,11 +42,7 @@ module.exports = function setDefaultRoutes(server, options) {
|
|
|
42
42
|
strategy: 'sas'
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
debug('authLogon', authLogon);
|
|
47
|
-
|
|
48
|
-
//let getAppb = getApp.bind(null, (process.env.USETOKEN === 'YES' ? options : null));
|
|
49
|
-
var getAppb = _handlers.getApp.bind(null, options);
|
|
45
|
+
var getAppb = _handlers.getApp.bind(null, process.env.USETOKEN === 'YES' ? options : null);
|
|
50
46
|
server.log('Default strategy', authDefault);
|
|
51
47
|
server.log('Logon strategy', authLogon);
|
|
52
48
|
options.authDefault = authDefault;
|
|
@@ -115,14 +111,6 @@ module.exports = function setDefaultRoutes(server, options) {
|
|
|
115
111
|
cors: true,
|
|
116
112
|
handler: _handlers.reactDev
|
|
117
113
|
}
|
|
118
|
-
}, {
|
|
119
|
-
method: ['GET'],
|
|
120
|
-
path: "".concat(appName, "/develop"),
|
|
121
|
-
options: {
|
|
122
|
-
auth: false,
|
|
123
|
-
cors: true,
|
|
124
|
-
handler: _handlers.reactDev
|
|
125
|
-
}
|
|
126
114
|
}, {
|
|
127
115
|
method: ['GET'],
|
|
128
116
|
path: "".concat(appName, "/logon"),
|
|
@@ -197,38 +185,15 @@ module.exports = function setDefaultRoutes(server, options) {
|
|
|
197
185
|
method: ['GET'],
|
|
198
186
|
path: "".concat(appName, "/{param*}"),
|
|
199
187
|
options: {
|
|
200
|
-
auth:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
// handler: getApp2,
|
|
204
|
-
handler: {
|
|
205
|
-
file: function file(req, h) {
|
|
206
|
-
debugger;
|
|
207
|
-
console.log('in file1 handler');
|
|
208
|
-
console.log(req.auth);
|
|
209
|
-
console.log(req.params);
|
|
210
|
-
return req.params.param;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
188
|
+
auth: authDefault,
|
|
189
|
+
handler: _handlers.getApp2
|
|
213
190
|
}
|
|
214
191
|
}, {
|
|
215
192
|
method: ['GET'],
|
|
216
193
|
path: "/{param*}",
|
|
217
194
|
options: {
|
|
218
|
-
auth:
|
|
195
|
+
auth: authDefault,
|
|
219
196
|
handler: _handlers.getApp2
|
|
220
|
-
/*
|
|
221
|
-
handler: {
|
|
222
|
-
file: function (req,h) {
|
|
223
|
-
debugger;
|
|
224
|
-
console.log('in file2 handler');
|
|
225
|
-
console.log(req.auth);
|
|
226
|
-
console.log(req.params);
|
|
227
|
-
return req.params.param;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
},
|
|
231
|
-
*/
|
|
232
197
|
}
|
|
233
198
|
}, {
|
|
234
199
|
method: ['GET'],
|
|
@@ -262,7 +227,7 @@ module.exports = function setDefaultRoutes(server, options) {
|
|
|
262
227
|
}
|
|
263
228
|
}
|
|
264
229
|
};
|
|
265
|
-
console.log(pr);
|
|
230
|
+
// console.log(pr);
|
|
266
231
|
defaultTable.push(pr);
|
|
267
232
|
}
|
|
268
233
|
var routeTables = uTable !== null ? defaultTable.concat(uTable) : defaultTable;
|
|
@@ -44,38 +44,37 @@ function _setupAuth() {
|
|
|
44
44
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
45
45
|
while (1) switch (_context.prev = _context.next) {
|
|
46
46
|
case 0:
|
|
47
|
-
debugger;
|
|
48
47
|
if (!(options.authFlow === 'server')) {
|
|
49
|
-
_context.next =
|
|
48
|
+
_context.next = 12;
|
|
50
49
|
break;
|
|
51
50
|
}
|
|
52
|
-
_context.next =
|
|
51
|
+
_context.next = 3;
|
|
53
52
|
return server.register({
|
|
54
53
|
plugin: SASauth,
|
|
55
54
|
options: options
|
|
56
55
|
});
|
|
57
|
-
case
|
|
58
|
-
_context.next =
|
|
56
|
+
case 3:
|
|
57
|
+
_context.next = 5;
|
|
59
58
|
return appCookie(server, options);
|
|
60
|
-
case
|
|
59
|
+
case 5:
|
|
61
60
|
def = 'session';
|
|
62
61
|
if (!(options.serverMode === 'api')) {
|
|
63
|
-
_context.next =
|
|
62
|
+
_context.next = 10;
|
|
64
63
|
break;
|
|
65
64
|
}
|
|
66
|
-
_context.next =
|
|
65
|
+
_context.next = 9;
|
|
67
66
|
return server.register({
|
|
68
67
|
plugin: token
|
|
69
68
|
});
|
|
70
|
-
case
|
|
69
|
+
case 9:
|
|
71
70
|
def = 'token';
|
|
72
|
-
case
|
|
71
|
+
case 10:
|
|
73
72
|
server.log('***********************Default auth', def);
|
|
74
73
|
server.auth["default"](def);
|
|
75
74
|
// console.log(server.registerations);
|
|
76
|
-
case
|
|
75
|
+
case 12:
|
|
77
76
|
setDefaultRoutes(server, options);
|
|
78
|
-
case
|
|
77
|
+
case 13:
|
|
79
78
|
case "end":
|
|
80
79
|
return _context.stop();
|
|
81
80
|
}
|
|
@@ -17,12 +17,11 @@ function _itoken() {
|
|
|
17
17
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
18
18
|
while (1) switch (_context.prev = _context.next) {
|
|
19
19
|
case 0:
|
|
20
|
-
|
|
21
|
-
_context.next = 3;
|
|
20
|
+
_context.next = 2;
|
|
22
21
|
return server.auth.scheme('SAStoken', require('../schemes/SASTokenScheme'));
|
|
23
|
-
case
|
|
22
|
+
case 2:
|
|
24
23
|
server.auth.strategy('token', 'SAStoken');
|
|
25
|
-
case
|
|
24
|
+
case 3:
|
|
26
25
|
case "end":
|
|
27
26
|
return _context.stop();
|
|
28
27
|
}
|
|
@@ -39,15 +39,14 @@ module.exports = function SASTokenScheme(server, options) {
|
|
|
39
39
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
40
40
|
while (1) switch (_context.prev = _context.next) {
|
|
41
41
|
case 0:
|
|
42
|
-
debugger;
|
|
43
42
|
authorization = request.headers.authorization;
|
|
44
43
|
server.log('SASToken', authorization);
|
|
45
44
|
if (authorization) {
|
|
46
|
-
_context.next =
|
|
45
|
+
_context.next = 4;
|
|
47
46
|
break;
|
|
48
47
|
}
|
|
49
48
|
throw Boom.unauthorized(null, 'session');
|
|
50
|
-
case
|
|
49
|
+
case 4:
|
|
51
50
|
_authorization$split = authorization.split(' '), _authorization$split2 = _slicedToArray(_authorization$split, 2), tokenType = _authorization$split2[0], token = _authorization$split2[1];
|
|
52
51
|
credentials = {
|
|
53
52
|
token: token,
|
|
@@ -56,7 +55,7 @@ module.exports = function SASTokenScheme(server, options) {
|
|
|
56
55
|
return _context.abrupt("return", h.authenticated({
|
|
57
56
|
credentials: credentials
|
|
58
57
|
}));
|
|
59
|
-
case
|
|
58
|
+
case 7:
|
|
60
59
|
case "end":
|
|
61
60
|
return _context.stop();
|
|
62
61
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sassoftware/viya-serverjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "App server for Custom Viya Applications",
|
|
5
5
|
"author": "Deva Kumaraswamy <deva.kumar@sas.com>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -32,5 +32,4 @@
|
|
|
32
32
|
"pub": "npm publish --tag dev --access public",
|
|
33
33
|
"lint": "npx eslint --fix src/*.js"
|
|
34
34
|
}
|
|
35
|
-
|
|
36
35
|
}
|