From af7cee5014a17cd6a5dcce539e51163d2defee3d Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Fri, 15 May 2026 11:17:27 +0300 Subject: [PATCH] feat: custom themes polishing --- .env.example | 3 - bot/app/web/admin_api_impl/routes.py | 1 + bot/app/web/admin_api_impl/settings.py | 7 + bot/app/web/admin_api_impl/themes.py | 169 ++++ bot/app/web/admin_settings_manifest.py | 1 + bot/app/web/frontend/src/App.svelte | 30 +- .../web/frontend/src/admin/AdminPanel.svelte | 14 +- .../admin/sections/AppearanceSection.svelte | 743 ++++++++++++++++++ .../src/admin/sections/SettingsSection.svelte | 16 +- .../src/admin/sections/ThemesSection.svelte | 267 ------- .../src/lib/admin/stores/settingsStore.js | 22 +- .../src/lib/admin/stores/themesStore.js | 84 ++ .../frontend/src/lib/webapp/BrandMark.svelte | 5 +- .../web/frontend/src/lib/webapp/constants.js | 2 +- .../web/frontend/src/lib/webapp/mockApi.js | 68 +- .../frontend/src/lib/webapp/previewMock.js | 1 + .../web/frontend/src/lib/webapp/publicApi.js | 6 +- bot/app/web/webapp/_runtime.py | 5 +- bot/app/web/webapp/assets.py | 155 +++- bot/app/web/webapp/routes.py | 12 +- bot/services/email_templates.py | 8 +- config/settings.py | 28 + config/webapp_themes_config.py | 29 +- docs/remnawave-minishop.webp | Bin 122284 -> 65602 bytes tests/test_settings.py | 19 + tests/test_webapp_assets.py | 34 +- tests/test_webapp_route_contract.py | 22 + tests/test_webapp_themes_config.py | 29 + 28 files changed, 1474 insertions(+), 306 deletions(-) create mode 100644 bot/app/web/frontend/src/admin/sections/AppearanceSection.svelte delete mode 100644 bot/app/web/frontend/src/admin/sections/ThemesSection.svelte diff --git a/.env.example b/.env.example index 7f71da8..16c6036 100644 --- a/.env.example +++ b/.env.example @@ -38,11 +38,8 @@ WEBAPP_ENABLED=True # WEBAPP_SERVER_HOST=0.0.0.0 # Internal listen host WEBAPP_SERVER_PORT=8081 # Internal/published Mini App port WEBAPP_TITLE="/minishop" # Mini App title -WEBAPP_PRIMARY_COLOR="#00fe7a" # Main UI color WEBAPP_THEMES_DIR=data/themes # Folder with theme subfolders: /theme.json and optional CSS/assets WEBAPP_DEFAULT_THEME= # Optional: override descriptor default theme key (e.g. light) -WEBAPP_LOGO_URL= # Optional logo URL; if empty the emoji below is used -WEBAPP_LOGO_EMOJI="πŸ«₯" # Emoji logo fallback shown in the header and login screen WEBAPP_SESSION_SECRET= # Optional: HMAC secret for webapp sessions; generated if empty WEBHOOK_SECRET_TOKEN= # Optional: Telegram webhook secret token; generated if empty WEBAPP_SESSION_TTL_SECONDS=86400 # Web App session lifetime (24h) diff --git a/bot/app/web/admin_api_impl/routes.py b/bot/app/web/admin_api_impl/routes.py index 4f1e93a..de1ed9f 100644 --- a/bot/app/web/admin_api_impl/routes.py +++ b/bot/app/web/admin_api_impl/routes.py @@ -56,4 +56,5 @@ def setup_admin_routes(app: web.Application) -> None: router.add_put("/api/admin/tariffs", admin_tariffs_save_route) router.add_get("/api/admin/themes", admin_themes_get_route) router.add_put("/api/admin/themes", admin_themes_save_route) + router.add_post("/api/admin/appearance/logo", admin_appearance_logo_upload_route) router.add_get("/api/admin/panel/internal-squads", admin_panel_internal_squads_route) diff --git a/bot/app/web/admin_api_impl/settings.py b/bot/app/web/admin_api_impl/settings.py index 787778f..3746394 100644 --- a/bot/app/web/admin_api_impl/settings.py +++ b/bot/app/web/admin_api_impl/settings.py @@ -70,5 +70,12 @@ async def admin_settings_patch_route(request: web.Request) -> web.Response: if isinstance(cache, dict): cache["ts"] = 0.0 cache["data"] = {} + if ( + "WEBAPP_LOGO_URL" in updates + or "WEBAPP_LOGO_URL" in deletes + or "WEBAPP_LOGO_USE_EMOJI" in updates + or "WEBAPP_LOGO_USE_EMOJI" in deletes + ): + request.app["webapp_logo_cache"] = None return _ok({"applied": result.get("applied", 0), "reverted": result.get("reverted", 0)}) diff --git a/bot/app/web/admin_api_impl/themes.py b/bot/app/web/admin_api_impl/themes.py index 983618d..f1b4d79 100644 --- a/bot/app/web/admin_api_impl/themes.py +++ b/bot/app/web/admin_api_impl/themes.py @@ -1,6 +1,14 @@ # ruff: noqa: F401,F403,F405,I001 from ._runtime import * # noqa: F403,F405 +import asyncio +import hashlib +import ipaddress +import re +import socket + +from aiohttp import ClientSession, ClientTimeout + from config.webapp_themes_config import ( WebappThemesConfig, ensure_webapp_core_themes, @@ -9,6 +17,167 @@ from config.webapp_themes_config import ( ) +WEBAPP_LOGO_MAX_BYTES = 2 * 1024 * 1024 +WEBAPP_UPLOADED_LOGO_DIR = Path(__file__).resolve().parents[4] / "data" / "webapp-logo" / "uploads" +WEBAPP_UPLOADED_LOGO_PATH = "/webapp-uploaded-logo" +WEBAPP_LOGO_UPLOAD_CONTENT_TYPES = { + ".gif": "image/gif", + ".ico": "image/x-icon", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + ".svg": "image/svg+xml", + ".webp": "image/webp", +} + + +def _detect_logo_extension( + body: bytes, content_type: str = "", filename: str = "" +) -> Optional[str]: + content_type = (content_type or "").split(";", 1)[0].strip().lower() + suffix = Path(filename or "").suffix.lower() + if content_type == "image/png" or body.startswith(b"\x89PNG\r\n\x1a\n"): + return ".png" + if content_type == "image/jpeg" or body.startswith(b"\xff\xd8\xff"): + return ".jpg" + if content_type == "image/gif" or body.startswith((b"GIF87a", b"GIF89a")): + return ".gif" + if content_type == "image/webp" or ( + len(body) > 12 and body[:4] == b"RIFF" and body[8:12] == b"WEBP" + ): + return ".webp" + if content_type in {"image/svg+xml", "image/svg"} or suffix == ".svg": + head = body[:512].lstrip().lower() + if head.startswith(b" str: + if not body or len(body) > WEBAPP_LOGO_MAX_BYTES: + raise ValueError("logo must be a non-empty image up to 2 MiB") + ext = _detect_logo_extension(body, content_type, filename) + if ext not in WEBAPP_LOGO_UPLOAD_CONTENT_TYPES: + raise ValueError("unsupported image type") + digest = hashlib.sha256(body).hexdigest()[:16] + safe_name = f"logo-{digest}{ext}" + WEBAPP_UPLOADED_LOGO_DIR.mkdir(parents=True, exist_ok=True) + (WEBAPP_UPLOADED_LOGO_DIR / safe_name).write_bytes(body) + return f"{WEBAPP_UPLOADED_LOGO_PATH}/{safe_name}" + + +async def _read_uploaded_logo_file(request: web.Request) -> tuple[bytes, str, str]: + reader = await request.multipart() + async for part in reader: + if part.name != "file": + continue + body = bytearray() + while True: + chunk = await part.read_chunk(size=64 * 1024) + if not chunk: + break + body.extend(chunk) + if len(body) > WEBAPP_LOGO_MAX_BYTES: + raise ValueError("logo must be up to 2 MiB") + return bytes(body), part.headers.get("Content-Type", ""), part.filename or "" + raise ValueError("file field is required") + + +async def _hostname_resolves_to_public_address(hostname: str) -> bool: + if not hostname: + return False + try: + ip_obj = ipaddress.ip_address(hostname) + return not ( + ip_obj.is_private + or ip_obj.is_loopback + or ip_obj.is_link_local + or ip_obj.is_unspecified + or ip_obj.is_reserved + ) + except ValueError: + pass + + loop = asyncio.get_running_loop() + try: + resolved = await loop.getaddrinfo(hostname, None, type=socket.SOCK_STREAM) + except Exception: + return False + + found_public_ip = False + for entry in resolved: + sockaddr = entry[4] + candidate = sockaddr[0] if sockaddr else "" + try: + ip_obj = ipaddress.ip_address(candidate) + except ValueError: + continue + if ( + ip_obj.is_private + or ip_obj.is_loopback + or ip_obj.is_link_local + or ip_obj.is_unspecified + or ip_obj.is_reserved + ): + return False + found_public_ip = True + return found_public_ip + + +async def _fetch_logo_from_url(url: str) -> tuple[bytes, str, str]: + parsed = urlsplit(url) + if parsed.scheme != "https" or not parsed.hostname: + raise ValueError("only https image URLs are supported") + if not await _hostname_resolves_to_public_address(parsed.hostname): + raise ValueError("logo URL must resolve to a public address") + + timeout = ClientTimeout(total=5) + async with ClientSession(timeout=timeout, headers={"User-Agent": "Mozilla/5.0"}) as session: + async with session.get( + url, + allow_redirects=False, + headers={"Accept": "image/avif,image/webp,image/svg+xml,image/png,image/*,*/*;q=0.8"}, + ) as response: + if response.status != 200: + raise ValueError(f"logo URL returned HTTP {response.status}") + content_type = ( + (response.headers.get("Content-Type") or "").split(";", 1)[0].strip().lower() + ) + if content_type and not content_type.startswith("image/"): + raise ValueError("logo URL returned non-image content") + body = bytearray() + async for chunk in response.content.iter_chunked(64 * 1024): + body.extend(chunk) + if len(body) > WEBAPP_LOGO_MAX_BYTES: + raise ValueError("logo must be up to 2 MiB") + return bytes(body), content_type, Path(parsed.path).name + + +async def admin_appearance_logo_upload_route(request: web.Request) -> web.Response: + _require_admin_user_id(request) + content_type = (request.headers.get("Content-Type") or "").lower() + try: + if content_type.startswith("multipart/form-data"): + body, detected_content_type, filename = await _read_uploaded_logo_file(request) + else: + payload = await _read_json(request) + source_url = str(payload.get("url") or "").strip() + if not source_url: + return _error(400, "invalid_payload", "url or file is required") + body, detected_content_type, filename = await _fetch_logo_from_url(source_url) + logo_url = _write_uploaded_logo(body, detected_content_type, filename) + except ValueError as exc: + return _error(400, "invalid_logo", str(exc)) + except OSError as exc: + logger.exception("Failed to save uploaded webapp logo") + return _error(500, "write_failed", str(exc)) + + return _ok({"logo_url": logo_url}) + + async def admin_themes_get_route(request: web.Request) -> web.Response: _require_admin_user_id(request) settings: Settings = request.app["settings"] diff --git a/bot/app/web/admin_settings_manifest.py b/bot/app/web/admin_settings_manifest.py index 1b4b578..031fbc5 100644 --- a/bot/app/web/admin_settings_manifest.py +++ b/bot/app/web/admin_settings_manifest.py @@ -79,6 +79,7 @@ SETTINGS_MANIFEST: List[SettingField] = [ SettingField( "WEBAPP_PRIMARY_COLOR", "color", "appearance", "Основной Ρ†Π²Π΅Ρ‚", placeholder="#00fe7a" ), + SettingField("WEBAPP_LOGO_USE_EMOJI", "bool", "appearance", "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эмодТи-Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ"), SettingField("WEBAPP_LOGO_URL", "url", "appearance", "URL Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ°"), SettingField("WEBAPP_LOGO_EMOJI", "string", "appearance", "Π­ΠΌΠΎΠ΄ΠΆΠΈ-Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ", placeholder="πŸ«₯"), SettingField( diff --git a/bot/app/web/frontend/src/App.svelte b/bot/app/web/frontend/src/App.svelte index ec51a5c..2467319 100644 --- a/bot/app/web/frontend/src/App.svelte +++ b/bot/app/web/frontend/src/App.svelte @@ -87,6 +87,7 @@ ...(MOCK ? MOCK.config : {}), ...(injectedConfig || {}), }; + const themePreviewKey = String(CFG.themePreviewKey || query.get("theme_preview") || "").trim(); const I18N = injectedI18n || {}; let telegramSdkStatus = "idle"; let telegramMiniAppInitData = ""; @@ -246,7 +247,7 @@ $: brandEmojiFont = CFG.logoEmojiFont || "system"; $: brand = normalizeBrand({ title: brandTitle, - logoUrl: CFG.logoUrl, + logoUrl: CFG.logoUseEmoji ? "" : CFG.logoUrl, emoji: brandEmoji, emojiFont: brandEmojiFont, }); @@ -308,7 +309,11 @@ $: user = data?.user || {}; $: themesCatalog = data?.themes_catalog || CFG.themesCatalog || { default_theme: "dark", themes: [] }; - $: resolvedThemeKey = resolveEffectiveThemeKey(themesCatalog); + $: previewThemeAllowed = Boolean(themePreviewKey && (!data?.user || user?.is_admin)); + $: previewThemeEntry = previewThemeAllowed + ? findThemeEntry(themesCatalog, themePreviewKey) + : null; + $: resolvedThemeKey = previewThemeEntry?.key || resolveEffectiveThemeKey(themesCatalog); $: activeThemeEntry = findThemeEntry(themesCatalog, resolvedThemeKey); $: darkThemeEntry = findThemeEntry(themesCatalog, "dark"); $: effectiveThemeEntry = @@ -870,13 +875,32 @@ ); } - async function handleAdminPersistedSaved() { + function adminPayloadHasLogoChange(options = {}) { + const keys = new Set([ + ...Object.keys(options.updates || {}), + ...(Array.isArray(options.deletes) ? options.deletes : []), + ]); + return [ + "WEBAPP_LOGO_URL", + "WEBAPP_LOGO_USE_EMOJI", + "WEBAPP_LOGO_EMOJI", + "WEBAPP_LOGO_EMOJI_FONT", + ].some((key) => keys.has(key)); + } + + async function handleAdminPersistedSaved(options = {}) { invalidateWebappTariffOptionCaches(billingStore); try { await loadData(); } catch { // Admin save already succeeded; a later full refresh will pick up new settings or catalog. } + const shouldReloadFrontend = + options?.reloadFrontend === true || + (!options?.deferFrontendReload && adminPayloadHasLogoChange(options)); + if (shouldReloadFrontend && typeof window !== "undefined") { + window.location.reload(); + } } function selectTariff(tariff) { diff --git a/bot/app/web/frontend/src/admin/AdminPanel.svelte b/bot/app/web/frontend/src/admin/AdminPanel.svelte index 91b7b46..6bc0291 100644 --- a/bot/app/web/frontend/src/admin/AdminPanel.svelte +++ b/bot/app/web/frontend/src/admin/AdminPanel.svelte @@ -35,7 +35,7 @@ import StatsSection from "./sections/StatsSection.svelte"; import TariffEditorModal from "./sections/TariffEditorModal.svelte"; import TariffsSection from "./sections/TariffsSection.svelte"; - import ThemesSection from "./sections/ThemesSection.svelte"; + import AppearanceSection from "./sections/AppearanceSection.svelte"; import UserDetailModal from "./sections/UserDetailModal.svelte"; import UsersSection from "./sections/UsersSection.svelte"; import { createAdsStore } from "../lib/admin/stores/adsStore.js"; @@ -115,7 +115,7 @@ label: at("nav_system", {}, "БистСма"), items: [ { id: "tariffs", label: at("nav_tariffs", {}, "Π’Π°Ρ€ΠΈΡ„Ρ‹"), icon: Coins }, - { id: "themes", label: at("nav_themes", {}, "Π’Π΅ΠΌΡ‹"), icon: Paintbrush }, + { id: "appearance", label: at("nav_appearance", {}, "Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄"), icon: Paintbrush }, { id: "settings", label: at("nav_settings", {}, "Настройки"), icon: Sliders }, ], }, @@ -158,9 +158,9 @@ title: at("section_tariffs_title", {}, "Π’Π°Ρ€ΠΈΡ„Ρ‹"), subtitle: at("section_tariffs_subtitle", {}, "ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΄Π°ΠΆ, ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ Π»ΠΈΠΌΠΈΡ‚Ρ‹"), }, - themes: { - title: at("section_themes_title", {}, "Π’Π΅ΠΌΡ‹ Web App"), - subtitle: at("section_themes_subtitle", {}, "Π¦Π²Π΅Ρ‚Π°, ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ ΠΈ Ρ‚Π΅ΠΌΡ‹ оформлСния Mini App"), + appearance: { + title: at("section_appearance_title", {}, "Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄"), + subtitle: at("section_appearance_subtitle", {}, "Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ, Ρ‚Π΅ΠΌΡ‹ ΠΈ Π°ΠΊΡ†Π΅Π½Ρ‚Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Mini App"), }, settings: { title: at("section_settings_title", {}, "Настройки прилоТСния"), @@ -646,8 +646,8 @@ {/if} - {#if active === "themes"} - + {#if active === "appearance"} + {/if} {#if active === "settings"} diff --git a/bot/app/web/frontend/src/admin/sections/AppearanceSection.svelte b/bot/app/web/frontend/src/admin/sections/AppearanceSection.svelte new file mode 100644 index 0000000..758592e --- /dev/null +++ b/bot/app/web/frontend/src/admin/sections/AppearanceSection.svelte @@ -0,0 +1,743 @@ + + +{#if themesLoading || settingsLoading} + {at("loading", {}, "Загрузка…")} +{:else} +
+
+
+
+

