#!/usr/bin/env bash ### --------------------------------------------------------------------------- ### CONFIGURATION À RENSEIGNER ### --------------------------------------------------------------------------- TENANT_ID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" CLIENT_ID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" CLIENT_SECRET="YOUR_APP_SECRET" HOSTNAME="contoso.sharepoint.com" # domaine SharePoint SITE_PATH="DocumensoSite" # nom du site SharePoint DRIVE_NAME="Documents" # nom de la bibliothèque (ex: "Documents") RCLONE_REMOTE="sharepoint" # nom du remote rclone RCLONE_MINIO="s3minio:documenso" # bucket minio RCLONE_SHAREPOINT="${RCLONE_REMOTE}:${DRIVE_NAME}" ### --------------------------------------------------------------------------- echo "1. Obtention du token OAuth2..." ACCESS_TOKEN=$( curl -s -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=$CLIENT_ID" \ -d "scope=https://graph.microsoft.com/.default" \ -d "client_secret=$CLIENT_SECRET" \ -d "grant_type=client_credentials" \ "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \ | jq -r .access_token ) if [[ "$ACCESS_TOKEN" == "null" || -z "$ACCESS_TOKEN" ]]; then echo "❌ Impossible de générer un token ! Vérifie ton CLIENT_ID / SECRET." exit 1 fi echo " Token obtenu." ### --------------------------------------------------------------------------- echo "2. Récupération automatique du site-id..." SITE_INFO=$(curl -s -X GET \ -H "Authorization: Bearer $ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/sites/$HOSTNAME:/sites/$SITE_PATH?$select=id,webUrl") SITE_ID=$(echo "$SITE_INFO" | jq -r '.id') if [[ "$SITE_ID" == "null" || -z "$SITE_ID" ]]; then echo "❌ Impossible de récupérer le site-id !" echo "Réponse brute:" echo "$SITE_INFO" exit 1 fi echo " SITE_ID trouvé : $SITE_ID" ### --------------------------------------------------------------------------- echo "3. Récupération automatique du drive-id de la bibliothèque $DRIVE_NAME..." DRIVES_LIST=$(curl -s -X GET \ -H "Authorization: Bearer $ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/sites/$SITE_ID/drives") DRIVE_ID=$(echo "$DRIVES_LIST" | jq -r ".value[] | select(.name==\"$DRIVE_NAME\") | .id") if [[ -z "$DRIVE_ID" ]]; then echo "❌ Impossible de trouver la bibliothèque '$DRIVE_NAME'" echo "Réponse brute:" echo "$DRIVES_LIST" exit 1 fi echo "DRIVE_ID trouvé : $DRIVE_ID" ### --------------------------------------------------------------------------- echo "4. Attribution de la permission Sites.Selected (write) à l'application..." ASSIGN_RESPONSE=$(curl -s -X POST \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"roles\": [\"write\"], \"grantedToIdentities\": [ { \"application\": { \"id\": \"$CLIENT_ID\" } } ] }" \ "https://graph.microsoft.com/v1.0/sites/$SITE_ID/permissions") echo " Permission appliquée." echo "Réponse API :" echo "$ASSIGN_RESPONSE" ### --------------------------------------------------------------------------- echo "5. Test d'accès SharePoint avec rclone..." docker exec -it rclone-sync rclone lsd "$RCLONE_SHAREPOINT" echo " Configuration terminée avec succès !" echo "SITE_ID = $SITE_ID" echo "DRIVE_ID = $DRIVE_ID"