#!/bin/bash set -euo pipefail now=$(date +"%Y%m%d%H%M") backup_dir=/home/beeshare/raid/serverBackup image=docker.io/vaultwarden/server:1.37.1 container=vaultwarden-restoretest port=18222 work=$(mktemp -d) cleanup() { podman rm -f ${container} >/dev/null 2>&1 || true rm -rf "${work}" } trap cleanup EXIT latest=$(ls -1t ${backup_dir}/beeserver_*.tar.gz.gpg | head -1) echo "[${now}] restore test using ${latest}" gpg --batch --passphrase-file /opt/backup/passphrase.txt -d "${latest}" \ | tar -xzf - -C "${work}" opt/backup/beeserver/vaultwarden data="${work}/opt/backup/beeserver/vaultwarden/data" [[ -s "${data}/db.sqlite3" ]] [[ -s "${data}/rsa_key.pem" ]] echo " db and rsa_key present" integrity=$(sqlite3 "${data}/db.sqlite3" "PRAGMA integrity_check;") [[ "${integrity}" == "ok" ]] echo " integrity_check ok" users=$(sqlite3 "${data}/db.sqlite3" "select count(*) from users;") [[ "${users}" -ge 1 ]] echo " users ${users}" email=$(sqlite3 "${data}/db.sqlite3" "select email from users limit 1;") podman run -d --rm --name ${container} -p 127.0.0.1:${port}:80 -v "${data}":/data ${image} >/dev/null for _ in $(seq 60) do if curl -sf http://127.0.0.1:${port}/api/config >/dev/null 2>&1 then break fi sleep 1 done config=$(curl -sf http://127.0.0.1:${port}/api/config) [[ "${config}" == *'"version"'* ]] echo " api/config ok" prelogin=$(curl -sf -X POST http://127.0.0.1:${port}/identity/accounts/prelogin \ -H 'Content-Type: application/json' \ -d "{\"email\":\"${email}\"}") [[ "${prelogin}" == *[Kk]df* ]] echo " prelogin ok for ${email}" echo "[${now}] restore test PASSED"