Skip to main content

Package Django pour la gestion du consentement cookies (RGPD/CNIL) — bandeau moderne, admin Django, intégrations GA/GTM/Meta/Matomo/Plausible.

Project description

🍪 xeolux-cookiekit

Package Django de gestion du consentement cookies — RGPD/CNIL ready

PyPI version Python Django License: MIT Tests

Bandeau cookies moderne, configurable depuis l'admin Django, sécurisé par HMAC-SHA256, conforme RGPD/CNIL, avec 11 intégrations tierces prêtes à l'emploi.


Fonctionnalités

  • Bandeau + modal préférences — UI moderne 100 % CSS custom properties, sans dépendance JS
  • Configurable depuis l'admin Django — zéro code côté settings pour tout sauf enabled
  • RGPD/CNIL — analytics opt-in uniquement, durée max 395 jours (13 mois) respectée
  • HMAC-SHA256 — cookie signé côté serveur, cookie HttpOnly anti-falsification
  • 11 intégrations — GA4, GTM, Meta Pixel, LinkedIn, TikTok, X/Twitter, Matomo, Plausible, Clarity, Hotjar, Crisp
  • API JavaScripthasConsent(), acceptAll(), rejectAll(), événement xeolux:cookies:updated
  • Versioning du consentement — le bandeau réapparaît si la version change
  • Compatibilité xeolux-cachekit — synchronisation de version optionnelle
  • Bridge xeolux-analyticskit — prêt pour intégration future (package séparé)

Sommaire

  1. Installation
  2. Configuration rapide
  3. Intégration dans les templates
  4. Administration Django
  5. Intégrations tierces
  6. API JavaScript
  7. Personnalisation CSS
  8. Sécurité cookie HMAC
  9. Catégories de cookies
  10. Versioning du consentement
  11. Compatibilité xeolux-cachekit
  12. Tests
  13. Avertissement RGPD/CNIL

Installation

pip install xeolux-cookiekit

Avec support xeolux-cachekit :

pip install "xeolux-cookiekit[cachekit]"

1. Ajouter l'application

# settings.py
INSTALLED_APPS = [
    ...
    "xeolux_cookiekit",
]

2. Appliquer les migrations

python manage.py migrate xeolux_cookiekit

3. Activer le context processor (recommandé)

# settings.py
TEMPLATES = [
    {
        "OPTIONS": {
            "context_processors": [
                ...
                "xeolux_cookiekit.context_processors.cookiekit_config",
            ],
        },
    },
]

Configuration rapide

Dans settings.py, une seule ligne suffit :

XEOLUX_COOKIEKIT = {"enabled": True}

Tout le reste (style, textes, intégrations, catégories…) se configure dans l'admin Django.


Intégration dans les templates

Dans votre base.html :

{% load cookiekit_tags %}
<!DOCTYPE html>
<html>
<head>
    ...
    {% cookiekit_head %}
</head>
<body>
    {% cookiekit_body %}

    ...votre contenu...

    {% cookiekit_banner %}
</body>
</html>

Script conditionnel par catégorie

{% load cookiekit_tags %}

{% cookiekit_script "analytics" %}
<script>
    /* Ce bloc ne s'exécute que si "analytics" est consenti */
    myAnalyticsTool.init();
</script>
{% endcookiekit_script %}

Administration Django

Accédez à /admin/xeolux_cookiekit/cookiekitconfig/ pour tout configurer visuellement.

Section admin Contenu
Général Activation, version de consentement, durée cookie
🔒 Sécurité du cookie Signature HMAC-SHA256 (activée par défaut)
Apparence Couleurs, position, layout, ombres, police
Textes Labels des boutons, titres, lien politique de confidentialité
Intégrations Google GA4 (G-xxx), GTM (GTM-xxx)
Autres intégrations Meta, LinkedIn, TikTok, Twitter/X, Matomo, Plausible, Clarity, Hotjar, Crisp
Scripts personnalisés HTML/JS <head> et <body> après consentement
CacheKit / Versioning Synchronisation avec xeolux-cachekit
AnalyticsKit Bridge vers xeolux-analyticskit (futur)
Avancé CSS personnalisé, z-index

Priorité de configuration

config_source Comportement
admin_fallback_settings (défaut) Admin en priorité, fallback sur settings.py
settings_only Ignore l'admin — tout depuis settings.py
admin_only Admin obligatoire — erreur si absent

Intégrations tierces

Toutes les intégrations s'activent depuis l'admin Django. Chaque script est injecté uniquement après consentement à la catégorie correspondante.

Analytiques

Intégration Catégorie Champ admin
Google Analytics 4 analytics Measurement ID (G-XXXXXXXXXX)
Google Tag Manager analytics Container ID (GTM-XXXXXXX)
Matomo analytics Site ID + Tracker URL
Plausible analytics Domain
Microsoft Clarity analytics Project ID
Hotjar analytics Site ID

Marketing

Intégration Catégorie Champ admin
Meta Pixel marketing Pixel ID
LinkedIn Insight Tag marketing Partner ID
TikTok Pixel marketing Pixel ID
Twitter / X Pixel marketing Pixel ID

Préférences

Intégration Catégorie Champ admin
Crisp Chat preferences Website ID (UUID)

API JavaScript

