File size: 2,677 Bytes
a51b570
 
 
 
 
358e245
a51b570
 
 
 
 
 
 
 
2c12d00
a51b570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c12d00
a51b570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c12d00
a51b570
 
 
 
 
 
 
 
2c12d00
 
 
 
 
a51b570
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
# Supabase Storage sync script for auth files
# Bucket: clipro, Path: auths/

BUCKET="clipro"
AUTH_DIR="/data/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