Sunil Mohan Adapa 854f82a211
privacy: Show notification again so that users see the new setting
Tests:

- Without the patch, start the service and dismiss the privacy notification.
With the patch, the restart the service. Privacy app is updated and privacy
notification is shown again. Incrementing the version number of the privacy app
does not result in showing of the notification again.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2024-09-04 10:30:54 +03:00

88 lines
2.8 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""FreedomBox app to the Privacy app."""
from django.utils.translation import gettext_lazy as _
from django.utils.translation import gettext_noop
from plinth import app as app_module
from plinth import menu
from plinth.config import DropinConfigs
from plinth.modules.backups.components import BackupRestore
from plinth.package import Packages
from . import manifest, privileged
_description = [_('Manage system-wide privacy settings.')]
class PrivacyApp(app_module.App):
"""FreedomBox app for Privacy."""
app_id = 'privacy'
_version = 3
can_be_disabled = False
def __init__(self) -> None:
"""Create components for the app."""
super().__init__()
info = app_module.Info(app_id=self.app_id, version=self._version,
is_essential=True, name=_('Privacy'),
icon='fa-eye-slash', description=_description,
manual_page=None)
self.add(info)
menu_item = menu.Menu('menu-privacy', info.name,
info.short_description, info.icon,
'privacy:index', parent_url_name='system:data',
order=10)
self.add(menu_item)
packages = Packages('packages-privacy', ['popularity-contest', 'gpg'])
self.add(packages)
dropin_configs = DropinConfigs('dropin-configs-privacy', [
'/etc/dpkg/origins/freedombox',
])
self.add(dropin_configs)
backup_restore = BackupRestore('backup-restore-privacy',
**manifest.backup)
self.add(backup_restore)
def setup(self, old_version):
"""Install and configure the app."""
super().setup(old_version)
privileged.setup()
if old_version == 0:
privileged.set_configuration(enable_popcon=True)
if old_version < 3:
_show_privacy_notification()
def _show_privacy_notification():
"""Show a notification asking user to review privacy settings."""
from plinth.notification import Notification
message = gettext_noop(
'Please update privacy settings to match your preferences.')
data = {
'app_name': 'translate:' + gettext_noop('Privacy'),
'app_icon': 'fa-eye-slash'
}
title = gettext_noop('Review privacy setting')
actions_ = [{
'type': 'link',
'class': 'primary',
'text': gettext_noop('Go to {app_name}'),
'url': 'privacy:index'
}, {
'type': 'dismiss'
}]
Notification.update_or_create(id='privacy-review', app_id='privacy',
severity='info', title=title,
message=message, actions=actions_, data=data,
group='admin', dismissed=False)