Système de fichiers
NoxIRC dispose d'un système de stockage extensible via des providers interchangeables.
Architecture
StorageProviderRegistry
├── local (LocalStorageProvider) ← actif par défaut
├── imgur (FunctionStorageProvider) ← enregistré par un plugin
└── s3 (FunctionStorageProvider) ← enregistré par un plugin
Le registry maintient un provider actif (défaut système) et permet aux utilisateurs de choisir parmi les providers disponibles au moment de l'upload.
Provider local
Stocke les fichiers dans ./uploads/{user_id}/{uuid}.ext.
Configuration (variables d'environnement) :
| Variable | Défaut | Description |
|---|---|---|
UPLOAD_MAX_SIZE_MB |
10.0 |
Taille maximale d'un fichier |
UPLOAD_ALLOWED_TYPES |
image/jpeg,image/png,image/gif,image/webp,application/pdf,application/zip,text/plain |
Types MIME acceptés |
PUBLIC_URL |
(vide) | Préfixe pour les URLs publiques |
Si PUBLIC_URL est vide, les URLs sont relatives (/files/uuid.jpg).
Si PUBLIC_URL est défini, les URLs sont absolues (https://noxirc.example.com/files/uuid.jpg).
Désactiver le stockage local
curl -X PUT /api/admin/settings \
-H "Authorization: Bearer <token>" \
-d '{"key": "local_storage_enabled", "value": "false"}'
Si désactivé et qu'aucun plugin ne fournit de provider, l'upload est bloqué.
API endpoints
| Endpoint | Description |
|---|---|
GET /api/files/providers |
Liste les providers disponibles |
POST /api/files/upload?provider=<name> |
Upload vers un provider spécifique |
GET /api/files |
Liste les fichiers de l'utilisateur |
GET /files/{uuid}.ext |
Servir un fichier |
DELETE /api/files/{uuid} |
Supprimer un fichier |
Préférence utilisateur
Quand plusieurs providers sont disponibles, l'utilisateur choisit son hébergement dans le FilePicker (bouton 📎 dans le chat). Ce choix est persisté et synchronisé entre ses appareils.
Comportement inline / téléchargement
Les types suivants s'affichent dans le navigateur (pas de téléchargement forcé) :
- Images :
image/jpeg,image/png,image/gif,image/webp,image/avif,image/svg+xml - Documents :
text/plain,application/pdf
Les autres types (zip, etc.) déclenchent un téléchargement.
Ajouter un provider via plugin
Voir Développement-Plugins — section Storage provider.