carta-controller 3.0.0-beta-1b → 3.0.0-beta.2

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.
Files changed (40) hide show
  1. package/README.md +3 -3
  2. package/config/config_schema.json +13 -3
  3. package/config/example_backend.json +7 -0
  4. package/config/preference_backend_schema_2.json +97 -0
  5. package/dist/auth/index.js +1 -1
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/local.js +1 -1
  8. package/dist/auth/local.js.map +1 -1
  9. package/dist/controllerTests.js +31 -23
  10. package/dist/serverHandlers.js +15 -10
  11. package/docs/_build/doctrees/configuration.doctree +0 -0
  12. package/docs/_build/doctrees/environment.pickle +0 -0
  13. package/docs/_build/doctrees/index.doctree +0 -0
  14. package/docs/_build/doctrees/introduction.doctree +0 -0
  15. package/docs/_build/doctrees/schema.doctree +0 -0
  16. package/docs/_build/html/.buildinfo +1 -1
  17. package/docs/_build/html/_sources/configuration.rst.txt +4 -1
  18. package/docs/_build/html/_sources/index.rst.txt +2 -2
  19. package/docs/_build/html/_sources/introduction.rst.txt +1 -1
  20. package/docs/_build/html/_static/config/config_schema.json +10 -0
  21. package/docs/_build/html/_static/documentation_options.js +1 -1
  22. package/docs/_build/html/configuration.html +5 -1
  23. package/docs/_build/html/genindex.html +1 -1
  24. package/docs/_build/html/index.html +2 -2
  25. package/docs/_build/html/installation.html +1 -1
  26. package/docs/_build/html/introduction.html +2 -2
  27. package/docs/_build/html/schema.html +56 -32
  28. package/docs/_build/html/search.html +1 -1
  29. package/docs/_build/html/searchindex.js +1 -1
  30. package/docs/_build/html/ubuntu_focal_instructions.html +1 -1
  31. package/docs/src/centos8_instructions.rst +248 -0
  32. package/docs/src/conf.py +1 -1
  33. package/docs/src/configuration.rst +62 -5
  34. package/docs/src/index.rst +7 -4
  35. package/docs/src/installation.rst +2 -2
  36. package/docs/src/introduction.rst +1 -1
  37. package/docs/src/schema_backend.rst +7 -0
  38. package/docs/src/ubuntu_focal_instructions.rst +2 -2
  39. package/package.json +2 -2
  40. package/views/templated.pug +1 -1
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.1b-brightgreen)](https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1b)
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).
@@ -399,8 +399,13 @@
399
399
  "type": "string",
400
400
  "examples": ["localhost", "127.0.0.1"]
401
401
  },
402
+ "httpOnly": {
403
+ "description": "Allow HTTP-only connections. For testing or internal networks only",
404
+ "type": "boolean",
405
+ "default": false
406
+ },
402
407
  "serverAddress": {
403
- "description": "Public-facing server address",
408
+ "description": "Public-facing server address. If this is specified, all requests will be redirected to this address, otherwise any address used will be preserved",
404
409
  "type": "string",
405
410
  "format": "uri",
406
411
  "pattern": "^https?://"
@@ -455,6 +460,11 @@
455
460
  ],
456
461
  "default": "/usr/bin/carta_backend"
457
462
  },
463
+ "preserveEnv": {
464
+ "description": "Use the --preserve-env argument when calling sudo",
465
+ "type": "boolean",
466
+ "default": true
467
+ },
458
468
  "killCommand": {
459
469
  "description": "Path to CARTA kill script",
460
470
  "type": "string",
@@ -464,7 +474,7 @@
464
474
  "default": "/usr/local/bin/carta-kill-script"
465
475
  },
466
476
  "rootFolderTemplate": {
467
- "description": "Top-level path of directories accessible to CARTA. The `{username}` placeholder will be replaced with the username",
477
+ "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",
468
478
  "type": "string",
469
479
  "examples": [
470
480
  "/home/{username}",
@@ -472,7 +482,7 @@
472
482
  ]
473
483
  },
