diff --git a/api/advent22_api/core/config.py b/api/advent22_api/core/config.py index 8811661..03c1730 100644 --- a/api/advent22_api/core/config.py +++ b/api/advent22_api/core/config.py @@ -4,15 +4,10 @@ from markdown import markdown from pydantic import BaseModel, ConfigDict, field_validator from .dav.webdav import WebDAV -from .settings import SETTINGS +from .settings import SETTINGS, Credentials from .transformed_string import TransformedString -class User(BaseModel): - name: str - password: str - - class Site(BaseModel): model_config = ConfigDict(validate_default=True) @@ -60,7 +55,7 @@ class Image(BaseModel): class Config(BaseModel): # Login-Daten für Admin-Modus - admin: User + admin: Credentials # Lösungswort solution: TransformedString diff --git a/api/advent22_api/core/dav/webdav.py b/api/advent22_api/core/dav/webdav.py index 2e60a16..a5d8b67 100644 --- a/api/advent22_api/core/dav/webdav.py +++ b/api/advent22_api/core/dav/webdav.py @@ -16,8 +16,8 @@ class WebDAV: _webdav_client = WebDAVclient( { "webdav_hostname": SETTINGS.webdav.url, - "webdav_login": SETTINGS.webdav.username, - "webdav_password": SETTINGS.webdav.password, + "webdav_login": SETTINGS.webdav.auth.username, + "webdav_password": SETTINGS.webdav.auth.password, } ) diff --git a/api/advent22_api/core/settings.py b/api/advent22_api/core/settings.py index 2a4ffc9..d0d2408 100644 --- a/api/advent22_api/core/settings.py +++ b/api/advent22_api/core/settings.py @@ -6,6 +6,11 @@ from pydantic_settings import BaseSettings, SettingsConfigDict T = TypeVar("T") +class Credentials(BaseModel): + username: str = "" + password: str = "" + + class DavSettings(BaseModel): """ Connection to a DAV server. @@ -16,8 +21,10 @@ class DavSettings(BaseModel): path: str = "/remote.php/webdav" prefix: str = "/advent22" - username: str = "advent22_user" - password: str = "password" + auth: Credentials = Credentials( + username="advent22_user", + password="password", + ) cache_ttl: int = 60 * 10 config_filename: str = "config.toml" diff --git a/api/advent22_api/routers/_security.py b/api/advent22_api/routers/_security.py index 6a6eb81..47e14c1 100644 --- a/api/advent22_api/routers/_security.py +++ b/api/advent22_api/routers/_security.py @@ -21,7 +21,7 @@ async def user_is_admin( username_correct = secrets.compare_digest( credentials.username.lower(), - cfg.admin.name.lower(), + cfg.admin.username.lower(), ) password_correct = secrets.compare_digest( credentials.password, diff --git a/api/advent22_api/routers/admin.py b/api/advent22_api/routers/admin.py index ee5bb4b..cc7fd8a 100644 --- a/api/advent22_api/routers/admin.py +++ b/api/advent22_api/routers/admin.py @@ -5,7 +5,11 @@ from pydantic import BaseModel from advent22_api.core.helpers import EventDates -from ..core.calendar_config import CalendarConfig, DoorsSaved, get_calendar_config +from ..core.calendar_config import ( + CalendarConfig, + DoorsSaved, + get_calendar_config, +) from ..core.config import Config, Image, get_config from ..core.depends import ( TTFont, @@ -14,7 +18,7 @@ from ..core.depends import ( get_all_parts, get_all_ttfonts, ) -from ..core.settings import SETTINGS, RedisSettings +from ..core.settings import SETTINGS, Credentials, RedisSettings from ._security import require_admin, user_is_admin router = APIRouter(prefix="/admin", tags=["admin"]) @@ -170,24 +174,16 @@ async def put_doors( await cal_cfg.change(cfg) -@router.get("/dav_credentials") -async def get_dav_credentials( - _: None = Depends(require_admin), -) -> tuple[str, str]: - """ - Zugangsdaten für WebDAV - """ - - return SETTINGS.webdav.username, SETTINGS.webdav.password - - -@router.get("/ui_credentials") -async def get_ui_credentials( +@router.get("/credentials/{name}") +async def get_credentials( + name: str, _: None = Depends(require_admin), cfg: Config = Depends(get_config), -) -> tuple[str, str]: - """ - Zugangsdaten für Admin-UI - """ +) -> Credentials: - return cfg.admin.name, cfg.admin.password + if name == "dav": + return SETTINGS.webdav.auth + elif name == "ui": + return cfg.admin + else: + return Credentials() diff --git a/ui/src/components/admin/ConfigView.vue b/ui/src/components/admin/ConfigView.vue index 2e214a7..e0eb483 100644 --- a/ui/src/components/admin/ConfigView.vue +++ b/ui/src/components/admin/ConfigView.vue @@ -140,14 +140,14 @@