Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach e11dd60714 feat(services): resolve coturn as shared provider and refactor BBB coturn handling
- add coturn enabled+shared → web-svc-coturn service resolution
- refactor BigBlueButton coturn logic to distinguish local vs shared coturn
- introduce BBB_COTURN_LOCAL_ENABLED flag
- split TURN secrets into local and shared variants
- update dependencies, env and compose templates accordingly
- enable shared coturn in BigBlueButton and Nextcloud configs

https://chatgpt.com/share/696d54a1-9dbc-800f-8507-088bad56bc48
2026-01-18 22:46:02 +01:00
kevinveenbirkenbach 9e3f8d3d00 pkgmgr: add retry logic for non-interactive update task
Retry pkgmgr self-update up to 6 times with a 20s delay between attempts
to make the update process more robust against transient network or
Git failures.

https://chatgpt.com/share/696d50ed-d398-800f-b650-b27d105379b0
2026-01-18 22:29:54 +01:00
kevinveenbirkenbach 29f5f4ab63 fix(keycloak): add retry logic to LDAP group sync handler
Retry LDAP roles mapper sync up to 6 times with 20s delay to
avoid race conditions during Keycloak/LDAP startup.

https://chatgpt.com/share/696d500b-18c8-800f-8b0f-c68420a8c418
2026-01-18 22:24:12 +01:00
kevinveenbirkenbach 10d422c75d feat(testing): add generic E2E Cypress runner role with auto-discovery
Introduce reusable test-e2e-cypress role that:
- auto-discovers application roles providing tests/cypress/env.j2
- stages per-role Cypress projects into /tmp
- renders .env from env.j2 with application context
- optionally waits for application readiness (HTTP 200/302)
- runs Cypress in a pinned Docker image with stable browser settings
- collects failures and fails the play at the end
- stores per-role reports and artifacts

Designed as a test-agnostic execution framework.
Each application role owns its Cypress project and specs.

https://chatgpt.com/share/696d4ad5-740c-800f-904d-84c6fff83e3c
2026-01-18 22:04:09 +01:00
kevinveenbirkenbach c4fcd2b634 Added meta data for MariaDB and Postgres 2026-01-18 21:28:03 +01:00
kevinveenbirkenbach 79a1780a89 Removed unnecessary volume definitions 2026-01-18 20:47:22 +01:00
kevinveenbirkenbach 34b94b7059 More explicit overwritting to harden postgres 2026-01-18 20:01:58 +01:00
kevinveenbirkenbach b71a3fa6cd Hopes this solves Ci/CD postgres bug 2026-01-18 19:52:26 +01:00
kevinveenbirkenbach af2cebabec Reduced noisiness 2026-01-18 19:47:49 +01:00
kevinveenbirkenbach d11af01720 fix(oauth2-proxy): make cookie_secure depend on TLS_ENABLED and use managed cookie secret
- Make cookie_secure conditional via TLS_ENABLED to support HTTP setups
- Use managed oauth2_proxy_cookie_secret without implicit generation
- Keep domain and whitelist configuration unchanged

https://chatgpt.com/share/696d22ca-7b68-800f-ba8d-ee9ddaa4cf86
2026-01-18 19:13:10 +01:00
kevinveenbirkenbach 9b87089bb0 Assert application_id integrity in svc-db-postgres init and harden load_app debug output
Add a defensive assertion in svc-db-postgres init to ensure application_id scope
is not polluted by upstream loaders.

Also normalize load_app debug output formatting and add a no-op hardening step
to make variable intent explicit for future scope-guarding refactors.

https://chatgpt.com/share/696ce9ee-68ac-800f-9ea0-d73c285af9a8
2026-01-18 18:20:04 +01:00
kevinveenbirkenbach 6767fb0960 Optimized configuration path 2026-01-18 18:02:50 +01:00
kevinveenbirkenbach 63bf2f7c62 administration: make DB drop best-effort and allow purging postgres/mariadb stacks safely
- Add best-effort helpers for Postgres and MariaDB database drops
- Avoid connecting to the target DB when dropping Postgres (use template1 for 'postgres')
- Ignore DB drop errors and continue with purge (compose down + rm -rf)
- Protect MariaDB system databases from being dropped
- Update script header to reflect best-effort behavior
2026-01-18 17:46:46 +01:00
kevinveenbirkenbach 8b0e167b36 make: forward Ctrl+C into container during test-local-rapid
Use `docker exec -it` and `exec infinito ...` so SIGINT (Ctrl+C) is properly
forwarded to the running deploy process inside the container.

