Install
Works with Drupal: ^10.6 || ^11.3Using Composer to manage Drupal site dependencies
Alternative installation files
Download tar.gz
39.41 KB
MD5: 23be34d3eca5e34a2dd2cb05664196a4
SHA-1: 05a2b55ad8405a60d8dabae4f4a83b5815fdc38c
SHA-256: 537d9f08119a1deb9889e120f3ba65a38e9b8df535d086c0d5195ec4ccc2705f
Download zip
53.37 KB
MD5: 9f7e55c5a0c0718e39a5501f2f607d2f
SHA-1: 7cad20f807a8a89c7b84974334a7564753b65f79
SHA-256: df8d8127128f75c7b073817822b8ed3fd5702a212104ed6d7c8125eb947a4bae
Release notes
Audit Chain 1.1.0 adds a request-scoped collector, fail-loud signing-key handling, and clearer verification when history was written unkeyed.
Added
- A request-scoped collector (
audit_chain.collector) so the obvious integration is safe. It buffers per request, deduplicates by channel, operation, and entity keys (first occurrence wins; metadata is not merged), and writes once atkernel.terminate. That avoids flooding the hash chain from high-volume hooks such as field access, and keeps the append lock off the request critical path. - Status report warning when entries were encrypted under a profile the site no longer uses. Each row records the profile that encrypted it (
encryption_profile, empty for plaintext). Reported at WARNING — chain integrity is intact; readability of old ciphertext is what is lost. Existing rows are left unrecorded rather than backfilled. There is still no re-encrypt command. key_idon each row, recording which Key entity produced the hash (empty when unkeyed). Advisory only: it is not covered by the row hash, so verification uses it only as a try-first hint, never as proof.- Additive
verify()keys:reason,unkeyed_rows, andunkeyed_throughalongsideokandbroken_at. Code that compares the whole return array needs updating; field-by-field checks do not. - Retired signing keys (
previous_hash_keys). Verification accepts the current key or any retired key from configuration, so rotating the signing key no longer makes earlier rows look like tampering.
Fixed
- A configured-but-unresolvable signing key no longer silent-downgrades to unkeyed SHA-256. Writes log an error naming the key;
hook_requirements()reports ERROR. The entry is still written — dropping an audit record is worse than an unsigned one. drush audit-chain:verifyno longer reports unsigned rows as tampering. It distinguishes content/order mismatch (tampered) from intact rows hashed without the key (written_unkeyed), and reports how many rows and through which id. Both still exit non-zero; only the diagnosis changes.- Invalid UTF-8 in metadata no longer produces a permanently unverifiable row. Canonical payload and stored metadata use
JSON_INVALID_UTF8_SUBSTITUTE. Valid historical payloads are unchanged; rows already destroyed this way cannot be recovered.