images: Datenmodell, Textarchiv, Herkunftsprüfung und gemeinsamer Uploader für Formular v2 (Bildkennzeichnung Block A)
- press_release_images: Kundenangabe/Portalkennzeichnung getrennt, Herkunftsbefund, Beweisoriginal, Snapshot-Pfade, published_ever_at, rules_version, Fokus/Letterbox; Bestand unangetastet - legal_texts (insert-only) mit img-confirm-v1 (alter Wortlaut), v2 (AGB 0.6), v3 (AGB 0.7, noch ohne Datum); image-rights:backfill-confirmations - image_rights_confirmations polymorph, insert-only, IP als versionierter HMAC; Löschung nur für nie veröffentlichte Uploads - ImageProvenanceInspector (Imagick/exif): IPTC, XMP, EXIF; algorithmicallyEnhanced nur Vermerk; unlesbare Datei = error - PressReleaseImageUploader: Original vor Derivaten, Hash-Bindung, Titelbild-Regel unter Sperre, Dateien bei Fehlern zurückgerollt; Admin-Upload ohne Bestätigung - ImageService: kein Rückfall auf die Quelldatei, og-Variante, Fokuspunkt und no_crop Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
83cb6e14cd
commit
214aea8910
36 changed files with 2631 additions and 30 deletions
51
app/Enums/ImageProvenanceStatus.php
Normal file
51
app/Enums/ImageProvenanceStatus.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
/**
|
||||
* Ergebnisklasse der Herkunftsprüfung eines Bild-Uploads (Bildkennzeichnung
|
||||
* A.4, Feedback F02). Phase 1 liest nur ungesicherte IPTC/XMP/EXIF-Angaben,
|
||||
* kann also höchstens `unsigned_metadata` liefern. Die `validated_*`-Stufen
|
||||
* entstehen erst mit der C2PA-Signaturprüfung (Phase 2, Block I).
|
||||
*/
|
||||
enum ImageProvenanceStatus: string
|
||||
{
|
||||
/** Keine unterstützten Herkunftsdaten in der Datei. */
|
||||
case Absent = 'absent';
|
||||
|
||||
/** IPTC/XMP/EXIF gefunden — frei editierbar, nicht signiert. */
|
||||
case UnsignedMetadata = 'unsigned_metadata';
|
||||
|
||||
/** C2PA-Manifest, Signatur und Dateibindung geprüft, Aussteller in der Vertrauensliste. */
|
||||
case ValidatedTrusted = 'validated_trusted';
|
||||
|
||||
/** C2PA technisch geprüft, Aussteller nicht in der Vertrauensliste. */
|
||||
case ValidatedUntrusted = 'validated_untrusted';
|
||||
|
||||
/** C2PA vorhanden, Prüfung fehlgeschlagen (Signatur oder Bindung). */
|
||||
case Invalid = 'invalid';
|
||||
|
||||
/** Format oder Manifestversion nicht unterstützt. */
|
||||
case Unsupported = 'unsupported';
|
||||
|
||||
/** Technischer Fehler oder Zeitüberschreitung — Prüfung nicht abgeschlossen. */
|
||||
case Error = 'error';
|
||||
|
||||
/**
|
||||
* Nur ein vertrauenswürdig geprüfter Befund darf eine Kennzeichnung
|
||||
* erzwingen (Decision-Update E9).
|
||||
*/
|
||||
public function allowsLock(): bool
|
||||
{
|
||||
return $this === self::ValidatedTrusted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ob überhaupt Herkunftsangaben vorliegen, aus denen das Formular
|
||||
* vorbelegt werden kann.
|
||||
*/
|
||||
public function hasMetadata(): bool
|
||||
{
|
||||
return in_array($this, [self::UnsignedMetadata, self::ValidatedTrusted, self::ValidatedUntrusted], true);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue