feat: intégration TikTak #197-200 + scoped tokens, webhooks filtrés, listes mtime/size ; fix e2e-server BUG-112
CI / lint (push) Successful in 3m17s
CI / security (push) Failing after 1m51s
CI / test (push) Successful in 5m14s
CI / build (push) Successful in 1m50s
CI / e2e (push) Successful in 18m18s

This commit is contained in:
2026-10-14 11:42:53 -04:00
parent 2be0b15bcf
commit f783394f09
59 changed files with 3233 additions and 77 deletions
+9
View File
@@ -115,6 +115,15 @@ async def api_file_save(
content = body.get("content", "")
result = service_edit_file(vault_name, path, content, backup=backup)
# #197 (synchro TikTak) : rafraîchir l'index de façon synchrone pour une
# cohérence read-after-write — un client qui liste juste après le save
# doit voir le nouveau mtime/size sans attendre le watcher.
await update_single_file(vault_name, result["path"])
# #198 : la sauvegarde texte émet file_modified (événement clé pour tirer
# les retours de synchro côté TikTak en phase 3).
await dispatch_webhooks("file_modified", {"vault": vault_name, "path": result["path"]})
# Audit log
client_ip = current_user.get("_request_ip", "unknown")
log_file_save(current_user["username"], vault_name, path, len(content), client_ip)
+3 -1
View File
@@ -34,7 +34,9 @@ async def api_webhooks_create(body: dict = Body(...), current_user=Depends(requi
secret = body.get("secret")
if not url:
raise HTTPException(400, "URL is required")
return create_webhook(name, url, events, secret)
# #198 : filtres optionnels vault / path_prefix (None = tout recevoir).
return create_webhook(name, url, events, secret,
vault=body.get("vault"), path_prefix=body.get("path_prefix"))
@router.patch("/{webhook_id}", response_model=WebhookModel)