https://chatgpt.com/share/696d0cf9-66f4-800f-998a-b3871d035a27
2026-01-18 17:40:15 +01:00
kevinveenbirkenbach 88fea04033 keycloak: enable periodic ldap user sync via configurable sync periods
Add configurable LDAP sync periods to the Keycloak role and wire them into
the LDAP UserStorageProvider component.

This enables automatic changed-user sync every 15 minutes and a full sync
once per day via:
  docker.services.ldap.sync.period.changes
  docker.services.ldap.sync.period.full

Defaults can now be centrally managed via application config.

https://chatgpt.com/share/696d02b4-1418-800f-8fe5-864f4e7494e8
2026-01-18 17:09:34 +01:00
kevinveenbirkenbach 48d5390264 keycloak: fix ldap group mapper parent and sync groups via handler
Ensure the ldap-roles group mapper always uses the correct parent group id
by injecting groups.path.group based on the actual Keycloak group.

Trigger LDAP → Keycloak group synchronization via a handler whenever the
mapper configuration changes, ensuring deterministic and reproducible
group imports under /roles.

https://chatgpt.com/share/696d02b4-1418-800f-8fe5-864f4e7494e8
2026-01-18 16:56:26 +01:00
kevinveenbirkenbach 0d8bf44c01 scripts/administration: add purge_entity helper to remove stacks + optional DB drop
- Support purging multiple stacks in one run
- Best-effort detect postgres/mariadb from .env and drop DB if found
- Always run compose down and delete /opt/docker/<stack>/volumes + stack dir
- Skip DB drop with warning when no backend is detected

https://chatgpt.com/share/696cfcd5-2b84-800f-a386-b7d1d38d68b7
2026-01-18 16:31:25 +01:00
kevinveenbirkenbach 7c10cb6fe5 fix(openldap,keycloak): allow user binds and enable LDAP debug logging
- allow simple bind for normal LDAP users (userPassword access rules)
- relax generic read access for directory browsing
- enable Keycloak LDAP and LDAPSDK debug logging
- normalize database config formatting

https://chatgpt.com/share/696cefa5-e308-800f-aef6-fc71cc9a811e
2026-01-18 15:35:10 +01:00
kevinveenbirkenbach bf1b12a489 fix(postgres): bind exposed port to docker bind host instead of localhost
Expose Postgres via DOCKER_BIND_HOST instead of POSTGRES_LOCAL_HOST to ensure
the port is reachable from the infinito container when running Docker-in-Docker
in CI/CD environments.

This avoids binding the published port to the container loopback interface
(127.0.0.1), which is not reachable from sibling containers.

https://chatgpt.com/share/696ce9ee-68ac-800f-9ea0-d73c285af9a8
2026-01-18 15:10:30 +01:00
kevinveenbirkenbach 39fc7b8a1a Added missing debugging flag 2026-01-18 14:24:12 +01:00
kevinveenbirkenbach 0f3364f18c sys-stk-backend: add debug context and extract service enable flags into vars
- add optional debug output for application context
- extract database and oauth2 enable checks into role vars
- use normalized flags in task conditions
- fix typo in load_app task log message

https://chatgpt.com/share/696cbc91-cef8-800f-acfd-9cef34e28b0b
2026-01-18 11:56:56 +01:00
kevinveenbirkenbach 7a1fb02554 test(cli): add unit tests for combined + services resolution (services edges, desktop, cycles)
- add role_config_path support and services edges in combined resolver/tree
- add services resolver mapping with desktop enabled rule (non-shared)
- add unittest coverage for repo_paths, yaml parsing, services mapping/BFS, and combined tree cycles
- update tests to reflect new stable path expectations and tree output

