| #!/usr/bin/env bash |
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| BACKEND_DIR="$(realpath "$SCRIPT_DIR/..")" |
| SPACE_NAME="thryyyyy/open-webui" |
|
|
| function check_requirements() { |
| if ! command -v gpg >/dev/null; then |
| echo "Error: gpg is not installed" |
| return 1 |
| fi |
| } |
|
|
| function validate_secrets() { |
| if [ -z "$BACKUP_PASSPHRASE" ]; then |
| echo "Error: BACKUP_PASSPHRASE secret not set" |
| return 1 |
| fi |
|
|
| if [ -z "$HF_TOKEN" ]; then |
| echo "Error: HF_TOKEN secret not set" |
| return 1 |
| fi |
| } |
|
|
| function decrypt_database() { |
| validate_secrets || return 1 |
|
|
| mkdir -p "$BACKEND_DIR/data" |
|
|
| if [ -f "$BACKEND_DIR/db_backup/webui.db.gpg" ]; then |
| echo "Decrypting database backup..." |
| gpg --batch --yes --passphrase "$BACKUP_PASSPHRASE" -d \ |
| -o "$BACKEND_DIR/data/webui.db" "$BACKEND_DIR/db_backup/webui.db.gpg" |
|
|
| if [ $? -eq 0 ]; then |
| echo "Database decrypted successfully" |
| return 0 |
| else |
| echo "Failed to decrypt database" |
| return 1 |
| fi |
| else |
| echo "No encrypted backup found at db_backup/webui.db.gpg" |
| |
| return 0 |
| fi |
| } |
|
|
| function encrypt_database() { |
| validate_secrets || return 1 |
|
|
| if [ ! -f "$BACKEND_DIR/data/webui.db" ]; then |
| echo "Database not found at data/webui.db" |
| return 1 |
| fi |
|
|
| mkdir -p "$BACKEND_DIR/db_backup" |
|
|
| echo "Encrypting database..." |
| gpg --batch --yes --passphrase "$BACKUP_PASSPHRASE" -c --cipher-algo AES256 \ |
| -o "$BACKEND_DIR/db_backup/webui.db.gpg" "$BACKEND_DIR/data/webui.db" |
|
|
| if [ $? -eq 0 ]; then |
| echo "Database encrypted successfully" |
| cd "$BACKEND_DIR" || exit 1 |
|
|
| |
| git config --local user.email "space-bot@huggingface.co" |
| git config --local user.name "Space Bot" |
|
|
| echo "Committing and pushing changes..." |
| git add db_backup/webui.db.gpg |
| git commit -m "Update encrypted database backup" |
|
|
| |
| REPO_URL="https://user:$HF_TOKEN@huggingface.co/spaces/$SPACE_NAME" |
| if git push "$REPO_URL" main; then |
| echo "Successfully pushed backup to repository" |
| cd - >/dev/null |
| return 0 |
| else |
| echo "Failed to push to repository" |
| cd - >/dev/null |
| return 1 |
| fi |
| else |
| echo "Failed to encrypt database" |
| return 1 |
| fi |
| } |
|
|
| |
| check_requirements || exit 1 |
|
|
| |
| |
| if [ "${BASH_SOURCE[0]}" = "$0" ]; then |
| encrypt_database |
| fi |
|
|