forked from openiap/opencore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfig.ts
More file actions
490 lines (434 loc) · 37.9 KB
/
Copy pathConfig.ts
File metadata and controls
490 lines (434 loc) · 37.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
150
151
152
153
154
155
156
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
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
import { fetch, toPassportConfig } from "passport-saml-metadata";
import * as fs from "fs";
import * as path from "path";
import { DatabaseConnection } from "./DatabaseConnection";
// import { Logger } from "./Logger";
import { NoderedUtil } from "@openiap/openflow-api";
import { promiseRetry } from "./Logger";
export class Config {
public static getversion(): string {
let versionfile: string = path.join(__dirname, "VERSION");
if (!fs.existsSync(versionfile)) versionfile = path.join(__dirname, "..", "VERSION")
if (!fs.existsSync(versionfile)) versionfile = path.join(__dirname, "..", "..", "VERSION")
if (!fs.existsSync(versionfile)) versionfile = path.join(__dirname, "..", "..", "..", "VERSION")
Config.version = (fs.existsSync(versionfile) ? fs.readFileSync(versionfile, "utf8") : "0.0.1");
return Config.version;
}
public static disablelogging(): void {
Config.log_cache = false;
Config.log_amqp = false;
Config.log_login_provider = false;
Config.log_websocket = false;
Config.log_oauth = false;
Config.unittesting = true;
}
public static reload(): void {
Config.getversion();
Config.logpath = Config.getEnv("logpath", __dirname);
Config.log_with_colors = Config.parseBoolean(Config.getEnv("log_with_colors", "true"));
Config.log_cache = Config.parseBoolean(Config.getEnv("log_cache", "true"));
Config.log_amqp = Config.parseBoolean(Config.getEnv("log_amqp", "true"));
Config.log_login_provider = Config.parseBoolean(Config.getEnv("log_login_provider", "false"));
Config.log_websocket = Config.parseBoolean(Config.getEnv("log_websocket", "false"));
Config.log_oauth = Config.parseBoolean(Config.getEnv("log_oauth", "false"));
Config.log_webserver = Config.parseBoolean(Config.getEnv("log_webserver", "false"));
Config.log_database = Config.parseBoolean(Config.getEnv("log_database", "false"));
Config.log_grafana = Config.parseBoolean(Config.getEnv("log_grafana", "false"));
Config.log_housekeeping = Config.parseBoolean(Config.getEnv("log_housekeeping", "false"));
Config.log_otel = Config.parseBoolean(Config.getEnv("log_otel", "false"));
Config.log_information = Config.parseBoolean(Config.getEnv("log_information", "true"));
Config.log_debug = Config.parseBoolean(Config.getEnv("log_debug", "false"));
Config.log_verbose = Config.parseBoolean(Config.getEnv("log_verbose", "false"));
Config.log_silly = Config.parseBoolean(Config.getEnv("log_silly", "false"));
Config.amqp_allow_replyto_empty_queuename = Config.parseBoolean(Config.getEnv("amqp_allow_replyto_empty_queuename", "false"));
Config.openflow_uniqueid = Config.getEnv("openflow_uniqueid", "");
Config.enable_openflow_amqp = Config.parseBoolean(Config.getEnv("enable_openflow_amqp", "false"));
Config.openflow_amqp_expiration = parseInt(Config.getEnv("openflow_amqp_expiration", (60 * 1000 * 25).toString())); // 25 min
Config.amqp_prefetch = parseInt(Config.getEnv("amqp_prefetch", "50"));
Config.enable_entity_restriction = Config.parseBoolean(Config.getEnv("enable_entity_restriction", "false"));
Config.enable_web_tours = Config.parseBoolean(Config.getEnv("enable_web_tours", "true"));
Config.enable_nodered_tours = Config.parseBoolean(Config.getEnv("enable_nodered_tours", "true"));
Config.auto_hourly_housekeeping = Config.parseBoolean(Config.getEnv("auto_hourly_housekeeping", "false"));
Config.housekeeping_update_usage_hourly = Config.parseBoolean(Config.getEnv("housekeeping_update_usage_hourly", "false"));
Config.housekeeping_update_usersize_hourly = Config.parseBoolean(Config.getEnv("housekeeping_update_usersize_hourly", "true"));
Config.housekeeping_skip_collections = Config.getEnv("housekeeping_skip_collections", "");
Config.workitem_queue_monitoring_enabled = Config.parseBoolean(Config.getEnv("workitem_queue_monitoring_enabled", "true"));
Config.workitem_queue_monitoring_interval = parseInt(Config.getEnv("workitem_queue_monitoring_interval", (30 * 1000).toString())); // 30 sec
Config.getting_started_url = Config.getEnv("getting_started_url", "");
Config.NODE_ENV = Config.getEnv("NODE_ENV", "development");
Config.HTTP_PROXY = Config.getEnv("HTTP_PROXY", "");
Config.HTTPS_PROXY = Config.getEnv("HTTPS_PROXY", "");
Config.NO_PROXY = Config.getEnv("NO_PROXY", "");
Config.stripe_api_key = Config.getEnv("stripe_api_key", "");
Config.stripe_api_secret = Config.getEnv("stripe_api_secret", "");
Config.stripe_force_vat = Config.parseBoolean(Config.getEnv("stripe_force_vat", "false"));
Config.stripe_force_checkout = Config.parseBoolean(Config.getEnv("stripe_force_checkout", "true"));
Config.supports_watch = Config.parseBoolean(Config.getEnv("supports_watch", "false"));
Config.ensure_indexes = Config.parseBoolean(Config.getEnv("ensure_indexes", "true"));
Config.auto_create_users = Config.parseBoolean(Config.getEnv("auto_create_users", "false"));
Config.auto_create_user_from_jwt = Config.parseBoolean(Config.getEnv("auto_create_user_from_jwt", "false"));
Config.auto_create_domains = Config.parseArray(Config.getEnv("auto_create_domains", ""));
Config.persist_user_impersonation = Config.parseBoolean(Config.getEnv("persist_user_impersonation", "true"));
Config.ping_clients_interval = parseInt(Config.getEnv("ping_clients_interval", (10000).toString())); // 12 seconds
Config.allow_personal_nodered = Config.parseBoolean(Config.getEnv("allow_personal_nodered", "false"));
Config.use_ingress_beta1_syntax = Config.parseBoolean(Config.getEnv("use_ingress_beta1_syntax", "true"));
Config.auto_create_personal_nodered_group = Config.parseBoolean(Config.getEnv("auto_create_personal_nodered_group", "false"));
Config.auto_create_personal_noderedapi_group = Config.parseBoolean(Config.getEnv("auto_create_personal_noderedapi_group", "false"));
Config.force_add_admins = Config.parseBoolean(Config.getEnv("force_add_admins", "true"));
Config.validate_emails = Config.parseBoolean(Config.getEnv("validate_emails", "false"));
Config.forgot_pass_emails = Config.parseBoolean(Config.getEnv("forgot_pass_emails", "false"));
Config.smtp_service = Config.getEnv("smtp_service", "");
Config.smtp_from = Config.getEnv("smtp_from", "");
Config.smtp_user = Config.getEnv("smtp_user", "");
Config.smtp_pass = Config.getEnv("smtp_service", "");
Config.smtp_url = Config.getEnv("smtp_url", "");
Config.debounce_lookup = Config.parseBoolean(Config.getEnv("debounce_lookup", "false"));
Config.validate_emails_disposable = Config.parseBoolean(Config.getEnv("validate_emails_disposable", "false"));
Config.tls_crt = Config.getEnv("tls_crt", "");
Config.tls_key = Config.getEnv("tls_key", "");
Config.tls_ca = Config.getEnv("tls_ca", "");
Config.tls_passphrase = Config.getEnv("tls_passphrase", "");
Config.cache_store_type = Config.getEnv("cache_store_type", "memory");
Config.cache_store_max = parseInt(Config.getEnv("cache_store_max", "1000"));
Config.cache_store_ttl_seconds = parseInt(Config.getEnv("cache_store_ttl_seconds", "3600"));
Config.cache_store_redis_host = Config.getEnv("cache_store_redis_host", "");
Config.cache_store_redis_port = parseInt(Config.getEnv("cache_store_redis_port", "6379"));
Config.cache_store_redis_password = Config.getEnv("cache_store_redis_password", "");
Config.oidc_access_token_ttl = parseInt(Config.getEnv("oidc_access_token_ttl", "480"));
Config.oidc_authorization_code_ttl = parseInt(Config.getEnv("oidc_authorization_code_ttl", "480"));
Config.oidc_client_credentials_ttl = parseInt(Config.getEnv("oidc_client_credentials_ttl", "480"));
Config.oidc_refresh_token_ttl = parseInt(Config.getEnv("oidc_refresh_token_ttl", "20160"));
Config.oidc_session_ttl = parseInt(Config.getEnv("oidc_session_ttl", "20160"));
Config.api_rate_limit = Config.parseBoolean(Config.getEnv("api_rate_limit", "true"));
Config.api_rate_limit_points = parseInt(Config.getEnv("api_rate_limit_points", "60"));
Config.api_rate_limit_duration = parseInt(Config.getEnv("api_rate_limit_duration", "1"));
Config.socket_rate_limit = Config.parseBoolean(Config.getEnv("socket_rate_limit", "true"));
Config.socket_rate_limit_points = parseInt(Config.getEnv("socket_rate_limit_points", "30"));
Config.socket_rate_limit_points_disconnect = parseInt(Config.getEnv("socket_rate_limit_points_disconnect", "600"));
Config.socket_rate_limit_duration = parseInt(Config.getEnv("socket_rate_limit_duration", "1"));
Config.socket_error_rate_limit_points = parseInt(Config.getEnv("socket_error_rate_limit_points", "16"));
Config.socket_error_rate_limit_duration = parseInt(Config.getEnv("socket_error_rate_limit_duration", "2"));
Config.client_heartbeat_timeout = parseInt(Config.getEnv("client_heartbeat_timeout", "60"));
Config.expected_max_roles = parseInt(Config.getEnv("expected_max_roles", "4000"));
Config.decorate_roles_fetching_all_roles = Config.parseBoolean(Config.getEnv("decorate_roles_fetching_all_roles", "true"));
Config.update_acl_based_on_groups = Config.parseBoolean(Config.getEnv("update_acl_based_on_groups", "false"));
Config.multi_tenant = Config.parseBoolean(Config.getEnv("multi_tenant", "false"));
Config.cleanup_on_delete_customer = Config.parseBoolean(Config.getEnv("cleanup_on_delete_customer", "false"));
Config.cleanup_on_delete_user = Config.parseBoolean(Config.getEnv("cleanup_on_delete_user", "false"));
Config.api_bypass_perm_check = Config.parseBoolean(Config.getEnv("api_bypass_perm_check", "false"));
Config.websocket_package_size = parseInt(Config.getEnv("websocket_package_size", "4096"), 10);
Config.websocket_max_package_count = parseInt(Config.getEnv("websocket_max_package_count", "1024"), 10);
Config.protocol = Config.getEnv("protocol", "http"); // used by personal nodered and baseurl()
Config.port = parseInt(Config.getEnv("port", "3000"));
Config.domain = Config.getEnv("domain", "localhost"); // sent to website and used in baseurl()
Config.cookie_secret = Config.getEnv("cookie_secret", "NLgUIsozJaxO38ze0WuHthfj2eb1eIEu");
Config.amqp_reply_expiration = parseInt(Config.getEnv("amqp_reply_expiration", "10000")); // 10 seconds
Config.amqp_force_queue_prefix = Config.parseBoolean(Config.getEnv("amqp_force_queue_prefix", "false"));
Config.amqp_force_exchange_prefix = Config.parseBoolean(Config.getEnv("amqp_force_exchange_prefix", "false"));
Config.amqp_force_sender_has_read = Config.parseBoolean(Config.getEnv("amqp_force_sender_has_read", "true"));
Config.amqp_force_sender_has_invoke = Config.parseBoolean(Config.getEnv("amqp_force_sender_has_invoke", "false"));
Config.amqp_force_consumer_has_update = Config.parseBoolean(Config.getEnv("amqp_force_consumer_has_update", "false"));
Config.amqp_enabled_exchange = Config.parseBoolean(Config.getEnv("amqp_enabled_exchange", "false"));
Config.amqp_url = Config.getEnv("amqp_url", "amqp://localhost"); // used to register queues and by personal nodered
Config.amqp_username = Config.getEnv("amqp_username", "guest"); // used to talk wth rabbitmq api, used if not present in amqp_url
Config.amqp_password = Config.getEnv("amqp_password", "guest"); // used to talk wth rabbitmq api, used if not present in amqp_url
Config.amqp_check_for_consumer = Config.parseBoolean(Config.getEnv("amqp_check_for_consumer", "true"));
Config.amqp_check_for_consumer_count = Config.parseBoolean(Config.getEnv("amqp_check_for_consumer_count", "false"));
Config.amqp_default_expiration = parseInt(Config.getEnv("amqp_default_expiration", "10000")); // 10 seconds
Config.amqp_requeue_time = parseInt(Config.getEnv("amqp_requeue_time", "1000")); // 1 seconds
Config.amqp_dlx = Config.getEnv("amqp_dlx", "openflow-dlx"); // Dead letter exchange, used to pickup dead or timeout messages
Config.mongodb_url = Config.getEnv("mongodb_url", "mongodb://localhost:27017");
Config.mongodb_db = Config.getEnv("mongodb_db", "openflow");
Config.mongodb_minpoolsize = parseInt(Config.getEnv("mongodb_minpoolsize", "25"));
Config.skip_history_collections = Config.getEnv("skip_history_collections", "");
Config.history_delta_count = parseInt(Config.getEnv("history_delta_count", "1000"));
Config.allow_skiphistory = Config.parseBoolean(Config.getEnv("allow_skiphistory", "true"));
Config.saml_issuer = Config.getEnv("saml_issuer", "the-issuer"); // define uri of STS, also sent to personal nodereds
Config.aes_secret = Config.getEnv("aes_secret", "");
Config.signing_crt = Config.getEnv("signing_crt", "");
Config.singing_key = Config.getEnv("singing_key", "");
Config.shorttoken_expires_in = Config.getEnv("shorttoken_expires_in", "5m");
Config.longtoken_expires_in = Config.getEnv("longtoken_expires_in", "365d");
Config.downloadtoken_expires_in = Config.getEnv("downloadtoken_expires_in", "15m");
Config.personalnoderedtoken_expires_in = Config.getEnv("personalnoderedtoken_expires_in", "365d");
Config.nodered_images = JSON.parse(Config.getEnv("nodered_images", "[{\"name\":\"Latest Plain Nodered\", \"image\":\"openiap/nodered\"}]"));
Config.saml_federation_metadata = Config.getEnv("saml_federation_metadata", "");
Config.api_ws_url = Config.getEnv("api_ws_url", "");
Config.nodered_ws_url = Config.getEnv("nodered_ws_url", "");
Config.nodered_saml_entrypoint = Config.getEnv("nodered_saml_entrypoint", "");
Config.nodered_docker_entrypoints = Config.getEnv("nodered_docker_entrypoints", "web");
Config.nodered_docker_certresolver = Config.getEnv("nodered_docker_certresolver", "");
Config.namespace = Config.getEnv("namespace", ""); // also sent to website
Config.nodered_domain_schema = Config.getEnv("nodered_domain_schema", ""); // also sent to website
Config.nodered_initial_liveness_delay = parseInt(Config.getEnv("nodered_initial_liveness_delay", "60"));
Config.nodered_allow_nodeselector = Config.parseBoolean(Config.getEnv("nodered_allow_nodeselector", "false"));
Config.nodered_requests_memory = Config.getEnv("nodered_requests_memory", "");
Config.nodered_requests_cpu = Config.getEnv("nodered_requests_cpu", ""); // 1000m = 1vCPU
Config.nodered_limits_memory = Config.getEnv("nodered_limits_memory", "");
Config.nodered_limits_cpu = Config.getEnv("nodered_limits_cpu", ""); // 1000m = 1vCPU
Config.nodered_liveness_failurethreshold = parseInt(Config.getEnv("nodered_liveness_failurethreshold", "5"));
Config.nodered_liveness_timeoutseconds = parseInt(Config.getEnv("nodered_liveness_timeoutseconds", "5"));
Config.noderedcatalogues = Config.getEnv("noderedcatalogues", "");
Config.prometheus_measure_nodeid = Config.parseBoolean(Config.getEnv("prometheus_measure_nodeid", "false"));
Config.prometheus_measure_queued_messages = Config.parseBoolean(Config.getEnv("prometheus_measure_queued_messages", "false"));
Config.prometheus_measure__mongodb_watch = Config.parseBoolean(Config.getEnv("prometheus_measure__mongodb_watch", "false"));
Config.prometheus_measure_onlineuser = Config.parseBoolean(Config.getEnv("prometheus_measure_onlineuser", "false"));
Config.enable_analytics = Config.parseBoolean(Config.getEnv("enable_analytics", "true"));
Config.otel_debug_log = Config.parseBoolean(Config.getEnv("otel_debug_log", "false"));
Config.otel_warn_log = Config.parseBoolean(Config.getEnv("otel_warn_log", "false"));
Config.otel_err_log = Config.parseBoolean(Config.getEnv("otel_err_log", "false"));
Config.otel_trace_url = Config.getEnv("otel_trace_url", "");
Config.otel_metric_url = Config.getEnv("otel_metric_url", "");
Config.otel_trace_interval = parseInt(Config.getEnv("otel_trace_interval", "5000"));
Config.otel_metric_interval = parseInt(Config.getEnv("otel_metric_interval", "5000"));
Config.otel_trace_pingclients = Config.parseBoolean(Config.getEnv("otel_trace_pingclients", "false"));
Config.otel_trace_dashboardauth = Config.parseBoolean(Config.getEnv("otel_trace_dashboardauth", "false"));
Config.otel_trace_include_query = Config.parseBoolean(Config.getEnv("otel_trace_include_query", "false"));
Config.otel_trace_connection_ips = Config.parseBoolean(Config.getEnv("otel_trace_connection_ips", "false"));
Config.validate_user_form = Config.getEnv("validate_user_form", "");
}
public static unittesting: boolean = false;
public static db: DatabaseConnection = null;
public static license_key: string = Config.getEnv("license_key", "");
public static version: string = Config.getversion();
public static logpath: string = Config.getEnv("logpath", __dirname);
public static log_with_colors: boolean = Config.parseBoolean(Config.getEnv("log_with_colors", "true"));
public static log_cache: boolean = Config.parseBoolean(Config.getEnv("log_cache", "false"));
public static log_amqp: boolean = Config.parseBoolean(Config.getEnv("log_amqp", "true"));
public static log_login_provider: boolean = Config.parseBoolean(Config.getEnv("log_login_provider", "false"));
public static log_with_trace: boolean = Config.parseBoolean(Config.getEnv("log_with_trace", "false"));
public static log_websocket: boolean = Config.parseBoolean(Config.getEnv("log_websocket", "false"));
public static log_oauth: boolean = Config.parseBoolean(Config.getEnv("log_oauth", "false"));
public static log_webserver: boolean = Config.parseBoolean(Config.getEnv("log_webserver", "false"));
public static log_database: boolean = Config.parseBoolean(Config.getEnv("log_database", "false"));
public static log_grafana: boolean = Config.parseBoolean(Config.getEnv("log_grafana", "false"));
public static log_housekeeping: boolean = Config.parseBoolean(Config.getEnv("log_housekeeping", "false"));
public static log_otel: boolean = Config.parseBoolean(Config.getEnv("log_otel", "false"));
public static log_information: boolean = Config.parseBoolean(Config.getEnv("log_information", "true"));
public static log_debug: boolean = Config.parseBoolean(Config.getEnv("log_debug", "false"));
public static log_verbose: boolean = Config.parseBoolean(Config.getEnv("log_verbose", "false"));
public static log_silly: boolean = Config.parseBoolean(Config.getEnv("log_silly", "false"));
public static amqp_allow_replyto_empty_queuename: boolean = Config.parseBoolean(Config.getEnv("amqp_allow_replyto_empty_queuename", "false"));
public static openflow_uniqueid: string = Config.getEnv("openflow_uniqueid", "");
public static enable_openflow_amqp: boolean = Config.parseBoolean(Config.getEnv("enable_openflow_amqp", "false"));
public static openflow_amqp_expiration: number = parseInt(Config.getEnv("openflow_amqp_expiration", (60 * 1000 * 25).toString())); // 25 min
public static amqp_prefetch: number = parseInt(Config.getEnv("amqp_prefetch", "50"));
public static enable_entity_restriction: boolean = Config.parseBoolean(Config.getEnv("enable_entity_restriction", "false"));
public static enable_web_tours: boolean = Config.parseBoolean(Config.getEnv("enable_web_tours", "true"));
public static enable_nodered_tours: boolean = Config.parseBoolean(Config.getEnv("enable_nodered_tours", "true"));
public static auto_hourly_housekeeping: boolean = Config.parseBoolean(Config.getEnv("auto_hourly_housekeeping", "true"));
public static housekeeping_update_usage_hourly: boolean = Config.parseBoolean(Config.getEnv("housekeeping_update_usage_hourly", "false"));
public static housekeeping_update_usersize_hourly: boolean = Config.parseBoolean(Config.getEnv("housekeeping_update_usersize_hourly", "true"));
public static housekeeping_skip_collections: string = Config.getEnv("housekeeping_skip_collections", "");
public static workitem_queue_monitoring_enabled: boolean = Config.parseBoolean(Config.getEnv("workitem_queue_monitoring_enabled", "true"));
public static workitem_queue_monitoring_interval: number = parseInt(Config.getEnv("workitem_queue_monitoring_interval", (30 * 1000).toString())); // 30 sec
public static upload_max_filesize_mb: number = parseInt(Config.getEnv("upload_max_filesize_mb", "25"));
public static getting_started_url: string = Config.getEnv("getting_started_url", "");
public static NODE_ENV: string = Config.getEnv("NODE_ENV", "development");
public static HTTP_PROXY: string = Config.getEnv("HTTP_PROXY", "");
public static HTTPS_PROXY: string = Config.getEnv("HTTPS_PROXY", "");
public static NO_PROXY: string = Config.getEnv("NO_PROXY", "");
public static stripe_api_key: string = Config.getEnv("stripe_api_key", "");
public static stripe_api_secret: string = Config.getEnv("stripe_api_secret", "");
public static stripe_force_vat: boolean = Config.parseBoolean(Config.getEnv("stripe_force_vat", "false"));
public static stripe_force_checkout: boolean = Config.parseBoolean(Config.getEnv("stripe_force_checkout", "false"));
public static supports_watch: boolean = Config.parseBoolean(Config.getEnv("supports_watch", "false"));
public static ensure_indexes: boolean = Config.parseBoolean(Config.getEnv("ensure_indexes", "true"));
public static auto_create_users: boolean = Config.parseBoolean(Config.getEnv("auto_create_users", "false"));
public static auto_create_user_from_jwt: boolean = Config.parseBoolean(Config.getEnv("auto_create_user_from_jwt", "false"));
public static auto_create_domains: string[] = Config.parseArray(Config.getEnv("auto_create_domains", ""));
public static persist_user_impersonation: boolean = Config.parseBoolean(Config.getEnv("persist_user_impersonation", "true"));
public static ping_clients_interval: number = parseInt(Config.getEnv("ping_clients_interval", (10000).toString())); // 12 seconds
public static allow_personal_nodered: boolean = Config.parseBoolean(Config.getEnv("allow_personal_nodered", "false"));
public static use_ingress_beta1_syntax: boolean = Config.parseBoolean(Config.getEnv("use_ingress_beta1_syntax", "true"));
public static auto_create_personal_nodered_group: boolean = Config.parseBoolean(Config.getEnv("auto_create_personal_nodered_group", "false"));
public static auto_create_personal_noderedapi_group: boolean = Config.parseBoolean(Config.getEnv("auto_create_personal_noderedapi_group", "false"));
public static force_add_admins: boolean = Config.parseBoolean(Config.getEnv("force_add_admins", "true"));
public static validate_emails: boolean = Config.parseBoolean(Config.getEnv("validate_emails", "false"));
public static forgot_pass_emails: boolean = Config.parseBoolean(Config.getEnv("forgot_pass_emails", "false"));
public static smtp_service: string = Config.getEnv("smtp_service", "");
public static smtp_from: string = Config.getEnv("smtp_from", "");
public static smtp_user: string = Config.getEnv("smtp_user", "");
public static smtp_pass: string = Config.getEnv("smtp_pass", "");
public static smtp_url: string = Config.getEnv("smtp_url", "");
public static debounce_lookup: boolean = Config.parseBoolean(Config.getEnv("debounce_lookup", "false"));
public static validate_emails_disposable: boolean = Config.parseBoolean(Config.getEnv("validate_emails_disposable", "false"));
public static tls_crt: string = Config.getEnv("tls_crt", "");
public static tls_key: string = Config.getEnv("tls_key", "");
public static tls_ca: string = Config.getEnv("tls_ca", "");
public static tls_passphrase: string = Config.getEnv("tls_passphrase", "");
public static cache_store_type: string = Config.getEnv("cache_store_type", "memory");
public static cache_store_max: number = parseInt(Config.getEnv("cache_store_max", "1000"));
public static cache_store_ttl_seconds: number = parseInt(Config.getEnv("cache_store_ttl_seconds", "3600"));
public static cache_store_redis_host: string = Config.getEnv("cache_store_redis_host", "");
public static cache_store_redis_port: number = parseInt(Config.getEnv("cache_store_redis_port", "6379"));
public static cache_store_redis_password: string = Config.getEnv("cache_store_redis_password", "");
public static oidc_access_token_ttl: number = parseInt(Config.getEnv("oidc_access_token_ttl", "480")); // 8 hours
public static oidc_authorization_code_ttl: number = parseInt(Config.getEnv("oidc_authorization_code_ttl", "480")); // 8 hours
public static oidc_client_credentials_ttl: number = parseInt(Config.getEnv("oidc_client_credentials_ttl", "480")); // 8 hours
public static oidc_refresh_token_ttl: number = parseInt(Config.getEnv("oidc_refresh_token_ttl", "20160")); // 14 days in seconds
public static oidc_session_ttl: number = parseInt(Config.getEnv("oidc_session_ttl", "20160")); // 14 days in seconds
public static oidc_cookie_key: string = Config.getEnv("oidc_cookie_key", "Y6SPiXCxDhAJbN7cbydMw5eX1wIrdy8PiWApqEcguss=");
public static api_rate_limit: boolean = Config.parseBoolean(Config.getEnv("api_rate_limit", "true"));
public static api_rate_limit_points: number = parseInt(Config.getEnv("api_rate_limit_points", "20"));
public static api_rate_limit_duration: number = parseInt(Config.getEnv("api_rate_limit_duration", "1"));
public static socket_rate_limit: boolean = Config.parseBoolean(Config.getEnv("socket_rate_limit", "true"));
public static socket_rate_limit_points: number = parseInt(Config.getEnv("socket_rate_limit_points", "30"));
public static socket_rate_limit_points_disconnect: number = parseInt(Config.getEnv("socket_rate_limit_points_disconnect", "600"));
public static socket_rate_limit_duration: number = parseInt(Config.getEnv("socket_rate_limit_duration", "1"));
public static socket_error_rate_limit_points: number = parseInt(Config.getEnv("socket_error_rate_limit_points", "30"));
public static socket_error_rate_limit_duration: number = parseInt(Config.getEnv("socket_error_rate_limit_duration", "1"));
public static client_heartbeat_timeout: number = parseInt(Config.getEnv("client_heartbeat_timeout", "60"));
public static expected_max_roles: number = parseInt(Config.getEnv("expected_max_roles", "20000"));
public static decorate_roles_fetching_all_roles = Config.parseBoolean(Config.getEnv("decorate_roles_fetching_all_roles", "true"));
public static max_recursive_group_depth: number = parseInt(Config.getEnv("max_recursive_group_depth", "2"));
public static update_acl_based_on_groups: boolean = Config.parseBoolean(Config.getEnv("update_acl_based_on_groups", "false"));
public static multi_tenant: boolean = Config.parseBoolean(Config.getEnv("multi_tenant", "false"));
public static cleanup_on_delete_customer: boolean = Config.parseBoolean(Config.getEnv("cleanup_on_delete_customer", "false"));
public static cleanup_on_delete_user: boolean = Config.parseBoolean(Config.getEnv("cleanup_on_delete_user", "false"));
public static api_bypass_perm_check: boolean = Config.parseBoolean(Config.getEnv("api_bypass_perm_check", "false"));
public static websocket_package_size: number = parseInt(Config.getEnv("websocket_package_size", "4096"), 10);
public static websocket_max_package_count: number = parseInt(Config.getEnv("websocket_max_package_count", "1024"), 10);
public static websocket_disconnect_out_of_sync: boolean = Config.parseBoolean(Config.getEnv("websocket_disconnect_out_of_sync", "false"));
public static protocol: string = Config.getEnv("protocol", "http"); // used by personal nodered and baseurl()
public static port: number = parseInt(Config.getEnv("port", "3000"));
public static domain: string = Config.getEnv("domain", "localhost"); // sent to website and used in baseurl()
public static cookie_secret: string = Config.getEnv("cookie_secret", "NLgUIsozJaxO38ze0WuHthfj2eb1eIEu"); // Used to protect cookies
public static max_ace_count: number = parseInt(Config.getEnv("max_ace_count", "128"), 10);
public static amqp_reply_expiration: number = parseInt(Config.getEnv("amqp_reply_expiration", (60 * 1000).toString())); // 1 min
public static amqp_force_queue_prefix: boolean = Config.parseBoolean(Config.getEnv("amqp_force_queue_prefix", "false"));
public static amqp_force_exchange_prefix: boolean = Config.parseBoolean(Config.getEnv("amqp_force_exchange_prefix", "false"));
public static amqp_force_sender_has_read: boolean = Config.parseBoolean(Config.getEnv("amqp_force_sender_has_read", "true"));
public static amqp_force_sender_has_invoke: boolean = Config.parseBoolean(Config.getEnv("amqp_force_sender_has_invoke", "false"));
public static amqp_force_consumer_has_update: boolean = Config.parseBoolean(Config.getEnv("amqp_force_consumer_has_update", "false"));
public static amqp_enabled_exchange: boolean = Config.parseBoolean(Config.getEnv("amqp_enabled_exchange", "false"));
public static amqp_url: string = Config.getEnv("amqp_url", "amqp://localhost"); // used to register queues and by personal nodered
public static amqp_username: string = Config.getEnv("amqp_username", "guest"); // used to talk wth rabbitmq api
public static amqp_password: string = Config.getEnv("amqp_password", "guest"); // used to talk wth rabbitmq api
public static amqp_check_for_consumer: boolean = Config.parseBoolean(Config.getEnv("amqp_check_for_consumer", "true"));
public static amqp_check_for_consumer_count: boolean = Config.parseBoolean(Config.getEnv("amqp_check_for_consumer_count", "false"));
public static amqp_default_expiration: number = parseInt(Config.getEnv("amqp_default_expiration", (60 * 1000).toString())); // 1 min
public static amqp_requeue_time: number = parseInt(Config.getEnv("amqp_requeue_time", "1000")); // 1 seconds
public static amqp_dlx: string = Config.getEnv("amqp_dlx", "openflow-dlx"); // Dead letter exchange, used to pickup dead or timeout messages
public static mongodb_url: string = Config.getEnv("mongodb_url", "mongodb://localhost:27017");
public static mongodb_db: string = Config.getEnv("mongodb_db", "openflow");
public static mongodb_minpoolsize: number = parseInt(Config.getEnv("mongodb_minpoolsize", "25"));
public static skip_history_collections: string = Config.getEnv("skip_history_collections", "");
public static history_delta_count: number = parseInt(Config.getEnv("history_delta_count", "1000"));
public static allow_skiphistory: boolean = Config.parseBoolean(Config.getEnv("allow_skiphistory", "true"));
public static saml_issuer: string = Config.getEnv("saml_issuer", "the-issuer"); // define uri of STS, also sent to personal nodereds
public static aes_secret: string = Config.getEnv("aes_secret", "");
public static signing_crt: string = Config.getEnv("signing_crt", "");
public static singing_key: string = Config.getEnv("singing_key", "");
public static shorttoken_expires_in: string = Config.getEnv("shorttoken_expires_in", "5m");
public static longtoken_expires_in: string = Config.getEnv("longtoken_expires_in", "365d");
public static downloadtoken_expires_in: string = Config.getEnv("downloadtoken_expires_in", "15m");
public static personalnoderedtoken_expires_in: string = Config.getEnv("personalnoderedtoken_expires_in", "365d");
// public static nodered_image: string = Config.getEnv("nodered_image", "openiap/nodered");
public static nodered_images: NoderedImage[] = JSON.parse(Config.getEnv("nodered_images", "[{\"name\":\"Latest Plain Nodered\", \"image\":\"openiap/nodered\"}]"));
public static saml_federation_metadata: string = Config.getEnv("saml_federation_metadata", "");
public static api_ws_url: string = Config.getEnv("api_ws_url", "");
public static nodered_ws_url: string = Config.getEnv("nodered_ws_url", "");
public static nodered_saml_entrypoint: string = Config.getEnv("nodered_saml_entrypoint", "");
public static nodered_docker_entrypoints: string = Config.getEnv("nodered_docker_entrypoints", "web");
public static nodered_docker_certresolver: string = Config.getEnv("nodered_docker_certresolver", "");
public static namespace: string = Config.getEnv("namespace", ""); // also sent to website
public static nodered_domain_schema: string = Config.getEnv("nodered_domain_schema", ""); // also sent to website
public static nodered_initial_liveness_delay: number = parseInt(Config.getEnv("nodered_initial_liveness_delay", "60"));
public static nodered_allow_nodeselector: boolean = Config.parseBoolean(Config.getEnv("nodered_allow_nodeselector", "false"));
public static nodered_requests_memory: string = Config.getEnv("nodered_requests_memory", "");
public static nodered_requests_cpu: string = Config.getEnv("nodered_requests_cpu", ""); // 1000m = 1vCPU
public static nodered_limits_memory: string = Config.getEnv("nodered_limits_memory", "");
public static nodered_limits_cpu: string = Config.getEnv("nodered_limits_cpu", ""); // 1000m = 1vCPU
public static nodered_liveness_failurethreshold: number = parseInt(Config.getEnv("nodered_liveness_failurethreshold", "5"));
public static nodered_liveness_timeoutseconds: number = parseInt(Config.getEnv("nodered_liveness_timeoutseconds", "5"));
public static noderedcatalogues: string = Config.getEnv("noderedcatalogues", "");
public static prometheus_measure_nodeid: boolean = Config.parseBoolean(Config.getEnv("prometheus_measure_nodeid", "false"));
public static prometheus_measure_queued_messages: boolean = Config.parseBoolean(Config.getEnv("prometheus_measure_queued_messages", "false"));
public static prometheus_measure__mongodb_watch: boolean = Config.parseBoolean(Config.getEnv("prometheus_measure__mongodb_watch", "false"));
public static prometheus_measure_onlineuser: boolean = Config.parseBoolean(Config.getEnv("prometheus_measure_onlineuser", "false"));
public static enable_analytics: boolean = Config.parseBoolean(Config.getEnv("enable_analytics", "true"));
public static otel_debug_log: boolean = Config.parseBoolean(Config.getEnv("otel_debug_log", "false"));
public static otel_warn_log: boolean = Config.parseBoolean(Config.getEnv("otel_warn_log", "false"));
public static otel_err_log: boolean = Config.parseBoolean(Config.getEnv("otel_err_log", "false"));
public static otel_trace_url: string = Config.getEnv("otel_trace_url", "");
public static otel_metric_url: string = Config.getEnv("otel_metric_url", "");
public static otel_trace_interval: number = parseInt(Config.getEnv("otel_trace_interval", "5000"));
public static otel_metric_interval: number = parseInt(Config.getEnv("otel_metric_interval", "5000"));
public static otel_trace_pingclients: boolean = Config.parseBoolean(Config.getEnv("otel_trace_pingclients", "false"));
public static otel_trace_dashboardauth: boolean = Config.parseBoolean(Config.getEnv("otel_trace_dashboardauth", "false"));
public static otel_trace_include_query: boolean = Config.parseBoolean(Config.getEnv("otel_trace_include_query", "false"));
public static otel_trace_connection_ips: boolean = Config.parseBoolean(Config.getEnv("otel_trace_connection_ips", "false"));
public static validate_user_form: string = Config.getEnv("validate_user_form", "");
public static baseurl(): string {
let result: string = "";
if (Config.tls_crt != '' && Config.tls_key != '') {
result = "https://" + Config.domain;
} else {
result = Config.protocol + "://" + Config.domain;
}
if (Config.port != 80 && Config.port != 443 && Config.port != 3000) {
result = result + ":" + Config.port + "/";
} else { result = result + "/"; }
return result;
}
public static basewsurl(): string {
let result: string = "";
if (Config.tls_crt != '' && Config.tls_key != '') {
result = "wss://" + Config.domain;
} else if (Config.protocol == "http") {
result = "ws://" + Config.domain;
} else {
result = "wss://" + Config.domain;
}
if (Config.port != 80 && Config.port != 443 && Config.port != 3000) {
result = result + ":" + Config.port + "/";
} else { result = result + "/"; }
return result;
}
public static getEnv(name: string, defaultvalue: string): string {
let value: any = process.env[name];
if (!value || value === "") { value = defaultvalue; }
return value;
}
public static async parse_federation_metadata(url: string): Promise<any> {
// if anything throws, we retry
return promiseRetry(async () => {
const reader: any = await fetch({ url });
if (NoderedUtil.IsNullUndefinded(reader)) { throw new Error("Failed getting result"); }
const config: any = toPassportConfig(reader);
// we need this, for Office 365 :-/
if (reader.signingCerts && reader.signingCerts.length > 1) {
config.cert = reader.signingCerts;
}
return config;
}, 10, 1000);
}
public static parseArray(s: string): string[] {
let arr = s.split(",");
arr = arr.map(p => p.trim());
arr = arr.filter(result => (result.trim() !== ""));
return arr;
}
public static parseBoolean(s: any): boolean {
let val: string;
if (typeof s === "number") {
val = s.toString();
} else if (typeof s === "string") {
val = s.toLowerCase().trim();
} else if (typeof s === "boolean") {
val = s.toString();
} else {
throw new Error("Unknown type!");
}
switch (val) {
case "true": case "yes": case "1": return true;
case "false": case "no": case "0": case null: return false;
default: return Boolean(s);
}
}
}
export class NoderedImage {
public name: string;
public image: string;
}