{at("appearance_brand_title", {}, "Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ")}

+ {at( + "appearance_brand_sub", + {}, + "Π€Π°ΠΉΠ», ссылка ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ emoji-Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ" + )} +
+
+ {#if dirtyCount} + + {at("settings_dirty_count", { count: dirtyCount }, `ИзмСнСний: ${dirtyCount}`)} + + {/if} + + + {settingsSaving || themesSaving + ? at("btn_saving", {}, "Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅...") + : at("btn_save", {}, "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ")} + +
+
+
+
+ {#if !useEmojiLogo && previewLogoUrl && !logoPreviewFailed} + { + logoPreviewFailed = true; + }} + /> + {:else if useEmojiLogo} + + {:else} + + {/if} +
+ +
+
+ + logoFileInput?.click()} + disabled={themesSaving} + > + + {at("appearance_logo_upload_file", {}, "Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»")} + +
+ + + {at("appearance_logo_upload_url", {}, "По ссылкС")} + +
+
+ +
+ +
+ + setAppearanceValue("WEBAPP_LOGO_EMOJI", event.currentTarget.value)} + /> + setAppearanceValue("WEBAPP_LOGO_EMOJI_FONT", value)} + /> +
+
+
+
+
+ +
+
+
+

{at("appearance_themes_title", {}, "Π’Π΅ΠΌΡ‹")}

+ {at( + "appearance_themes_sub", + {}, + "Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°, accent color ΠΈ прСдпросмотр" + )} +
+
+ + + {at("btn_refresh", {}, "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ")} + + + + {at("btn_save", {}, "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ")} + +
+
+
+ {#if !themesCatalog.themes.length} + + {at( + "themes_catalog_empty", + {}, + "ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ пуст. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Ρ‚Π΅ΠΌΡ‹ Π² data/themes ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ список." + )} + + {:else} +
+ {#each themesCatalog.themes as theme (theme.key)} + {@const isCurrent = theme.key === activeKey} +
selectTheme(theme, event)} + onkeydown={(event) => handleThemeKeydown(event, theme)} + > + + + {themeTitle(theme)} + {#if isCurrent} + {at("status_current", {}, "ВСкущая")} + {/if} + + {theme.key} + + + + {themeDescription(theme)} + + + +
+ previewTheme(event, theme)} + > + + {at("appearance_preview_theme", {}, "ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€")} + +
+ +
+ {/each} +
+ {/if} +
+
+
+{/if} + + diff --git a/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte b/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte index 893157b..a26d1a5 100644 --- a/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte +++ b/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte @@ -17,28 +17,32 @@ const settingsStore = getContext("settingsStore"); $: ({ settingsSections, settingsLoading, settingsDirty, settingsSaving } = $settingsStore); + $: visibleSettingsSections = settingsSections.filter((section) => section.id !== "appearance"); let settingsOpenSections = []; let settingsOpenSubsections = {}; let revealedSecrets = new Set(); $: settingsAllOpen = - settingsSections.length > 0 && settingsOpenSections.length === settingsSections.length; + visibleSettingsSections.length > 0 && + settingsOpenSections.length === visibleSettingsSections.length; onMount(() => { settingsStore.loadSettings().then(() => { if ($settingsStore.settingsSections.length) { - const ids = $settingsStore.settingsSections.map((s) => s.id); + const ids = $settingsStore.settingsSections + .filter((s) => s.id !== "appearance") + .map((s) => s.id); settingsOpenSections = isCompact ? ids.slice(0, 1) : ids.slice(); } }); }); function toggleAllSections() { - if (settingsOpenSections.length === settingsSections.length) { + if (settingsOpenSections.length === visibleSettingsSections.length) { settingsOpenSections = []; } else { - settingsOpenSections = settingsSections.map((s) => s.id); + settingsOpenSections = visibleSettingsSections.map((s) => s.id); } } @@ -229,7 +233,7 @@ {/snippet} -{#if settingsLoading || !settingsSections.length} +{#if settingsLoading || !visibleSettingsSections.length} {settingsLoading ? at("loading", {}, "Загрузка…") @@ -265,7 +269,7 @@ - {#each settingsSections as section} + {#each visibleSettingsSections as section} {@const dirtyInSection = section.fields.filter((f) => Boolean(settingsDirty[f.key])).length} {@const overriddenInSection = section.fields.filter((f) => isOverridden(f)).length} diff --git a/bot/app/web/frontend/src/admin/sections/ThemesSection.svelte b/bot/app/web/frontend/src/admin/sections/ThemesSection.svelte deleted file mode 100644 index e10a2a8..0000000 --- a/bot/app/web/frontend/src/admin/sections/ThemesSection.svelte +++ /dev/null @@ -1,267 +0,0 @@ - - -{#if themesLoading} - {at("loading", {}, "Загрузка…")} -{:else} -
-
-
-

{at("themes_catalog_title", {}, "Π’Π΅ΠΌΡ‹ Web App")}

- {at( - "themes_catalog_sub", - {}, - "ВСкущая Ρ‚Π΅ΠΌΠ° выбираСтся ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ; внСшний Π²ΠΈΠ΄ рСдактируСтся Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ‚Π΅ΠΌΡ‹" - )} -
-
- - - {at("btn_refresh", {}, "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ")} - - - - {at("btn_save", {}, "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ")} - -
-
-
- {#if !themesCatalog.themes.length} - - {at( - "themes_catalog_empty", - {}, - "ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ пуст. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Ρ‚Π΅ΠΌΡ‹ Π² data/themes ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ список." - )} - - {:else} -
- {#each themesCatalog.themes as theme (theme.key)} - {@const isCurrent = theme.key === activeKey} -
selectTheme(theme, event)} - onkeydown={(event) => handleCardKeydown(event, theme)} - > - - - {themeTitle(theme)} - {#if isCurrent} - {at("status_current", {}, "ВСкущая")} - {/if} - - {theme.key} - - - - {themeDescription(theme)} - - - - -
- {/each} -
- {/if} -
-
-{/if} - - diff --git a/bot/app/web/frontend/src/lib/admin/stores/settingsStore.js b/bot/app/web/frontend/src/lib/admin/stores/settingsStore.js index 448d558..e74c3e1 100644 --- a/bot/app/web/frontend/src/lib/admin/stores/settingsStore.js +++ b/bot/app/web/frontend/src/lib/admin/stores/settingsStore.js @@ -38,13 +38,30 @@ export function createSettingsStore({ api, onToast, at }) { }); } + function setFieldValue(key, value) { + state.update((s) => { + const nextDirty = { ...s.settingsDirty }; + delete nextDirty[key]; + return { + ...s, + settingsDirty: nextDirty, + settingsSections: (s.settingsSections || []).map((section) => ({ + ...section, + fields: (section.fields || []).map((field) => + field.key === key ? { ...field, value, overridden: true } : field + ), + })), + }; + }); + } + async function saveSettings(onSettingsSaved) { let dirty = {}; state.update((s) => { dirty = s.settingsDirty; return s; }); - if (!Object.keys(dirty).length) return; + if (!Object.keys(dirty).length) return true; state.update((s) => ({ ...s, settingsSaving: true })); try { @@ -63,6 +80,7 @@ export function createSettingsStore({ api, onToast, at }) { state.update((s) => ({ ...s, settingsDirty: {} })); if (onSettingsSaved) await onSettingsSaved({ updates, deletes }); await loadSettings(); + return true; } else if (res?.errors) { const summary = Object.entries(res.errors) .map(([k, v]) => `${k}: ${v}`) @@ -71,6 +89,7 @@ export function createSettingsStore({ api, onToast, at }) { } else { onToast(res?.error || "Ошибка"); } + return false; } finally { state.update((s) => ({ ...s, settingsSaving: false })); } @@ -91,6 +110,7 @@ export function createSettingsStore({ api, onToast, at }) { loadSettings, markDirty, clearDirty, + setFieldValue, resetField, saveSettings, }; diff --git a/bot/app/web/frontend/src/lib/admin/stores/themesStore.js b/bot/app/web/frontend/src/lib/admin/stores/themesStore.js index f0f63d8..f1db26e 100644 --- a/bot/app/web/frontend/src/lib/admin/stores/themesStore.js +++ b/bot/app/web/frontend/src/lib/admin/stores/themesStore.js @@ -58,6 +58,67 @@ export function createThemesStore({ api, onThemesSaved, flash, at }) { } } + async function uploadLogoFile(file) { + if (!file) return null; + state.update((s) => ({ ...s, themesSaving: true })); + try { + const body = new FormData(); + body.append("file", file); + const data = await api("/admin/appearance/logo", { + method: "POST", + body, + }); + if (data?.ok) { + flash( + at( + "appearance_logo_uploaded_pending", + {}, + "Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ." + ) + ); + return data.logo_url || ""; + } + flash( + data?.message || + data?.error || + at("appearance_logo_upload_failed", {}, "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ") + ); + return null; + } finally { + state.update((s) => ({ ...s, themesSaving: false })); + } + } + + async function uploadLogoUrl(url) { + const sourceUrl = String(url || "").trim(); + if (!sourceUrl) return null; + state.update((s) => ({ ...s, themesSaving: true })); + try { + const data = await api("/admin/appearance/logo", { + method: "POST", + body: JSON.stringify({ url: sourceUrl }), + }); + if (data?.ok) { + flash( + at( + "appearance_logo_uploaded_pending", + {}, + "Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ." + ) + ); + return data.logo_url || ""; + } + flash( + data?.message || + data?.error || + at("appearance_logo_upload_failed", {}, "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ") + ); + return null; + } finally { + state.update((s) => ({ ...s, themesSaving: false })); + } + } + async function setCurrentTheme(key) { let changed = false; state.update((s) => ({ @@ -102,12 +163,35 @@ export function createThemesStore({ api, onThemesSaved, flash, at }) { })); } + function setThemeAccent(key, accent) { + state.update((s) => ({ + ...s, + themesCatalog: { + ...s.themesCatalog, + themes: (s.themesCatalog.themes || []).map((theme) => + theme.key === key + ? { + ...theme, + tokens: { + ...(theme.tokens || {}), + accent: String(accent || "").trim() || null, + }, + } + : theme + ), + }, + })); + } + return { subscribe: state.subscribe, loadThemes, saveThemes, setCurrentTheme, + setThemeAccent, togglePrimaryAccent, toggleAdminUse, + uploadLogoFile, + uploadLogoUrl, }; } diff --git a/bot/app/web/frontend/src/lib/webapp/BrandMark.svelte b/bot/app/web/frontend/src/lib/webapp/BrandMark.svelte index 1cdec74..cabedee 100644 --- a/bot/app/web/frontend/src/lib/webapp/BrandMark.svelte +++ b/bot/app/web/frontend/src/lib/webapp/BrandMark.svelte @@ -33,6 +33,7 @@ export let emojiFont = ""; export let size = "sm"; export let animate = false; + export let fallbackEmoji = true; let className = ""; export { className as class }; @@ -206,7 +207,7 @@ clearLogoLoadTimeout(); }} /> - {:else if useAnimatedEmoji} + {:else if fallbackEmoji && useAnimatedEmoji} - {:else} + {:else if fallbackEmoji} ({}), } = {}) { + const isFormDataBody = (body) => typeof FormData !== "undefined" && body instanceof FormData; + async function api(path, options = {}) { if (mockApi) return mockApi(path, options, getMockContext()); @@ -18,7 +20,9 @@ export function createApiClient({ if (csrf && ["POST", "PUT", "PATCH", "DELETE"].includes(method)) { headers["X-CSRF-Token"] = csrf; } - if (options.body && !headers["Content-Type"]) headers["Content-Type"] = "application/json"; + if (options.body && !headers["Content-Type"] && !isFormDataBody(options.body)) { + headers["Content-Type"] = "application/json"; + } const response = await fetch(`${apiBase}${path}`, { ...options, diff --git a/bot/app/web/webapp/_runtime.py b/bot/app/web/webapp/_runtime.py index 5e10534..8c94f0b 100644 --- a/bot/app/web/webapp/_runtime.py +++ b/bot/app/web/webapp/_runtime.py @@ -2,6 +2,7 @@ import asyncio import base64 import hashlib +import html import hmac import io import ipaddress @@ -17,7 +18,7 @@ from collections import deque from datetime import datetime, timezone from pathlib import Path from typing import Any, Dict, List, Optional, Tuple -from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit +from urllib.parse import parse_qsl, quote, urlencode, urlsplit, urlunsplit from aiogram import Bot, Dispatcher from aiogram.types import LabeledPrice @@ -65,6 +66,8 @@ TEMPLATE_PATH = Path(__file__).resolve().parents[1] / "templates" / "subscriptio ASSET_DIR = TEMPLATE_PATH.parent WEBAPP_LOGO_PROXY_PATH = "/webapp-logo" WEBAPP_LOGO_CACHE_DIR = Path(__file__).resolve().parents[4] / "data" / "webapp-logo" +WEBAPP_UPLOADED_LOGO_DIR = WEBAPP_LOGO_CACHE_DIR / "uploads" +WEBAPP_UPLOADED_LOGO_PATH = "/webapp-uploaded-logo" WEBAPP_EMOJI_CACHE_DIR = Path(__file__).resolve().parents[4] / "data" / "webapp-emoji" WEBAPP_CONFIG_PLACEHOLDER = "" WEBAPP_I18N_PLACEHOLDER = "" diff --git a/bot/app/web/webapp/assets.py b/bot/app/web/webapp/assets.py index b27caa9..198ba08 100644 --- a/bot/app/web/webapp/assets.py +++ b/bot/app/web/webapp/assets.py @@ -5,6 +5,7 @@ from config.webapp_themes_config import ( default_webapp_theme_asset_file, default_webapp_theme_css_files, ensure_default_webapp_theme_descriptor_files, + public_theme_payload, public_themes_catalog_payload, ) @@ -123,6 +124,9 @@ async def theme_asset_route(request: web.Request) -> web.Response: def _resolve_webapp_logo_url(settings: Settings) -> str: + if getattr(settings, "WEBAPP_LOGO_USE_EMOJI", False): + return "" + raw_logo_url = (settings.WEBAPP_LOGO_URL or "").strip() if not raw_logo_url: return "" @@ -173,6 +177,8 @@ def _webapp_animated_emoji_asset_path(emoji: str, ext: str = "gif") -> str: async def webapp_logo_route(request: web.Request) -> web.Response: settings: Settings = request.app["settings"] + if getattr(settings, "WEBAPP_LOGO_USE_EMOJI", False): + raise web.HTTPNotFound(text="webapp_logo_disabled") raw_logo_url = (settings.WEBAPP_LOGO_URL or "").strip() if not raw_logo_url: raise web.HTTPNotFound(text="webapp_logo_not_configured") @@ -206,6 +212,41 @@ async def webapp_logo_route(request: web.Request) -> web.Response: return response +async def webapp_uploaded_logo_route(request: web.Request) -> web.Response: + settings: Settings = request.app["settings"] + if not settings.WEBAPP_ENABLED: + raise web.HTTPNotFound(text="webapp_disabled") + + filename = str(request.match_info.get("filename") or "").strip() + if not re.fullmatch(r"logo-[0-9a-f]{16}\.(?:gif|ico|jpe?g|png|svg|webp)", filename): + raise web.HTTPNotFound(text="webapp_logo_not_found") + + root = WEBAPP_UPLOADED_LOGO_DIR.expanduser().resolve() + path = (root / filename).resolve() + try: + path.relative_to(root) + except ValueError: + raise web.HTTPNotFound(text="webapp_logo_not_found") from None + + content_type = WEBAPP_THEME_ASSET_CONTENT_TYPES.get(path.suffix.lower()) + if not content_type: + raise web.HTTPNotFound(text="webapp_logo_not_found") + + try: + if path.stat().st_size > WEBAPP_LOGO_MAX_BYTES: + raise web.HTTPNotFound(text="webapp_logo_too_large") + body = path.read_bytes() + except OSError: + raise web.HTTPNotFound(text="webapp_logo_not_found") from None + + if not body: + raise web.HTTPNotFound(text="webapp_logo_not_found") + + response = web.Response(body=body, content_type=content_type) + response.headers["Cache-Control"] = "public, max-age=31536000, immutable" + return response + + async def webapp_animated_emoji_route(request: web.Request) -> web.Response: codepoints = str(request.match_info.get("codepoints") or "").strip().lower() ext = str(request.match_info.get("ext") or "").strip().lower() @@ -235,6 +276,8 @@ async def webapp_animated_emoji_route(request: web.Request) -> web.Response: async def _warm_webapp_logo_cache(app: web.Application) -> None: settings: Settings = app["settings"] + if getattr(settings, "WEBAPP_LOGO_USE_EMOJI", False): + return raw_logo_url = (settings.WEBAPP_LOGO_URL or "").strip() if not raw_logo_url or not _is_proxyable_webapp_logo_url(raw_logo_url): return @@ -258,6 +301,8 @@ async def _warm_webapp_logo_cache(app: web.Application) -> None: async def _warm_webapp_animated_emoji_cache(app: web.Application) -> None: settings: Settings = app["settings"] + if not getattr(settings, "WEBAPP_LOGO_USE_EMOJI", False): + return if str(settings.WEBAPP_LOGO_EMOJI_FONT or "").strip() != "noto-color-animated": return @@ -547,7 +592,7 @@ async def _security_headers_middleware(request: web.Request, handler): "frame-ancestors https://web.telegram.org https://t.me; " "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdn.jsdelivr.net; " # noqa: E501 "font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net data:; " - "img-src 'self' data: https:; " + "img-src 'self' data: blob: https:; " "connect-src 'self' https://oauth.telegram.org; " "object-src 'none'; " "base-uri 'self'; " @@ -741,16 +786,24 @@ async def index_route(request: web.Request) -> web.Response: html = TEMPLATE_PATH.read_text(encoding="utf-8") cached = _get_cached_webapp_settings(request) themes_catalog = settings.webapp_themes_catalog + primary_color = settings.WEBAPP_PRIMARY_COLOR or "#00fe7a" + initial_theme = _initial_theme_for_request(request, themes_catalog) + preview_key = str(request.query.get("theme_preview") or "").strip() + preview_theme = themes_catalog.theme_by_key(preview_key) if preview_key else None + if preview_theme is None or not preview_theme.enabled: + preview_key = "" config = { "title": settings.WEBAPP_TITLE, "primaryColor": settings.WEBAPP_PRIMARY_COLOR, "themesCatalog": public_themes_catalog_payload( themes_catalog, - settings.WEBAPP_PRIMARY_COLOR or "#00fe7a", + primary_color, enabled_only=True, ), "themesDir": settings.WEBAPP_THEMES_DIR, + "themePreviewKey": preview_key, "logoUrl": cached["logo_url"], + "logoUseEmoji": bool(settings.WEBAPP_LOGO_USE_EMOJI), "logoEmoji": settings.WEBAPP_LOGO_EMOJI, "logoEmojiFont": settings.WEBAPP_LOGO_EMOJI_FONT, "apiBase": "/api", @@ -769,6 +822,9 @@ async def index_route(request: web.Request) -> web.Response: "appRepositoryUrl": APP_REPOSITORY_URL, } html = _strip_marked_block(html, DEV_MOCK_START_MARKER, DEV_MOCK_END_MARKER) + initial_theme_markup = _initial_theme_head_markup(request, initial_theme, primary_color) + if initial_theme_markup: + html = html.replace("", f"{initial_theme_markup}\n", 1) i18n_instance: Optional[object] = request.app.get("i18n") i18n_payload = getattr(i18n_instance, "locales_data", {}) if i18n_instance else {} nonce = request.get("csp_nonce", "") @@ -793,7 +849,11 @@ async def index_route(request: web.Request) -> web.Response: f'', ) brand_asset_url = cached["logo_url"] - if not brand_asset_url and settings.WEBAPP_LOGO_EMOJI_FONT == "noto-color-animated": + if ( + not brand_asset_url + and settings.WEBAPP_LOGO_USE_EMOJI + and settings.WEBAPP_LOGO_EMOJI_FONT == "noto-color-animated" + ): brand_asset_url = _webapp_animated_emoji_asset_path(settings.WEBAPP_LOGO_EMOJI) if brand_asset_url: html = html.replace( @@ -843,6 +903,95 @@ def _resolve_webapp_js_asset_name() -> str: return "subscription_webapp.js" +_INITIAL_THEME_TOKEN_CSS_MAP = { + "accent": "--accent", + "bg": "--bg", + "panel": "--panel", + "panel_2": "--panel-2", + "panel_3": "--panel-3", + "border": "--border", + "border_strong": "--border-strong", + "text": "--text", + "muted": "--muted", + "dim": "--dim", + "danger": "--danger", + "blue": "--blue", + "radius": "--radius", + "font_sans": "--font-sans", + "font_logo": "--font-logo", + "font_mono": "--font-mono", + "admin_bg": "--admin-bg", + "admin_surface": "--admin-surface", + "admin_surface_2": "--admin-surface-2", + "admin_elev": "--admin-elev", + "admin_border": "--admin-border", + "admin_border_strong": "--admin-border-strong", + "admin_text": "--admin-text", + "admin_muted": "--admin-muted", + "admin_dim": "--admin-dim", +} + + +def _theme_css_href_for_html(theme: Any) -> str: + css_file = str(getattr(theme, "css_file", "") or "").strip() + key = str(getattr(theme, "key", "") or "").strip() + if not css_file or not re.fullmatch(r"[A-Za-z0-9_-]{1,64}", key): + return "" + parts = [part for part in css_file.replace("\\", "/").split("/") if part] + if any(part in {".", ".."} for part in parts): + return "" + themed_path = "/".join([key, *parts]) + encoded = "/".join(quote(part, safe="") for part in themed_path.split("/")) + return f"/webapp-theme-css/{encoded}" if encoded else "" + + +def _initial_theme_for_request(request: web.Request, catalog: Any) -> Any: + preview_key = str(request.query.get("theme_preview") or "").strip() + if preview_key: + preview_theme = catalog.theme_by_key(preview_key) + if preview_theme is not None and preview_theme.enabled: + return preview_theme + + theme = catalog.theme_by_key(catalog.default_theme) + if theme is not None: + return theme + return catalog.enabled_themes()[0] if catalog.enabled_themes() else None + + +def _initial_theme_head_markup(request: web.Request, theme: Any, primary_color: str) -> str: + if theme is None: + return "" + + payload = public_theme_payload(theme, primary_color) + tokens = payload.get("tokens") if isinstance(payload, dict) else {} + tokens = tokens if isinstance(tokens, dict) else {} + declarations = [] + for token_key, css_name in _INITIAL_THEME_TOKEN_CSS_MAP.items(): + value = str(tokens.get(token_key) or "").strip() + if value: + declarations.append(f"{css_name}:{value}") + + scheme = "light" if tokens.get("color_scheme") == "light" else "dark" + bg = str(tokens.get("bg") or "").strip() + css_rules = [f"html{{color-scheme:{scheme};}}"] + if bg: + css_rules.append(f"body{{background-color:{bg};}}") + if declarations: + css_rules.append(f".app-shell{{{';'.join(declarations)}}}") + + nonce = html.escape(str(request.get("csp_nonce", "")), quote=True) + style_tag = ( + f'" + ) + href = _theme_css_href_for_html(theme) + if not href: + return style_tag + return ( + f'\n' + style_tag + ) + + def _strip_marked_block(html: str, start_marker: str, end_marker: str) -> str: start = html.find(start_marker) if start == -1: diff --git a/bot/app/web/webapp/routes.py b/bot/app/web/webapp/routes.py index d6a5862..478a3b5 100644 --- a/bot/app/web/webapp/routes.py +++ b/bot/app/web/webapp/routes.py @@ -9,12 +9,22 @@ def setup_subscription_webapp_routes(app: web.Application) -> None: app.router.add_get("/devices", index_route) app.router.add_get("/settings", index_route) app.router.add_get("/admin", index_route) - app.router.add_get("/admin/{section:[a-z][a-z0-9_-]*}", index_route) + app.router.add_get( + ( + "/admin/{section:stats|users|payments|promos|ads|broadcast|logs|tariffs|" + "appearance|settings}" + ), + index_route, + ) app.router.add_get("/admin/users/{user_id:-?[0-9]+}", index_route) app.router.add_get("/auth/telegram/start", telegram_oauth_start_route) app.router.add_get("/auth/telegram/callback", telegram_oauth_callback_route) app.router.add_get("/health", health_route) app.router.add_get(WEBAPP_LOGO_PROXY_PATH, webapp_logo_route) + app.router.add_get( + rf"{WEBAPP_UPLOADED_LOGO_PATH}/{{filename:[A-Za-z0-9_.-]+}}", + webapp_uploaded_logo_route, + ) app.router.add_get( r"/webapp-emoji/{codepoints:[0-9a-f_]+}/512.{ext:gif|webp}", webapp_animated_emoji_route, diff --git a/bot/services/email_templates.py b/bot/services/email_templates.py index bca9a36..a17ac85 100644 --- a/bot/services/email_templates.py +++ b/bot/services/email_templates.py @@ -1,7 +1,7 @@ """Branded HTML email templates that mirror the subscription Mini App look. The web app uses a dark theme with a configurable accent colour -(`WEBAPP_PRIMARY_COLOR`) and an optional logo (`WEBAPP_LOGO_URL`). The same +admin-configured accent colour and logo. The same accent + logo are reused here so emails feel like part of the product. All copy goes through the shared `JsonI18n` instance so translations live in ``locales/.json`` next to the rest of the bot strings. @@ -45,8 +45,10 @@ def _safe_color(value: Optional[str]) -> str: def _public_logo_url(settings: Settings) -> Optional[str]: - """Email recipients can't reach the in-app /webapp-logo proxy, so the - raw https URL from the env is used directly. Anything else is dropped.""" + """Email recipients can't reach the in-app /webapp-logo proxy, so only a + stored public https URL can be used directly. Anything else is dropped.""" + if getattr(settings, "WEBAPP_LOGO_USE_EMOJI", False): + return None raw = (settings.WEBAPP_LOGO_URL or "").strip() if not raw: return None diff --git a/config/settings.py b/config/settings.py index be1078a..13f6b24 100644 --- a/config/settings.py +++ b/config/settings.py @@ -92,6 +92,7 @@ class WebAppSettings(BaseModel): title: str primary_color: str logo_url: Optional[str] + logo_use_emoji: bool logo_emoji: str logo_emoji_font: str session_ttl_seconds: int @@ -369,6 +370,7 @@ class Settings(BaseSettings): ), ) WEBAPP_LOGO_URL: Optional[str] = Field(default=None) + WEBAPP_LOGO_USE_EMOJI: bool = Field(default=False) WEBAPP_LOGO_EMOJI: str = Field(default="πŸ«₯") WEBAPP_LOGO_EMOJI_FONT: str = Field( default="system", @@ -545,6 +547,7 @@ class Settings(BaseSettings): title=self.WEBAPP_TITLE, primary_color=self.WEBAPP_PRIMARY_COLOR, logo_url=self.WEBAPP_LOGO_URL, + logo_use_emoji=self.WEBAPP_LOGO_USE_EMOJI, logo_emoji=self.WEBAPP_LOGO_EMOJI, logo_emoji_font=self.WEBAPP_LOGO_EMOJI_FONT, session_ttl_seconds=self.WEBAPP_SESSION_TTL_SECONDS, @@ -836,6 +839,31 @@ class Settings(BaseSettings): theme_dir=self.WEBAPP_THEMES_DIR, ) + @field_validator("WEBAPP_PRIMARY_COLOR", mode="before") + @classmethod + def ignore_deprecated_webapp_primary_color_env(cls, _value): + return "#00fe7a" + + @field_validator("WEBAPP_LOGO_URL", mode="before") + @classmethod + def ignore_deprecated_webapp_logo_url_env(cls, _value): + return None + + @field_validator("WEBAPP_LOGO_USE_EMOJI", mode="before") + @classmethod + def ignore_deprecated_webapp_logo_use_emoji_env(cls, _value): + return False + + @field_validator("WEBAPP_LOGO_EMOJI", mode="before") + @classmethod + def ignore_deprecated_webapp_logo_emoji_env(cls, _value): + return "πŸ«₯" + + @field_validator("WEBAPP_LOGO_EMOJI_FONT", mode="before") + @classmethod + def ignore_deprecated_webapp_logo_emoji_font_env(cls, _value): + return "system" + @computed_field @property def referral_bonus_inviter(self) -> Dict[int, int]: diff --git a/config/webapp_themes_config.py b/config/webapp_themes_config.py index e301498..4f713bc 100644 --- a/config/webapp_themes_config.py +++ b/config/webapp_themes_config.py @@ -8,7 +8,7 @@ import re from pathlib import Path from typing import Any, Dict, List, Literal, Optional -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, Field, field_validator, model_validator logger = logging.getLogger(__name__) @@ -48,6 +48,22 @@ class ThemeTokens(BaseModel): admin_muted: Optional[str] = None admin_dim: Optional[str] = None + @field_validator("accent") + @classmethod + def _normalize_accent_hex(cls, value: Optional[str]) -> Optional[str]: + if value is None: + return None + raw = str(value).strip() + if not raw: + return None + match = re.fullmatch(r"#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})", raw) + if not match: + raise ValueError("accent must be a hex color (#RGB or #RRGGBB)") + hex_value = match.group(1).lower() + if len(hex_value) == 3: + hex_value = "".join(char * 2 for char in hex_value) + return f"#{hex_value}" + class WebappTheme(BaseModel): """Single theme descriptor loaded from WEBAPP_THEMES_DIR//theme.json.""" @@ -256,10 +272,13 @@ def _theme_sort_key(theme: WebappTheme, index: int) -> tuple[int, int]: def _sorted_themes(themes: List[WebappTheme]) -> List[WebappTheme]: - return [theme for _, theme in sorted( - ((_theme_sort_key(t, i), t) for i, t in enumerate(themes)), - key=lambda pair: pair[0], - )] + return [ + theme + for _, theme in sorted( + ((_theme_sort_key(t, i), t) for i, t in enumerate(themes)), + key=lambda pair: pair[0], + ) + ] def _themes_config_from_list( diff --git a/docs/remnawave-minishop.webp b/docs/remnawave-minishop.webp index f864834875fea9fc84e1d9820c1996d591d3d603..0c107996a85049043229d3cb30b39a43c9d42377 100644 GIT binary patch literal 65602 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 a$yGk71ULbRKreH#_y7-9fIUp=0000g$-OZE literal 122284 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%0DF;gKnwuzSx!&` z0K~xQ1ONi@CjbCCN4_`!^pppy(YXf6W1jCx6^}r?gie;pQLIB>kNmu%xa-Rf_0?-n z{5iiid4~clArz1U)gLn zKW;~Z!qQRRM|GKevF(loAU6kz^V~WENHUNS!iB=DuKzc0=3f_(k=+UPil1wup}`;`Sk1m$uc$1j^Z#=pd7T zL{g?UY-<*k^DEKdB?p@U^V^
s39e<~Y+%n>_8igFnxA8}nTo0pR7%Z=>)Maz@T z;~j5TQzn#0S%wv0cEz7GDIRG~x5Up!AhhQEHPR<&Xq&Ap9GJlo&i=lc7rLf1h%6JC#Zu0v4@TYz*B@7@U`RqCXxv&^+XW9b+a@apF~l5L)(TCZUG?P*8y4#7>w$ zuBG-mt?i;}CD28gMmDm?!_WWJuX8V_f{G%f%-#aGUj+R^OG!L}e%;t|c{~7G*fU^u z;tAR9Z7`?2iy!6}bxi-Cwo>GvL@s#d>B9Sg!k!4H+WBxH2$ae75;?`P_>c7;;9z*~ z*fZ4}%3@(&dkC~N0AQg6Q6f-A+R4cjib}hm!xMi);@Xv;TU;OZ1?OU2=NIHt?h3`_mqu{x;_q|Ie0{Oqba zl%;lM;~??9C?2EOy5Hnk_|H3ScN=u2NBL~*6PxA8<^@}0>>@P1c2WbhIR7+qR{s#E znE~#oOSrV3w`yD8_*6+>y+L0vC<8tAX?Dz||sT7i?S%9~E2TzsKP2DdZnrE^kn zTzWc={kAG5&y+bv_YdjfE=QZ%!1|uu?-pZ8WS5CSxFSf;Y&7 z4x={rvqH!h)v2K|q|dpYjRYv4M+sWVEX5qlV-y_Elz9WtYjkI3=Vm)9pllmrbbiqqx}uYbPVp&3@V!rS7)w zC{FD1ZYU25+{{m1*#V-(<-ptu3NWf+D{C!Wf%KACiyk|kL#Dw;j^(QADe;CSf7lB2 zWr3(XTjFkHTiU<^W_2`Dcea4JA4SOyS{v)xDcjF#Py`Fc~BkP7A`LP1t@NQbvbAmZEUFRGVyJC z3}Glf?s%*8vVMZzw=W%regoQOyfIER$On3KlF%3H$q&ckD+!7+^lAEF^5H?4BfK(z z4Uj2V868i8wzJ0e6K)=yr-9FXhGcsC?OjA#*sO6)!t=zp-GfzepvOUD{-80!Qut-L z>A|D+p5k3$wy4a(Uv-UO^*W^eV7F6BLWkki)77g%zdWx`*xy#+&F#N9HBxI_ldybN zdK=xaVE+S(7AXF%)b^PIR6$c6hSJ7VGD<6Ox-LXV}>P zv#3rJ-+-`A3bw%2qv#)MO=G)F0wq*vt02sO=Sg8s{GJu{D2Pxl!RWhrX>g+8ogD81kZFm7p+8UEB2FY57$9apqm{ryIgDS2nwB zBfX+^U%q#cZ1v?;8J}g{$iy z2y35u;Ki^c7tD2;F<3nzZ*@NJjqn=0LtjypsYO#K?U%K2_7C}fZm8D=lJ4lwJ;lUt z6;)-@pZk$w{<;m@^`v|&HYt*=8&8#?ll)>YYzuIa+kbvolQ;ANg5tZ7oq5Ear+Qu2Dwqst&bG1tnge|#LcZ;A>8 z{*s1^mE~ZmcxB|rV5u0|5Th59frwxrCfCMdgnDf#(i4*W-0;R-*bGDj{g@0y1lzIS z3iO0`9^4GXWV7wYL;CeopcsjOU?3&~5rIx<{dHKJJ4uE@l(2D|f8sA+wn^&>a|#y@ z^dAlvIKkUHqBFME8gYW_BsjiPet!?Zsi6rrCL3JqNahWm+f4fKb-4{hWG}XQ4RzZN zH_y_szOhyTRG@NMR)}o>rw{dv;MuCeDyR*g(taZDQ z8z}Q9HtNNk?S_PWtvVZHi$YXz*h$pYers@u3-lTKnDf6nitWT^r*%~y^D0L^WuL8j zIuNM<=C=rdnH$3@INL1W3dBc@J*r`zBO}Ke3I9_60$KDmI3gGJDq$+cwuanTsQ<0_QsVm;-m65CoLtuk`mn2kNp}OwhK; zRlSBJke@3aNo};5rORrwLVL|`Gnn?Vm9DNV)TT*V_tw*IuPOV)t@0KX2fLJqO8T?} z1({w4rTF#0!kYA3ev`a0{%_8w=i4^28^{diUH9KF_{Msu3ouV01EXDttdr-B*At=$ z;BesIGvIDVLVHmdd1J%vW;jhUl(2zFuWw-8i=vxZsTGtAqW$LtXz zI^t5iJK{foALXu)u*jmyx%#%sc44ITwJwJnetP&@hQ$(}UatA^rF;xG?r}m|4uv)= zo`c|77qqNdU9cbZMl%WPa{MnJdzKEfS6qI!Z22l-H2_>dqrdO5feod**I}E}nojZM zOXnOxOC6~>`FQbS5ga*c_=#hZ7Dk>$t~owE>$P~_qvy}k`E%`-BrxN-hjHiy~uL8#>s&~aVu|4MTDI)QZ!{$)`{C$Lf{@(GgD~Wto(%L`v&fOg2 z+*O=QZ0m1LBO9bfoJY@eewHtN^)((AY6<}8>)8MwA6Fftj%C`+FPfMy`^?MCce9rW(SRy41+(=g@FokN^T-Bfu3KAVTYocgd0QpQqrT``YYpgm=*5tn#os4A;j^aw3)Y6^5m7^RAP*$-f#C z4bB26hzmK8B$1(o&98f)#IHDX^P(n~HqbXl;XDR}t0laD?zwVi#H38)%MMX8EB~Oq zof3ftv}u$2FW`{OAp`J9r;(&9zDQYpl-_{Lk<;Kzc-+1r>#d$o(JpL*@1%{q#$2W1 zS|4AQI9M;MUW*^SV9GI~`kxynMM_473~0!?crNR!yz}O=B4M@ZK7KfT*CSKEbguR( z&-5BO*g!|ApZ0!hkI}Al&9k#VJfHXOIn=E!{`i1oc+-i{-X=_!k9T2q$=?vNMPLRko3+wl{Vb|SX;r(AszW%$|D(ic6p3IGa zaHd$huvW#{Wa@($_uF3fyYgHiOWyYEERT(g+_azcWr{-UG{_Y|iV;aINPyr+l0CPh zt&I5rfM9|Qm0*$-8$SyKi(uJIg1e+dLPSpR#QP+$wOCRfOVVwKIXvJJ{biNn0K>;2 z#a{t0aYQM0B|96=#DC%^F^J>nn8V|&+0Pw9=w<%xW7>}|vwiot;<(bsN1<{{Y&siy z|FnhGwxbR|w$|xqmcQie3*=lpzUYCctaO_=-SqDBp7}*{Et+pK^?92Px>PDtH!?NX zqT2fEhjK406Ah_08+5(xk)fs5JNcoo8Vk&>fWbL^m!ZNZU8l@E;IyH`Dv9Mn%46-W zlUXsnm8v2xPTtR2h4rPK>O>|Mb*516@4t^~Ek_CCirqU;=0gQQAVvi$gbj)uww#OE z`GN;?EU6bwvNWN>J%l-FPO(y6zkroAR)Y}&05U;yH3#-{CaR!m3A?1K4D1~dICJkn+NIWXRXXC%8bK}4Q0M>yU(L>HmSgyUg z*j7m|+Lk@X*GR6J&jdFlrYz@fvY2P#JZNBp&a-aXX#2zMR-cYM^n|6w?|68DJKmKQ zId9{|y)HW5YP}g1hW2aiSDT^Wtb?XoAC~6{ugN2JT50yvx=fzhnr?Gw?~7I^`lJU8 zvFXp8SPfj**i3kx&W`&VvA(?kF$1cTi-J4wgTP9=j>&jw zO7gr|7yBTefCR!_{l_m!5+K3?tjMQlZ6=B!<#sj}9N>~}m4gxpNV*9RNO5Wp8{K zu^eE7N8NO_%OB`X;NX*%O})9)K7Z8&6*BeCoS0Hk`~0cNR^r!=0sEaXX}wN*GdXpS zys=G0efM?Ge-^1HiKPqc04UV$9vuP&wN-$S4hY0wY?7@30MRd7SQm6HRm(pqQ zrYzCl7q1(UK$`TQ?*+Q&jX%BIdb-!k)T1Yy{+R@zVj!i1C?G+DIOdQ6wuF%^T5_za zCKy=RyphyJC{f%8qB5o2XemIciRjw_D2%PMZ_WGNBSpRXy~+guqyTCoDu@k8DwQ1E zB<>!@(Q4$xb%KO`kjPIU6HJn>vKf}QOxCg7AG*R))C|C>Q~ltaJ^rOs`bx9^AQ zw57-yh!$O2;Ov3K5?~sf1&}#|sYI3%uo-i3GGil22{tjdk==(&v;lLSJ#hg5>b{Q?sL zV~Q-QE91yhasei1Qvp5+HG(CH4{#AvO%?!$RJLaQAa5g*G+33Vf(1}rzJIW-arbBnpeA*c}a zRrccJP`gE{xK{AEdkn#XdoS~OY(?s-!6jVKV<+WgWpLcE;o@$ zC~^0uhsgkq_{FWwTcmTqny=wpDhEI!3s4mXl7vjMkBd`t7X{gFs}vg$&~R~$L^R># z5~a})9~^U|bM@>*(|!NteP809wIVq?#t-XW)>>_`qe{UoiIgn_yzw9Z7>Nud4J7LU z9l|^)1sN)3w2K9BTo@>|=ZpXSl>?FEfYH_osPjYN@5#cv)I(*4>D?Qu-Hk&y^?Wlj zy3&>Lz-?3F$@Fn)c~si&ML6r z(o7iLx09uO4go`yyABgO$*C$e_RD&J^}LWQl}%hVT`Bu42#TgXk#3+%I)|)`cJcWD zgDAz`-03p=u!o+o&p3=y@=fgE)mac~r+irb@j%VFkLnTtPr@!Ube70}G&@qKCr}n8 zrk{~Bzt!JppLB4kSxH@4SOP@F=DWLT%sXrsfa9z}s>2lM+%6218gB*uVi{Y|IIJLQ zgE8jaWEj0qxexINWHHpyo@l{HD6<`@A31OO7cc(Yp>WC<(nsU_VJNwEEz4m%6|!Q? zbzJ+y*GlXi(I5-{%6y?0JEY(3(gsty6Y&wr0JtdeL}^!P`F|ysqqPADFrGY`bM*8CGHu)&?K7-EV5Ll-!6?72AQx9E1VVZ`3NQjDk!3{Lk2kLe_t{>4EX)Kx;w%ZkT2L0YA8^#??I0#s6*B&Kq6`!wKnC~} z7m6Ukjoc8O#e6s!{iMjLwCP=w(!ax5$|sV*lRZs#s6y=)?T0N!4~YbUM7oG@_^+8^ z(`c_gxB7&t3qULiQ+s5&y6pNj$*#5E-RUx;m0h=HKB6CRf7|<}VX4c<^QYzP50YU3 zHP7uG{>;XwO{6*IKB-T4P(SL~CdtS@(SsjqUh|y!$eQb<@qqgWMW3)b7RWV~q3@j{|I$%ME5D{>c%^-kd=d(M;p0u1A5fCHL#jCqN zO}$xqT#%kg@$ZcHeB2M6Z54$KOxMQFYwlhS#c7|x`8=D|oe=@>@j6py9Ir?2K&4TF z$&rqo<^*?!e{KL$;_7WsqGdT!^5G3iHLfmBOvA%^$wkJjg9EBUfS@d!2!ImL6Uv~) z%_HU&bI6RVj)S_x24mXYr@r$#EhF%laq^naeLVpDdym)-eP}A?+OF2Q&TiARj_uMq zBSnt6UA_A+AcS!aZ$FCHmXydK7jgHBoFe}#*A*9m zoYE0Kza5rQ^%BjL67J#!XKP!KQaygo&K@gT%Y#mRNMxq zDnna^A*PpRpC_uzF7mZJV03`67Y|ZWJ%s8g(>jN_s2r4sOak@|2w0*dxu9eWE~0zN zG_@^r1#rjS^WOT-)%NDLgjJhgs1~h$nKo!QE0VBssE7X3S60smI05U2I&yqNh*3yjo}JGV#s7xdkB8D-+|J~M5i7+#%# zgZtv~r?$A~AN)i6s)vXvX1hd$vSjZLunnGwCwJ4nU@x6P+J;C#A67U@Bg`3qrH(z- zT|28FI*guocFkAr-%?Y~hXUb_U(l*^nBDE1>;Ck;n>0CV35@pK>%`){eeUGjcf7`P zA7VHAHaKr^-;-cHRNVlmP0I7mz-wG__o1F22DY2rTNqCVVB^2oD{c18W}Isd_5YFR z0}68d=XOJH1KlpI-={7(Y&&ze`8N%puT&eWpDg}v zvkK=JV=;Sn)&8rFXyYoQCVzfX>yZF3aE74*uI+a9t+SS0E6mImq)o@hxK2xwy%6A^ zy~pGiUT?SWVc+^fX{G>BXns4~`c?b%Yvp|TlX0Ljx8Ypc#!@8{A`2FSA+iI0ymB@J zMu`egK^zWkBqg9_5fuce-V;|`Oo!)%XHzi(1>{WT*Zq?@P(tOU##0@lgu;c2zbGkA zB|1CEPKAeX5YkYaN!n4Pz$yVyiiZJug$A*GU_}WnC>NEK<^cewYOKmspp3GlB*#$Q z^DC1WHZ&c;us@5@EDIgPlndTrMt8X||IE*uv=&09e$q2RN;voeHzaxWzpWYJQ->|b z%$m6ryN%3K@4}h0=%vTzym`>%XYsbuc&7<+Y3`L)H|IU?HVo&^bkSQ|cme3txnyr# z#>UuLK=On=Em`}HQJsmLg}P#L+3Z~yp$&CgMx9u-*j~ML#&_mIQ1uv#fs#d^x%{$5 zZ2#=6^$jP@)#ooJRKmK-&KLPfW$_jp1Zy0ZqZ8)b$+2B=4c=AKI7Q#vuJ!PYfW^0{+)9jPjsiT%T$=FZ@ie-Fgnz zcDgs{r8xd`^C2gQW9jja6VM69%9EDY$`6xv9#$Dw*~j1W*R_hfbg^;MK>+YkJKoz< z26=9&;$FP{JDi1+I@|7oGN`siKuwke80j{CWT{!zaz_X=Fa%T{KQUZ9+2laac}Ln} z4ACx2j{W9*2aq$rKOdp|I=TF2*gFv~{o4nJVV*R|3)?nf2#Y^BKHLm@NdO$+2-&bn z1XJLtK`WyWB55ii{KP+b=b6#pC?qUMlL>(mkDN8|Q6_PXDe1b(QBp~&>bWbv9~z!JlW5+nwM1W?VvdvCD=zcj2~d5g8Ce>bC^3`7LvI6~TL zvrgWA=j^*J7WA;a2WbFKjUntHM4x`Paam_;?7RFc*3&y-iG+oEo6U*Ik95{=Cnc3M zQ8{cD6Ju)}sq?t`;lO@acYOBw3qSuz&p-Apj{j}6!W+o?5;UfDy`zy^*B5s(R3}O5{ zbC3L!(`YTb!m%<6Pr$`DpYj2p$ia~s45iJ^jN=9XUF{#!al66jk(}4Rw_^Z@=9_QQ z=h-)#lmq~zqo4B!taso4$uMKL0spbhpcnvR4Gqc2hS$*KBIo{3zA@U{H^Z_&GOF4) z!ugeQ{%|Y+Spbsu%=r4H@Rna}B717aeYt@@W)ww11Xp&Cj0;?#xNC6O!IekK#Hhl8 z6?(|-b~5-*IU%dC{=HUMk=|S>6eW}G0;OmdPU3#JT03Q7kFAum!)ogOw!XqzUvLK3 zX|jkbC$)dH*tMt(n}6;c$MqTqkF9^nxEqwu0?+w6=rSF*m2q2%?(@Cqr_6a`o%X*- zvMRa?2R%3_`lRC>t#tkT;$J=C)qyFKTtxFD?&5nr*l#&ivPr?y5U@nyS(RFVk}zn? z<;v|^EC|5sR*Y&*khLUVbQY_@H$amrOc@L6ln>khAqgOzGigsvsxptO7JF(#c4}_( zuX@ZDo3RBQdB69x*}>Oxt#3G$ogKm?2f7Fcnh+|)y#W9+ zbaGT3R0ip9ko34<=%cG`B?P~CWUzhA21L*%->=4VQl&j%w~=-V0v9MTecRr1lK^_m zp`10U8tXDix#b;4P2-+)Uiti&hmAQ#-Z=)RKEhZIS9afR%5BrIe?%l-bXsK-!qsx?ruOKOtbs&_Om#uwhtqMLxLX2UMOGmotqFPbX{yN@u(L;CppRy8cK<=7Z4=W#lbQ1 zL2lSjjv93$tq|oPylow|+u~EVR_3Ii9jP5*xhl|1vM_{*6T*yCcX^N!gk%1~eX%0b zV^MB)*N|^~*;jbs59vBHl)R%n-pZ1)B#s=lz^cp z$*P~;xAs(!08k+=2u_g=V2dg^Y4$qBdi`1%j#N0LXzMHiRIEi;#Techv$N3J88=p! zZOS`KstW&%g-3?QmXIr9j^6d2&T-pf8qm|)*hyK_)@#~zC0RTk;d<(#*EdCrdIh)3Vi3!7c=*6savJK^QFiayQjfPb?i+s**F!3aHu zu#IY0W(^B~%TcoPJExmL5dx^ZqZl=kuq
ndgAH`z+b+kgK7{tWFQ_KhG+@y)yvd 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 Zm&W5@U=52G;i8oSbYXndLhvn#n*hXo$T|Q3 diff --git a/tests/test_settings.py b/tests/test_settings.py index 9dbf44b..795e7ae 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -28,6 +28,25 @@ class SettingsTests(unittest.TestCase): self.assertTrue(settings.WEBHOOK_SECRET_TOKEN) self.assertEqual(settings.WEBAPP_SESSION_TTL_SECONDS, 86400) + def test_deprecated_webapp_appearance_env_values_are_ignored(self): + settings = Settings( + _env_file=None, + BOT_TOKEN="token", + POSTGRES_USER="app_user", + POSTGRES_PASSWORD="app_password", + WEBAPP_PRIMARY_COLOR="#ff0000", + WEBAPP_LOGO_URL="https://cdn.example.com/logo.png", + WEBAPP_LOGO_USE_EMOJI=True, + WEBAPP_LOGO_EMOJI="πŸ”₯", + WEBAPP_LOGO_EMOJI_FONT="twemoji", + ) + + self.assertEqual(settings.WEBAPP_PRIMARY_COLOR, "#00fe7a") + self.assertIsNone(settings.WEBAPP_LOGO_URL) + self.assertFalse(settings.WEBAPP_LOGO_USE_EMOJI) + self.assertEqual(settings.WEBAPP_LOGO_EMOJI, "πŸ«₯") + self.assertEqual(settings.WEBAPP_LOGO_EMOJI_FONT, "system") + def test_tariffs_config_missing_uses_legacy_fallback(self): settings = Settings( _env_file=None, diff --git a/tests/test_webapp_assets.py b/tests/test_webapp_assets.py index 5e32b62..2eb0ed7 100644 --- a/tests/test_webapp_assets.py +++ b/tests/test_webapp_assets.py @@ -11,6 +11,7 @@ from unittest.mock import patch from bot.app.web import subscription_webapp from bot.app.web.webapp import assets as webapp_assets from config.settings import Settings +from config.webapp_themes_config import builtin_webapp_themes_config class WebAppAssetTests(unittest.IsolatedAsyncioTestCase): @@ -91,6 +92,36 @@ class WebAppAssetTests(unittest.IsolatedAsyncioTestCase): r"^/webapp-logo\?v=[0-9a-f]{12}$", ) + def test_uploaded_webapp_logo_url_is_served_directly(self): + settings = SimpleNamespace( + WEBAPP_LOGO_URL="/webapp-uploaded-logo/logo-abcdef1234567890.png" + ) + + self.assertEqual( + subscription_webapp._resolve_webapp_logo_url(settings), + "/webapp-uploaded-logo/logo-abcdef1234567890.png", + ) + + def test_webapp_logo_is_hidden_when_emoji_logo_is_enabled(self): + settings = SimpleNamespace( + WEBAPP_LOGO_USE_EMOJI=True, + WEBAPP_LOGO_URL="/webapp-uploaded-logo/logo-abcdef1234567890.png", + ) + + self.assertEqual(subscription_webapp._resolve_webapp_logo_url(settings), "") + + def test_initial_theme_head_markup_includes_css_and_tokens(self): + cfg = builtin_webapp_themes_config("#123456") + theme = cfg.theme_by_key("light") + request = SimpleNamespace(get=lambda key, default="": "nonce-value") + + markup = subscription_webapp._initial_theme_head_markup(request, theme, "#123456") + + self.assertIn("/webapp-theme-css/light/style.css", markup) + self.assertIn('nonce="nonce-value"', markup) + self.assertIn("--accent:#123456", markup) + self.assertIn("color-scheme:light", markup) + def test_animated_emoji_asset_path_uses_same_origin_route(self): self.assertEqual( subscription_webapp._webapp_animated_emoji_asset_path("🀩"), @@ -364,7 +395,7 @@ class WebAppAssetTests(unittest.IsolatedAsyncioTestCase): logo_url = "https://cdn.example.com/logo.png" logo = (b"cached-logo", "image/png") app = { - "settings": SimpleNamespace(WEBAPP_LOGO_URL=logo_url), + "settings": SimpleNamespace(WEBAPP_LOGO_URL=logo_url, WEBAPP_LOGO_USE_EMOJI=False), "webapp_logo_cache": None, "webapp_logo_cache_lock": asyncio.Lock(), } @@ -403,6 +434,7 @@ class WebAppAssetTests(unittest.IsolatedAsyncioTestCase): with tempfile.TemporaryDirectory() as tmpdir: app = { "settings": SimpleNamespace( + WEBAPP_LOGO_USE_EMOJI=True, WEBAPP_LOGO_EMOJI="🀩", WEBAPP_LOGO_EMOJI_FONT="noto-color-animated", ), diff --git a/tests/test_webapp_route_contract.py b/tests/test_webapp_route_contract.py index 0e3d597..8d3f85d 100644 --- a/tests/test_webapp_route_contract.py +++ b/tests/test_webapp_route_contract.py @@ -1,8 +1,10 @@ +import asyncio import unittest from types import SimpleNamespace from unittest.mock import AsyncMock, patch from aiohttp import web +from aiohttp.test_utils import make_mocked_request from bot.app.web import admin_api, subscription_webapp from bot.app.web.admin_api_impl import auth as admin_auth_routes @@ -57,6 +59,7 @@ class WebAppRouteContractTests(unittest.TestCase): ("GET", "/auth/telegram/callback"): "telegram_oauth_callback_route", ("GET", "/health"): "health_route", ("GET", "/webapp-logo"): "webapp_logo_route", + ("GET", "/webapp-uploaded-logo/{filename}"): "webapp_uploaded_logo_route", ("GET", "/webapp-emoji/{codepoints}/512.{ext}"): "webapp_animated_emoji_route", ("GET", "/subscription_webapp.css"): "css_asset_route", ("GET", "/webapp-theme-css/{path}"): "theme_css_asset_route", @@ -139,12 +142,31 @@ class WebAppRouteContractTests(unittest.TestCase): ("PUT", "/api/admin/tariffs"): "admin_tariffs_save_route", ("GET", "/api/admin/themes"): "admin_themes_get_route", ("PUT", "/api/admin/themes"): "admin_themes_save_route", + ("POST", "/api/admin/appearance/logo"): "admin_appearance_logo_upload_route", ("GET", "/api/admin/panel/internal-squads"): "admin_panel_internal_squads_route", } for key, handler_name in expected.items(): self.assertEqual(routes.get(key), handler_name, key) + def test_admin_themes_page_route_is_not_registered(self): + app = web.Application() + subscription_webapp.setup_subscription_webapp_routes(app) + + request = make_mocked_request("GET", "/admin/themes", app=app) + match_info = asyncio.run(app.router.resolve(request)) + + self.assertEqual(match_info.http_exception.status, 404) + + def test_admin_appearance_page_route_is_registered(self): + app = web.Application() + subscription_webapp.setup_subscription_webapp_routes(app) + + request = make_mocked_request("GET", "/admin/appearance", app=app) + match_info = asyncio.run(app.router.resolve(request)) + + self.assertEqual(match_info.handler.__name__, "index_route") + class AdminApiAuthContractTests(unittest.IsolatedAsyncioTestCase): def _settings(self): diff --git a/tests/test_webapp_themes_config.py b/tests/test_webapp_themes_config.py index 65b83e1..f8a9d43 100644 --- a/tests/test_webapp_themes_config.py +++ b/tests/test_webapp_themes_config.py @@ -279,6 +279,35 @@ class WebappThemesConfigTests(unittest.TestCase): self.assertTrue(win95["use_in_admin"]) self.assertNotIn("accent", win95["tokens"]) + def test_theme_accent_is_normalized_to_hex(self): + cfg = WebappThemesConfig( + default_theme="custom", + themes=[ + { + "key": "custom", + "enabled": True, + "default": True, + "tokens": {"color_scheme": "dark", "accent": "0F8"}, + } + ], + ) + + self.assertEqual(cfg.theme_by_key("custom").tokens.accent, "#00ff88") + + def test_theme_accent_rejects_non_hex_values(self): + with self.assertRaises(ValueError): + WebappThemesConfig( + default_theme="custom", + themes=[ + { + "key": "custom", + "enabled": True, + "default": True, + "tokens": {"color_scheme": "dark", "accent": "lime"}, + } + ], + ) + def test_public_payload_keeps_admin_usage_flag(self): cfg = WebappThemesConfig( default_theme="custom",