https://chatgpt.com/share/696cb80f-e8f4-800f-b062-e47985b4b074
2026-01-18 11:37:41 +01:00
kevinveenbirkenbach cf216014e3 refactor(cli): introduce combined role resolution and reorganize meta resolvers
- add cli.meta.applications.resolution.combined to resolve run_after + app-only dependencies
- add optional --tree output for combined resolution
- add cli.meta.applications.resolution.dependencies (app-only) resolver
- move run_after resolver to cli.meta.applications.resolution.run_after
- update test deploy dependency resolver to use combined module
- add unit tests for combined/dependencies/run_after resolvers
- minor cleanup: remove stray header comment, fix newline in vars, tidy YAML formatting

https://chatgpt.com/share/696ca531-9644-800f-98c0-bae58c0aff41
2026-01-18 10:17:26 +01:00
kevinveenbirkenbach 149c044e4f Removed logging - Outer commands take care of it 2026-01-18 09:05:20 +01:00
kevinveenbirkenbach df31230871 diff --git a/scripts/tests/deploy-local-full.sh b/scripts/tests/deploy-local-full.sh
index 9bcfc96c8..2c5b6d930 100755
--- a/scripts/tests/deploy-local-full.sh
+++ b/scripts/tests/deploy-local-full.sh
@@ -66,54 +66,53 @@ echo
 # ---------------------------------------------------------------------------
 # 2) Run entry.sh + create inventory + deploy INSIDE container
 # ---------------------------------------------------------------------------
-docker exec -t "${INFINITO_CONTAINER}" bash -lc "
+docker exec -t "${INFINITO_CONTAINER}" bash -lc '
   set -euo pipefail
   cd /opt/src/infinito

-  echo '>>> Running entry.sh bootstrap'
+  echo ">>> Running entry.sh bootstrap"
   ./scripts/docker/entry.sh true

-  inv_dir='${INVENTORY_BASE_DIR}/local-full-${TEST_DEPLOY_TYPE}'
-  inv_file=\"\${inv_dir}/servers.yml\"
-  pw_file=\"\${inv_dir}/.password\"
+  inv_dir="'"${INVENTORY_BASE_DIR}"'/local-full-'"${TEST_DEPLOY_TYPE}"'"
+  inv_file="${inv_dir}/servers.yml"
+  pw_file="${inv_dir}/.password"

-  mkdir -p \"\${inv_dir}\"
+  mkdir -p "${inv_dir}"

