@sassoftware/viya-serverjs 0.2.4 → 0.4.0
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/.babelrc +6 -6
- package/.dockerignore +2 -2
- package/.env +29 -29
- package/.env.proxy +32 -32
- package/.env.server +30 -30
- package/.eslintignore +3 -3
- package/.eslintrc.json +42 -42
- package/Dockerfile +44 -44
- package/README.md +99 -99
- package/cli.js +9 -9
- package/lib/config.js +16 -16
- package/lib/handlers/appCallback.js +23 -24
- package/lib/handlers/codeAuth.js +17 -18
- package/lib/handlers/decodeJwt.js +3 -3
- package/lib/handlers/favicon.js +22 -25
- package/lib/handlers/getApp.js +20 -21
- package/lib/handlers/getApp2.js +22 -25
- package/lib/handlers/getUser.js +14 -17
- package/lib/handlers/index.js +3 -3
- package/lib/handlers/keepAlive.js +28 -31
- package/lib/handlers/keepAlive2.js +9 -12
- package/lib/handlers/logon.js +12 -15
- package/lib/handlers/logout.js +24 -28
- package/lib/handlers/proxyMapUri.js +6 -11
- package/lib/handlers/proxyOnResponse.js +6 -7
- package/lib/handlers/reactDev.js +22 -25
- package/lib/handlers/setCookies.js +52 -53
- package/lib/iService.js +106 -104
- package/lib/index.js +23 -21
- package/lib/parseDocker.js +3 -3
- package/lib/plugins/SASauth.js +30 -32
- package/lib/plugins/appCookie.js +36 -38
- package/lib/plugins/setContext.js +22 -25
- package/lib/plugins/setDefaultRoutes.js +61 -58
- package/lib/plugins/setupAuth.js +35 -38
- package/lib/plugins/setupUserRoutes.js +16 -16
- package/lib/plugins/token.js +9 -10
- package/lib/schemes/SASTokenScheme.js +24 -27
- package/package.json +85 -79
- package/public/data/Cluster_SDOH1.sas +181 -181
- package/public/data/Cluster_SDOH6.sas +179 -179
- package/public/data/NeuralNetwork_High_med.sas +2408 -2408
- package/public/data/NeuralNetwork_high_med1.sas +2408 -2408
- package/public/data/cars.csv +429 -429
- package/public/data/cmdList.txt +15 -15
- package/public/data/iris.csv +151 -151
- package/public/index.html +355 -360
- package/public/indexProxy.html +351 -351
- package/public/simplesubmit.html +233 -0
- package/server.js +362 -362
- package/src/config.js +90 -90
- package/src/handlers/appCallback.js +40 -40
- package/src/handlers/codeAuth.js +31 -31
- package/src/handlers/decodeJwt.js +10 -10
- package/src/handlers/favicon.js +23 -23
- package/src/handlers/getApp.js +52 -52
- package/src/handlers/getApp2.js +25 -25
- package/src/handlers/getUser.js +20 -20
- package/src/handlers/index.js +36 -36
- package/src/handlers/keepAlive.js +53 -53
- package/src/handlers/keepAlive2.js +12 -12
- package/src/handlers/logon.js +23 -23
- package/src/handlers/logout.js +42 -42
- package/src/handlers/proxyMapUri.js +25 -25
- package/src/handlers/proxyOnResponse.js +11 -11
- package/src/handlers/reactDev.js +29 -29
- package/src/handlers/setCookies.js +81 -79
- package/src/iService.js +346 -347
- package/src/index.js +251 -249
- package/src/parseDocker.js +32 -32
- package/src/plugins/SASauth.js +78 -78
- package/src/plugins/appCookie.js +51 -49
- package/src/plugins/setContext.js +33 -33
- package/src/plugins/setDefaultRoutes.js +256 -253
- package/src/plugins/setupAuth.js +49 -49
- package/src/plugins/setupUserRoutes.js +47 -47
- package/src/plugins/token.js +10 -10
- package/src/schemes/SASTokenScheme.js +43 -43
- package/src/visionIndex.html +23 -23
- package/start.sh +14 -14
- package/tls/viyatls.sh +2 -2
package/src/index.js
CHANGED
|
@@ -1,249 +1,251 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ------------------------------------------------------------------------------------
|
|
3
|
-
* * Copyright (c) SAS Institute Inc.
|
|
4
|
-
* * Licensed under the Apache License, Version 2.0 (the 'License');
|
|
5
|
-
* * you may not use this file except in compliance with the License.
|
|
6
|
-
* * You may obtain a copy of the License at
|
|
7
|
-
* *
|
|
8
|
-
* * http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
* *
|
|
10
|
-
* * Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* * distributed under the License is distributed on an 'AS IS' BASIS,
|
|
12
|
-
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* * See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
* ----------------------------------------------------------------------------------------
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import "core-js/stable";
|
|
20
|
-
import "regenerator-runtime/runtime";
|
|
21
|
-
import fs from "fs";
|
|
22
|
-
import iService from "./iService";
|
|
23
|
-
import config from "./config";
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
let
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
console.log(
|
|
105
|
-
let
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
let
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
let
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
let
|
|
155
|
-
let
|
|
156
|
-
let
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
userData[k] = null;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
console.log(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
1
|
+
/*
|
|
2
|
+
* ------------------------------------------------------------------------------------
|
|
3
|
+
* * Copyright (c) SAS Institute Inc.
|
|
4
|
+
* * Licensed under the Apache License, Version 2.0 (the 'License');
|
|
5
|
+
* * you may not use this file except in compliance with the License.
|
|
6
|
+
* * You may obtain a copy of the License at
|
|
7
|
+
* *
|
|
8
|
+
* * http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
* *
|
|
10
|
+
* * Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* * distributed under the License is distributed on an 'AS IS' BASIS,
|
|
12
|
+
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* * See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
* ----------------------------------------------------------------------------------------
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import "core-js/stable";
|
|
20
|
+
import "regenerator-runtime/runtime";
|
|
21
|
+
import fs from "fs";
|
|
22
|
+
import iService from "./iService";
|
|
23
|
+
import config from "./config";
|
|
24
|
+
import yargs from "yargs";
|
|
25
|
+
import { hideBin } from 'yargs/helpers';
|
|
26
|
+
let debug = require("debug")("startup");
|
|
27
|
+
|
|
28
|
+
module.exports = function core(
|
|
29
|
+
uTable,
|
|
30
|
+
useDefault,
|
|
31
|
+
serverMode,
|
|
32
|
+
customize,
|
|
33
|
+
swaggerfcn
|
|
34
|
+
) {
|
|
35
|
+
let argv = yargs(hideBin(process.argv)).argv;
|
|
36
|
+
let env = argv.env == null ? null : argv.env;
|
|
37
|
+
let appenv = argv.appenv == null ? null : argv.appenv;
|
|
38
|
+
let docker = argv.docker == null ? null : argv.docker;
|
|
39
|
+
//process.env.SERVERMODE = serverMode !== null ? "api" : "app";
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
if (useDefault == null) {
|
|
43
|
+
useDefault = true;
|
|
44
|
+
}
|
|
45
|
+
console.log(
|
|
46
|
+
"Initialization started ============================================================"
|
|
47
|
+
);
|
|
48
|
+
console.log(`version: 2, Build Date: `, Date());
|
|
49
|
+
console.log(
|
|
50
|
+
`\nCommand Line Configuration:
|
|
51
|
+
Dockerfile: ${docker}
|
|
52
|
+
env file : ${env}
|
|
53
|
+
appenv : ${appenv}
|
|
54
|
+
customize : ${customize != null}
|
|
55
|
+
`
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
iapp(null, env, docker, uTable, useDefault, serverMode, customize);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function iapp(
|
|
62
|
+
appSrc,
|
|
63
|
+
rafEnv,
|
|
64
|
+
dockerFile,
|
|
65
|
+
uTable,
|
|
66
|
+
useDefault,
|
|
67
|
+
serverMode,
|
|
68
|
+
customize
|
|
69
|
+
) {
|
|
70
|
+
let asset = setup(rafEnv, dockerFile);
|
|
71
|
+
if (appSrc == null) {
|
|
72
|
+
appSrc = process.env.APPENV == null ? null : process.env.APPENV;
|
|
73
|
+
}
|
|
74
|
+
if (appSrc != null) {
|
|
75
|
+
console.log("appSrc", `+${appSrc}+`);
|
|
76
|
+
createPayload(appSrc, (err, r) => {
|
|
77
|
+
if (err) {
|
|
78
|
+
console.log(err);
|
|
79
|
+
console.log("createPayload failed");
|
|
80
|
+
process.exit(1);
|
|
81
|
+
} else {
|
|
82
|
+
iService(uTable, useDefault, asset, r, serverMode, customize);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
} else {
|
|
86
|
+
let appEnv = getAllEnv({});
|
|
87
|
+
iService(uTable, useDefault, asset, appEnv, serverMode, customize);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function setup(rafEnv, dockerFile) {
|
|
92
|
+
config(rafEnv, dockerFile);
|
|
93
|
+
let asset = process.env.APPLOC === "." ? process.cwd() : process.env.APPLOC;
|
|
94
|
+
process.env.APPASSET = asset;
|
|
95
|
+
return asset;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function createPayload(srcName, cb) {
|
|
99
|
+
let src = fs.readFileSync(srcName, "utf8");
|
|
100
|
+
if (src === null) {
|
|
101
|
+
cb(`Error: ${srcName} was not found. `);
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
// console.log(src);
|
|
105
|
+
let f = new Function(src);
|
|
106
|
+
console.log(`${srcName} compile completed`);
|
|
107
|
+
let r = f();
|
|
108
|
+
f = null;
|
|
109
|
+
|
|
110
|
+
let ar = getAllEnv(r);
|
|
111
|
+
cb(null, ar);
|
|
112
|
+
} catch (err) {
|
|
113
|
+
console.log(`${srcName} compile failed`);
|
|
114
|
+
cb(err);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function getAllEnv(userData) {
|
|
119
|
+
let env;
|
|
120
|
+
let l = null;
|
|
121
|
+
let host = trimit("VIYA_SERVER");
|
|
122
|
+
if (host === 'none' || host == null) {
|
|
123
|
+
console.log('Note: setting host to null');
|
|
124
|
+
host = null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
if (process.env.AUTHTYPE != null) {
|
|
129
|
+
process.env.AUTHFLOW = process.env.AUTHTYPE;
|
|
130
|
+
}
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
let authflow = trimit("AUTHFLOW");
|
|
134
|
+
if (authflow === "authorization_code" || authflow === "code") {
|
|
135
|
+
authflow = "server";
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (authflow === null) {
|
|
139
|
+
host = null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (host === null) {
|
|
143
|
+
authflow = null;
|
|
144
|
+
console.log('Note: setting authflow to null');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
process.env.AUTHFLOW = authflow;
|
|
148
|
+
// let redirect = (process.env.REDIRECT != null) ? process.env.REDIRECT : null;
|
|
149
|
+
let redirect = trimit("REDIRECT");
|
|
150
|
+
|
|
151
|
+
let clientID = trimit("CLIENTID");
|
|
152
|
+
|
|
153
|
+
// eslint-disable-next-line no-unused-vars
|
|
154
|
+
let clientSecret = trimit("CLIENTSECRET");
|
|
155
|
+
let keepAlive = trimit("KEEPALIVE");
|
|
156
|
+
let appName = trimit("APPNAME");
|
|
157
|
+
let ns = trimit("NAMESPACE");
|
|
158
|
+
let nsHost = trimit("NSHOST");
|
|
159
|
+
|
|
160
|
+
l = {
|
|
161
|
+
authflow: authflow,
|
|
162
|
+
redirect: redirect,
|
|
163
|
+
|
|
164
|
+
host: host,
|
|
165
|
+
clientID: clientID,
|
|
166
|
+
appName: appName,
|
|
167
|
+
|
|
168
|
+
keepAlive: null,
|
|
169
|
+
useToken: process.env.USETOKEN,
|
|
170
|
+
|
|
171
|
+
ns: ns,
|
|
172
|
+
nsHost: nsHost,
|
|
173
|
+
};
|
|
174
|
+
if (authflow === "server" || authflow === "implicit") {
|
|
175
|
+
if (authflow === "implicit") {
|
|
176
|
+
if (redirect === null) {
|
|
177
|
+
redirect = `${appName}/callback`;
|
|
178
|
+
process.env.REDIRECT = "callback";
|
|
179
|
+
} else {
|
|
180
|
+
if (redirect !== null && redirect.indexOf("/") !== 0) {
|
|
181
|
+
redirect =
|
|
182
|
+
redirect.indexOf("http") != -1
|
|
183
|
+
? redirect
|
|
184
|
+
: `${process.env.APPNAME}/${redirect}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
l.redirect = redirect;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (authflow === "server" && keepAlive === "YES") {
|
|
191
|
+
let protocol = process.env.HTTPS === "true" ? "https://" : "http://";
|
|
192
|
+
l.keepAlive = `${protocol}${process.env.APPHOST}:${process.env.APPPORT}/${appName}/keepAlive`;
|
|
193
|
+
l.keepAlive = l.keepAlive.replace(/0.0.0.0/, "localhost");
|
|
194
|
+
}
|
|
195
|
+
if (process.env.TIMERS != null) {
|
|
196
|
+
l.timers = process.env.TIMERS;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// allow for no authtype
|
|
200
|
+
l = {
|
|
201
|
+
authType: authflow,
|
|
202
|
+
redirect: redirect,
|
|
203
|
+
|
|
204
|
+
host: host,
|
|
205
|
+
clientID: clientID,
|
|
206
|
+
appName: appName,
|
|
207
|
+
|
|
208
|
+
keepAlive: null,
|
|
209
|
+
useToken: process.env.USETOKEN,
|
|
210
|
+
|
|
211
|
+
ns: ns,
|
|
212
|
+
nsHost: nsHost,
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// pick up the app env's - replacement for appenv.js
|
|
216
|
+
// appenv.js still supported for backward compatibility
|
|
217
|
+
for (let key in process.env) {
|
|
218
|
+
debug(key);
|
|
219
|
+
if (key.indexOf("APPENV_") === 0) {
|
|
220
|
+
let k = key.substring(7);
|
|
221
|
+
let v = process.env[key];
|
|
222
|
+
if (v != null && v.trim().length > 0) {
|
|
223
|
+
if (v.startsWith('$')) {
|
|
224
|
+
v = process.env[v.substring(1)];
|
|
225
|
+
}
|
|
226
|
+
userData[k] = (v != null) ? v.trim() : null;
|
|
227
|
+
} else {
|
|
228
|
+
userData[k] = null;
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
env = {
|
|
235
|
+
LOGONPAYLOAD: l,
|
|
236
|
+
APPENV: userData,
|
|
237
|
+
};
|
|
238
|
+
console.log("Final APPENV configuration for the server");
|
|
239
|
+
console.log(JSON.stringify(env, null, 4));
|
|
240
|
+
console.log(Date());
|
|
241
|
+
return env;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function trimit(e) {
|
|
245
|
+
let a = process.env[e];
|
|
246
|
+
if (a == null) {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
a = a.trim();
|
|
250
|
+
return a.length === 0 ? null : a;
|
|
251
|
+
}
|
package/src/parseDocker.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © 2019, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
3
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
*/
|
|
5
|
-
'use strict';
|
|
6
|
-
let parser = require('docker-file-parser');
|
|
7
|
-
let fs = require('fs');
|
|
8
|
-
|
|
9
|
-
function parseDocker (dockerFile) {
|
|
10
|
-
;
|
|
11
|
-
let d = fs.readFileSync(dockerFile, 'utf8');
|
|
12
|
-
let data = parser.parse(d);
|
|
13
|
-
data.forEach(d => {
|
|
14
|
-
if (d.name === 'EXPOSE') {
|
|
15
|
-
process.env.EXPOSEDPORT = d.args[0];
|
|
16
|
-
console.log(`Exposed port: ${process.env.EXPOSEDPORT}`);
|
|
17
|
-
} else if (d.name === 'ENV') {
|
|
18
|
-
for (let key in d.args) {
|
|
19
|
-
let v = d.args[key];
|
|
20
|
-
if (v.length === 0) {
|
|
21
|
-
console.log(
|
|
22
|
-
`Value for ${key} inherited as ${process.env[key]}`
|
|
23
|
-
);
|
|
24
|
-
} else {
|
|
25
|
-
process.env[key] = v;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export default parseDocker;
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © 2019, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
'use strict';
|
|
6
|
+
let parser = require('docker-file-parser');
|
|
7
|
+
let fs = require('fs');
|
|
8
|
+
|
|
9
|
+
function parseDocker (dockerFile) {
|
|
10
|
+
;
|
|
11
|
+
let d = fs.readFileSync(dockerFile, 'utf8');
|
|
12
|
+
let data = parser.parse(d);
|
|
13
|
+
data.forEach(d => {
|
|
14
|
+
if (d.name === 'EXPOSE') {
|
|
15
|
+
process.env.EXPOSEDPORT = d.args[0];
|
|
16
|
+
console.log(`Exposed port: ${process.env.EXPOSEDPORT}`);
|
|
17
|
+
} else if (d.name === 'ENV') {
|
|
18
|
+
for (let key in d.args) {
|
|
19
|
+
let v = d.args[key];
|
|
20
|
+
if (v.length === 0) {
|
|
21
|
+
console.log(
|
|
22
|
+
`Value for ${key} inherited as ${process.env[key]}`
|
|
23
|
+
);
|
|
24
|
+
} else {
|
|
25
|
+
process.env[key] = v;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default parseDocker;
|