fix: Footer-Copyright und Signatur-Fingerprint vereinheitlichen

Footer zeigt KnorrLabs/Markus F.J. Busche mit Mailto nur am Namen. Signatur-Normalisierung ist für Persistenz und isDirty-Check konsistent.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-30 11:12:26 +02:00
parent 10f01f1ffc
commit ebe4199b8b
4 changed files with 28 additions and 13 deletions
+4 -3
View File
@@ -7,9 +7,10 @@ export default function AppFooter() {
<span className="app-version-footer__sep" aria-hidden="true">
·
</span>
<a className="app-version-footer__copyright" href="mailto:elpatron+kd@mailbox.org">
© 2026 Markus F.J. Busche
</a>
<span className="app-version-footer__copyright">
© 2026 KnorrLabs/
<a href="mailto:elpatron+kd@mailbox.org">Markus F.J. Busche</a>
</span>
</footer>
)
}
+10 -9
View File
@@ -13,7 +13,8 @@ import TrackMap from './TrackMap.tsx'
import { useDialog } from './ModalDialog.tsx'
import {
normalizeSignature,
serializeSignature,
fingerprintSignature,
normalizedSerializedSignature,
isPasskeySignature,
isSignatureValidForEntry,
hasAnySignature
@@ -79,8 +80,8 @@ function fingerprintFromStoredEntry(decrypted: Record<string, unknown>): string
return JSON.stringify({
...payload,
signSkipper: serializeSignature(normalizeSignature(decrypted.signSkipper as SignatureValue | '') || '') ?? '',
signCrew: serializeSignature(normalizeSignature(decrypted.signCrew as SignatureValue | '') || '') ?? ''
signSkipper: fingerprintSignature(decrypted.signSkipper),
signCrew: fingerprintSignature(decrypted.signCrew)
})
}
@@ -241,8 +242,8 @@ export default function LogEntryEditor({
const payload = buildPayloadForSigning()
return JSON.stringify({
...payload,
signSkipper: serializeSignature(signSkipper) ?? '',
signCrew: serializeSignature(signCrew) ?? ''
signSkipper: fingerprintSignature(signSkipper),
signCrew: fingerprintSignature(signCrew)
})
}, [buildPayloadForSigning, signSkipper, signCrew])
@@ -256,8 +257,8 @@ export default function LogEntryEditor({
const entryData = {
...buildPayloadForSigning(eventsOverride),
signSkipper: serializeSignature(signSkipper),
signCrew: serializeSignature(signCrew)
signSkipper: normalizedSerializedSignature(signSkipper),
signCrew: normalizedSerializedSignature(signCrew)
}
const encrypted = await encryptJson(entryData, masterKey)
@@ -285,8 +286,8 @@ export default function LogEntryEditor({
setSavedFingerprint(JSON.stringify({
...buildPayloadForSigning(eventsOverride),
signSkipper: serializeSignature(signSkipper) ?? '',
signCrew: serializeSignature(signCrew) ?? ''
signSkipper: fingerprintSignature(signSkipper),
signCrew: fingerprintSignature(signCrew)
}))
}, [
readOnly, logbookId, entryId, events, buildPayloadForSigning, signSkipper, signCrew