#!/bin/bash # 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 |upload-all|watch}"; exit 1 ;; esac