Spaces:
Paused
Paused
Space Bot
commited on
Commit
·
8d2dc53
1
Parent(s):
36905d3
Add database encryption system with initial backup
Browse files- .gitignore +2 -0
- .space/Dockerfile +0 -14
- backend/scripts/db_crypt.sh +100 -0
- backend/start.sh +5 -0
.gitignore
CHANGED
|
@@ -307,3 +307,5 @@ dist
|
|
| 307 |
cypress/videos
|
| 308 |
cypress/screenshots
|
| 309 |
.vscode/settings.json
|
|
|
|
|
|
|
|
|
| 307 |
cypress/videos
|
| 308 |
cypress/screenshots
|
| 309 |
.vscode/settings.json
|
| 310 |
+
|
| 311 |
+
webui.db
|
.space/Dockerfile
DELETED
|
@@ -1,14 +0,0 @@
|
|
| 1 |
-
FROM ghcr.io/open-webui/open-webui:main
|
| 2 |
-
|
| 3 |
-
# Install gpg
|
| 4 |
-
USER root
|
| 5 |
-
RUN apt-get update && \
|
| 6 |
-
apt-get install -y --no-install-recommends gpg && \
|
| 7 |
-
rm -rf /var/lib/apt/lists/* && \
|
| 8 |
-
gpg --version # Verify installation
|
| 9 |
-
|
| 10 |
-
# Set correct permissions
|
| 11 |
-
RUN mkdir -p /app/backend/db_backup && \
|
| 12 |
-
chown -R 1000:1000 /app/backend/db_backup
|
| 13 |
-
|
| 14 |
-
USER 1000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backend/scripts/db_crypt.sh
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
|
| 3 |
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 4 |
+
BACKEND_DIR="$(realpath "$SCRIPT_DIR/..")"
|
| 5 |
+
SPACE_NAME="thryyyyy/open-webui"
|
| 6 |
+
|
| 7 |
+
function check_requirements() {
|
| 8 |
+
if ! command -v gpg >/dev/null; then
|
| 9 |
+
echo "Error: gpg is not installed"
|
| 10 |
+
return 1
|
| 11 |
+
fi
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
function validate_secrets() {
|
| 15 |
+
if [ -z "$BACKUP_PASSPHRASE" ]; then
|
| 16 |
+
echo "Error: BACKUP_PASSPHRASE secret not set"
|
| 17 |
+
return 1
|
| 18 |
+
fi
|
| 19 |
+
|
| 20 |
+
if [ -z "$HF_TOKEN" ]; then
|
| 21 |
+
echo "Error: HF_TOKEN secret not set"
|
| 22 |
+
return 1
|
| 23 |
+
fi
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
function decrypt_database() {
|
| 27 |
+
validate_secrets || return 1
|
| 28 |
+
|
| 29 |
+
mkdir -p "$BACKEND_DIR/data"
|
| 30 |
+
|
| 31 |
+
if [ -f "$BACKEND_DIR/db_backup/webui.db.gpg" ]; then
|
| 32 |
+
echo "Decrypting database backup..."
|
| 33 |
+
gpg --batch --yes --passphrase "$BACKUP_PASSPHRASE" -d \
|
| 34 |
+
-o "$BACKEND_DIR/data/webui.db" "$BACKEND_DIR/db_backup/webui.db.gpg"
|
| 35 |
+
|
| 36 |
+
if [ $? -eq 0 ]; then
|
| 37 |
+
echo "Database decrypted successfully"
|
| 38 |
+
return 0
|
| 39 |
+
else
|
| 40 |
+
echo "Failed to decrypt database"
|
| 41 |
+
return 1
|
| 42 |
+
fi
|
| 43 |
+
else
|
| 44 |
+
echo "No encrypted backup found at db_backup/webui.db.gpg"
|
| 45 |
+
# Not an error, might be first run
|
| 46 |
+
return 0
|
| 47 |
+
fi
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
function encrypt_database() {
|
| 51 |
+
validate_secrets || return 1
|
| 52 |
+
|
| 53 |
+
if [ ! -f "$BACKEND_DIR/data/webui.db" ]; then
|
| 54 |
+
echo "Database not found at data/webui.db"
|
| 55 |
+
return 1
|
| 56 |
+
fi
|
| 57 |
+
|
| 58 |
+
mkdir -p "$BACKEND_DIR/db_backup"
|
| 59 |
+
|
| 60 |
+
echo "Encrypting database..."
|
| 61 |
+
gpg --batch --yes --passphrase "$BACKUP_PASSPHRASE" -c --cipher-algo AES256 \
|
| 62 |
+
-o "$BACKEND_DIR/db_backup/webui.db.gpg" "$BACKEND_DIR/data/webui.db"
|
| 63 |
+
|
| 64 |
+
if [ $? -eq 0 ]; then
|
| 65 |
+
echo "Database encrypted successfully"
|
| 66 |
+
cd "$BACKEND_DIR" || exit 1
|
| 67 |
+
|
| 68 |
+
# Configure Git for this operation
|
| 69 |
+
git config --local user.email "space-bot@huggingface.co"
|
| 70 |
+
git config --local user.name "Space Bot"
|
| 71 |
+
|
| 72 |
+
echo "Committing and pushing changes..."
|
| 73 |
+
git add db_backup/webui.db.gpg
|
| 74 |
+
git commit -m "Update encrypted database backup"
|
| 75 |
+
|
| 76 |
+
# Push using the token
|
| 77 |
+
REPO_URL="https://user:$HF_TOKEN@huggingface.co/spaces/$SPACE_NAME"
|
| 78 |
+
if git push "$REPO_URL" main; then
|
| 79 |
+
echo "Successfully pushed backup to repository"
|
| 80 |
+
cd - >/dev/null
|
| 81 |
+
return 0
|
| 82 |
+
else
|
| 83 |
+
echo "Failed to push to repository"
|
| 84 |
+
cd - >/dev/null
|
| 85 |
+
return 1
|
| 86 |
+
fi
|
| 87 |
+
else
|
| 88 |
+
echo "Failed to encrypt database"
|
| 89 |
+
return 1
|
| 90 |
+
fi
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
# Check requirements first
|
| 94 |
+
check_requirements || exit 1
|
| 95 |
+
|
| 96 |
+
# If script is run directly, default to encryption
|
| 97 |
+
# (equivalent to fish's: if test (status filename) = (status -f))
|
| 98 |
+
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
|
| 99 |
+
encrypt_database
|
| 100 |
+
fi
|
backend/start.sh
CHANGED
|
@@ -2,6 +2,11 @@
|
|
| 2 |
|
| 3 |
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
| 4 |
cd "$SCRIPT_DIR" || exit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
KEY_FILE=.webui_secret_key
|
| 7 |
|
|
|
|
| 2 |
|
| 3 |
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
| 4 |
cd "$SCRIPT_DIR" || exit
|
| 5 |
+
# Source encryption functions
|
| 6 |
+
source scripts/db_crypt.sh
|
| 7 |
+
|
| 8 |
+
# Check requirements and decrypt database if backup exists
|
| 9 |
+
check_requirements && decrypt_database
|
| 10 |
|
| 11 |
KEY_FILE=.webui_secret_key
|
| 12 |
|