DanielleNguyen commited on
Commit
a51b570
·
verified ·
1 Parent(s): e4d265f

Upload supabase-sync.sh

Browse files
Files changed (1) hide show
  1. supabase-sync.sh +103 -0
supabase-sync.sh ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Supabase Storage sync script for auth files
3
+ # Bucket: clipro, Path: auths/
4
+
5
+ BUCKET="clipro"
6
+ AUTH_DIR="/app/auths"
7
+ SUPABASE_API="${SUPABASE_URL}/storage/v1"
8
+
9
+ # Upload a single file to Supabase Storage
10
+ upload_file() {
11
+ local filepath="$1"
12
+ local filename=$(basename "$filepath")
13
+ local object_path="auths/${filename}"
14
+
15
+ # Try update first (upsert), if fails try create
16
+ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
17
+ -X POST "${SUPABASE_API}/object/${BUCKET}/${object_path}" \
18
+ -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
19
+ -H "Content-Type: application/json" \
20
+ -H "x-upsert: true" \
21
+ --data-binary @"${filepath}")
22
+
23
+ if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then
24
+ echo "[SYNC] Uploaded ${filename} to Supabase (${HTTP_CODE})"
25
+ else
26
+ echo "[SYNC] Failed to upload ${filename} (HTTP ${HTTP_CODE})"
27
+ fi
28
+ }
29
+
30
+ # Upload all files in auth dir
31
+ upload_all() {
32
+ echo "[SYNC] Uploading all auth files to Supabase..."
33
+ for f in "${AUTH_DIR}"/*.json; do
34
+ [ -f "$f" ] && upload_file "$f"
35
+ done
36
+ }
37
+
38
+ # Download all auth files from Supabase
39
+ download() {
40
+ echo "[SYNC] Listing files in Supabase bucket..."
41
+
42
+ # List files in the auths/ folder
43
+ FILE_LIST=$(curl -s \
44
+ -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
45
+ "${SUPABASE_API}/object/list/${BUCKET}" \
46
+ -H "Content-Type: application/json" \
47
+ -d '{"prefix":"auths/","limit":100}')
48
+
49
+ # Check if we got a valid response
50
+ if echo "$FILE_LIST" | jq -e '.[0].name' > /dev/null 2>&1; then
51
+ FILE_COUNT=$(echo "$FILE_LIST" | jq length)
52
+ echo "[SYNC] Found ${FILE_COUNT} files in Supabase"
53
+
54
+ echo "$FILE_LIST" | jq -r '.[].name' | while read filename; do
55
+ if [ -n "$filename" ] && [ "$filename" != "null" ] && [ "$filename" != ".emptyFolderPlaceholder" ]; then
56
+ echo "[SYNC] Downloading ${filename}..."
57
+ curl -s \
58
+ -H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
59
+ "${SUPABASE_API}/object/${BUCKET}/auths/${filename}" \
60
+ -o "${AUTH_DIR}/${filename}"
61
+ echo "[SYNC] Saved ${AUTH_DIR}/${filename}"
62
+ fi
63
+ done
64
+ else
65
+ echo "[SYNC] No files found in Supabase or error: ${FILE_LIST}"
66
+ fi
67
+ }
68
+
69
+ # Watch auth directory for changes and sync to Supabase
70
+ watch_dir() {
71
+ echo "[SYNC] Starting file watcher on ${AUTH_DIR}..."
72
+
73
+ # Use inotifywait to watch for file changes
74
+ inotifywait -m -r -e close_write,create,modify "${AUTH_DIR}" --format '%f' | while read filename; do
75
+ if [[ "$filename" == *.json ]]; then
76
+ echo "[SYNC] Detected change: ${filename}"
77
+ sleep 2 # Wait for file write to complete
78
+ if [ -f "${AUTH_DIR}/${filename}" ]; then
79
+ upload_file "${AUTH_DIR}/${filename}"
80
+ fi
81
+ fi
82
+ done
83
+ }
84
+
85
+ # Main command dispatcher
86
+ case "$1" in
87
+ download)
88
+ download
89
+ ;;
90
+ upload)
91
+ upload_file "$2"
92
+ ;;
93
+ upload-all)
94
+ upload_all
95
+ ;;
96
+ watch)
97
+ watch_dir
98
+ ;;
99
+ *)
100
+ echo "Usage: $0 {download|upload <file>|upload-all|watch}"
101
+ exit 1
102
+ ;;
103
+ esac