Files
send/AGENTS.md
Julien Cabillot 06a31cd59e
All checks were successful
web/send/pipeline/head This commit looks good
feat: import
2025-12-18 14:35:48 -05:00

2.7 KiB
Raw Blame History

Send.cabillot.eu

Ce projet est une application PHP dont le but est simple :

  • Une page HTML d'index principale avec un simple champ pour ajouter un fichier et un boutton upload.
  • Une page PHP d'administration, ou je peux consulter tout les fichiers envoyes.

Seul les fichiers de moins de 10G sont acceptes. Les fichiers doivent ensuite etre accessible publiquement via un path hashé qui n'est pas fourni a l'utilisateur qui envoyé le fichier. Seul la page d'administration permet de voir les liens des fichiers.

Implementation

L'application tourne via un container dans un cluster kubernetes. Le serveur utilise doit etre frankenphp. Les 2 pages web (index et admin) doivent jolies mais ne doivent pas avoir de dependances exterieurs (css, js). Je pense que seul la page d'administration a besoin de PHP, surement tout le code peut aller dans ce fichier sans besoin d'eclater la logique sur differents fichiers.

MVP livré

  • public/index.html : page statique avec styles inline, formulaire multipart/form-data pointant vers /admin.php?action=upload, texte explicatif sur la limite de 10GB et bannière de statut alimentée par ?status=.
  • public/admin.php : unique point d'entrée PHP, protège l'accès via HTTP Basic Auth (variables d'environnement ADMIN_USER / ADMIN_PASS), assure la création de /upload, gère POST action=upload, stocke les fichiers sous /upload/YYYY/MM/DD/<hash>/<timestamp-nom> (hash aléatoire hex), valide les erreurs PHP et la taille <10GB, puis redirige vers la page précédente sans révéler le hash. La vue GET affiche formulaire, état des uploads (nom original, date UTC, taille lisible, MIME finfo, slug hashé, lien /files/...).
  • public/php.ini : règles d'upload (10GB) et réglages runtime (memory_limit, max_execution_time, etc.).
  • public/files/.gitkeep : marqueur du répertoire monté côté serveur pour exposer les fichiers uploadés.

Notes d'exploitation

  • Volume : /upload doit être persistant et monté également sous /app/public/files dans le container FrankenPHP afin que les URLs /files/... servent les documents.
  • Sécurité : ne jamais exposer l'URL hashée à l'uploadeur. Seule la page admin affiche les liens.
  • Limites : MAX_FILE_BYTES défini à 10GiB. Les formulaires refusent les fichiers plus gros et redirigent avec status=toolarge.
  • Authentification : sans variables d'environnement, l'app retourne 500. Fournir ADMIN_USER et ADMIN_PASS via Kubernetes secrets.
  • Journalisation / suivi : les erreurs d'upload utilisent les codes PHP standards et redirigent avec un statut générique pour éviter les fuites d'information.