33 lines
2.7 KiB
Markdown
33 lines
2.7 KiB
Markdown
|
|
# 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`](public/index.html) : page statique avec styles inline, formulaire `multipart/form-data` pointant vers `/admin.php?action=upload`, texte explicatif sur la limite de 10 GB et bannière de statut alimentée par `?status=`.
|
|||
|
|
- [`public/admin.php`](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 <10 GB, 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`](public/php.ini) : règles d'upload (10 GB) et réglages runtime (`memory_limit`, `max_execution_time`, etc.).
|
|||
|
|
- [`public/files/.gitkeep`](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 à 10 GiB. 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.
|