| #!/bin/bash |
| |
| |
|
|
| BUCKET="clipro" |
| AUTH_DIR="/data/auths" |
| SUPABASE_API="${SUPABASE_URL}/storage/v1" |
|
|
| |
| 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() { |
| echo "[SYNC] Uploading all auth files to Supabase..." |
| for f in "${AUTH_DIR}"/*.json; do |
| [ -f "$f" ] && upload_file "$f" |
| done |
| } |
|
|
| |
| 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_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 |
|
|