v0.1.7 — auto-migrate 301→302 on startup, auto-install sqlite3, ensure_sqlite helper
This commit is contained in:
parent
d695d4c8c9
commit
c75fa5aa18
3 changed files with 38 additions and 4 deletions
|
|
@ -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;"
|
||||
}
|
||||
|
|
|
|||
19
lib/db.ts
19
lib/db.ts
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue