Problem/Motivation
Only one settings secret is accepted. Coordinating a dashboard credential change with deployment creates a potential authentication gap for requests in flight.
Evidence and scope
Reviewed 1.0.0-alpha1, source commit 02fd9d36af5237e712cecb7155d79725f7824880. Location: src/Controller/PostmarkWebhookController.php:48.
Operational improvement; the current nonempty-secret check, Basic Auth and hash_equals are appropriate and remain required.
Proposed resolution
Allow an active secret and an optional previous secret with an explicit expiry, all supplied from settings or a secret provider. Keep comparison behavior consistent, validate configuration, and report only rotation readiness. Do not introduce an invented signing header.
Acceptance criteria
Tests for active/previous, expiry boundary, empty/malformed settings and removal of old credentials. Neither values nor credential-bearing URLs may enter config exports, UI, logs or test output.
Comments
Comment #2
jmcerda commentedImplemented settings-only previous credentials with a fixed integer expiry. The active credential remains mandatory, both values use hash_equals, and previous credentials stop working exactly at expiry or on removal. Malformed active values return 503; malformed previous values cannot authorize requests. Drupal 10 and 11 authentication suites pass (23 tests, 159 assertions each), including expiry boundaries and malformed settings. Credentials remain absent from exported configuration and diagnostics. The change is under review; no release has been created.
Comment #4
jmcerda commentedIntegrated into the 1.x development branch and included in 1.0.0-alpha2. The release tag and branch are mirrored to Drupalcode. The six-job Drupal 10/11 and Mailer Plus integration matrix passes. See the release notes for database updates and retained-history limitations. This records module publication; site deployment is a separate operation.