474
484
  "baseFolderTemplate": {
475
- "description": "Starting directory of CARTA. Must be a subfolder of rootFolderTemplate. The `{username}` placeholder will be replaced with the username",
485
+ "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`",
476
486
  "type": "string",
477
487
  "examples": [
478
488
  "/home/{username}/CARTA",
@@ -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,97 @@
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_http": {
33
+ "type": "boolean",
34
+ "default": false
35
+ },
36
+ "no_browser": {
37
+ "type": "boolean",
38
+ "default": false
39
+ },
40
+ "browser": {
41
+ "type": "string",
42
+ "default": ""
43
+ },
44
+ "host": {
45
+ "type": "string",
46
+ "minLength": 1,
47
+ "default": "0.0.0.0"
48
+ },
49
+ "port": {
50
+ "type": ["integer", "array"],
51
+ "default": 3002
52
+ },
53
+ "grpc_port": {
54
+ "type": "integer",
55
+ "default": -1
56
+ },
57
+ "omp_threads": {
58
+ "type": "integer",
59
+ "default": -1
60
+ },
61
+ "top_level_folder": {
62
+ "type": "string",
63
+ "minLength": 1,
64
+ "default": "/"
65
+ },
66
+ "frontend_folder": {
67
+ "type": "string",
68
+ "minLength": 1,
69
+ "default": ""
70
+ },
71
+ "exit_timeout": {
72
+ "type": "integer",
73
+ "default": -1
74
+ },
75
+ "initial_timeout": {
76
+ "type": "integer",
77
+ "default": -1
78
+ },
79
+ "idle_timeout": {
80
+ "type": "integer",
81
+ "default": -1
82
+ },
83
+ "read_only_mode": {
84
+ "type": "boolean",
85
+ "default": false
86
+ },
87
+ "starting_folder": {
88
+ "type": "string",
89
+ "minLength": 1,
90
+ "default": ""
91
+ },
92
+ "event_thread_count": {
93
+ "type": "integer",
94
+ "default": -1
95
+ }
96
+ }
97
+ }
@@ -115,7 +115,7 @@ function logoutHandler(req, res) {
115
115
  path: config_1.RuntimeConfig.authPath,
116
116
  maxAge: 0,
117
117
  httpOnly: true,
118
- secure: true,
118
+ secure: !config_1.ServerConfig.httpOnly,
119
119
  sameSite: "strict"
120
120
  });
121
121
  return res.json({ success: true });
@@ -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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"}
@@ -40,7 +40,7 @@ function addTokensToResponse(authConf, username, res) {
40
40
  path: config_1.RuntimeConfig.authPath,
41
41
  maxAge: ms(authConf.refreshTokenAge),
42
42
  httpOnly: true,
43
- secure: true,
43
+ secure: !config_1.ServerConfig.httpOnly,
44
44
  sameSite: "strict"
45
45
  });
46
46
  const access_token = generateToken(authConf, username, false);
@@ -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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"}
@@ -40,7 +40,7 @@ function runTests(username) {
40
40
  }
41
41
  yield testDatabase();
42
42
  if (config_1.ServerConfig.logFileTemplate) {
43
- testLog(username);
43
+ yield testLog(username);
44
44
  }
45
45
  testFrontend();
46
46
  const backendProcess = yield testBackendStartup(username);
@@ -49,18 +49,21 @@ function runTests(username) {
49
49
  }
50
50
  exports.runTests = runTests;
51
51
  function testLog(username) {
52
- const logLocation = config_1.ServerConfig.logFileTemplate.replace("{username}", username).replace("{pid}", "9999").replace("{datetime}", moment().format("YYYYMMDD.h_mm_ss"));
53
- try {
54
- const logStream = fs.createWriteStream(logLocation, { flags: "a" });
55
- logStream.write("test");
56
- logStream.close();
57
- fs.unlinkSync(logLocation);
58
- console.log(logSymbols.success, `Checked log writing for user ${username}`);
59
- }
60
- catch (err) {
61
- util_1.verboseError(err);
62
- throw new Error(`Could not create log file at ${logLocation} for user ${username}. Please check your config file's logFileTemplate option`);
63
- }
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const logLocation = config_1.ServerConfig.logFileTemplate.replace("{username}", username).replace("{pid}", "9999").replace("{datetime}", moment().format("YYYYMMDD.h_mm_ss"));
54
+ try {
55
+ const logStream = fs.createWriteStream(logLocation, { flags: "a" });
56
+ // Transform callbacks into awaits
57
+ yield new Promise(res => logStream.write("test", res));
58
+ yield new Promise(res => logStream.end(res));
59
+ fs.unlinkSync(logLocation);
60
+ console.log(logSymbols.success, `Checked log writing for user ${username}`);
61
+ }
62
+ catch (err) {
63
+ util_1.verboseError(err);
64
+ throw new Error(`Could not create log file at ${logLocation} for user ${username}. Please check your config file's logFileTemplate option`);
65
+ }
66
+ });
64
67
  }
