[Coffre Secrets] Phase 1b : log_coffre_event dans audit.log (sans valeur)
This commit is contained in:
@@ -119,6 +119,41 @@ def log_vault_remove(username: str, vault_name: str, ip: str | None = None):
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def log_coffre_event(
|
||||||
|
username: str,
|
||||||
|
action: str,
|
||||||
|
coffre: str | None = None,
|
||||||
|
secret_ref: str | None = None,
|
||||||
|
consommateur: str | None = None,
|
||||||
|
resultat: str | None = None,
|
||||||
|
contexte_id: str | None = None,
|
||||||
|
ip: str | None = None,
|
||||||
|
):
|
||||||
|
"""Journal d'un événement du coffre Secrets (Phase 1b).
|
||||||
|
|
||||||
|
Règle absolue : aucun champ ne contient jamais une valeur de secret,
|
||||||
|
un texte chiffré, un nonce ou un jeton. Seules des références
|
||||||
|
(coffre:<slug>/<nom>), des identifiants et des codes de résultat.
|
||||||
|
"""
|
||||||
|
entry = {
|
||||||
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
||||||
|
"action": action,
|
||||||
|
"username": username,
|
||||||
|
"ip": ip or "unknown",
|
||||||
|
}
|
||||||
|
if coffre is not None:
|
||||||
|
entry["coffre"] = coffre
|
||||||
|
if secret_ref is not None:
|
||||||
|
entry["secret_ref"] = secret_ref
|
||||||
|
if consommateur is not None:
|
||||||
|
entry["consommateur"] = consommateur
|
||||||
|
if resultat is not None:
|
||||||
|
entry["resultat"] = resultat
|
||||||
|
if contexte_id is not None:
|
||||||
|
entry["contexte_id"] = contexte_id
|
||||||
|
_write_entry(entry)
|
||||||
|
|
||||||
|
|
||||||
def get_recent_entries(limit: int = 100, action: str | None = None) -> list:
|
def get_recent_entries(limit: int = 100, action: str | None = None) -> list:
|
||||||
"""Read the most recent audit log entries.
|
"""Read the most recent audit log entries.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user