Spaces:
Running
Running
| # Supabase Storage sync script for auth files | |
| # Bucket: clipro, Path: auths/ | |
| BUCKET="clipro" | |
| AUTH_DIR="/app/auths" | |
| SUPABASE_API="${SUPABASE_URL}/storage/v1" | |
| # Upload a single file to Supabase Storage | |
| upload_file() { | |
| local filepath="$1" | |
| local filename=$(basename "$filepath") | |
| HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ | |
| -X POST "${SUPABASE_API}/object/${BUCKET}/auths/${filename}" \ | |
| -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \ | |
| -H "Content-Type: application/json" \ | |
| -H "x-upsert: true" \ | |
| --data-binary @"${filepath}") | |
| if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then | |
| echo "[SYNC] Uploaded ${filename} to Supabase (${HTTP_CODE})" | |
| else | |
| echo "[SYNC] Failed to upload ${filename} (HTTP ${HTTP_CODE})" | |
| fi | |
| } | |
| # Upload all files in auth dir | |
| upload_all() { | |
| echo "[SYNC] Uploading all auth files to Supabase..." | |
| for f in "${AUTH_DIR}"/*.json; do | |
| [ -f "$f" ] && upload_file "$f" | |
| done | |
| } | |
| # Download all auth files from Supabase | |
| download() { | |
| echo "[SYNC] Listing files in Supabase bucket..." | |
| FILE_LIST=$(curl -s \ | |
| -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \ | |
| -H "Content-Type: application/json" \ | |
| "${SUPABASE_API}/object/list/${BUCKET}" \ | |
| -d '{"prefix":"auths/","limit":100}') | |
| if echo "$FILE_LIST" | jq -e '.[0].name' > /dev/null 2>&1; then | |
| FILE_COUNT=$(echo "$FILE_LIST" | jq length) | |
| echo "[SYNC] Found ${FILE_COUNT} files in Supabase" | |
| echo "$FILE_LIST" | jq -r '.[].name' | while read filename; do | |
| if [ -n "$filename" ] && [ "$filename" != "null" ] && [ "$filename" != ".emptyFolderPlaceholder" ]; then | |
| echo "[SYNC] Downloading ${filename}..." | |
| curl -s \ | |
| -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \ | |
| "${SUPABASE_API}/object/${BUCKET}/auths/${filename}" \ | |
| -o "${AUTH_DIR}/${filename}" | |
| echo "[SYNC] Saved ${AUTH_DIR}/${filename}" | |
| fi | |
| done | |
| else | |
| echo "[SYNC] No files found in Supabase or error: ${FILE_LIST}" | |
| fi | |
| } | |
| # Watch auth directory for changes and sync to Supabase | |
| watch_dir() { | |
| echo "[SYNC] Starting file watcher on ${AUTH_DIR}..." | |
| inotifywait -m -r -e close_write,create,modify "${AUTH_DIR}" --format '%f' | while read filename; do | |
| if [[ "$filename" == *.json ]]; then | |
| echo "[SYNC] Detected change: ${filename}" | |
| sleep 2 | |
| if [ -f "${AUTH_DIR}/${filename}" ]; then | |
| upload_file "${AUTH_DIR}/${filename}" | |
| fi | |
| fi | |
| done | |
| } | |
| case "$1" in | |
| download) download ;; | |
| upload) upload_file "$2" ;; | |
| upload-all) upload_all ;; | |
| watch) watch_dir ;; | |
| *) echo "Usage: $0 {download|upload <file>|upload-all|watch}"; exit 1 ;; | |
| esac | |