v0.1.7 — auto-migrate 301→302 on startup, auto-install sqlite3, ensure_sqlite helper

This commit is contained in:
Hendrik 2026-05-01 18:56:42 +02:00
parent d695d4c8c9
commit c75fa5aa18
3 changed files with 38 additions and 4 deletions

View file

@ -103,26 +103,36 @@ cmd_caddy() {
esac
}
ensure_sqlite() {
if command -v sqlite3 >/dev/null 2>&1; then return 0; fi
if [[ $EUID -eq 0 ]]; then
echo "==> sqlite3 wird installiert..."
apt-get install -y -qq sqlite3 >/dev/null 2>&1 && return 0
fi
echo "sqlite3 nicht installiert. Bitte ausführen: sudo apt install -y sqlite3" >&2
return 1
}
cmd_db() {
command -v sqlite3 >/dev/null || { echo "sqlite3 nicht installiert: apt install -y sqlite3"; exit 1; }
ensure_sqlite || exit 1
sqlite3 -header -column "$DB"
}
cmd_domains() {
command -v sqlite3 >/dev/null || { echo "sqlite3 nicht installiert"; exit 1; }
ensure_sqlite || exit 1
sqlite3 -header -column "$DB" \
"SELECT id, domain, status, redirect_code AS code, COALESCE(target_url, (SELECT target_url FROM domain_groups g WHERE g.id = d.group_id), '—') AS target FROM domains d ORDER BY created_at DESC;"
}
cmd_hits() {
command -v sqlite3 >/dev/null || { echo "sqlite3 nicht installiert"; exit 1; }
ensure_sqlite || exit 1
local n="${1:-20}"
sqlite3 -header -column "$DB" \
"SELECT datetime(ts/1000,'unixepoch','localtime') AS time, (SELECT domain FROM domains WHERE id = h.domain_id) AS domain, country, substr(path,1,40) AS path FROM hits h ORDER BY ts DESC LIMIT $n;"
}
cmd_tokens() {
command -v sqlite3 >/dev/null || { echo "sqlite3 nicht installiert"; exit 1; }
ensure_sqlite || exit 1
sqlite3 -header -column "$DB" \
"SELECT id, name, scopes, datetime(created_at/1000,'unixepoch','localtime') AS created, CASE WHEN revoked_at IS NULL THEN 'active' ELSE 'revoked' END AS status FROM api_tokens ORDER BY id DESC;"
}

View file

@ -91,6 +91,25 @@ function ensureSchema(db: Database.Database) {
log TEXT
);
`);
runMigrations(db);
}
function getSettingDirect(db: Database.Database, key: string): string | null {
const row = db.prepare("SELECT value FROM settings WHERE key = ?").get(key) as { value: string } | undefined;
return row?.value ?? null;
}
function setSettingDirect(db: Database.Database, key: string, value: string) {
db.prepare("INSERT INTO settings (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(key, value);
}
function runMigrations(db: Database.Database) {
// m_301_to_302: switch existing 301-redirects to 302 so browser-cache stops eating hits.
if (getSettingDirect(db, "m_301_to_302") !== "done") {
db.prepare("UPDATE domains SET redirect_code = 302 WHERE redirect_code = 301").run();
db.prepare("UPDATE domain_groups SET redirect_code = 302 WHERE redirect_code = 301").run();
setSettingDirect(db, "m_301_to_302", "done");
}
}
export function getSetting(key: string): string | null {

View file

@ -15,6 +15,11 @@ cd "$INSTALL_DIR"
chmod +x "$INSTALL_DIR/scripts/"*.sh 2>/dev/null || true
chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR"
# Sicherstellen dass sqlite3 für die CLI da ist (idempotent, keine Fehler wenn schon da)
if ! command -v sqlite3 >/dev/null 2>&1; then
apt-get install -y -qq sqlite3 >/dev/null 2>&1 || true
fi
if [[ -z "$TAG" ]]; then
TAG=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" 2>/dev/null \
| grep -m1 '"tag_name"' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/' || true)