-  if [[ ! -f \"\${pw_file}\" ]]; then
-    printf '%s\n' 'local-vault-password' > \"\${pw_file}\"
-    chmod 600 \"\${pw_file}\" || true
+  if [[ ! -f "${pw_file}" ]]; then
+    printf "%s\n" "local-vault-password" > "${pw_file}"
+    chmod 600 "${pw_file}" || true
   fi

-  echo '>>> Creating inventory at' \"\${inv_file}\"
-  echo '>>> Include apps count: ${apps_count}'
-  # Avoid printing the full CSV (it is huge); show first few instead:
-  echo '>>> Include sample:' \"\$(python3 - <<'PY'
-import sys
fix(tests): stabilize deploy-local-full.sh quoting and sample generation

- Fix broken heredoc usage inside docker exec bash -lc block
- Prevent apps CSV from being interpreted as a shell command
- Make sample generation robust using python -c
- Ensure --include argument is expanded correctly
- Improve errexit reliability by avoiding command substitution inside echo
- Normalize quoting for host/container variable expansion

https://chatgpt.com/share/696c928c-38a4-800f-a45b-d5f3bba908ff
2026-01-18 08:57:59 +01:00
kevinveenbirkenbach 93114e18d5 Removed outer condition in block which gets inhired by included roles and implemented faster fail for mail health checkl 2026-01-18 01:30:09 +01:00
kevinveenbirkenbach 66aec3b577 refactor(docker-compose): generate volumes via compose_volumes filter
Replace legacy volumes*.yml.j2 includes with the new compose_volumes filter across roles.
Add YAML-safe serialization for Ansible/Jinja proxy types to avoid PyYAML representer errors.
Remove obsolete volumes templates and extend unit tests to enforce required database_volume behavior.

https://chatgpt.com/share/696c2722-fd30-800f-bf01-dfcd3cb7ba72
2026-01-18 01:19:31 +01:00
kevinveenbirkenbach 8059f51e33 feat(filter): add compose_volumes helper to replace volumes.yml.j2 logic
- Add compose_volumes filter to generate docker-compose volumes section dynamically
- Preserve exact logic from roles/docker-compose/templates/volumes.yml.j2
  - database volume only when database service enabled and not shared
  - redis volume when redis service enabled or oauth2 enabled
  - no fallback names, database_volume is required when database is needed
- Support manual volume injection via extra_volumes (YAML merge equivalent)
- Add strict input validation for applications and application_id
- Add full unit test coverage for all conditions and edge cases

https://chatgpt.com/share/696c1710-04c4-800f-a73f-de3d5ebd2902
2026-01-18 00:11:07 +01:00
kevinveenbirkenbach 95e3823d2f refactor: centralize token store init and allow Mailu 301 status checks
- move sys-token-store initialization to constructor stage
- remove duplicate token store includes from frontend and app roles
- allow Mailu reachability check to accept configurable status codes (200, 301)
- make Mailu health check consistent with web-app-mailu config
- increase test-local-rapid verbosity for better diagnostics

https://chatgpt.com/share/696c0f49-7888-800f-8175-fb21893c0d67
2026-01-17 23:37:54 +01:00
kevinveenbirkenbach 88126bf74f fix(ansible): avoid loop variable collision in docker-compose service includes
Use a dedicated loop_var (service_role) when including backup, repair and
health roles to prevent variable shadowing and Ansible loop warnings.

https://chatgpt.com/share/696c0c9b-8944-800f-b293-48365b364205
2026-01-17 23:26:19 +01:00
kevinveenbirkenbach 1c3b20cbad **svc-db-openldap: preload memberof/refint modules during bootstrap**
Load `memberof` and `refint` in `slapd.conf` before generating `cn=config` via `slaptest`, so the `memberOf` attribute is known and user entry updates no longer fail with “entry update failed”.

https://chatgpt.com/share/696be95b-68cc-800f-a883-fe2755a0a6cc
2026-01-17 20:55:57 +01:00
kevinveenbirkenbach 750da97cc6 vars:
MAILU_DOCKER_DIR:    "{{ docker_compose.directories.instance }}"
  mailu_api_base_url:  "http://127.0.0.1:8080/api/v1"
  mailu_action: >-
    {{
      ('administrator' in (user_item.value.get('roles', [])))
      | ternary('admin','user')
    }}
  mailu_user_key:      "{{ user_item.key }}"
  mailu_user_name:     "{{ user_item.value.username }}"
  mailu_password:      "{{ user_item.value.password }}"
  mailu_token_ip:      "{{ user_item.value.ip | default(networks.internet.ip4) }}"
  mailu_token_name:    "{{ SOFTWARE_NAME ~ ' Token for ' ~ user_item.value.username }}"
  mailu_user_roles:    "{{ user_item.value.roles | default([]) }}"
loop: "{{ users | dict2items }}"
loop_control:
  loop_var: user_item

https://chatgpt.com/share/696be309-fb4c-800f-8f28-de22276d2f53
2026-01-17 20:28:46 +01:00
kevinveenbirkenbach fa422ed7fe cli: allow comma-separated application IDs for --id flag
- Support space-separated, comma-separated and mixed --id values
- Normalize and deduplicate application IDs before validation
- Fix Makefile to pass APP without quoting
- Add unittest coverage for ID normalization

https://chatgpt.com/share/696be0c2-816c-800f-8b07-3c5cd0304ac5
2026-01-17 20:19:13 +01:00
kevinveenbirkenbach d3ad661b5e fix(user): avoid loop variable collision in dotfile deployment
https://chatgpt.com/share/696bd6d9-edd8-800f-aa9d-774367559b4e
2026-01-17 19:37:05 +01:00
kevinveenbirkenbach 7d41e616a7 fix(sys-stk-backend): remove templated domain from oauth2-proxy task name
https://chatgpt.com/share/696bd66a-117c-800f-a077-9f2a1efa8042
2026-01-17 19:35:17 +01:00
kevinveenbirkenbach 89cc377d38 refactor(rdbms): fix recursive variable resolution by introducing database_consumer_id
- Replace database_application_id with database_consumer_id
- Use explicit consumer context for database resolution
- Fix recursive Jinja variable loop in sys-svc-rdbms
- Decouple discourse database network from global database_type

https://chatgpt.com/share/696bd40d-ebfc-800f-9ba8-1e6be919a629
2026-01-17 19:25:12 +01:00
kevinveenbirkenbach b32336830b Optimized task name 2026-01-17 18:29:49 +01:00
kevinveenbirkenbach c104867735 Changed License to Infinito.Nexus Community License (Non-Commercial) 2026-01-17 18:26:05 +01:00
kevinveenbirkenbach 847bb6b690 Removed badge 2026-01-17 18:11:19 +01:00
kevinveenbirkenbach 8125f3351b Introduced throtteling for LDAP user updates 2026-01-17 18:10:50 +01:00
kevinveenbirkenbach 1ce504020a Fixed falsy comamnd call 2026-01-17 18:09:59 +01:00
kevinveenbirkenbach 5fc951dc88 fix(proxy,keycloak): make X-Forwarded-Ssl conditional and enable proxy headers
- Set X-Forwarded-Ssl dynamically based on TLS_ENABLED
- Enable KC_PROXY_HEADERS=xforwarded for proper reverse proxy support
- Ensure correct protocol handling for HTTP and HTTPS environments

https://chatgpt.com/share/696bbbed-5514-800f-8281-b8485d77cac7
2026-01-17 17:42:14 +01:00
kevinveenbirkenbach 3a7508fbf1 ci: rename make up/down targets to docker-up/docker-down in workflows and Makefile
Replaced all usages of `make up` with `make docker-up` in GitHub Actions workflows.
Renamed Makefile targets:
- up      -> docker-up
- down    -> docker-down
- stop    -> docker-stop
- added docker-restart

This makes the Docker-specific intent explicit and avoids ambiguity with other potential `up` targets.

https://chatgpt.com/share/696bb966-ee90-800f-a5d2-e419cc423cc4
2026-01-17 17:31:25 +01:00
kevinveenbirkenbach 357a9bda83 fix(users): normalize reserved flag handling and align CLI/tests
- Always emit reserved flag in generated users (default: false)
- Do not override existing user definitions via --reserved-usernames
- Normalize description default to empty string
- Align unit tests with new reserved semantics
- Fix YAML quoting and trailing newline issues
- Clean up minor formatting and config inconsistencies

https://chatgpt.com/share/696bb761-0048-800f-9cf7-aebd3fda75be
2026-01-17 17:22:50 +01:00
kevinveenbirkenbach 702fb00ed4 General cleanup 2026-01-17 15:03:42 +01:00
kevinveenbirkenbach e4c254ace1 feat(mailu): add retry logic for user creation via flask admin 2026-01-17 14:49:26 +01:00
kevinveenbirkenbach e0d3811c01 Retry 'Change password for user' 2026-01-17 14:41:31 +01:00
kevinveenbirkenbach 3e8556b34c sys-service: normalize flush logic, set default state for local tests, fix LAM CSP flags
- Set SYS_SERVICE_DEFAULT_STATE=started for local rapid tests
- Remove deprecated SYS_SERVICE_SUPPRESS_FLUSH mechanism
- Simplify service flush/suppress logic
- Normalize formatting and ensure newline in database vars
- Adjust LAM CSP flags (disable unsafe-inline for script-src-elem)
2026-01-17 14:31:19 +01:00
kevinveenbirkenbach b9a1965cf9 web-app-mailu: wait for API token endpoint to become available
Add retries with delay when fetching existing API tokens via Mailu API
to handle slow container startup and avoid race conditions.

https://chatgpt.com/share/696b8e81-1638-800f-84db-6999297491ae
2026-01-17 14:28:11 +01:00
kevinveenbirkenbach 6d54901be0 Rename LOGOUT_ORIGINS to LOGOUT_URLS and propagate full scheme-based URLs
into the container environment and CSP connect-src configuration.

This clarifies the semantic difference between host-only LOGOUT_DOMAINS
and fully qualified logout targets used by the universal logout service.

https://chatgpt.com/share/696b82a2-e89c-800f-bbd2-ff7e347c9a85
2026-01-17 14:09:51 +01:00