Skip to content

Do not return the SMTP password from the notifications API - #5980

Merged
ramonsmits merged 1 commit into
masterfrom
fix-smtp-password-write-only
Oct 9, 2026
Merged

ramonsmits merged 1 commit into
masterfrom
fix-smtp-password-write-only

Conversation

@ramonsmits

@ramonsmits ramonsmits commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Fixes:

GET /api/notifications/email returns the stored SMTP password. Every caller that can read the notification settings can read the password. This change makes the password write-only.

Change

  • GET /api/notifications/email does not return the password.
  • POST /api/notifications/email:
    • Empty password: keeps the stored password. ServicePulse cannot show the stored password, so an empty field means "no change".
    • New password: replaces the stored password.
    • Empty account: removes the stored password.
  • The password is still stored unencrypted in the database.

Tests

  • New unit tests in NotificationsControllerTests (4 tests). They check the GET response and how each kind of save changes the stored password. Against the previous controller, the GET test and the "empty password keeps the stored one" test fail.
  • One acceptance test, When_email_notification_settings_contain_a_password, checks the HTTP response end to end.

GET /api/notifications/email returned the stored SMTP password to every
caller that can read the settings. This includes the reader role and, with
authentication disabled (the default), anonymous callers.

The password is now write-only:

- GET never returns it.
- A save with an empty password keeps the stored password. ServicePulse
  sends its form back without a password, because it no longer receives
  one.
- A save without an account removes the stored password.

Tests:

- NotificationsControllerTests (unit) cover the GET response and how each
  kind of save changes the stored password.
- One acceptance test checks the HTTP response end to end.
@ramonsmits ramonsmits removed this from the 6.21.2 milestone Oct 9, 2026
@ramonsmits
ramonsmits enabled auto-merge (squash) October 9, 2026 13:48
@ramonsmits
ramonsmits merged commit 5e2364f into master Oct 9, 2026
36 checks passed
@ramonsmits
ramonsmits deleted the fix-smtp-password-write-only branch October 9, 2026 13:58
ramonsmits added a commit that referenced this pull request Oct 9, 2026
…5981)

GET /api/notifications/email returned the stored SMTP password to every
caller that can read the settings. This includes the reader role and, with
authentication disabled (the default), anonymous callers.

The password is now write-only:

- GET never returns it.
- A save with an empty password keeps the stored password. ServicePulse
  sends its form back without a password, because it no longer receives
  one.
- A save without an account removes the stored password.

Tests:

- NotificationsControllerTests (unit) cover the GET response and how each
  kind of save changes the stored password.
- One acceptance test checks the HTTP response end to end.

(cherry picked from commit 5e2364f)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants