diff --git a/apps/jumpserver/context_processor.py b/apps/jumpserver/context_processor.py index a5731bcb3..f89c87963 100644 --- a/apps/jumpserver/context_processor.py +++ b/apps/jumpserver/context_processor.py @@ -1,31 +1,24 @@ # -*- coding: utf-8 -*- # import datetime -import os from django.conf import settings from django.templatetags.static import static from django.utils.translation import gettext_lazy as _ -from jumpserver.vendor import get_vendor_value, is_default_vendor - default_interface = dict(( - ('logo_logout', get_vendor_value('logo_logout')), - ('logo_index', get_vendor_value('logo_index')), - ('login_image', get_vendor_value('login_image')), - ('favicon', get_vendor_value('favicon')), - ('login_title', get_vendor_value('login_title', default=_('JumpServer - An open-source PAM'))), - ('theme', get_vendor_value('theme', default='classic_green')), + ('logo_logout', static('img/logo.png')), + ('logo_index', static('img/logo_text_white.png')), + ('login_image', static('img/login_image.png')), + ('logo_white', static('img/logo_white.png')), + ('logo_text_white', static('img/logo_text_white.png')), + ('favicon', static('img/facio.ico')), + ('login_title', _('JumpServer - An open-source PAM')), + ('theme', 'classic_green'), ('theme_info', {}), - ('footer_content', get_vendor_value('footer_content', default='')), - ('ext', get_vendor_value('interface_ext_defaults', default={})), - ('vendor', settings.VENDOR), - ('version', os.environ.get("CURRENT_VERSION", "")) + ('footer_content', ''), )) -if not is_default_vendor(): - default_interface['theme_info'] = get_vendor_value('theme_info', default={}) - current_year = datetime.datetime.now().year default_context = { @@ -49,4 +42,4 @@ def jumpserver_processor(request): 'FORCE_SCRIPT_NAME': settings.FORCE_SCRIPT_NAME, 'SECURITY_VIEW_AUTH_NEED_MFA': settings.SECURITY_VIEW_AUTH_NEED_MFA, }) - return context + return context \ No newline at end of file diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index b0d3283f0..b84b6bd9f 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -280,9 +280,6 @@ SUGGESTION_LIMIT = CONFIG.SUGGESTION_LIMIT MCP_ENABLED = CONFIG.MCP_ENABLED VENDOR = CONFIG.VENDOR -VENDOR_TEMPLATES_DIR = Path(STATIC_DIR) / VENDOR.lower() -if Path(VENDOR_TEMPLATES_DIR).is_dir(): - TEMPLATES[0]['DIRS'].insert(0, VENDOR_TEMPLATES_DIR) # Trusted IP TRUSTED_IP_VERIFY_ENABLED = CONFIG.TRUSTED_IP_VERIFY_ENABLED diff --git a/apps/jumpserver/vendor.py b/apps/jumpserver/vendor.py deleted file mode 100644 index d877f2291..000000000 --- a/apps/jumpserver/vendor.py +++ /dev/null @@ -1,133 +0,0 @@ -import json -from pathlib import Path - -from django.conf import settings -from django.contrib.staticfiles import finders -from django.templatetags.static import static -from django.utils.translation import get_language - -DEFAULT_VENDOR = "jumpserver" -DEFAULT_LOGIN_TEMPLATE = "authentication/login.html" -DEFAULT_THEME = "classic_green" - -VENDOR_THEMES_DIR = settings.VENDOR_TEMPLATES_DIR / "themes" - -VENDOR_LOWER = settings.VENDOR.lower() - - -def is_default_vendor() -> bool: - return VENDOR_LOWER == DEFAULT_VENDOR - - -def find_theme_path(theme_dirs, theme_name: str) -> Path | None: - filename = f"{theme_name}.json" - for d in theme_dirs: - p = d / filename - if p.is_file(): - return p - - -def _default_theme_dir() -> Path: - data_dir = Path(settings.BASE_DIR) - return data_dir / "xpack" / "plugins" / "interface" / "themes" - - -def _build_theme() -> str: - return DEFAULT_THEME if is_default_vendor() else VENDOR_LOWER - - -def _build_theme_info() -> dict: - default_theme_path = find_theme_path([_default_theme_dir()], DEFAULT_THEME) - - search_dirs = [_default_theme_dir()] if is_default_vendor() else [ - settings.VENDOR_TEMPLATES_DIR / 'themes', - _default_theme_dir(), - ] - theme_name = DEFAULT_THEME if is_default_vendor() else VENDOR_LOWER - - theme_path = find_theme_path(search_dirs, theme_name) or default_theme_path - if not theme_path: - return {} - return json.loads(theme_path.read_text(encoding="utf-8")) - - -def _build_vendor_info() -> dict: - if is_default_vendor(): - return {} - info_path = settings.VENDOR_TEMPLATES_DIR / "info.json" - if not info_path.exists(): - return {} - return json.loads(info_path.read_text(encoding="utf-8")) - - -def _build_vendor_info_value(key: str, default=None): - info = _build_vendor_info() - return info.get(key, default) - - -def _build_vendor_interface_ext() -> dict: - value = _build_vendor_info_value("interface_ext", default={}) - return value if isinstance(value, dict) else {} - -def _build_vendor_translate_ext() -> dict: - value = _build_vendor_info_value("translate", default={}) - return value if isinstance(value, dict) else {} - - -def _build_vendor_interface_ext_defaults() -> dict: - defaults = {} - translate = get_vendor_value('translate', default={}) - for field_name, field_info in _build_vendor_interface_ext().items(): - if "default" in field_info: - default_value = field_info["default"] - if field_info['type'] == "image": - defaults[field_name] = _build_asset(default_value) - else: - defaults[field_name] = translate.get(get_language(), {}).get(default_value, default_value) - return defaults - - -def _build_asset(filename: str) -> str: - if is_default_vendor(): - return static(filename) - - vendor_path = f"{VENDOR_LOWER}/{filename}" - if finders.find(vendor_path): - return static(vendor_path) - return static(filename) - - -def _build_optional_asset(filename: str, default=None): - if not is_default_vendor(): - vendor_path = f"{VENDOR_LOWER}/{filename}" - if finders.find(vendor_path): - return static(vendor_path) - - if finders.find(filename): - return static(filename) - return default - - -VENDOR_BUILDERS = { - "theme": _build_theme, - "theme_info": _build_theme_info, - "logo_logout": lambda: _build_asset("img/logo.png"), - "logo_index": lambda: _build_asset("img/logo_text_white.png"), - "login_image": lambda: _build_asset("img/login_image.png"), - "favicon": lambda: _build_asset("img/facio.ico"), - "logo_white": lambda: _build_asset("img/logo_white.png"), - "logo_text_white": lambda: _build_asset("img/logo_text_white.png"), - "login_title": lambda: _build_vendor_info_value("login_title"), - "footer_content": lambda: _build_vendor_info_value("footer_content"), - "interface_ext": _build_vendor_interface_ext, - "translate": _build_vendor_translate_ext, - "interface_ext_defaults": _build_vendor_interface_ext_defaults, -} - - -def get_vendor_value(kind: str, default=None): - builder = VENDOR_BUILDERS.get(kind) - if not builder: - return default - value = builder() - return default if value is None else value diff --git a/apps/settings/utils/common.py b/apps/settings/utils/common.py index a7c250ed1..77e16ebb7 100644 --- a/apps/settings/utils/common.py +++ b/apps/settings/utils/common.py @@ -9,8 +9,9 @@ from common.utils import lookup_domain def get_interface_setting_or_default(): if not settings.XPACK_ENABLED: return default_interface + from xpack.plugins.interface.models import Interface - return Interface.get_interface_setting() + return Interface.get_interface_setting(default_interface) def get_login_title():