fix: og:image et twitter:image en URL absolue (v7.69.1)
Les meta `og:image` / `twitter:image` ajoutés en v7.69.0 pointaient vers une URL relative (`/static/img/logo-512.jpg`). Les crawlers — LinkedIn, Slack, Discord, iMessage — ignorent une URL relative : la carte de partage de FlowDeck était donc vide partout où un lien est collé. Correction via le motif déjà en place dans `app/templating.py` : un global Jinja `app_base_url()` construit à partir de `settings.app_base_url`, qui est LA MÊME source que les liens de partage de pages (`collaboration.py:32`). Si cette valeur est mal renseignée, ces liens l'étaient déjà — comportement cohérent plutôt qu'une deuxième source de vérité à maintenir. Lecture paresseuse de `settings` dans la fonction, à l'image de `_plugin_enabled` : un import au chargement du module créerait un import circulaire. Rendu vérifié sur l'instance déployée : og:image" content="http://localhost:8080/static/img/logo-512.jpg Tests : `test_og_image_url_is_absolute_via_base_url` vérifie le global ET l'absence de la forme relative dans les deux templates. Piège évité au passage — la forme absolue CONTIENT l'ancienne en sous-chaîne, donc l'assertion négative porte sur `content="/static/img/` (le guillemet avant la barre) et non sur l'URL complète. pytest 1413 passed / 0 failed · ruff OK · OpenAPI 526 chemins / 7.69.1 e2e 14/14 verts sur l'instance redéployée
This commit is contained in:
+1
-1
@@ -186,7 +186,7 @@ async def lifespan(_app: FastAPI):
|
||||
|
||||
app = FastAPI(
|
||||
title="FlowDeck",
|
||||
version="7.69.0",
|
||||
version="7.69.1",
|
||||
docs_url="/docs",
|
||||
redoc_url="/redoc",
|
||||
lifespan=lifespan,
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
<meta property="og:site_name" content="FlowDeck">
|
||||
<meta property="og:title" content="FlowDeck — votre espace Notion auto-hébergé">
|
||||
<meta property="og:description" content="Éditeur de blocs, Kanban, bases de données et intégration Gitea/GitHub, sur votre propre serveur.">
|
||||
<meta property="og:image" content="/static/img/logo-512.jpg">
|
||||
<meta property="og:image" content="{{ app_base_url() }}/static/img/logo-512.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="FlowDeck — votre espace Notion auto-hébergé">
|
||||
<meta name="twitter:description" content="Éditeur de blocs, Kanban, bases de données et intégration Gitea/GitHub.">
|
||||
<meta name="twitter:image" content="/static/img/logo-512.jpg">
|
||||
<meta name="twitter:image" content="{{ app_base_url() }}/static/img/logo-512.jpg">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<link rel="stylesheet" href="/static/css/app.css?v={{ asset_version }}">
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
<meta property="og:site_name" content="FlowDeck">
|
||||
<meta property="og:title" content="FlowDeck — votre espace Notion auto-hébergé">
|
||||
<meta property="og:description" content="Éditeur de blocs, Kanban, bases de données et intégration Gitea/GitHub, sur votre propre serveur.">
|
||||
<meta property="og:image" content="/static/img/logo-512.jpg">
|
||||
<meta property="og:image" content="{{ app_base_url() }}/static/img/logo-512.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="FlowDeck — votre espace Notion auto-hébergé">
|
||||
<meta name="twitter:description" content="Éditeur de blocs, Kanban, bases de données et intégration Gitea/GitHub.">
|
||||
<meta name="twitter:image" content="/static/img/logo-512.jpg">
|
||||
<meta name="twitter:image" content="{{ app_base_url() }}/static/img/logo-512.jpg">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #191919;
|
||||
|
||||
@@ -79,6 +79,18 @@ ENV.globals["csp_nonce"] = lambda: CSP_NONCE.get()
|
||||
ENV.globals["csrf_token"] = lambda: CSRF_TOKEN.get()
|
||||
# Plugins activés : conditionne les blocs de UI rendus côté serveur.
|
||||
ENV.globals["plugin_enabled"] = lambda slug: _plugin_enabled(slug)
|
||||
# v7.69 : URL de base absolue pour og:image / twitter:image — les crawlers
|
||||
# ignorent les URL relatives. Lecture paresseuse comme _plugin_enabled
|
||||
# (évite l'import circulaire au chargement du module). Même source que les
|
||||
# liens de partage de pages (collaboration.py) : si elle est mal renseignée,
|
||||
# ces liens le sont déjà.
|
||||
ENV.globals["app_base_url"] = lambda: _app_base_url()
|
||||
|
||||
|
||||
def _app_base_url() -> str:
|
||||
from app.config import settings
|
||||
|
||||
return (settings.app_base_url or "").rstrip("/")
|
||||
|
||||
|
||||
def _plugin_enabled(slug: str) -> bool:
|
||||
|
||||
Reference in New Issue
Block a user