Some database and config updates. Trying to adjust the base profile menubar.

This commit is contained in:
Michael Woods
2025-12-27 15:36:33 -05:00
parent ea60fc2286
commit a206e82874
5 changed files with 32 additions and 10 deletions

View File

@@ -15,4 +15,4 @@ class Settings(BaseSettings):
model_config = SettingsConfigDict(
case_sensitive=False, # Make environment variable names case-sensitive
env_prefix="PS_APP_" # Use a prefix for environment variables (e.g., MY_APP_DATABASE_URL)
)
)

View File

@@ -1,13 +1,18 @@
from copy import deepcopy
from fastapi import Depends
from typing import Annotated, Generator
from os.path import isfile
import ZEO
import ZODB
import json
from ZODB.Connection import Connection
import transaction
import logging
from .config import Settings # assuming Settings has zeo_file: str
from ..common.util import convert_from_persistent
settings = Settings()
@@ -63,4 +68,12 @@ def get_transaction_manager():
# Annotated dependencies for routers
DbDependency = Annotated[ZODB.DB, Depends(get_db)]
#ConnectionDependency = Annotated[Connection, Depends(get_connection)]
#ConnectionDependency = Annotated[Connection, Depends(get_connection)]
def get_server_config_from_db(db: DbDependency) -> dict:
with db.transaction() as conn:
db_config = convert_from_persistent(conn.root.config)
if type(db_config) is not dict:
raise RuntimeError("The config property is not a dict.")
db_config['server_callsign'] = conn.root.server_callsign
return db_config

View File

@@ -5,7 +5,7 @@ from fastapi.templating import Jinja2Templates
from pathlib import Path
import base64
from .database import init_db
from .database import init_db, get_db, get_server_config_from_db
from .routers import public, profile, messages, send
from .logging import init_logging
@@ -22,6 +22,8 @@ app = FastAPI(
# Define templates EARLY (before importing dashboard)
templates = Jinja2Templates(directory=BASE_DIR / "templates")
def b64decode_filter(value: str) -> str:
try:
decoded_bytes = base64.b64decode(value)
@@ -60,6 +62,12 @@ from .routers.jobs import dashboard_router as jobs_html_router
# initialize database
init_db()
db = get_db()
server_config = get_server_config_from_db(db)
templates.env.globals['server_name'] = server_config['server_name']
templates.env.globals['server_callsign'] = server_config['server_callsign']
templates.env.globals['motd'] = server_config['motd']
templates.env.globals['server_operator'] = server_config['operator']
# Include routers
app.include_router(public.router)

View File

@@ -10,7 +10,7 @@
<body class="bg-light">
<nav class="navbar navbar-dark bg-primary mb-4">
<div class="container-fluid">
<a class="navbar-brand" href="{{ url_for('dashboard') }}">PacketServer BBS</a>
<a class="navbar-brand" href="{{ url_for('dashboard') }}">{{ server_name }}</a>
<span class="navbar-text">
Logged in as: <strong>{{ current_user }}</strong>
{# Basic Auth note #}

View File

@@ -73,13 +73,14 @@ class Server:
if 'config' not in conn.root():
logging.debug("no config, writing blank default config")
conn.root.config = PersistentMapping(deepcopy(default_server_config))
conn.root.server_callsign = self.callsign
conn.root.config['blacklist'] = PersistentList()
for key in ['motd', 'operator']:
if key not in conn.root.config:
conn.root.config[key] = ""
if 'server_name' not in conn.root.config:
conn.root.config.server_name = default_server_name
logging.debug(f"Setting server callsign in db to: {self.callsign}")
conn.root.server_callsign = self.callsign
for key in ['motd', 'operator']:
if key not in conn.root.config:
conn.root.config[key] = ""
if 'server_name' not in conn.root.config:
conn.root.config['server_name'] = default_server_name
if 'SYSTEM' not in conn.root.config['blacklist']:
logging.debug("Adding 'SYSTEM' to blacklist in case someone feels like violating FCC rules.")
conn.root.config['blacklist'].append('SYSTEM')