Commit graph

1588 commits

Author SHA1 Message Date
104d945dd1
chore: update change notes
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-06 12:26:10 +02:00
3cc35d0293
Merge remote-tracking branch 'origin/main' into bugfix/480-fix-minor-bugs
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-06 12:14:58 +02:00
d0d7d38c03
feat: add open button to join link in settings
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 12:14:22 +02:00
bfa33dcae2 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.165' (#491) from renovate/renovate-renovate-43.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #491
2026-05-06 12:09:10 +02:00
5f35b64928 Merge pull request 'chore(deps): update mix dependencies' (#490) from renovate/mix-dependencies into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #490
2026-05-06 12:08:40 +02:00
0159d5352a
fix: joinrequest field formats
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 12:02:58 +02:00
15e9a52bc9
fix: wrap field labels in join request view
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 11:52:48 +02:00
6327ea00eb
feat: respect field types in join requests
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 11:37:40 +02:00
95b666f04f
test: verify that join view respects custom field types
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 11:14:09 +02:00
0a7bbc7fa6
fix: labels for custom fields in join requests
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-06 11:05:28 +02:00
Renovate Bot
92afa60387 chore(deps): update renovate/renovate docker tag to v43.165
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-06 00:07:12 +00:00
Renovate Bot
4042ecc9b5 chore(deps): update mix dependencies
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-05-06 00:06:58 +00:00
86cbf33041 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.163' (#489) from renovate/renovate-renovate-43.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #489
2026-05-05 21:33:00 +02:00
bf8e2b9303 Merge pull request 'chore(deps): update mix dependencies' (#486) from renovate/mix-dependencies into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #486
2026-05-05 21:32:07 +02:00
a6f6f402af
test: add tests for custom field labels
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-05 17:01:10 +02:00
Renovate Bot
13e6a4374c chore(deps): update renovate/renovate docker tag to v43.163
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-05 00:06:42 +00:00
3bfb7dd09c
fix database volume path for PG 18
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-04 21:49:21 +02:00
9846e1f77e
README: fix asdf setup
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-04 21:42:14 +02:00
dd235d671c
style: fix linting
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-05-04 17:51:13 +02:00
2e727aec9c
fix: remove illegal reference and update test
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-04 17:37:59 +02:00
31816479be Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.160' (#487) from renovate/renovate-renovate-43.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #487
2026-05-04 15:44:51 +02:00
e86415c7e6
Merge remote-tracking branch 'origin/main' into renovate/mix-dependencies 2026-05-04 15:41:04 +02:00
95b1bfbe18 Merge pull request 'chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.35.1' (#484) from renovate/ghcr.io-sebadob-rauthy-0.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #484
2026-05-04 11:41:57 +02:00
9cef87d416 Merge pull request 'chore(deps): update dependency just to v1.50.0' (#485) from renovate/asdf-tool-versions into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #485
2026-05-04 11:40:43 +02:00
Renovate Bot
e80e6afc34 chore(deps): update mix dependencies
Some checks failed
continuous-integration/drone/push Build is failing
2026-05-04 00:15:32 +00:00
Renovate Bot
743523a52b chore(deps): update renovate/renovate docker tag to v43.160
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-02 00:15:36 +00:00
Renovate Bot
8dfe86f2a5 chore(deps): update dependency just to v1.50.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-01 00:14:49 +00:00
Renovate Bot
4eb044ddbf chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.35.1
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-01 00:14:40 +00:00
015ddf4494 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.109' (#479) from renovate/renovate-renovate-43.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #479
2026-04-08 11:41:14 +02:00
6de9b544e9 Merge pull request 'chore(deps): update dependency just to v1.49.0' (#476) from renovate/asdf-tool-versions into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #476
2026-04-08 11:38:03 +02:00
feee14c37e Merge pull request 'chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.35.0' (#477) from renovate/ghcr.io-sebadob-rauthy-0.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #477
2026-04-08 11:24:27 +02:00
c48ac2f432 harden env handling (#481)
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #481
Co-authored-by: Simon <s.thiessen@local-it.org>
Co-committed-by: Simon <s.thiessen@local-it.org>
2026-04-08 10:40:22 +02:00
Renovate Bot
19206a00f8 chore(deps): update renovate/renovate docker tag to v43.109
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-04-08 00:15:02 +00:00
Renovate Bot
9c862ed399 chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.35.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-08 00:14:57 +00:00
Renovate Bot
3be2c76c97 chore(deps): update dependency just to v1.49.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-08 00:14:51 +00:00
bac488b47c Merge pull request 'chore(deps): update mix dependencies' (#478) from renovate/mix-dependencies into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #478
2026-04-07 16:28:47 +02:00
5aaca7aa37
fix: adapt tests to updated deps
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-04-07 15:52:19 +02:00
Renovate Bot
879695e7b6 chore(deps): update mix dependencies
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-07 00:15:29 +00:00
f8a3cc4c47 Run seeds only once (#475)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
continuous-integration/drone/tag Build is passing
## Description of the implemented changes
The changes were:
- [ ] Bugfixing
- [x] New Feature
- [ ] Breaking Change
- [x] Refactoring

**Seeds run only on first startup.** On every application start (e.g. `just run`, Docker entrypoint), seed scripts are still invoked, but they exit immediately when the admin user already exists. This avoids duplicate seed data (e.g. join requests), keeps startup fast after the first run, and works the same in dev and production.

## What has been changed?

- **`lib/mv/release.ex`**
  - Added `bootstrap_seeds_applied?/0`: returns whether the admin user (from `ADMIN_EMAIL` or default `admin@localhost`) exists. We check the admin *user*, not the Admin *role*, so we do not skip when only migrations have run (migrations can create the Admin role for the system actor).
  - `run_seeds/0`: if `bootstrap_seeds_applied?()` is true, prints “Seeds already applied (admin user exists). Skipping.” and returns without running bootstrap or dev seeds; otherwise unchanged behaviour.
  - Module docs updated for the new function and the skip behaviour.

- **`priv/repo/seeds.exs`**
  - Ensures the app is started (`Application.ensure_all_started(:mv)`).
  - If `Mv.Release.bootstrap_seeds_applied?()` is true, prints the same skip message and does not run bootstrap or dev seeds; otherwise runs as before (bootstrap + dev seeds in dev/test).
  - Comment at the top updated to describe the skip behaviour.

- **Documentation**
  - `CODE_GUIDELINES.md` §1.2.1: seeds run on every start but exit early when already applied; mentions `bootstrap_seeds_applied?/0`.
  - `docs/admin-bootstrap-and-oidc-role-sync.md`: run_seeds skips when admin user exists; description of `run_seeds/0` updated.
  - `CHANGELOG.md` [Unreleased]: new “Seeds run only when needed” entry under Changed.

## Definition of Done
### Code Quality
- [x] No new technical depths
- [x] Linting passed
- [x] Documentation is added where needed

### Accessibility
- [x] New elements are properly defined with html-tags *(no new UI)*
- [x] Colour contrast follows WCAG criteria *(no new UI)*
- [x] Aria labels are added when needed *(no new UI)*
- [x] Everything is accessible by keyboard *(no new UI)*
- [x] Tab-Order is comprehensible *(no new UI)*
- [x] All interactive elements have a visible focus *(no new UI)*

### Testing
- [x] Tests for new code are written *(existing seeds and release tests cover behaviour; idempotency test still passes when second run skips)*
- [x] All tests pass
- [x] axe-core dev tools show no critical or major issues *(no UI changes)*

## Additional Notes

- **Review focus:** Logic in `Mv.Release` and `priv/repo/seeds.exs`; the “already applied” check is a single DB read for the admin user. On failure (e.g. DB down), `bootstrap_seeds_applied?/0` returns `false`, so seeds run (safe for first deploy).
- **Suggested check:** Run `mix test test/seeds_test.exs test/mv/release_test.exs` to confirm seeds and release behaviour.

Reviewed-on: #475
Co-authored-by: Simon <s.thiessen@local-it.org>
Co-committed-by: Simon <s.thiessen@local-it.org>
2026-03-16 19:27:31 +01:00
c381b86b5e Improve oidc only mode (#474)
All checks were successful
continuous-integration/drone/push Build is passing
## Description of the implemented changes
The changes were:
- [x] Bugfixing
- [x] New Feature
- [ ] Breaking Change
- [x] Refactoring

**OIDC-only mode improvements and UX tweaks (success toasts, unauthenticated redirect).**

## What has been changed?

### OIDC-only mode (new feature)
- **Admin settings:** "Only OIDC sign-in" is an immediate toggle at the top of the OIDC section (no save button). Enabling it also turns off "Allow direct registration". When OIDC-only is on, the registration checkbox is disabled and shows a tooltip (DaisyUI `<.tooltip>`).
- **Backend:** Password sign-in is forbidden via Ash policy (`OidcOnlyActive` check). Password registration is blocked via validation `OidcOnlyBlocksPasswordRegistration`. New plug `OidcOnlySignInRedirect`: when OIDC-only and OIDC are configured, GET `/sign-in` redirects to the OIDC flow; GET `/auth/user/password/sign_in_with_token` is rejected with redirect + flash. `AuthController.success/4` also rejects password sign-in when OIDC-only.
- **Tests:** GlobalSettingsLive (OIDC-only UI), AuthController (redirect and password sign-in rejection), User authentication (register_with_password blocked when OIDC-only).

### UX / behaviour (no new feature flag)
- **Success toasts:** Success flash messages auto-dismiss after 5 seconds via JS hook `FlashAutoDismiss` and optional `auto_clear_ms` on `<.flash>` (used for success in root layout and `flash_group`).
- **Unauthenticated users:** Redirect to sign-in without the "You don't have permission to access this page" flash; that message is only shown to logged-in users who lack access. Logic in `LiveHelpers` and `CheckPagePermission` plug; test updated accordingly.

### Other
- Layouts: comment about unprocessed join-request count no longer uses "TODO" (Credo).
- Gettext: German translation for "Home" (Startseite); POT/PO kept in sync.
- CHANGELOG: Unreleased section updated with the above.

## Definition of Done
### Code Quality
- [x] No new technical depths
- [x] Linting passed
- [x] Documentation is added where needed (module docs, comments where non-obvious)

### Accessibility
- [x] New elements are properly defined with html-tags (labels, aria-label on checkboxes)
- [x] Colour contrast follows WCAG criteria (unchanged)
- [x] Aria labels are added when needed (e.g. oidc-only and registration checkboxes)
- [x] Everything is accessible by keyboard (toggles and buttons unchanged)
- [x] Tab-Order is comprehensible
- [x] All interactive elements have a visible focus (existing patterns)

### Testing
- [x] Tests for new code are written (OIDC-only UI, auth controller, user auth; SMTP config builder and mailer)
- [x] All tests pass
- [ ] axe-core dev tools show no critical or major issues (not re-run for this PR; suggest spot-check on settings and sign-in)

## Additional Notes
- **OIDC-only:** When the `OIDC_ONLY` env var is set, the toggle is read-only and shows "(From OIDC_ONLY)". When OIDC is not configured, the toggle is disabled.
- **Invalidation:** Enabling OIDC-only sets `registration_enabled: false` in one update; disabling OIDC-only only updates `oidc_only` (registration left as-is).
- **Review focus:** Plug order in router (OidcOnlySignInRedirect), policy/validation order in User, and that all OIDC-only paths (form, plug, controller) stay consistent.

Reviewed-on: #474
Co-authored-by: Simon <s.thiessen@local-it.org>
Co-committed-by: Simon <s.thiessen@local-it.org>
2026-03-16 19:09:07 +01:00
9b0f269ab6 Merge pull request 'Fix TLS config' (#473) from bugfix/fix-tls-config into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #473
2026-03-16 15:04:33 +01:00
f353f1cbc0
fix: update smtp test
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-03-16 14:58:21 +01:00
e8f27690a1
refactor: unify smtp config logic
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-16 14:23:46 +01:00
e95c1d6254
fix: repaired smtp configuration for port 587
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-16 14:00:23 +01:00
837f5fd5bf Merge pull request 'Finalize join request feature' (#472) from feature/308-web-form into main
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Reviewed-on: #472
2026-03-13 20:51:09 +01:00
1866c79461
fix: failing tests
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-03-13 20:36:13 +01:00
171a699326
fix: failing tests
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-13 19:59:59 +01:00
86c032004e
fix: failing tests
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-13 19:43:04 +01:00
a4239ce09b
fix: failing tests
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-13 19:25:23 +01:00
c933144920
feat: unify page titles
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is failing
2026-03-13 19:01:50 +01:00