Commit Graph

89 Commits

Author SHA1 Message Date
Colin Maudry d2fa17761d feat(mcp): durcir le consentement OAuth (remember-cookie SameSite + CSRF) (#114)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 15:07:59 +02:00
Colin Maudry 34a8470792 feat(mcp): migrations OAuth/usage + câblage app.py (#114)
Ajoute les migrations 0008-0011 (oauth_clients, oauth_codes,
oauth_tokens, mcp_usage) et câble le serveur d'autorisation OAuth 2.1
dans le bloc DASH_MCP_ENABLED de app.py : init des schémas oauth/usage,
purge périodique, enregistrement des routes /oauth et /.well-known, et
exemption CSRF de ces routes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 14:38:33 +02:00
Colin Maudry ff78b86ad0 feat(mcp): page compte Connecteur MCP + instructions clients (scope B #111)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 15:16:36 +02:00
Colin Maudry 4f18cc07f2 feat(mcp): câble le garde /_mcp + exemption CSRF dans l'app (scope B #111) 2026-07-10 15:00:53 +02:00
Colin Maudry 082d3e24b1 feat(mcp): activer le serveur MCP via DASH_MCP_ENABLED (scope A #111) 2026-07-09 20:50:14 +02:00
Colin Maudry 63a7ff3d89 Petites améliorations de formulation et d'UI 2026-07-01 10:17:25 +02:00
Colin Maudry 7184b7768a feat(seo): index de sitemaps acheteurs/titulaires, canonical, robots
- robots.txt déclare désormais le sitemap
- /sitemap.xml devient un index de sous-sitemaps paginés (limite 50k URLs/fichier)
  générés depuis DuckDB et mis en cache 24h : pages statiques, acheteurs, titulaires
- balise canonical auto-référente (JS, car index_string Dash partagé)
- config nginx de référence : 301 decp.info → colibre.fr (chemin préservé)
- tests SEO via test client Flask

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 23:06:46 +02:00
Colin Maudry 41491159a3 Ajouts des icones colibre #57 2026-06-30 22:41:19 +02:00
Colin Maudry 9b124deeea refactor: rebrand decp.info to colibre #57
- Rename project from decp.info to colibre across all codebase
- Update domain from https://decp.info to https://colibre.fr
- Update GitHub repo references to ColinMaudry/colibre
- Rename deployment files: decpinfo-backup.* → colibre-backup.*
- Update project configuration and documentation
- Rename project assets: decp.info.png → colibre.png
- Update environment variables and constants (DOMAIN_NAME, TOKEN_PREFIX, GITHUB_REPO, etc.)
- Update URLs in all pages, tests, and configuration files
- Keep DECP acronym in text (unchanged per requirements)
- Add rebrand note to README.md

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-30 21:43:33 +02:00
Colin Maudry b46d5d8244 Redirection llms.txt pour les LLMS 2026-06-30 21:02:14 +02:00
Colin Maudry ce3c3a5e6f feat: le lien de version pointe vers /a-propos/roadmap #94 2026-06-30 14:30:07 +02:00
Colin Maudry fb45c8e7d5 feat: registre des votes feature_votes #94
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 13:55:28 +02:00
Colin Maudry dc30d889c4 Merge vues sauvegardées #95 2026-06-29 16:54:11 +02:00
Colin Maudry 03023a6b8c feat: table saved_views et CRUD #95 2026-06-29 16:14:00 +02:00
Colin Maudry 8cd5bfe821 fix(csrf): supprimer prevent_initial_call=True sur _fill_csrf_inputs
Avec prevent_initial_call=True, le callback ne s'exécutait pas lors de
la chaîne initiale (_generate_csrf_token → csrf-token), laissant le champ
csrf_token vide au premier chargement direct de /connexion → erreur 400.

Ajoute des tests comportementaux avec CSRF activé (comme en production) et
un test architectural qui vérifie que le callback reste appelable initialement.
Corrige aussi les assertions de redirection post-login (/compte/abonnement).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 15:46:30 +02:00
Colin Maudry 0eb2807630 Merge branch 'dev2' into dev
# Conflicts:
#	CHANGELOG.md
#	pyproject.toml
#	src/assets/css/style.css
#	src/pages/_apropos_shell.py
#	uv.lock
2026-06-26 18:27:24 +02:00
Colin Maudry 57dd4d22eb Lien a propos direct, ordre section, mini erreur dans marche.py 2026-06-26 15:46:10 +02:00
Colin Maudry 6e0722e2d7 S'assure que src/ n'est pas dans le path au démarrage 2026-06-25 21:56:10 +02:00
Colin Maudry 3d1cb69463 feat(abonnement): routes subscribe/cancel/webhook + câblage app (#90) 2026-06-25 19:00:53 +02:00
Colin Maudry b93aca9005 feat(ux): refonte barre latérale /compte et fix CLI tokens
- Déconnexion déplacée dans la sidebar (lien discret) et retirée du dropdown navbar
- Email utilisateur connecté = lien simple vers /compte/admin (sans dropdown)
- Hover orange pâle sur les nav-links des sidebars
- fix(cli): load_dotenv() dans tokens_cli pour charger .env hors contexte app

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 02:11:28 +02:00
Colin Maudry 590b927e31 fix(auth): corrections runtime LinkedIn OAuth (#88)
- Workaround nonce OIDC LinkedIn (non-conformité) : capture MissingClaimError après échange de code réussi et fetch userinfo séparément
- Ajout token_endpoint_auth_method: client_secret_post (requis par LinkedIn)
- suppress_callback_exceptions=True pour corriger les erreurs Dash multi-pages
- Suppression bouton déconnexion redondant sur /compte/admin et style hover incorrect sur la navbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 00:38:01 +02:00
Colin Maudry 95f7d80b45 feat(compte): page /compte/admin (email, mot de passe, suppression) (#73) 2026-06-24 22:07:05 +02:00
Colin Maudry c99f4d970e fix(csrf): centraliser l'injection des tokens CSRF via un dcc.Store et un callback pattern-matching
Remplace les 7 callbacks CSRF individuels (un par formulaire, avec IDs string
page-spécifiques) par un seul dcc.Store(id="csrf-token") dans le layout principal
et un callback pattern-matching Output({"type": "csrf-input", "index": ALL}).
Évite les erreurs Dash "id non trouvé dans le layout" sans recourir à
suppress_callback_exceptions=True.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 05:26:07 +02:00
Colin Maudry cbce646fd8 Merge branch 'dev' into feature/73_compte_utilisateur 2026-06-24 03:01:43 +02:00
Colin Maudry 1aea71be7f Merge branch 'main' into feature/78_api 2026-06-12 09:33:59 +02:00
Colin Maudry c9a97fe9d2 feat(etapes): référencement de /etapes dans le sitemap 2026-06-04 21:51:30 +02:00
Colin Maudry e55f3447db Possibilité de charger les données depuis une URL, memoisation de last_modified 2026-06-04 21:34:36 +02:00
Colin Maudry 686218c639 API: branchement init_api dans l'app Dash (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:07:47 +02:00
Colin Maudry 0c9666204b Autorisation du HTML dans les annonces 2026-05-11 10:34:06 +02:00
Colin Maudry 3e89dacff9 Correction de setup_table_columns et autres 2026-04-22 21:16:51 +02:00
Colin Maudry d4844140b4 src/auth : exempter les routes Dash internes de la protection CSRF (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 23:11:17 +02:00
Colin Maudry 20e7eed424 src/app.py : navbar avec lien Connexion / dropdown utilisateur (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:56:13 +02:00
Colin Maudry 8896726e09 src/app.py : initialisation de l'authentification au démarrage (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 17:34:12 +02:00
Colin Maudry da5a99b3af Merge branch 'main' into dev 2026-04-20 10:49:31 +02:00
Colin Maudry 285ed37d79 Correction de l'import d'utils.cache 2026-04-20 00:06:44 +02:00
Colin Maudry 7aef7acd34 Petits ajustements (cache => utils, noms de variables) 2026-04-19 23:49:02 +02:00
Colin Maudry 4d0baebb75 Vérification de l'existence de cache_dir 2026-04-19 15:54:36 +02:00
Colin Maudry 26169abc2f Suppression du cache à chaque redémarrage 2026-04-19 15:29:34 +02:00
Colin Maudry a7516d65e3 Utilisation du logger global dans app et db 2026-04-18 19:28:34 +02:00
Colin Maudry e352624c02 Capitalisation des constantes 2026-04-18 18:09:42 +02:00
Colin Maudry 9a19e5cba7 Mise en place d'un cache pour l'observatoire 2026-04-15 12:11:44 +02:00
Colin Maudry 24e0cee2b1 Améliorations de typage 2026-03-30 14:58:18 +02:00
Colin Maudry d50ec5b01e Statistiques => Observatoire #65 2026-03-17 22:59:01 +01:00
Colin Maudry 5c43bfea78 AMélioration de la génération de liens canoniques (pas de doublons) 2026-02-15 16:50:09 +01:00
Colin Maudry 61dbf237cf Premier test UI 2026-02-04 23:33:59 +01:00
Colin Maudry 8c11a018a0 Alignement du logo et du numéro de version 2026-01-29 02:38:10 +01:00
Colin Maudry 274e06cde4 Hébergement de bootstrap pour supprimer google fonts 2026-01-29 01:37:56 +01:00
Colin Maudry f9aadede8b robots.txt généré par le code #66 2026-01-29 01:37:08 +01:00
Colin Maudry fb5c37b34b Merge branch 'feature/66_seo' into dev 2026-01-28 14:06:03 +01:00
Colin Maudry 1eecc45e29 Meta keywords (même si a priori ça aide pas pour le SEO) #66 2026-01-28 13:49:19 +01:00