MuK Cookie Consent
Ask properly. Prove it. Block until you may.
MuK IT GmbH - www.mukit.at
Overview
Odoo's built-in cookies bar asks one question: everything, or only the essentials. Regulators expect a choice per purpose, a refusal that is as easy as consent, and records that show what a visitor agreed to. This module replaces the bar with a consent manager that does all three, and keeps the rest of Odoo's own cookie plumbing intact while doing it.
No vendor account, no subscription, no external script and no second product to buy. Everything runs inside your Odoo, on Community and Enterprise alike.
A Real Choice, On The First Layer
Refuse all and Accept all sit side by side on the first layer, in the same variant and the same size. That parity is built into the template rather than offered as a setting, because a banner that quietly favours one answer is the pattern supervisory authorities actually sanction. Nothing optional is pre-ticked, and pre-ticking is refused on save. Escape never counts as a decision, in either direction — and a visitor who reopens the banner just to look can leave it again without touching the choice they already made.
Blocked Per Service, Not All Or Nothing
Register the services you use and the hosts they load from. Scripts and embeds belonging to a service whose purpose has not been granted are removed from the page server-side, before the browser ever sees them, so nothing races a script blocker. Granting statistics stops blocking your analytics without also releasing your advertising pixels.
A blocked video or map leaves a notice in its place. Clicking it allows that one embed, and nothing else — a service you mark ask in place only is never released by a purpose, not even by Accept all. Google Consent Mode v2 is signalled with all seven signals, in basic or advanced mode, for whichever Google tag your site already loads, and Plausible is consent-gated too, which the built-in bar does not do.
Set It Where You Can See It
How the banner looks belongs in the website editor, not in a settings page you cannot see it from. Select the Cookies Bar block and choose its layout — a bar top or bottom, a box in either corner, a centred dialog — its density, whether the footer carries the way back to the choice, and which corner holds the floating button. The notice text itself is edited in place like any other content, while the parts generated from your registry stay protected from accidental edits.
What is left under Settings is the handful of decisions that carry legal weight rather than taste: blocking, Consent Mode, Global Privacy Control, consent proof, the policy link and the policy version.
Proof You Can Actually Produce
Every decision is recorded with what the visitor was shown, not only what they chose: the policy version, a fingerprint of the cookie registry in force, the banner version, the language, the resolved country and region rule, the purposes granted and the purposes refused, and a salted hash of the truncated IP — no readable address is kept. Records are append-only: a later decision is filed as its own record instead of overwriting the earlier one, which is what makes the log worth producing.
Adding a purpose, a service or a cookie asks your visitors again by itself, because consent given against an older disclosure does not cover a new one. You can see it in the log: the fingerprint changes, and the decisions taken after it are the ones that still count.
A Registry That Already Knows Odoo
The declarations ship filled in for what Odoo itself stores on a visitor's device: the session, language and company cookies, the timezone, the live-update and presence keys, the basket count, a live chat, a survey in progress, the UTM attribution cookies, and the storage the Enterprise appointment and push notification features use. Each one carries its provider, purpose, retention and type, and every strictly-necessary classification carries the reason it is necessary — which is the part you have to be able to defend.
A weekly scan walks your own pages and lists the cookies they set, the storage keys their scripts write and the third-party hosts they load. What no declaration covers is put up for review, so a pixel someone pasted into the page turns up as a task rather than as a surprise in an audit.
A Cookie Policy Built From The Registry
The policy page is generated from the same declarations the banner gates on, so the two always agree with each other. Point the banner at your own legal page instead if you keep one, and the rest still follows the registry.
Region rules decide how long a decision is relied on, with presets for the EU/EEA, the UK and Switzerland. Each preset names the authority behind its figure, and where no figure has been published it says so instead of inventing one.
Built To Be Used By Everyone
The dialog is a real role="dialog" labelled by its own
heading, with switches operable by keyboard, 24 px minimum targets and
no control hidden from assistive technology. Modality is claimed only where
it is true: the notice leaves your page usable and does not steal focus,
while the preference centre covers the page, announces itself as modal,
keeps Tab inside it and hands focus back on close. It is built to WCAG 2.2
AA, which matters twice over: an inoperable banner cannot produce informed
consent, so the cookies it sets have no valid basis.
Everything renders server-side, in the initial HTML. The banner costs no request to appear, reserves its own space rather than shifting your layout, and adds no third-party request, no external domain and no vendor script to your pages. It ships in English, German, French, Spanish and Italian.
Want more?
Are you having troubles with your Odoo integration? Or do you feel your
system lacks of essential features?
If your answer is YES to
one of the above questions, feel free to contact us at anytime with your
inquiry.
We are looking forward to discuss your needs and plan the
next steps with you.
Our Services
Odoo
Development
Odoo
Integration
Odoo
Infrastructure
Odoo
Training
Odoo
Support
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Website (website)
• Discuss (mail) |
| Lines of code | 4471 |
| Technical Name |
muk_website_cookies_consent |
| License | LGPL-3 |
| Website | http://www.mukit.at |
MuK Cookie Consent
Replaces the built-in cookies bar with a real consent manager. Visitors consent per purpose instead of all-or-nothing, every decision is recorded as proof, third-party scripts and embeds are blocked per service until their category is granted, and Google Consent Mode v2 is signalled automatically.
Installation
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to your Odoo server and go to the Apps menu. Trigger the debug mode and update the list by clicking on the "Update Apps List" link. Now install the module by clicking on the install button.
Upgrade
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server and log on to your Odoo server. Select the Apps menu and upgrade the module by clicking on the upgrade button.
Configuration
Consent management follows Odoo's own switch: turn on Cookies Bar under Website > Configuration > Settings > Privacy, and this module takes over the banner. The Cookie Consent section of the same page then offers:
- Block Before Consent: strip scripts and embeds of a service until its purpose is granted, replacing embeds with a notice.
- Google Consent Mode: Basic withholds Google tags until a purpose they serve is granted, so a refusal keeps them unloaded. Advanced loads them immediately and allows cookieless pings, which recovers conversion modelling but sends data before any consent. Basic is the default.
- Global Privacy Control: treat a Sec-GPC request header as a refusal of everything optional, and optionally publish /.well-known/gpc.json.
- Consent Proof: record every decision, optionally with a salted hash of the truncated visitor IP. No readable address is stored.
- Policy Link: where the banner sends visitors for the full policy. Empty uses the page Odoo publishes at /cookie-policy, which lists your declarations on its own.
- Policy Version: raising it asks every visitor again.
How the banner looks is set where you can see it, in the website editor: select the Cookies Bar block in the sidebar for its Layout, its Density, the Footer Link and the Floating Button that bring a visitor back to their choice.
Captured keys, purposes, services, declarations and region rules live under Website > Configuration > Cookie Consent. The consent log sits under Website > Reporting > Consent Logs. Website editors may read it; only a system administrator may change or delete a record, and even then the model refuses anything but the retention purge.
Usage
A first-time visitor is asked before anything optional runs. The first layer offers Refuse all, Accept all and Manage choices; the second layer lists every purpose with the cookies it covers, taken from your own declarations.
Nothing optional runs until the visitor agrees:
- Cookies are gated per purpose. Odoo's own optional cookies, such as UTM attribution, follow the marketing purpose.
- Scripts and embeds belonging to a service whose purpose is refused are removed from the page server-side, before the browser sees them. A refused embed shows a notice in its place; clicking it allows that one embed without changing any other choice.
- A service marked Ask In Place Only is never released by a purpose, not even by Accept all. It stays blocked until the visitor allows it where it stands, which is how the seeded video and map services are set up: consent to a purpose is not consent to load a named third party into the page.
- Google Consent Mode v2 is emitted with all seven signals, wait_for_update, ads_data_redaction and url_passthrough, for whichever Google tag your site already loads. Deploying that tag stays Odoo's job, not this module's.
- Plausible is consent-gated, which the built-in bar does not do.
Every decision reloads the page. Scripts that already ran cannot be unloaded, so a reload is the only way a withdrawal actually takes effect.
A decision stops being relied on when it expires, when you raise the policy version, or when the cookie registry itself changes: adding a purpose, a service or a declared cookie asks visitors again automatically, because consent given against an older disclosure no longer covers the new one.
The seeded declarations cover what Odoo itself stores on a visitor's device: the session, language and company cookies, the timezone, the live-update and presence keys, the basket count, a live chat, a survey in progress, the UTM attribution cookies and the storage the Enterprise appointment and push notification features use. Everything Odoo can set is declared, whether or not the app that sets it is installed, so archive the rows you do not need. Your own third parties are yours to add as services, and a weekly scan of your own pages lists what they set and load under Captured, with anything no declaration covers put up for review. Storage keys are read from the scripts that write them, since a scan runs on the server and cannot open the browser's storage. Blocking works on script and iframe sources, so a link to a font service cannot be held back: serve those from your own server if they must not load before consent.
Region rules decide how long a decision is relied on. The shipped presets cover the EU/EEA, the UK and Switzerland, with per-country retention where an authority has published one, and each preset names its source.
Each consent record stores what the visitor was shown, not only what they chose: the policy version, a fingerprint of the cookie registry in force, the banner version, the language, the resolved country and region rule, the granted and the refused purposes, and a salted hash of the truncated IP. Records are append-only and pruned by a weekly scheduled action after three years.
Credits
Contributors
- Mathias Markl <mathias.markl@mukit.at>
Author & Maintainer
This module is maintained by the MuK IT GmbH.
MuK IT is an Austrian company specialized in customizing and extending Odoo. We develop custom solutions for your individual needs to help you focus on your strength and expertise to grow your business.
If you want to get in touch please contact us via mail (sale@mukit.at) or visit our website (https://mukit.at).
Please log in to comment on this module