# PyNextcloud - API FastAPI pour Nextcloud API REST construite avec FastAPI pour interagir avec un serveur Nextcloud et lister les fichiers et dossiers. ## 📋 PrĂ©requis - Python 3.8 ou supĂ©rieur - Un serveur Nextcloud avec accĂšs API - Identifiants Nextcloud (username et password) ## 🚀 Installation ### 1. CrĂ©er un environnement virtuel ```powershell # CrĂ©er l'environnement virtuel python -m venv venv # Activer l'environnement virtuel .\venv\Scripts\Activate.ps1 ``` ### 2. Installer les dĂ©pendances ```powershell pip install -r requirements.txt ``` ### 3. Configuration CrĂ©ez un fichier `.env` Ă  la racine du projet (vous pouvez copier `env.example`) : ```powershell Copy-Item env.example .env ``` Modifiez le fichier `.env` avec vos informations Nextcloud : ```env NEXTCLOUD_URL=https://votre-serveur-nextcloud.com NEXTCLOUD_USERNAME=votre_username NEXTCLOUD_PASSWORD=votre_password APP_HOST=0.0.0.0 APP_PORT=8000 ``` ## 🎯 Utilisation ### DĂ©marrer le serveur ```powershell # MĂ©thode 1 : Avec uvicorn directement uvicorn main:app --reload --host 0.0.0.0 --port 8000 # MĂ©thode 2 : Avec Python python main.py ``` Le serveur dĂ©marre sur `http://localhost:8000` ### Documentation interactive Une fois le serveur dĂ©marrĂ©, accĂ©dez Ă  : - Documentation Swagger UI : `http://localhost:8000/docs` - Documentation ReDoc : `http://localhost:8000/redoc` ## 📡 Endpoints disponibles ### 1. Route racine ``` GET / ``` Retourne un message d'accueil et le lien vers la documentation. ### 2. Health Check ``` GET /health ``` VĂ©rifie l'Ă©tat de l'API et la connexion Ă  Nextcloud. **RĂ©ponse exemple :** ```json { "status": "healthy", "nextcloud_connected": true } ``` ### 3. Lister un rĂ©pertoire ``` GET /list/{path} ``` Liste tous les fichiers et dossiers d'un rĂ©pertoire Nextcloud. **ParamĂštres :** - `path` : Chemin du rĂ©pertoire (utilisez `/` pour la racine) **Exemples :** ```powershell # Lister la racine curl http://localhost:8000/list/ # Lister le dossier Documents curl http://localhost:8000/list/Documents # Lister un sous-dossier curl http://localhost:8000/list/Documents/MonDossier ``` **RĂ©ponse exemple :** ```json { "path": "/Documents", "total_items": 5, "summary": { "directories": 2, "files": 3 }, "items": [ { "name": "rapport.pdf", "path": "/Documents/rapport.pdf", "is_dir": false, "size": 1024567, "content_type": "application/pdf", "last_modified": "2025-10-20T10:30:00", "etag": "abc123" }, { "name": "Images", "path": "/Documents/Images", "is_dir": true, "size": 0, "content_type": null, "last_modified": "2025-10-19T15:20:00", "etag": "def456" } ] } ``` ### 4. Informations sur un fichier/dossier ``` GET /info/{path} ``` Obtient les informations dĂ©taillĂ©es d'un fichier ou dossier spĂ©cifique. **Exemples :** ```powershell curl http://localhost:8000/info/Documents/rapport.pdf ``` ### 5. Upload un fichier ``` POST /upload ``` Upload un fichier vers un dossier Nextcloud. **ParamĂštres (form-data) :** - `file` : Le fichier Ă  uploader - `path` : Chemin du dossier de destination (ex: `/Documents`) - `filename` : Nom du fichier (optionnel, utilise le nom original si non spĂ©cifiĂ©) **Exemples :** ```powershell # Upload un fichier avec PowerShell $file = Get-Item "C:\chemin\vers\monfichier.pdf" $form = @{ file = $file path = "/Documents" } Invoke-WebRequest -Uri "http://localhost:8000/upload" -Method POST -Form $form # Upload avec un nom personnalisĂ© $form = @{ file = Get-Item "C:\chemin\vers\monfichier.pdf" path = "/Documents" filename = "nouveau_nom.pdf" } Invoke-WebRequest -Uri "http://localhost:8000/upload" -Method POST -Form $form ``` **RĂ©ponse exemple :** ```json { "success": true, "message": "Fichier uploadĂ© avec succĂšs", "file": { "name": "rapport.pdf", "path": "/Documents/rapport.pdf", "size": 1024567, "content_type": "application/pdf" } } ``` ## 🔧 Structure du projet ``` PyNextcloud/ │ ├── main.py # Application FastAPI avec auto-chargement des contrĂŽleurs ├── config.py # Configuration de l'application ├── utils.py # Fonctions utilitaires ├── controllers/ # 📁 Dossier des contrĂŽleurs (auto-chargĂ©s) │ ├── __init__.py │ ├── root.py # Route racine │ ├── health.py # Health check │ ├── list.py # Lister les fichiers/dossiers │ ├── info.py # Informations d'un fichier/dossier │ └── upload.py # Upload de fichiers ├── requirements.txt # DĂ©pendances Python ├── env.example # Exemple de fichier de configuration ├── .env # Configuration (Ă  crĂ©er, non versionnĂ©) └── README.md # Ce fichier ``` ### 🎯 Architecture modulaire avec auto-chargement Le projet utilise une architecture modulaire oĂč tous les contrĂŽleurs dans le dossier `controllers/` sont **automatiquement chargĂ©s** au dĂ©marrage. **Pour ajouter un nouveau endpoint :** 1. CrĂ©ez un nouveau fichier dans `controllers/`, par exemple `controllers/mon_endpoint.py` 2. CrĂ©ez un `router` FastAPI dans ce fichier 3. C'est tout ! Le contrĂŽleur sera automatiquement chargĂ© au dĂ©marrage **Exemple de nouveau contrĂŽleur :** ```python # controllers/mon_endpoint.py from fastapi import APIRouter router = APIRouter() @router.get("/mon-endpoint") async def mon_endpoint(): return {"message": "Mon nouveau endpoint"} ``` ## đŸ› ïž DĂ©pendances principales - **FastAPI** : Framework web moderne et rapide - **Uvicorn** : Serveur ASGI - **nc-py-api** : Client Python pour l'API Nextcloud - **python-dotenv** : Gestion des variables d'environnement - **pydantic** : Validation des donnĂ©es ## ⚠ Notes importantes 1. **SĂ©curitĂ©** : Ne committez jamais votre fichier `.env` dans Git. Il contient vos identifiants. 2. **Chemins** : Les chemins doivent ĂȘtre relatifs Ă  la racine de votre espace Nextcloud. 3. **Authentification** : L'API utilise l'authentification basique avec username/password. ## 🐛 DĂ©pannage ### Erreur de connexion Ă  Nextcloud - VĂ©rifiez que l'URL de votre serveur Nextcloud est correcte - VĂ©rifiez vos identifiants - Assurez-vous que votre serveur Nextcloud est accessible ### Erreur 404 sur un rĂ©pertoire - VĂ©rifiez que le chemin existe dans votre Nextcloud - Les chemins sont sensibles Ă  la casse ### ProblĂšmes d'activation de l'environnement virtuel Si vous avez une erreur de sĂ©curitĂ© PowerShell, exĂ©cutez : ```powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ``` ## 📝 Licence Ce projet est libre d'utilisation pour vos besoins personnels et professionnels.