From 7ab577a1fba43578b77f56b76275d0e65d03b318 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Mon, 19 Aug 2024 17:47:54 +0200 Subject: [mod] Revision of the favicon solution All favicons implementations have been documented and moved to the Python package: searx.favicons There is a configuration (based on Pydantic) for the favicons and all its components: searx.favicons.config A solution for caching favicons has been implemented: searx.favicon.cache If the favicon is already in the cache, the returned URL is a data URL [1] (something like `data:image/png;base64,...`). By generating a data url from the FaviconCache, additional HTTP roundtripps via the favicon_proxy are saved: favicons.proxy.favicon_url The favicon proxy service now sets a HTTP header "Cache-Control: max-age=...": favicons.proxy.favicon_proxy The resolvers now also provide the mime type (data, mime): searx.favicon.resolvers [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs Signed-off-by: Markus Heiser --- searx/favicons/__init__.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 searx/favicons/__init__.py (limited to 'searx/favicons/__init__.py') diff --git a/searx/favicons/__init__.py b/searx/favicons/__init__.py new file mode 100644 index 000000000..2a9893932 --- /dev/null +++ b/searx/favicons/__init__.py @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Implementations for providing the favicons in SearXNG""" + +from __future__ import annotations + +__all__ = ["init", "favicon_url", "favicon_proxy"] + +import pathlib +from searx import logger +from searx import get_setting +from .proxy import favicon_url, favicon_proxy + +logger = logger.getChild('favicons') + + +def is_active(): + return bool(get_setting("search.favicon_resolver", False)) + + +def init(): + + # pylint: disable=import-outside-toplevel + + from . import config, cache, proxy + + cfg_file = pathlib.Path("/etc/searxng/favicons.toml") + if not cfg_file.exists(): + if is_active(): + logger.error(f"missing favicon config: {cfg_file}") + cfg_file = config.DEFAULT_CFG_TOML + + logger.debug(f"load favicon config: {cfg_file}") + cfg = config.FaviconConfig.from_toml_file(cfg_file, use_cache=True) + cache.init(cfg.cache) + proxy.init(cfg.proxy) + + del cache, config, proxy, cfg -- cgit v1.2.3