Repository navigation
Conversation
|
In order to contribute to the MapStore project, the CLA (Contributor License agreement) should be sent signed to GeoSolutions. Please consult contributing rules at: https://github.com/geosolutions-it/MapStore2/wiki/Contributing-to-MapStore#contributing-code |
|
In order to contribute to the MapStore project, the CLA (Contributor License agreement) should be sent signed to GeoSolutions. Please consult contributing rules at: https://github.com/geosolutions-it/MapStore2/wiki/Contributing-to-MapStore#contributing-code |
09173d2 to
00e6a32
Compare
|
The PR now targets
Checked on a WAR built from this branch: template pages and warning on first visit; public template extension and an operator extension installed and removed, with the warning gone and back. |

Description
Add a common privacy panel and a consent lifecycle to MapStore. The panel opens on first entry through the home page or a direct resource URL and remains accessible from the footer on maps, Dashboards, GeoStories and embeds.
The default configuration contains no optional categories. It provides information about necessary tools and remembers dismissal separately from consent. Deployments that configure optional tools can offer refusal, acceptance, granular choices and withdrawal; registered integrations stay inactive until their category is allowed.
Please check if the PR fulfills these requirements
Issue
Closes #13038
What is the current behavior?
The cookie notice stores a blanket acknowledgement rather than category-specific decisions. Its "More details" text is an old HTML fragment that is not presented as a template. The notice does not manage the lifecycle of optional integrations, and access to privacy information is inconsistent across application entry points. Standard sharing mounts Social controls and automatic counters.
What is the new behavior?
AbortSignalplus a synchronous teardown contract.privacy.linksinlocalConfig.json, as a url or a url by locale;product/assets/privacy, with the cookie and browser-storage inventory of the default configuration."enabled": false), installs an extension or configuresprivacy.links.localConfig.json: the extension dispatchessetControlProperty('privacy', 'defaults', ...)(pages, policy version, retention, categories) and follows the consent throughSET_PRIVACY_CHOICE. The template of the extension, with pages by locale, is geosolutions-it/mapstore-privacy-settings-extension.translationsfolder of an extension, or from the configuration by adding a data directory folder totranslationsPath.externalCookieUrlanddeclineUrloptions and thetranslations/fragments/cookiepages. Withprivacy.enabledset tofalse, or without theprivacysection, MapStore shows no notice.socialtab selection opens the link tab.dxf-parseris loaded only when a DXF file is read, and theloglevelvalue it stores on load is removed.Breaking change
The standard Social tab is removed, together with the
socialPanelandgetCountoptions ofSharePanel. Legacy cookie acknowledgements do not suppress the new privacy information or grant optional consent. Until an installation configures its own policy pages, the panel shows the template warning to every user. Custom applications must include the Cookie plugin on their relevant routes, provide and link their policy pages and register any optional integration. Existing projects must add the copy of the template pages to theirweb/pom.xml, or configureprivacy.links. The old cookie notice is removed with itsexternalCookieUrlanddeclineUrloptions: with the privacy configuration disabled or missing, no notice is shown. No backend API or database schema changes are introduced.See Privacy and Consent Configuration and the migration guide in this branch.
Validation
On Linux with Node 20 and Chrome Headless, on the branch rebased on
master:privacySettingsmessage.-DskipTests). The WAR contains onespring-webjar and starts without changes.privacy.linksinlocalConfig.json.patch: operator pages, no warning;privacy.enabled: false: no panel, no footer entry and no old notice;translationsPathinlocalConfig.json.patch; a language without a file keeps the MapStore texts;privacy.linksprecedence, accept, refuse, customize and withdraw with an extension integration started and stopped throughSET_PRIVACY_CHOICE.Deployment notes
This PR targets
master; it will be backported to2026.03.xx. Docker and Helm files are unchanged. Deployment operators must verify actual services, purposes, retention and providers, and publish their policy pages. The widget does not automatically control arbitrary plugins, undo transmitted data or delete third-party cookies.The local synthetic fixture, test credentials, databases, runtime volumes and local reports are not included in this PR. #12842 is background only and has not been modified.
Review follow-up
Second round:
master. The Social tab is removed from the list-based tabs ofSharePanelnow onmaster; the embed tab moves from position 3 to 2, and the tests follow.product/assets/privacy, linked only when nothing else configures a page, instead of inlocalConfig.json: an extension can still replace them. References to the MapStore version and to a commit are removed from the pages.First round:
🤖 Generated with Claude Code