feat: file/screenshot attachments on support tickets (v0.49.1)

Support form now accepts up to 5 attachments (images, PDF, text, JSON,
zip; 10MB each) via the existing S3/MinIO presigned-upload flow. New
support_ticket_attachments table; attachment links get folded into the
Gitea issue body and shown as thumbnails in both the user's ticket
history and the admin support view.

New presign endpoint (/api/v1/support/attachments/presign, rate-limited
20/hr) scoped to the uploading user rather than a ticket id, since the
ticket doesn't exist yet at upload time.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Arnaud
2026-07-18 12:09:40 +02:00
parent 811d4cad42
commit 12c2ec213a
19 changed files with 5855 additions and 64 deletions
+8
View File
@@ -462,6 +462,14 @@
"titlePlaceholder": "Short summary of the issue or idea",
"descriptionLabel": "Description",
"descriptionPlaceholder": "What happened, what you expected, and steps to reproduce (if a bug) — or details on your suggestion/question.",
"attachmentsLabel": "Attachments",
"attachmentsHint": "Screenshots or files, up to {count}. Images, PDF, text, JSON, or zip — 10MB max each.",
"attachmentAdd": "Add file",
"attachmentUploading": "Uploading…",
"removeAttachment": "Remove attachment",
"attachmentLimitReached": "You can attach up to {count} files.",
"attachmentTooLarge": "\"{name}\" exceeds the 10MB limit.",
"attachmentUploadFailed": "Failed to upload \"{name}\".",
"submitButton": "Submit",
"submitting": "Submitting…",
"submitSuccess": "Thanks! We received your message.",
+8
View File
@@ -462,6 +462,14 @@
"titlePlaceholder": "Résumé court du problème ou de l'idée",
"descriptionLabel": "Description",
"descriptionPlaceholder": "Ce qui s'est passé, ce que vous attendiez, et les étapes pour reproduire (si bug) — ou les détails de votre suggestion/question.",
"attachmentsLabel": "Pièces jointes",
"attachmentsHint": "Captures d'écran ou fichiers, jusqu'à {count}. Images, PDF, texte, JSON ou zip — 10 Mo max chacun.",
"attachmentAdd": "Ajouter un fichier",
"attachmentUploading": "Envoi…",
"removeAttachment": "Retirer la pièce jointe",
"attachmentLimitReached": "Vous pouvez joindre jusqu'à {count} fichiers.",
"attachmentTooLarge": "\"{name}\" dépasse la limite de 10 Mo.",
"attachmentUploadFailed": "Échec de l'envoi de \"{name}\".",
"submitButton": "Envoyer",
"submitting": "Envoi…",
"submitSuccess": "Merci ! Nous avons reçu votre message.",