65
68
  function testLdap(authConf, username) {
66
69
  return new Promise((resolve, reject) => {
@@ -177,28 +180,33 @@ function testFrontend() {
177
180
  function testBackendStartup(username) {
178
181
  return __awaiter(this, void 0, void 0, function* () {
179
182
  const port = config_1.ServerConfig.backendPorts.max - 1;
180
- let args = [
181
- "--preserve-env=CARTA_AUTH_TOKEN",
183
+ let args = [];
184
+ if (config_1.ServerConfig.preserveEnv) {
185
+ args.push("--preserve-env=CARTA_AUTH_TOKEN");
186
+ }
187
+ args = args.concat([
188
+ "-n",
182
189
  "-u",
183
190
  `${username}`,
184
191
  config_1.ServerConfig.processCommand,
185
192
  "--no_http",
186
- "true",
187
193
  "--debug_no_auth",
188
- "true",
189
- "--no_log",
190
- config_1.ServerConfig.logFileTemplate ? "true" : "false",
191
194
  "--port",
192
195
  `${port}`,
193
196
  "--top_level_folder",
194
- config_1.ServerConfig.rootFolderTemplate.replace("{username}", username),
195
- config_1.ServerConfig.baseFolderTemplate.replace("{username}", username)
196
- ];
197
+ config_1.ServerConfig.rootFolderTemplate.replace("{username}", username)
198
+ ]);
199
+ if (config_1.ServerConfig.logFileTemplate) {
200
+ args.push("--no_log");
201
+ }
197
202
  if (config_1.ServerConfig.additionalArgs) {
198
203
  args = args.concat(config_1.ServerConfig.additionalArgs);
199
204
  }
205
+ // Finally, add the positional argument for the base folder
206
+ args.push(config_1.ServerConfig.baseFolderTemplate.replace("{username}", username));
200
207
  util_1.verboseLog(`running sudo ${args.join(" ")}`);
201
- const backendProcess = child_process_1.spawn("sudo", args);
208
+ // Use same stdout and stderr stream for the backend process
209
+ const backendProcess = child_process_1.spawn("sudo", args, { stdio: "inherit" });
202
210
  yield util_1.delay(2000);
203
211
  if (backendProcess.signalCode) {
204
212
  throw new Error(`Backend process terminated with code ${backendProcess.signalCode}. Please check your sudoers config, processCommand option and additionalArgs section`);
@@ -176,24 +176,29 @@ function startServer(username) {
176
176
  if (port < 0) {
177
177
  throw { statusCode: 500, message: "No available ports for the backend process" };
178
178
  }
179
- let args = [
180
- "--preserve-env=CARTA_AUTH_TOKEN",
179
+ let args = [];
180
+ if (config_1.ServerConfig.preserveEnv) {
181
+ args.push("--preserve-env=CARTA_AUTH_TOKEN");
182
+ }
183
+ args = args.concat([
184
+ "-n",
181
185
  "-u",
182
186
  `${username}`,
183
187
  config_1.ServerConfig.processCommand,
184
188
  "--no_http",
185
- "true",
186
- "--no_log",
187
- config_1.ServerConfig.logFileTemplate ? "true" : "false",
188
189
  "--port",
189
190
  `${port}`,
190
191
  "--top_level_folder",
191
- config_1.ServerConfig.rootFolderTemplate.replace("{username}", username),
192
- config_1.ServerConfig.baseFolderTemplate.replace("{username}", username)
193
- ];
192
+ config_1.ServerConfig.rootFolderTemplate.replace("{username}", username)
193
+ ]);
194
+ if (config_1.ServerConfig.logFileTemplate) {
195
+ args.push("--no_log");
196
+ }
194
197
  if (config_1.ServerConfig.additionalArgs) {
195
198
  args = args.concat(config_1.ServerConfig.additionalArgs);
196
199
  }
200
+ // Finally, add the positional argument for the base folder
201
+ args.push(config_1.ServerConfig.baseFolderTemplate.replace("{username}", username));
197
202
  const headerToken = uuid_1.v4();
198
203
  const child = child_process_1.spawn("sudo", args, { env: { CARTA_AUTH_TOKEN: headerToken } });
199
204
  setPendingProcess(username, port, headerToken, child);
@@ -234,7 +239,7 @@ function startServer(username) {
234
239
  child.on("exit", code => {
235
240
  console.log(`Process ${child.pid} exited with code ${code} and signal ${child.signalCode}`);
236
241
  deleteProcess(username);
237
- logStream === null || logStream === void 0 ? void 0 : logStream.close();
242
+ logStream === null || logStream === void 0 ? void 0 : logStream.end();
238
243
  });
239
244
  // Check for early exit of backend process
240
245
  yield util_1.delay(config_1.ServerConfig.startDelay);
@@ -250,7 +255,7 @@ function startServer(username) {
250
255
  catch (e) {
251
256
  util_1.verboseError(e);
252
257
  console.log(`Problem starting process for user ${username}`);
253
- logStream === null || logStream === void 0 ? void 0 : logStream.close();
258
+ logStream === null || logStream === void 0 ? void 0 : logStream.end();
254
259
  if (e.statusCode && e.message) {
255
260
  throw e;
256
261
  }
Binary file
Binary file
@@ -1,4 +1,4 @@
1
1
  # Sphinx build info version 1
2
2
  # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3
- config: 6509a651727eb67dc98e4465448795f2
3
+ config: cab4ab9f21bbbaa15a42a39a8e17d156
4
4
  tags: 645f666f9bcd5a90fca523b33c5a78b7
@@ -26,7 +26,10 @@ To provide the ``carta`` user with these privileges, you must make modifications
26
26
 
27
27
  .. warning::
28
28
  Please only edit your sudoers configuration with ``visudo`` or equivalent.
29
-
29
+
30
+ .. note::
31
+ Older versions of ``sudo`` do not support the ``--preserve-env=VARIABLE`` argument. If your version of ``sudo`` is too old, set ``"preserveEnv"`` to ``false`` in your controller configuration, and add ``Defaults env_keep += "CARTA_AUTH_TOKEN"`` to your sudoers configuration.
32
+
30
33
  .. _config-authentication:
31
34
 
32
35
  Authentication
@@ -22,9 +22,9 @@ Detailed :ref:`step-by-step instructions<focal_instructions>` are provided for U
22
22
  ubuntu_focal_instructions
23
23
  schema
24
24
 
25
- .. |backend-github| image:: https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.1-brightgreen
25
+ .. |backend-github| image:: https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.1c-brightgreen
26
26
  :alt: View this backend version on GitHub
27
- :target: https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1b
27
+ :target: https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1c
28
28
 
29
29
  .. |npm-package| image:: https://img.shields.io/npm/v/carta-controller/dev.svg?style=flat
30
30
  :alt: View this project on npm
@@ -10,7 +10,7 @@ The CARTA controller provides a simple dashboard which authenticates users and a
10
10
  Dependencies
11
11
  ------------
12
12
 
13
- To allow the controller to serve CARTA sessions, you must give it access to an executable CARTA backend, which can be either a compiled executable or a container. If you want to use a non-standard version of the CARTA frontend, you must also build it, and adjust the controller configuration to point to it. You should use the ``v3.0.0-beta.1b`` tag of `the CARTA backend <https://github.com/CARTAvis/carta-backend>`_.
13
+ To allow the controller to serve CARTA sessions, you must give it access to an executable CARTA backend, which can be either a compiled executable or a container. If you want to use a non-standard version of the CARTA frontend, you must also build it, and adjust the controller configuration to point to it. You should use the ``v3.0.0-beta.1c`` tag of `the CARTA backend <https://github.com/CARTAvis/carta-backend>`_.
14
14
 
15
15
  By default, the controller runs on port 8000. It should be run behind a proxy, so that it can be accessed via HTTP and HTTPS.
16
16
 
@@ -399,6 +399,11 @@
399
399
  "type": "string",
400
400
  "examples": ["localhost", "127.0.0.1"]
401
401
  },
402
+ "httpOnly": {
403
+ "description": "Allow HTTP-only connections. For testing or internal networks only",
404
+ "type": "boolean",
405
+ "default": false
406
+ },
402
407
  "serverAddress": {
403
408
  "description": "Public-facing server address",
404
409
  "type": "string",
@@ -455,6 +460,11 @@
455
460
  ],
456
461
  "default": "/usr/bin/carta_backend"
457
462
  },
463
+ "preserveEnv": {
464
+ "description": "Use the --preserve-env argument when calling sudo",
465
+ "type": "boolean",
466
+ "default": true
467
+ },
458
468
  "killCommand": {
459
469
  "description": "Path to CARTA kill script",
460
470
  "type": "string",
@@ -1,6 +1,6 @@
1
1
  var DOCUMENTATION_OPTIONS = {
2
2
  URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
3
- VERSION: '3.0.0-beta.1b',
3
+ VERSION: '3.0.0-beta.1d',
4
4
  LANGUAGE: 'None',
5
5
  COLLAPSE_INDEX: false,
6
6
  BUILDER: 'html',
@@ -7,7 +7,7 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
 
10
- <title>Configuration &mdash; CARTA Controller 3.0.0-beta.1b documentation</title>
10
+ <title>Configuration &mdash; CARTA Controller 3.0.0-beta.1d documentation</title>
11
11
 
12
12
 
13
13
 
@@ -205,6 +205,10 @@
205
205
  <p class="admonition-title">Warning</p>
206
206
  <p>Please only edit your sudoers configuration with <code class="docutils literal notranslate"><span class="pre">visudo</span></code> or equivalent.</p>
207
207
  </div>
208
+ <div class="admonition note">
209
+ <p class="admonition-title">Note</p>
210
+ <p>Older versions of <code class="docutils literal notranslate"><span class="pre">sudo</span></code> do not support the <code class="docutils literal notranslate"><span class="pre">--preserve-env=VARIABLE</span></code> argument. If your version of <code class="docutils literal notranslate"><span class="pre">sudo</span></code> is too old, set <code class="docutils literal notranslate"><span class="pre">&quot;preserveEnv&quot;</span></code> to <code class="docutils literal notranslate"><span class="pre">false</span></code> in your controller configuration, and add <code class="docutils literal notranslate"><span class="pre">Defaults</span> <span class="pre">env_keep</span> <span class="pre">+=</span> <span class="pre">&quot;CARTA_AUTH_TOKEN&quot;</span></code> to your sudoers configuration.</p>
211
+ </div>
208
212
  </div>
209
213
  <div class="section" id="authentication">
210
214
  <span id="config-authentication"></span><h3>Authentication<a class="headerlink" href="#authentication" title="Permalink to this headline">¶</a></h3>
@@ -7,7 +7,7 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
 
10
- <title>Index &mdash; CARTA Controller 3.0.0-beta.1b documentation</title>
10
+ <title>Index &mdash; CARTA Controller 3.0.0-beta.1d documentation</title>
11
11
 
12
12
 
13
13
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
 
10
- <title>CARTA Controller &mdash; CARTA Controller 3.0.0-beta.1b documentation</title>
10
+ <title>CARTA Controller &mdash; CARTA Controller 3.0.0-beta.1d documentation</title>
11
11
 
12
12
 
13
13
 
@@ -156,7 +156,7 @@
156
156
 
157
157
  <div class="section" id="carta-controller">
158
158
  <h1>CARTA Controller<a class="headerlink" href="#carta-controller" title="Permalink to this headline">¶</a></h1>
159
- <p><a class="reference external" href="https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1b"><img alt="View this backend version on GitHub" src="https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.1-brightgreen" /></a> <a class="reference external" href="https://npmjs.org/package/carta-controller"><img alt="View this project on npm" src="https://img.shields.io/npm/v/carta-controller/dev.svg?style=flat" /></a> <img alt="Last commit" src="https://img.shields.io/github/last-commit/CARTAvis/carta-controller" /> <img alt="Commit activity" src="https://img.shields.io/github/commit-activity/m/CARTAvis/carta-controller" /></p>
159
+ <p><a class="reference external" href="https://github.com/CARTAvis/carta-backend/releases/tag/v3.0.0-beta.1c"><img alt="View this backend version on GitHub" src="https://img.shields.io/badge/CARTA%20Version-3.0.0--beta.1c-brightgreen" /></a> <a class="reference external" href="https://npmjs.org/package/carta-controller"><img alt="View this project on npm" src="https://img.shields.io/npm/v/carta-controller/dev.svg?style=flat" /></a> <img alt="Last commit" src="https://img.shields.io/github/last-commit/CARTAvis/carta-controller" /> <img alt="Commit activity" src="https://img.shields.io/github/commit-activity/m/CARTAvis/carta-controller" /></p>
160
160
  <p>CARTA is the Cube Analysis and Rendering Tool for Astronomy. This document describes the installation and configuration process for the controller component.</p>
161
161
  <p>Detailed <a class="reference internal" href="ubuntu_focal_instructions.html#focal-instructions"><span class="std std-ref">step-by-step instructions</span></a> are provided for Ubuntu 20.04 (Focal Fossa).</p>
162
162
  <div class="toctree-wrapper compound">
@@ -7,7 +7,7 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
 
10
- <title>Installation &mdash; CARTA Controller 3.0.0-beta.1b documentation</title>
10
+ <title>Installation &mdash; CARTA Controller 3.0.0-beta.1d documentation</title>
11
11
 
12
12
 
13
13
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
9
 
10
- <title>Introduction &mdash; CARTA Controller 3.0.0-beta.1b documentation</title>
10
+ <title>Introduction &mdash; CARTA Controller 3.0.0-beta.1d documentation</title>
11
11
 
12
12
 
13
13
 
@@ -166,7 +166,7 @@
166
166
  <p>The CARTA controller provides a simple dashboard which authenticates users and allows them to manage their CARTA backend processes. It also serves static frontend code to clients, and dynamically redirects authenticated client connections to the appropriate backend processes. The controller can either handle authentication itself, or delegate it to an external OAuth2-based authentication server.</p>
167
167
  <div class="section" id="dependencies">
168
168
  <span id="id2"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2>
169
- <p>To allow the controller to serve CARTA sessions, you must give it access to an executable CARTA backend, which can be either a compiled executable or a container. If you want to use a non-standard version of the CARTA frontend, you must also build it, and adjust the controller configuration to point to it. You should use the <code class="docutils literal notranslate"><span class="pre">v3.0.0-beta.1b</span></code> tag of <a class="reference external" href="https://github.com/CARTAvis/carta-backend">the CARTA backend</a>.</p>
169
+ <p>To allow the controller to serve CARTA sessions, you must give it access to an executable CARTA backend, which can be either a compiled executable or a container. If you want to use a non-standard version of the CARTA frontend, you must also build it, and adjust the controller configuration to point to it. You should use the <code class="docutils literal notranslate"><span class="pre">v3.0.0-beta.1c</span></code> tag of <a class="reference external" href="https://github.com/CARTAvis/carta-backend">the CARTA backend</a>.</p>
170
170
  <p>By default, the controller runs on port 8000. It should be run behind a proxy, so that it can be accessed via HTTP and HTTPS.</p>
171
171
  <p>MongoDB is required for storing user preferences, layouts and (in the near future) controller metrics.</p>
172
172
  <p>You also need a working <a class="reference external" href="https://nodejs.org/en/about/releases/">NodeJS LTS</a> installation with NPM. Use <code class="docutils literal notranslate"><span class="pre">npm</span> <span class="pre">install</span></code> to install all Node dependencies.</p>