Skip to content

Commit cda04a7

Browse files
committed
update tests
1 parent a5121f9 commit cda04a7

11 files changed

Lines changed: 170 additions & 67 deletions

test/Audit.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import { Auth } from '../OpenFlow/src/Auth';
2929
async after() {
3030
await Config.db.shutdown();
3131
await Logger.otel.shutdown();
32-
Auth.shutdown();
3332
// wtf.dump()
3433
}
3534
@test async 'reload'() {

test/Auth.test.ts

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { NoderedUtil, SigninMessage } from '@openiap/openflow-api';
2222
async after() {
2323
await Config.db.shutdown();
2424
await Logger.otel.shutdown();
25-
Auth.shutdown();
2625
}
2726
@test async 'ValidateByPassword'() {
2827
await assert.rejects(async () => {
@@ -37,35 +36,6 @@ import { NoderedUtil, SigninMessage } from '@openiap/openflow-api';
3736
var user2 = await Auth.ValidateByPassword("testuser", "not-my-password", null);
3837
assert.strictEqual(user2, null, "Did not fail on wrong password")
3938
}
40-
@test async 'getUser'() {
41-
var user = await Auth.ValidateByPassword("testuser", "testuser", null);
42-
await Auth.AddUser(user, user._id, "grafana");
43-
await Auth.AddUser(user, user._id, "dashboard");
44-
await Auth.AddUser(user, user._id, "cleanacl");
45-
46-
var grafanauser = Auth.getUser(user._id, "grafana");
47-
assert.notStrictEqual(grafanauser, null, "Failed getting user from grafana cache")
48-
var dashboarduser = Auth.getUser(user._id, "dashboard");
49-
assert.notStrictEqual(dashboarduser, null, "Failed getting user from dashboard cache")
50-
51-
await Auth.RemoveUser(dashboarduser._id, "dashboard");
52-
dashboarduser = Auth.getUser(dashboarduser._id, "dashboard");
53-
assert.strictEqual(dashboarduser, null, "Failed removing user from dashboard cache")
54-
55-
var cleanacluser = Auth.getUser(user._id, "cleanacl");
56-
assert.notStrictEqual(cleanacluser, null, "Failed getting user from cleanacl cache")
57-
58-
Config.grafana_credential_cache_seconds = 0;
59-
// await new Promise(resolve => { setTimeout(resolve, 1500) })
60-
var grafanauser = await Auth.getUser(user._id, "grafana");
61-
assert.strictEqual(grafanauser, null, "Failed expiering user from grafana cache")
62-
63-
Config.api_credential_cache_seconds = 0;
64-
Config.grafana_credential_cache_seconds = 0;
65-
Config.dashboard_credential_cache_seconds = 0;
66-
Config.cleanacl_credential_cache_seconds = 0;
67-
Auth.cleanCache();
68-
}
6939
@test async 'test full login'() {
7040
var q: any = new SigninMessage();
7141
var msg = new Message();
@@ -78,14 +48,5 @@ import { NoderedUtil, SigninMessage } from '@openiap/openflow-api';
7848
assert.strictEqual(q.user.username, "testuser", "Sigin did not return testuser user object")
7949

8050
}
81-
@test async 'semaphore'() {
82-
setTimeout(async () => {
83-
await Auth.semaphore.up();
84-
}, 500);
85-
await Auth.semaphore.down();
86-
await Auth.semaphore.down();
87-
await Auth.semaphore.up();
88-
}
89-
9051
}
9152
// cls | ./node_modules/.bin/_mocha 'test/**/Auth.test.ts'

test/Config.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { Auth } from '../OpenFlow/src/Auth';
2121
async after() {
2222
await Config.db.shutdown();
2323
await Logger.otel.shutdown();
24-
Auth.shutdown();
2524
}
2625
@test 'reload'() {
2726
Config.reload();

test/Crypt.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { DBHelper } from '../OpenFlow/src/DBHelper';
2424
async after() {
2525
await Config.db.shutdown();
2626
await Logger.otel.shutdown();
27-
Auth.shutdown();
2827
}
2928
@timeout(10000)
3029
@test async 'ValidatePassword'() {

test/DBHelper.test.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { DatabaseConnection } from '../OpenFlow/src/DatabaseConnection';
77
import assert = require('assert');
88
import { Logger } from '../OpenFlow/src/Logger';
99
import { NoderedUtil, TokenUser, User, WellknownIds } from '@openiap/openflow-api';
10-
import { Auth } from '../OpenFlow/src/Auth';
1110
import { Crypt } from '../OpenFlow/src/Crypt';
1211
import { DBHelper } from '../OpenFlow/src/DBHelper';
1312

@@ -29,7 +28,6 @@ import { DBHelper } from '../OpenFlow/src/DBHelper';
2928
async after() {
3029
await Config.db.shutdown();
3130
await Logger.otel.shutdown();
32-
Auth.shutdown();
3331
}
3432
@test async 'FindByUsername'() {
3533
var user = await DBHelper.FindByUsername("testuser", this.rootToken, null);
@@ -83,15 +81,16 @@ import { DBHelper } from '../OpenFlow/src/DBHelper';
8381
assert.notStrictEqual(role, null, "Failed locating role users")
8482
}
8583
@test async 'FindRoleByNameOrId'() {
86-
var role = await DBHelper.FindRoleByNameOrId(this.testUser.username, null, null);
84+
var role = await DBHelper.FindRoleByName(this.testUser.username, null);
8785
assert.strictEqual(role, null, "returned something with illegal name")
88-
role = await DBHelper.FindRoleByNameOrId(null, this.testUser._id, null);
86+
role = await DBHelper.FindRoleById(this.testUser._id, null, null);
8987
assert.strictEqual(role, null, "returned something with illegal id")
90-
role = await DBHelper.FindRoleByNameOrId("users", null, null);
88+
role = await DBHelper.FindRoleByName("users", null);
9189
assert.notStrictEqual(role, null, "Failed locating role users")
92-
role = await DBHelper.FindRoleByNameOrId(null, WellknownIds.users, null);
90+
role = await DBHelper.FindRoleById(WellknownIds.users, null, null);
9391
assert.notStrictEqual(role, null, "Failed locating role users")
94-
await assert.rejects(DBHelper.FindRoleByNameOrId(null, null, null));
92+
await assert.rejects(DBHelper.FindRoleByName(null, null));
93+
await assert.rejects(DBHelper.FindRoleById(null, null, null));
9594
}
9695
@timeout(5000)
9796
@test async 'EnsureUser'() {

test/DatabaseConnection.test.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,12 @@ import { Crypt } from '../OpenFlow/src/Crypt';
2929
async after() {
3030
await Config.db.shutdown();
3131
await Logger.otel.shutdown();
32-
Auth.shutdown();
3332
}
3433
@test async 'dbconstructor'() {
3534
var db = new DatabaseConnection(Config.mongodb_url, Config.mongodb_db, false);
3635
await db.connect(null);
3736
db.shutdown();
3837
}
39-
@test async 'semaphore'() {
40-
setTimeout(async () => {
41-
await DatabaseConnection.semaphore.up();
42-
}, 500);
43-
await DatabaseConnection.semaphore.down();
44-
await DatabaseConnection.semaphore.down();
45-
await DatabaseConnection.semaphore.up();
46-
}
4738
@test async 'ListCollections'() {
4839
var rootcollections = await Config.db.ListCollections(this.rootToken);
4940
rootcollections = rootcollections.filter(x => x.name.indexOf("system.") === -1);

test/KubeUtil.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import { Config } from "../OpenFlow/src/Config";
66
import { DatabaseConnection } from '../OpenFlow/src/DatabaseConnection';
77
import assert = require('assert');
88
import { Logger } from '../OpenFlow/src/Logger';
9-
import { KubeUtil } from '../OpenFlow/src/KubeUtil';
10-
import { Auth } from '../OpenFlow/src/Auth';
9+
import { KubeUtil } from '../OpenFlow/src/ee/KubeUtil';
1110

1211
@suite class kubeutil_test {
1312
@timeout(10000)
@@ -21,7 +20,6 @@ import { Auth } from '../OpenFlow/src/Auth';
2120
async after() {
2221
await Config.db.shutdown();
2322
await Logger.otel.shutdown();
24-
Auth.shutdown();
2523
}
2624
@test async 'GetStatefulSet'() {
2725
var sfs = await KubeUtil.instance().GetStatefulSet(Config.namespace, "findme");

test/Logger.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { DatabaseConnection } from '../OpenFlow/src/DatabaseConnection';
77
import assert = require('assert');
88
import { Logger } from '../OpenFlow/src/Logger';
99
import { NoderedUtil } from '@openiap/openflow-api';
10-
import { license_data } from '../OpenFlow/src/otelspec';
1110
import { Auth } from '../OpenFlow/src/Auth';
11+
import { i_license_data } from '../OpenFlow/src/commoninterfaces';
1212

1313
@suite class logger_test {
1414
@timeout(10000)
@@ -23,7 +23,6 @@ import { Auth } from '../OpenFlow/src/Auth';
2323
await Config.db.shutdown();
2424
await Logger.otel.shutdown();
2525
Logger.License.shutdown();
26-
Auth.shutdown();
2726
}
2827
@test async 'test info'() {
2928
assert.ok(!NoderedUtil.IsNullUndefinded(Logger.myFormat), "Logger missing winston error formatter");
@@ -32,7 +31,7 @@ import { Auth } from '../OpenFlow/src/Auth';
3231
}
3332
@test async 'v1_lic'() {
3433
const months: number = 1;
35-
const data: license_data = {} as any;
34+
const data: i_license_data = {} as any;
3635
let template = Logger.License.template_v1;
3736
data.licenseVersion = 1;
3837
data.email = "test@user.com";
@@ -52,7 +51,7 @@ import { Auth } from '../OpenFlow/src/Auth';
5251
}
5352
@test async 'v2_lic'() {
5453
const months: number = 1;
55-
const data: license_data = {} as any;
54+
const data: i_license_data = {} as any;
5655
let template = Logger.License.template_v2;
5756
let ofid = Logger.License.ofid(false);
5857
assert.ok(!NoderedUtil.IsNullEmpty(ofid));

test/Message.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import { DBHelper } from '../OpenFlow/src/DBHelper';
3131
await Config.db.shutdown();
3232
await Logger.otel.shutdown();
3333
Logger.License.shutdown();
34-
Auth.shutdown();
3534
}
3635
@test async 'Unselect customer as root'() {
3736
var q = new SelectCustomerMessage();

test/docker-compose-traefik.yml

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
version: "3.3"
2+
services:
3+
mongodb:
4+
image: "mongo"
5+
# if you get MongoDB 5.0+ require a CPU with AVX support, then try using version 4 instead
6+
# image: "mongo:4.4.8"
7+
restart: always
8+
volumes:
9+
- mongodb_data:/data/db
10+
# mongoexpress:
11+
# labels:
12+
# - "traefik.enable=true"
13+
# - "traefik.http.routers.mongoexpress.rule=Host(`express.localhost.openiap.io`)"
14+
# - "traefik.http.routers.mongoexpress.entrypoints=web"
15+
# - "traefik.http.services.mongoexpress.loadbalancer.server.port=8081"
16+
# image: "mongo-express"
17+
# environment:
18+
# - ME_CONFIG_MONGODB_SERVER=mongodb
19+
traefik:
20+
image: "traefik"
21+
container_name: "traefik"
22+
command:
23+
- "--api.insecure=true"
24+
- "--providers.docker=true"
25+
- "--providers.docker.exposedbydefault=false"
26+
- "--entrypoints.web.address=:80"
27+
ports:
28+
- "80:80"
29+
volumes:
30+
- "//var/run/docker.sock:/var/run/docker.sock:ro"
31+
rabbitmq:
32+
labels:
33+
- "traefik.enable=true"
34+
- "traefik.http.routers.rabbitmq.rule=Host(`mq.localhost.openiap.io`)"
35+
- "traefik.http.routers.rabbitmq.entrypoints=web"
36+
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
37+
image: "rabbitmq:3-management"
38+
container_name: "rabbitmq"
39+
restart: always
40+
# rediscommander:
41+
# labels:
42+
# - "traefik.enable=true"
43+
# - "traefik.http.routers.rediscommander.rule=Host(`redis.localhost.openiap.io`)"
44+
# - "traefik.http.routers.rediscommander.entrypoints=web"
45+
# - "traefik.http.services.rediscommander.loadbalancer.server.port=8081"
46+
# image: rediscommander/redis-commander:latest
47+
# restart: always
48+
# depends_on:
49+
# - redis
50+
# environment:
51+
# - REDIS_HOST=redis
52+
# - REDIS_PORT=6379
53+
# - REDIS_PASSWORD=pass!word2
54+
# redis:
55+
# image: redis
56+
# command: >
57+
# --requirepass pass!word2
58+
api:
59+
labels:
60+
- "traefik.enable=true"
61+
- "traefik.http.routers.api.rule=Host(`localhost.openiap.io`)"
62+
- "traefik.http.routers.api.entrypoints=web"
63+
- "traefik.http.services.api.loadbalancer.server.port=3000"
64+
- "traefik.frontend.passHostHeader=true"
65+
image: "openiap/openflow:edge"
66+
deploy:
67+
replicas: 1
68+
pull_policy: always
69+
restart: always
70+
volumes:
71+
- "//var/run/docker.sock:/var/run/docker.sock"
72+
depends_on:
73+
- rabbitmq
74+
- mongodb
75+
environment:
76+
- update_acl_based_on_groups=true
77+
- multi_tenant=false
78+
- auto_create_users=true
79+
- auto_create_domains=
80+
- allow_personal_nodered=true
81+
- auto_create_personal_nodered_group=false
82+
- tls_crt=
83+
- tls_key=
84+
- tls_ca=
85+
- tls_passphrase=
86+
- api_bypass_perm_check=false
87+
- websocket_package_size=25000
88+
- websocket_max_package_count=1048576
89+
- protocol=http
90+
- port=3000
91+
- domain=localhost.openiap.io
92+
93+
- HTTP_PROXY=
94+
- HTTPS_PROXY=
95+
- NO_PROXY=
96+
97+
- enable_openflow_amqp=false # enable this to use the openflow amqp, only usefull when you have more than one replicas
98+
- amqp_prefetch=25
99+
- socket_rate_limit=true
100+
- socket_rate_limit_points=1000
101+
- socket_rate_limit_points_disconnect=2500
102+
103+
- nodered_images=[{"name":"Latest Plain Nodered",
104+
"image":"openiap/nodered:edge"},{"name":"Latest Puppeteer Nodered",
105+
"image":"openiap/nodered-puppeteer"},{"name":"Latest TagUI Nodered",
106+
"image":"openiap/nodered-tagui"}]
107+
- nodered_ws_url=ws://api:3000
108+
- saml_federation_metadata=http://api:3000/issue/FederationMetadata/2007-06/FederationMetadata.xml
109+
- nodered_saml_entrypoint=http://localhost.openiap.io/issue
110+
- amqp_url=amqp://guest:guest@rabbitmq
111+
- mongodb_url=mongodb://mongodb:27017
112+
- mongodb_db=openrpa
113+
114+
- skip_history_collections=audit,openrpa_instances,workflow_instances
115+
- allow_skiphistory=false
116+
117+
- saml_issuer=uri:localhost.openiap.io
118+
- aes_secret=7TXsxf7cn9EkUqm5h4MEWGjzkxkNCk2K
119+
- signing_crt=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURZRENDQWtpZ0F3SUJBZ0lKQUsrSll6OGQ1bURxTUEwR0NTcUdTSWIzRFFFQkN3VUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVGt3TnpFd01UZ3dPVEl4V2hjTk1Ua3dPREE1TVRnd09USXhXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTZrcEo4eHFUUU9pRzVmTUt4T1U5VzZDbVVSSWJnb2ZoSHZwVVZWVDBoMnRsakFsc2Z2cWRzSk5MClZBd3dySW55V2ZNYlVHZGE3M21MTG9XdEM0L3RYUlNEQktnK2J6MXhRSHNzcjVaMmVueDhYdGtRSDVHZ1crOVQKajdhbVNZL0l0SUFiME5qL1NRaVozK0JPN0tpeTJpMWFVdlJBeVp5UVpVcyt1aWlIRkNJekhBbXltV0ovNXdrdwptb2ZUYjUxWWlqZ2xiaGdZVllUcXdVdmpscEIvbWFnWjV3VENuOWpmbG16bGY1aSs5aTAxSHU1U1RXNW9JSnovCm9oQ25Mam4wM2c4NXA5dllFaTJLUkM2dW84Nnp5Y1pxL1lKQzVNTlVPTzZRanlZYXQ4RjBYWVVQNzhzS1l2OCsKYTF3WmlDNFZhSWt2OEFaOUJua0hFbllBRnhpZ2RRSURBUUFCbzFNd1VUQWRCZ05WSFE0RUZnUVVsenEzdDBOWQowckpwSmpIMXRoQitlV0M2SGJZd0h3WURWUjBqQkJnd0ZvQVVsenEzdDBOWTBySnBKakgxdGhCK2VXQzZIYll3CkR3WURWUjBUQVFIL0JBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW8rOHJDVllXOFc5UzZxUDQKdzVoSEMyTk5WMGJIVmgyQ3FZbmp3RXVTTjM4NWgvUWd3TmlIZE5NQzJXUHd4VytwSmZ4Q0Y1ZGZOMzUrZ085YworOTg1UHYzYVoyZ3BmcWVaRTFKZ2JqUTFiTkVWT3BqRDV0dVlNRE55YWpraS9oWVdDaVBSams5ZG1nQVV4cHdpCkZuTUdlemk4K080dXQyRW1DaHhUYlZUQ1psRnJwRWpqSTF1WUVmQ2l5NmZaUXV2bnpCeU5QZ3FUQS9RWXhMZkIKRWE4cFpOMk5LNm5IdEF0clhyRkYveFh6OHJRYWlyVFYrVm9yQXQxdzYzZ1VTWGc1VU55R2JZaDErdFRzWTdoYQpNamkwSFNYQkxtL0dHb05XaHBDVVpDVDU0NWJ6SmdJNjJwd2hKcVlyWm5jYlBDRzRaWXhHZzIxTVZLdkJaL29pCkFYcStpQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
120+
- singing_key=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRRHFTa256R3BOQTZJYmwKOHdyRTVUMWJvS1pSRWh1Q2grRWUrbFJWVlBTSGEyV01DV3grK3Ayd2swdFVERENzaWZKWjh4dFFaMXJ2ZVlzdQpoYTBMaisxZEZJTUVxRDV2UFhGQWV5eXZsblo2Zkh4ZTJSQWZrYUJiNzFPUHRxWkpqOGkwZ0J2UTJQOUpDSm5mCjRFN3NxTExhTFZwUzlFREpuSkJsU3o2NktJY1VJak1jQ2JLWlluL25DVENhaDlOdm5WaUtPQ1Z1R0JoVmhPckIKUytPV2tIK1pxQm5uQk1LZjJOK1diT1YvbUw3MkxUVWU3bEpOYm1nZ25QK2lFS2N1T2ZUZUR6bW4yOWdTTFlwRQpMcTZqenJQSnhtcjlna0xrdzFRNDdwQ1BKaHEzd1hSZGhRL3Z5d3BpL3o1clhCbUlMaFZvaVMvd0JuMEdlUWNTCmRnQVhHS0IxQWdNQkFBRUNnZ0VBTXVEZkhrUHZKbkZZbWljbGQ0eXd2bTBzc1A1VnF3c0hBRXNzZFR0MXZ0SzcKd3FWcFFrbjZaSllZRGJCNEFZQVRlU1VxRVZQZ2s1QzVnT2pXbzJRbUQ4aWNpeTVlSUpvZk5mbUp3cmZTRXRkbAp5dE1vaFRLQ3VIUkltVFQ0OTVDWjdWakVzWjN1RWxZajFGSkowV3J4TENBZE5WYUZtMEs4dU1LV1pLYllicTUwCk40SkdBVVA4cXpzVGsxMFcwL1JsVkhjN3MxcVJMYmhUaHVmeWZqdkFsWlRDUStzNld2Z1FzNTljZis5ZkRpenEKeDlFYTRmclN4SkFzdmhEZ3lmd0FCSHVYcEl5ZGFJNEQ1UkZYRXBGQW1SYkZGRkFhNW9Zam5XT1BiQmVKUHJUUApMckxmcU03NkVaZ1pXclU5UmgwN2VXeVMwdlAyVEhmNGo4eTNYWEpFQVFLQmdRRDVyVTFnQlNLdXhxZVZkWFZRCkp1RXVIVnVFTEkzS0hITVRGb1R1cEFKU2R1b3VSMXNmYjZHc1RPQWFmamp6QlpHdFFFa3R4c3pEemFTTVh5OHYKYU5mT1QvcTlZYXFwdSt3cno5dXp4dnBhY1pQZHg3TGJUWGwwYmRKR2FPRHdNYWY3bHRDcmo1WVZ6Vk9GSGsvZgpCYndGV1ZQTUJORldCMEZMZzU1dGN6cjFGUUtCZ1FEd09UdEp2TXNtZVZFVU1aUnFnNjB0U2FyN0pjeHJKRklrCno5ZFdIUW1xS1dpNzFob3krbHBqM0FwRnhBQ3lPY2dmZE03VFQyb25rcXB1c0NUNlliZThXT3BrWWxIMGlpUmQKWkVISC9zakhySzNEaktJWEIvSEVyVEdrOVJNaTdiNUd4NGYweVVkM2hqd0E2Y2dGRDlyd0l6VyszMjM0Z2xlNwphdzlIRFpxVjRRS0JnQVBiOXVjMkRSd3dlK1NtaFNLeEJ5Z0VVaWJQM1gwelJXQVZLQWJjU0NEb0w2UjVlK0lYCmdxTThLUGFmM3RkNnpZNmxBTHlSWnhiYnRlQnBsRHdpWGJ1VnB1V0lmZS9UdE1uVWs2dkt0cEh4VVh6TEdtdWoKWGU0N3lGVklSN25PdXE3NzNNdmFFMUxROHFxTEZtYjNHcm5tY0pJbHZPcWNnQmpmdHZJd0pzZ2xBb0dBU1RtWQoyZlJEbEptOFhrUnlzamtySzdmZDk2cGc4blBpMmpmRXN3b3M3UUtzV3oxN1JQak5YczB2RUc4YnF6Z3p5V3JvCnRMN3JZOTZ3TndkWWJqNGxMTE9KMTBtbEk3Nk1NUytqWVp4SGhaNGNaWlJUd0dONmpmSWhST0F6a2gwWU9Da1EKUjB5bmpVYU11ZGFKVXdtdk9pM3hieHBhUWpzeEZQOGdiQTg0aE9FQ2dZRUExbXZjSStZeDZITW00WkVjMU9yaworNXJoUHJrdGNMT0JHR3pZZGZIZGRZMytVdFZydUpCRmt5R2pCU2t2YmVtcUZxRlluMHFZckpXZVlUS2hMbUlwClkyRk1Gd29abWxpSkpONTA1eStTemdPbUVxN2wzT1Z4R0NwTTd1ODNyWFBXRGRERnc5WVNYVU1ueFRDUGsyRW0KekEyUzVkWjlWRld2NlR6VHg3cTIyc2c9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
121+
122+
# - cache_store_type=redis
123+
# - cache_store_redis_host=redis
124+
# - cache_store_redis_password=pass!word2
125+
volumes:
126+
mongodb_data:
127+
driver: local
128+
129+
# if you don't want to start nodered though powershell or the webinterface, you can hardcode one or more instance here
130+
# You need to pre-create the user .. in this example the user has to have username nodered1
131+
# create a user with no password so the user cannot login, or give it a very long and complex one
132+
# nodered1:
133+
# labels:
134+
# - "traefik.enable=true"
135+
# - "traefik.http.routers.nodered.rule=Host(`nodered1.localhost.openiap.io`)"
136+
# - "traefik.http.routers.nodered.entrypoints=web"
137+
# - "traefik.http.services.nodered.loadbalancer.server.port=1880"
138+
# - "traefik.frontend.passHostHeader=true"
139+
# image: "openiap/nodered"
140+
# container_name: "nodered1"
141+
# depends_on:
142+
# - api
143+
# environment:
144+
# - nodered_sa=nodered1
145+
# - saml_federation_metadata=http://api:3000/issue/FederationMetadata/2007-06/FederationMetadata.xml
146+
# - saml_issuer=uri:localhost.openiap.io
147+
# - saml_entrypoint=http://localhost.openiap.io/issue
148+
# - saml_baseurl=http://nodered1.localhost.openiap.io/
149+
# - port=1880
150+
# - api_ws_url=ws://api:3000
151+
# - api_credential_cache_seconds=300
152+
# - api_allow_anonymous=false
153+
# # this is the "trick" to make the nodered beable to login.
154+
# # this way the nodered can create it's own token. this is VERY INSECURE DO NOT USE THIS ON A PUBLIC installation
155+
# # if you want a more secure way to login, create a jwt token using the nodered cli and set it using - jwt in this file.
156+
# - aes_secret=7TXsxf7cn9EkUqm5h4MEWGjzkxkNCk2K
157+
# - jwt=
158+
# volumes:
159+
# mongodb_data:
160+
# driver: local

0 commit comments

Comments
 (0)