carta-controller 3.0.0-beta.1d → 3.0.0-dev.20220301

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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # CARTA Controller
2
2
 
3
- [![carta version](https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.1c-brightgreen)](https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1c)
4
- [![npm version](https://img.shields.io/npm/v/carta-controller/dev.svg?style=flat)](https://npmjs.org/package/carta-controller "View this project on npm")
3
+ [![carta version](https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.2-brightgreen)](https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.2)
4
+ [![npm version](https://img.shields.io/npm/v/carta-controller/beta.svg?style=flat)](https://npmjs.org/package/carta-controller "View this project on npm")
5
5
  ![last commit](https://img.shields.io/github/last-commit/CARTAvis/carta-controller)
6
6
  ![commit activity](https://img.shields.io/github/commit-activity/m/CARTAvis/carta-controller)
7
7
 
@@ -9,4 +9,4 @@ The CARTA controller provides a simple dashboard which authenticates users and a
9
9
 
10
10
  For installation and configuration instructions, and more detailed information about the controller's features, please consult [the full documentation on ReadTheDocs](https://carta-controller.readthedocs.io/en/dev/).
11
11
 
12
- If you encounter a problem with the controller or documentation, please submit an issue in the controller repo. If you need assistance in configuration or deployment, please contact the [CARTA helpdesk](mailto:carta_helpdesk@asiaa.sinica.edu.tw).
12
+ If you encounter a problem with the controller or documentation, please submit an issue in the controller repo. If you need assistance in configuration or deployment, please contact the [CARTA helpdesk](mailto:support@carta.freshdesk.com).
@@ -124,6 +124,16 @@
124
124
  "1h",
125
125
  "15m"
126
126
  ]
127
+ },
128
+ "scriptingTokenAge": {
129
+ "description": "Lifetime of scripting tokens",
130
+ "type": "string",
131
+ "default": "1w",
132
+ "examples": [
133
+ "1w",
134
+ "5d",
135
+ "10h"
136
+ ]
127
137
  }
128
138
  }
129
139
  },
@@ -184,6 +194,16 @@
184
194
  "15m"
185
195
  ]
186
196
  },
197
+ "scriptingTokenAge": {
198
+ "description": "Lifetime of scripting tokens",
199
+ "type": "string",
200
+ "default": "1w",
201
+ "examples": [
202
+ "1w",
203
+ "5d",
204
+ "10h"
205
+ ]
206
+ },
187
207
  "ldapOptions": {
188
208
  "description": "Options to path through to the LDAP auth instance",
189
209
  "type": "object",
@@ -405,7 +425,7 @@
405
425
  "default": false
406
426
  },
407
427
  "serverAddress": {
408
- "description": "Public-facing server address",
428
+ "description": "Public-facing server address. If this is specified, all requests will be redirected to this address, otherwise any address used will be preserved",
409
429
  "type": "string",
410
430
  "format": "uri",
411
431
  "pattern": "^https?://"
@@ -474,7 +494,7 @@
474
494
  "default": "/usr/local/bin/carta-kill-script"
475
495
  },
476
496
  "rootFolderTemplate": {
477
- "description": "Top-level path of directories accessible to CARTA. The `{username}` placeholder will be replaced with the username",
497
+ "description": "Top-level path of directories accessible to CARTA. The `{username}` placeholder will be replaced with the username. Defaults to `/usr/share/carta` if it exists, or `/usr/local/share/carta` if it exists. If neither exists and no default is provided, the controller exits with an error",
478
498
  "type": "string",
479
499
  "examples": [
480
500
  "/home/{username}",
@@ -482,7 +502,7 @@
482
502
  ]
483
503
  },
484
504
  "baseFolderTemplate": {
485
- "description": "Starting directory of CARTA. Must be a subfolder of rootFolderTemplate. The `{username}` placeholder will be replaced with the username",
505
+ "description": "Starting directory of CARTA. Must be a subfolder of rootFolderTemplate. The `{username}` placeholder will be replaced with the username. Defaults to the same value as `rootFolderTemplate`",
486
506
  "type": "string",
487
507
  "examples": [
488
508
  "/home/{username}/CARTA",
@@ -575,6 +595,12 @@
575
595
  ]
576
596
  }
