Initial Awawawa

This commit is contained in:
mueller_minki
2026-10-04 09:08:27 +02:00
commit 8e83a98ef4
76 changed files with 8225 additions and 0 deletions

67
web/patchbay_web/db.py Normal file
View File

@@ -0,0 +1,67 @@
"""SQLite access. The schema is shared with patchbayd (schema.sql)."""
import os
import sqlite3
import time
from flask import current_app, g
_HERE = os.path.dirname(os.path.abspath(__file__))
# Installed copy next to the package, else the repository root.
SCHEMA_PATHS = [os.path.join(_HERE, "schema.sql"), os.path.join(_HERE, "..", "..", "schema.sql")]
def schema_sql():
for p in SCHEMA_PATHS:
if os.path.exists(p):
with open(p, encoding="utf-8") as f:
return f.read()
raise FileNotFoundError("schema.sql not found")
def connect(path):
old = os.umask(0o077) # the DB holds password hashes
try:
conn = sqlite3.connect(path, timeout=5, isolation_level=None)
finally:
os.umask(old)
conn.row_factory = sqlite3.Row
conn.execute("PRAGMA busy_timeout = 5000")
conn.execute("PRAGMA foreign_keys = ON")
return conn
def init(path):
conn = connect(path)
conn.executescript(schema_sql())
# Databases from before tunnel nodes lack nodes.iface (same migration as db.c).
cols = {r["name"] for r in conn.execute("PRAGMA table_info(nodes)")}
if "iface" not in cols:
conn.execute("ALTER TABLE nodes ADD COLUMN iface TEXT NOT NULL DEFAULT ''")
conn.close()
def get():
if "db" not in g:
g.db = connect(current_app.config["PB_DB"])
return g.db
def close(_exc=None):
conn = g.pop("db", None)
if conn is not None:
conn.close()
def setting(key, default=None):
row = get().execute("SELECT value FROM settings WHERE key = ?", (key,)).fetchone()
return row["value"] if row else default
def set_setting(key, value):
get().execute("INSERT INTO settings (key, value) VALUES (?, ?) "
"ON CONFLICT (key) DO UPDATE SET value = excluded.value", (key, str(value)))
def now():
return int(time.time())