// Vérifier le consentement d'une catégorie
window.XeoluxCookieKit.hasConsent("analytics"); // true | false

// Lire le consentement complet
window.XeoluxCookieKit.getConsent();
// { version: "1.0.0", updated_at: "...", choices: { necessary: true, analytics: true, ... } }

// Actions utilisateur
window.XeoluxCookieKit.acceptAll();
window.XeoluxCookieKit.rejectAll();
window.XeoluxCookieKit.savePreferences({ analytics: true, marketing: false });

// Interface
window.XeoluxCookieKit.openPreferences();
window.XeoluxCookieKit.closePreferences();
window.XeoluxCookieKit.resetConsent(); // Supprime le cookie, réaffiche le bandeau

// Écouter les changements de consentement
window.addEventListener("xeolux:cookies:updated", (event) => {
    const consent = event.detail;
    if (consent.choices.analytics) {
        // Activer vos outils analytics
    }
});

Personnalisation CSS

Le style est piloté par des CSS custom properties (--xck-*) :

:root {
    --xck-bg:             #111111;
    --xck-text:           #ffffff;
    --xck-primary:        #ff6b00;
    --xck-primary-text:   #ffffff;
    --xck-secondary:      #2b2b2b;
    --xck-secondary-text: #ffffff;
    --xck-radius:         14px;
    --xck-z-index:        9999;
    --xck-shadow:         0 8px 40px rgba(0,0,0,0.45);
    --xck-font:           system-ui, sans-serif;
}

Toutes les classes CSS sont préfixées xck- pour éviter les conflits : .xck-banner, .xck-modal, .xck-button, .xck-button--primary, .xck-toggle, .xck-category

Utilisez le champ CSS personnalisé dans l'admin pour tout surcharger.


Sécurité cookie HMAC

xeolux-cookiekit implémente une stratégie deux cookies :

Cookie Accessible JS Rôle
xeolux_cookie_consent ✅ Oui Stocke les choix (version, catégories)
xeolux_cookie_consent_sig ❌ Non (HttpOnly) Signature HMAC-SHA256 — détecte les falsifications

La signature est calculée avec settings.SECRET_KEY + sel statique via hmac.new(key, payload, sha256). Toute modification manuelle du cookie est détectée côté serveur.

Vérification dans une view Django :

from xeolux_cookiekit.security import get_verified_consent

def my_view(request):
    consent = get_verified_consent(request, cookie_name="xeolux_cookie_consent")
    if consent and consent.has("analytics"):
        # Consentement analytics vérifié et non falsifié
        ...

Catégories de cookies

Catégories intégrées

Clé Label Requis Défaut
necessary Nécessaires ✅ Oui ✅ Toujours actif
analytics Mesure d'audience Non ❌ Opt-in (CNIL)
marketing Marketing Non ❌ Opt-in (CNIL)
preferences Préférences Non ❌ Opt-in (CNIL)

Catégories personnalisées

Le modèle CookieCategory (admin) permet d'ajouter des catégories custom. Elles apparaissent automatiquement dans la modal de préférences.

{% cookiekit_script "ma_categorie_custom" %}
<script>/* activé après consentement */</script>
{% endcookiekit_script %}

Versioning du consentement

Si la consent_version change, le bandeau réapparaît pour tous les utilisateurs.

Via l'admin : champ Version de consentement, ou utilisez l'action "Incrémenter la version (patch)" depuis la liste.


Compatibilité xeolux-cachekit

pip install "xeolux-cookiekit[cachekit]"

Si xeolux_cachekit est installé et que cachekit.sync_cookie_version est activé, la version de consentement est synchronisée avec la version cachekit. Fonctionne en mode dégradé sans cachekit.


Tests

pip install "xeolux-cookiekit[dev]"
pytest

66 tests couvrent : config merge, RGPD/CNIL compliance, singleton admin, HMAC signing, payload validation, falsification detection, analytics bridge.


Avertissement RGPD/CNIL

Ce package est un outil technique. Il ne constitue pas un conseil juridique.

La conformité RGPD/CNIL dépend de votre implémentation, de votre politique de confidentialité et de la nature de vos traitements. Consultez la documentation CNIL et un juriste pour votre conformité.


© 2026 Xeolux — Licence MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xeolux_cookiekit-1.0.0.tar.gz (51.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xeolux_cookiekit-1.0.0-py3-none-any.whl (49.5 kB view details)

Uploaded Python 3

File details

Details for the file xeolux_cookiekit-1.0.0.tar.gz.

File metadata

  • Download URL: xeolux_cookiekit-1.0.0.tar.gz
  • Upload date:
  • Size: 51.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for xeolux_cookiekit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6638460c3b7b8a132d359a940c7d364666f9c356f528223a138a78be58235d6f
MD5 ca6b9ada0645bacbc52eb924dd60be34
BLAKE2b-256 237bbd0e069472cf9206e0aa497cc0895760f351561e3144f416ae951a6ae647

See more details on using hashes here.

File details

Details for the file xeolux_cookiekit-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for xeolux_cookiekit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fdada7de679a18e38d60c9fd85e1aa04bf9123afdc101c8042cc1e729253bec0
MD5 386791cc1e3a5b5f71a98bab46ac44b6
BLAKE2b-256 82964c299e9db624dcee1188dfaec323afd3f39f00fd9338cb5d946571aa670c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page