577
597
  }
598
+ },
599
+ "scriptingAccess": {
600
+ "description": "Control scripting access for users.",
601
+ "type": "string",
602
+ "enum": ["enabled-all-users", "disabled-all-users", "opt-in"],
603
+ "default": "disabled-all-users"
578
604
  }
579
605
  },
580
606
  "if": {
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://cartavis.org/schemas/preference_backend_schema_2.json",
3
+ "idle_timeout": 14400,
4
+ "omp_threads": 8,
5
+ "exit_timeout": 0,
6
+ "initial_timeout": 30
7
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Backend preferences",
4
+ "description": "Schema for CARTA backend preferences (Version 2)",
5
+ "$id": "carta_backend_preferences_2",
6
+ "required": [],
7
+ "properties": {
8
+ "verbosity": {
9
+ "type": "integer",
10
+ "enum": [
11
+ 0,
12
+ 1,
13
+ 2,
14
+ 3,
15
+ 4,
16
+ 5
17
+ ],
18
+ "default": 4
19
+ },
20
+ "no_log": {
21
+ "type": "boolean",
22
+ "default": true
23
+ },
24
+ "log_performance": {
25
+ "type": "boolean",
26
+ "default": false
27
+ },
28
+ "log_protocol_messages": {
29
+ "type": "boolean",
30
+ "default": false
31
+ },
32
+ "no_frontend": {
33
+ "type": "boolean",
34
+ "default": false
35
+ },
36
+ "no_database": {
37
+ "type": "boolean",
38
+ "default": false
39
+ },
40
+ "no_http": {
41
+ "type": "boolean",
42
+ "default": false
43
+ },
44
+ "no_browser": {
45
+ "type": "boolean",
46
+ "default": false
47
+ },
48
+ "browser": {
49
+ "type": "string",
50
+ "default": ""
51
+ },
52
+ "host": {
53
+ "type": "string",
54
+ "minLength": 1,
55
+ "default": "0.0.0.0"
56
+ },
57
+ "port": {
58
+ "type": ["integer", "array"],
59
+ "default": 3002
60
+ },
61
+ "omp_threads": {
62
+ "type": "integer",
63
+ "default": -1
64
+ },
65
+ "top_level_folder": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "default": "/"
69
+ },
70
+ "frontend_folder": {
71
+ "type": "string",
72
+ "minLength": 1,
73
+ "default": ""
74
+ },
75
+ "exit_timeout": {
76
+ "type": "integer",
77
+ "default": -1
78
+ },
79
+ "initial_timeout": {
80
+ "type": "integer",
81
+ "default": -1
82
+ },
83
+ "idle_timeout": {
84
+ "type": "integer",
85
+ "default": -1
86
+ },
87
+ "read_only_mode": {
88
+ "type": "boolean",
89
+ "default": false
90
+ },
91
+ "starting_folder": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "default": ""
95
+ },
96
+ "event_thread_count": {
97
+ "type": "integer",
98
+ "default": -1
99
+ },
100
+ "enable_scripting": {
101
+ "type": "boolean",
102
+ "default": false
103
+ }
104
+ }
105
+ }
@@ -32,29 +32,29 @@ let refreshHandler = (req, res) => {
32
32
  // Local providers
33
33
  if (config_1.ServerConfig.authProviders.pam) {
34
34
  const authConf = config_1.ServerConfig.authProviders.pam;
35
- local_1.generateLocalVerifier(tokenVerifiers, authConf);
36
- loginHandler = pam_1.getPamLoginHandler(authConf);
37
- refreshHandler = local_1.generateLocalRefreshHandler(authConf);
35
+ (0, local_1.generateLocalVerifier)(tokenVerifiers, authConf);
36
+ loginHandler = (0, pam_1.getPamLoginHandler)(authConf);
37
+ refreshHandler = (0, local_1.generateLocalRefreshHandler)(authConf);
38
38
  }
39
39
  else if (config_1.ServerConfig.authProviders.ldap) {
40
40
  const authConf = config_1.ServerConfig.authProviders.ldap;
41
- local_1.generateLocalVerifier(tokenVerifiers, authConf);
42
- loginHandler = ldap_1.getLdapLoginHandler(authConf);
43
- refreshHandler = local_1.generateLocalRefreshHandler(authConf);
41
+ (0, local_1.generateLocalVerifier)(tokenVerifiers, authConf);
42
+ loginHandler = (0, ldap_1.getLdapLoginHandler)(authConf);
43
+ refreshHandler = (0, local_1.generateLocalRefreshHandler)(authConf);
44
44
  }
45
45
  else if (config_1.ServerConfig.authProviders.google) {
46
46
  const authConf = config_1.ServerConfig.authProviders.google;
47
- google_1.generateGoogleVerifier(tokenVerifiers, authConf);
47
+ (0, google_1.generateGoogleVerifier)(tokenVerifiers, authConf);
48
48
  if (authConf.userLookupTable) {
49
- external_1.watchUserTable(userMaps, google_1.validGoogleIssuers, authConf.userLookupTable);
49
+ (0, external_1.watchUserTable)(userMaps, google_1.validGoogleIssuers, authConf.userLookupTable);
50
50
  }
51
51
  }
52
52
  else if (config_1.ServerConfig.authProviders.external) {
53
53
  const authConf = config_1.ServerConfig.authProviders.external;
54
- external_1.generateExternalVerifiers(tokenVerifiers, authConf);
54
+ (0, external_1.generateExternalVerifiers)(tokenVerifiers, authConf);
55
55
  const tablePath = authConf.userLookupTable;
56
56
  if (tablePath) {
57
- external_1.watchUserTable(userMaps, authConf.issuers, tablePath);
57
+ (0, external_1.watchUserTable)(userMaps, authConf.issuers, tablePath);
58
58
  }
59
59
  }
60
60
  // Check for empty token verifies
@@ -97,6 +97,9 @@ function authGuard(req, res, next) {
97
97
  }
98
98
  else {
99
99
  req.username = getUser(token.username, token.iss);
100
+ if (token.scripting) {
101
+ req.scripting = true;
102
+ }
100
103
  next();
101
104
  }
102
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
package/dist/auth/ldap.js CHANGED
@@ -33,15 +33,15 @@ function getLdapLoginHandler(authConf) {
33
33
  }
34
34
  if ((user === null || user === void 0 ? void 0 : user.uid) !== username) {
35
35
  console.warn(`Returned user "uid ${user === null || user === void 0 ? void 0 : user.uid}" does not match username "${username}"`);
36
- util_1.verboseLog(user);
36
+ (0, util_1.verboseLog)(user);
37
37
  }
38
38
  try {
39
39
  const uid = userid.uid(username);
40
40
  console.log(`Authenticated as user ${username} with uid ${uid} using LDAP`);
41
- return local_1.addTokensToResponse(authConf, username, res);
41
+ return (0, local_1.addTokensToResponse)(res, authConf, username);
42
42
  }
43
43
  catch (e) {
44
- util_1.verboseError(e);
44
+ (0, util_1.verboseError)(e);
45
45
  return res.status(403).json({ statusCode: 403, message: "User does not exist" });
46
46
  }
47
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ldap.js","sourceRoot":"","sources":["../../src/auth/ldap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ldap.js","sourceRoot":"","sources":["../../src/auth/ldap.ts"],"names":[],"mappings":"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"}
@@ -9,33 +9,49 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.generateLocalRefreshHandler = exports.generateLocalVerifier = exports.addTokensToResponse = exports.generateToken = void 0;
12
+ exports.generateLocalRefreshHandler = exports.generateLocalVerifier = exports.addTokensToResponse = exports.generateToken = exports.TokenType = void 0;
13
+ const types_1 = require("../types");
13
14
  const fs = require("fs");
14
15
  const jwt = require("jsonwebtoken");
15
16
  const userid = require("userid");
16
17
  const index_1 = require("./index");
17
- const ms = require("ms");
18
18
  const config_1 = require("../config");
19
+ const ms = require("ms");
19
20
  let privateKey;
20
- function generateToken(authConf, username, refreshToken) {
21
+ var TokenType;
22
+ (function (TokenType) {
23
+ TokenType[TokenType["Access"] = 0] = "Access";
24
+ TokenType[TokenType["Refresh"] = 1] = "Refresh";
25
+ TokenType[TokenType["Scripting"] = 2] = "Scripting";
26
+ })(TokenType = exports.TokenType || (exports.TokenType = {}));
27
+ function generateToken(authConf, username, tokenType) {
21
28
  if (!privateKey) {
22
29
  privateKey = fs.readFileSync(authConf.privateKeyLocation);
23
30
  }
24
31
  if (!authConf || !privateKey) {
25
32
  return null;
26
33
  }
27
- return jwt.sign({
34
+ const payload = {
28
35
  iss: authConf.issuer,
29
- username,
30
- refreshToken
31
- }, privateKey, {
36
+ username
37
+ };
38
+ const options = {
32
39
  algorithm: authConf.keyAlgorithm,
33
- expiresIn: refreshToken ? authConf.refreshTokenAge : authConf.accessTokenAge
34
- });
40
+ expiresIn: authConf.accessTokenAge
41
+ };
42
+ if (tokenType === TokenType.Refresh) {
43
+ payload.refresh = true;
44
+ options.expiresIn = authConf.refreshTokenAge;
45
+ }
46
+ else if (tokenType === TokenType.Scripting) {
47
+ payload.scripting = true;
48
+ options.expiresIn = authConf.scriptingTokenAge;
49
+ }
50
+ return jwt.sign(payload, privateKey, options);
35
51
  }
36
52
  exports.generateToken = generateToken;
37
- function addTokensToResponse(authConf, username, res) {
38
- const refreshToken = generateToken(authConf, username, true);
53
+ function addTokensToResponse(res, authConf, username) {
54
+ const refreshToken = generateToken(authConf, username, TokenType.Refresh);
39
55
  res.cookie("Refresh-Token", refreshToken, {
40
56
  path: config_1.RuntimeConfig.authPath,
41
57
  maxAge: ms(authConf.refreshTokenAge),
@@ -43,7 +59,7 @@ function addTokensToResponse(authConf, username, res) {
43
59
  secure: !config_1.ServerConfig.httpOnly,
44
60
  sameSite: "strict"
45
61
  });
46
- const access_token = generateToken(authConf, username, false);
62
+ const access_token = generateToken(authConf, username, TokenType.Access);
47
63
  res.json({
48
64
  access_token,
49
65
  token_type: "bearer",
@@ -66,22 +82,27 @@ function generateLocalVerifier(verifierMap, authConf) {
66
82
  exports.generateLocalVerifier = generateLocalVerifier;
67
83
  function generateLocalRefreshHandler(authConf) {
68
84
  return (req, res, next) => __awaiter(this, void 0, void 0, function* () {
85
+ var _a;
69
86
  const refreshTokenCookie = req.cookies["Refresh-Token"];
87
+ const scriptingToken = ((_a = req.body) === null || _a === void 0 ? void 0 : _a.scripting) === true;
70
88
  if (refreshTokenCookie) {
71
89
  try {
72
- const refreshToken = yield index_1.verifyToken(refreshTokenCookie);
73
- if (!refreshToken || !refreshToken.username || !refreshToken.refreshToken) {
90
+ const refreshToken = yield (0, index_1.verifyToken)(refreshTokenCookie);
91
+ if (!refreshToken || !refreshToken.username || !refreshToken.refresh) {
74
92
  next({ statusCode: 403, message: "Not authorized" });
75
93
  }
94
+ else if (scriptingToken && config_1.ServerConfig.scriptingAccess !== types_1.ScriptingAccess.Enabled) {
95
+ next({ statusCode: 500, message: "Scripting access not enabled for this server" });
96
+ }
76
97
  else {
77
98
  const uid = userid.uid(refreshToken.username);
78
- const access_token = generateToken(authConf, refreshToken.username, false);
79
- console.log(`Refreshed access token for user ${refreshToken.username} with uid ${uid}`);
99
+ const access_token = generateToken(authConf, refreshToken.username, scriptingToken ? TokenType.Scripting : TokenType.Access);
100
+ console.log(`Refreshed ${scriptingToken ? "scripting" : "access"} token for user ${refreshToken.username} with uid ${uid}`);
80
101
  res.json({
81
102
  access_token,
82
103
  token_type: "bearer",
83
104
  username: refreshToken.username,
84
- expires_in: ms(authConf.accessTokenAge) / 1000
105
+ expires_in: ms(scriptingToken ? authConf.scriptingTokenAge : authConf.accessTokenAge) / 1000
85
106
  });
86
107
  }
87
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/auth/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/auth/local.ts"],"names":[],"mappings":"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"}
package/dist/auth/pam.js CHANGED
@@ -20,7 +20,7 @@ function getPamLoginHandler(authConf) {
20
20
  try {
21
21
  const uid = userid.uid(username);
22
22
  console.log(`Authenticated as user ${username} with uid ${uid} using PAM`);
23
- return local_1.addTokensToResponse(authConf, username, res);
23
+ return (0, local_1.addTokensToResponse)(res, authConf, username);
24
24
  }
25
25
  catch (e) {
26
26
  return res.status(403).json({ statusCode: 403, message: "User does not exist" });
@@ -1 +1 @@
1
- {"version":3,"file":"pam.js","sourceRoot":"","sources":["../../src/auth/pam.ts"],"names":[],"mappings":";;;AACA,iCAAiC;AAEjC,mCAA4C;AAE5C,SAAgB,kBAAkB,CAAC,QAA8B;IAC7D,MAAM,EAAC,eAAe,EAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAoB,EAAE,GAAqB,EAAE,EAAE;;QACnD,IAAI,QAAQ,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,QAAQ,CAAC;QAEpC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,yBAAyB,EAAC,CAAC,CAAC;SACtF;QAED,eAAe,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,EAAE,CAAC,GAAmB,EAAE,IAAY,EAAE,EAAE;YACxE,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,iCAAiC,EAAC,CAAC,CAAC;aAC9F;iBAAM;gBACH,IAAI;oBACA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,aAAa,GAAG,YAAY,CAAC,CAAC;oBAC3E,OAAO,2BAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;iBACvD;gBAAC,OAAO,CAAC,EAAE;oBACR,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,qBAAqB,EAAC,CAAC,CAAC;iBAClF;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAzBD,gDAyBC"}
1
+ {"version":3,"file":"pam.js","sourceRoot":"","sources":["../../src/auth/pam.ts"],"names":[],"mappings":";;;AACA,iCAAiC;AAEjC,mCAA4C;AAE5C,SAAgB,kBAAkB,CAAC,QAA8B;IAC7D,MAAM,EAAC,eAAe,EAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAoB,EAAE,GAAqB,EAAE,EAAE;;QACnD,IAAI,QAAQ,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,QAAQ,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,QAAQ,CAAC;QAEpC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,yBAAyB,EAAC,CAAC,CAAC;SACtF;QAED,eAAe,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,EAAE,CAAC,GAAmB,EAAE,IAAY,EAAE,EAAE;YACxE,IAAI,GAAG,EAAE;gBACL,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,iCAAiC,EAAC,CAAC,CAAC;aAC9F;iBAAM;gBACH,IAAI;oBACA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,aAAa,GAAG,YAAY,CAAC,CAAC;oBAC3E,OAAO,IAAA,2BAAmB,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACvD;gBAAC,OAAO,CAAC,EAAE;oBACR,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,qBAAqB,EAAC,CAAC,CAAC;iBAClF;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC;AAzBD,gDAyBC"}
package/dist/config.js CHANGED
@@ -37,8 +37,8 @@ exports.verboseOutput = verboseOutput;
37
37
  const configSchema = require("../config/config_schema.json");
38
38
  const ajv = new ajv_1.default({ useDefaults: false, allowUnionTypes: true });
39
39
  const ajvWithDefaults = new ajv_1.default({ useDefaults: true, allowUnionTypes: true });
40
- ajv_formats_1.default(ajv);
41
- ajv_formats_1.default(ajvWithDefaults);
40
+ (0, ajv_formats_1.default)(ajv);
41
+ (0, ajv_formats_1.default)(ajvWithDefaults);
42
42
  const validateConfig = ajv.compile(configSchema);
43
43
  const validateAndAddDefaults = ajvWithDefaults.compile(configSchema);
44
44
  let serverConfig;
@@ -60,7 +60,7 @@ function testLog(username) {
60
60
  console.log(logSymbols.success, `Checked log writing for user ${username}`);
61
61
  }
62
62
  catch (err) {
63
- util_1.verboseError(err);
63
+ (0, util_1.verboseError)(err);
64
64
  throw new Error(`Could not create log file at ${logLocation} for user ${username}. Please check your config file's logFileTemplate option`);
65
65
  }
66
66
  });
@@ -75,14 +75,14 @@ function testLdap(authConf, username) {
75
75
  read({ prompt: `Password for user ${username}:`, silent: true }, (er, password) => {
76
76
  ldap.authenticate(username, password, (error, user) => {
77
77
  if (error) {
78
- util_1.verboseError(error);
78
+ (0, util_1.verboseError)(error);
79
79
  reject(new Error(`Could not authenticate as user ${username}. Please check your config file's ldapOptions section!`));
80
80
  }
81
81
  else {
82
82
  console.log(logSymbols.success, `Checked LDAP connection for user ${username}`);
83
83
  if ((user === null || user === void 0 ? void 0 : user.uid) !== username) {
84
84
  console.warn(logSymbols.warning, `Returned user "uid ${user === null || user === void 0 ? void 0 : user.uid}" does not match username "${username}"`);
85
- util_1.verboseLog(user);
85
+ (0, util_1.verboseLog)(user);
86
86
  }
87
87
  resolve();
88
88
  }
@@ -91,7 +91,7 @@ function testLdap(authConf, username) {
91
91
  }, 5000);
92
92
  }
93
93
  catch (e) {
94
- util_1.verboseError(e);
94
+ (0, util_1.verboseError)(e);
95
95
  reject(new Error("Cannot create LDAP object. Please check your config file's ldapOptions section!"));
96
96
  }
97
97
  }
@@ -104,7 +104,7 @@ function testPam(authConf, username) {
104
104
  read({ prompt: `Password for user ${username}:`, silent: true }, (er, password) => {
105
105
  pamAuthenticate({ username, password }, (err, code) => {
106
106
  if (err) {
107
- util_1.verboseError(err);
107
+ (0, util_1.verboseError)(err);
108
108
  reject(new Error(`Could not authenticate as user ${username}. Error code ${code}`));
109
109
  }
110
110
  else {
@@ -124,7 +124,7 @@ function testDatabase() {
124
124
  yield db.listCollections({}, { nameOnly: true }).hasNext();
125
125
  }
126
126
  catch (e) {
127
- util_1.verboseError(e);
127
+ (0, util_1.verboseError)(e);
128
128
  throw new Error("Cannot connect to MongoDB. Please check your config file's database section!");
129
129
  }
130
130
  console.log(logSymbols.success, "Checked database connection");
@@ -136,7 +136,7 @@ function testUid(username) {
136
136
  uid = userid.uid(username);
137
137
  }
138
138
  catch (e) {
139
- util_1.verboseError(e);
139
+ (0, util_1.verboseError)(e);
140
140
  throw new Error(`Cannot verify uid of user ${username}`);
141
141
  }
142
142
  if (!uid) {
@@ -147,10 +147,10 @@ function testUid(username) {
147
147
  function testToken(authConf, username) {
148
148
  let token;
149
149
  try {
150
- token = local_1.generateToken(authConf, username, false);
150
+ token = (0, local_1.generateToken)(authConf, username, local_1.TokenType.Access);
151
151
  }
152
152
  catch (e) {
153
- util_1.verboseError(e);
153
+ (0, util_1.verboseError)(e);
154
154
  throw new Error(`Cannot generate access token. Please check your config file's ldap auth section!`);
155
155
  }
156
156
  if (!token) {
@@ -167,7 +167,7 @@ function testFrontend() {
167
167
  indexContents = fs.readFileSync(config_1.ServerConfig.frontendPath + "/index.html").toString();
168
168
  }
169
169
  catch (e) {
170
- util_1.verboseError(e);
170
+ (0, util_1.verboseError)(e);
171
171
  throw new Error(`Cannot access frontend at ${config_1.ServerConfig.frontendPath}`);
172
172
  }
173
173
  if (!indexContents) {
@@ -204,10 +204,10 @@ function testBackendStartup(username) {
204
204
  }
205
205
  // Finally, add the positional argument for the base folder
206
206
  args.push(config_1.ServerConfig.baseFolderTemplate.replace("{username}", username));
207
- util_1.verboseLog(`running sudo ${args.join(" ")}`);
207
+ (0, util_1.verboseLog)(`running sudo ${args.join(" ")}`);
208
208
  // Use same stdout and stderr stream for the backend process
209
- const backendProcess = child_process_1.spawn("sudo", args, { stdio: "inherit" });
210
- yield util_1.delay(2000);
209
+ const backendProcess = (0, child_process_1.spawn)("sudo", args, { stdio: "inherit" });
210
+ yield (0, util_1.delay)(2000);
211
211
  if (backendProcess.signalCode) {
212
212
  throw new Error(`Backend process terminated with code ${backendProcess.signalCode}. Please check your sudoers config, processCommand option and additionalArgs section`);
213
213
  }
@@ -220,7 +220,7 @@ function testBackendStartup(username) {
220
220
  wsConnected = true;
221
221
  });
222
222
  wsClient.connect(`ws://localhost:${port}`);
223
- yield util_1.delay(1000);
223
+ yield (0, util_1.delay)(1000);
224
224
  if (wsConnected) {
225
225
  console.log(logSymbols.success, "Backend process accepted connection");
226
226
  }
@@ -236,13 +236,13 @@ function testKillScript(username, existingProcess) {
236
236
  throw new Error(`Backend process already killed, signal code ${existingProcess.signalCode}`);
237
237
  }
238
238
  const args = ["-u", `${username}`, config_1.ServerConfig.killCommand, `${existingProcess.pid}`];
239
- util_1.verboseLog(`running sudo ${args.join(" ")}`);
240
- const res = child_process_1.spawnSync("sudo", args);
239
+ (0, util_1.verboseLog)(`running sudo ${args.join(" ")}`);
240
+ const res = (0, child_process_1.spawnSync)("sudo", args);
241
241
  if (res.status) {
242
242
  throw new Error(`Cannot execute kill script (error status ${res.status}. Please check your killCommand option`);
243
243
  }
244
244
  // Delay to allow the parent process to exit
245
- yield util_1.delay(1000);
245
+ yield (0, util_1.delay)(1000);
246
246
  if (existingProcess.signalCode === "SIGKILL") {
247
247
  console.log(logSymbols.success, "Backend process killed correctly");
248
248
  }