From cd4bd17173a7fc28679214f8802d5b8a8e1b3ca8 Mon Sep 17 00:00:00 2001 From: Joseph Nuthalapati Date: Fri, 29 Oct 2021 10:36:05 +0530 Subject: [PATCH] components: Introduce new component - Packages Signed-off-by: Joseph Nuthalapati [sunil: isort all files] [sunil: Remove component in datetime component as managed_packages is empty] [sunil: Minor refactor in minidlna for consistency] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/apache/__init__.py | 4 ++++ plinth/modules/avahi/__init__.py | 4 ++++ plinth/modules/backups/__init__.py | 5 +++++ plinth/modules/bepasty/__init__.py | 4 ++++ plinth/modules/bind/__init__.py | 5 +++++ plinth/modules/calibre/__init__.py | 4 ++++ plinth/modules/cockpit/__init__.py | 5 +++++ plinth/modules/coturn/__init__.py | 4 ++++ plinth/modules/datetime/__init__.py | 3 +-- plinth/modules/deluge/__init__.py | 4 ++++ plinth/modules/diaspora/__init__.py | 5 +++++ plinth/modules/dynamicdns/__init__.py | 5 +++++ plinth/modules/ejabberd/__init__.py | 5 +++++ plinth/modules/firewall/__init__.py | 9 ++++++-- plinth/modules/gitweb/__init__.py | 4 ++++ plinth/modules/i2p/__init__.py | 4 ++++ plinth/modules/ikiwiki/__init__.py | 4 ++++ plinth/modules/infinoted/__init__.py | 5 +++++ plinth/modules/jsxc/__init__.py | 5 +++++ plinth/modules/letsencrypt/__init__.py | 5 +++++ plinth/modules/matrixsynapse/__init__.py | 5 +++++ plinth/modules/mediawiki/__init__.py | 4 ++++ plinth/modules/minetest/__init__.py | 5 +++++ plinth/modules/minidlna/__init__.py | 27 +++++++++++++++--------- plinth/modules/mldonkey/__init__.py | 4 ++++ plinth/modules/monkeysphere/__init__.py | 5 +++++ plinth/modules/mumble/__init__.py | 5 +++++ plinth/modules/networks/__init__.py | 5 +++++ plinth/modules/openvpn/__init__.py | 4 ++++ plinth/modules/pagekite/__init__.py | 5 +++++ plinth/modules/performance/__init__.py | 5 +++++ plinth/modules/privoxy/__init__.py | 5 +++++ plinth/modules/quassel/__init__.py | 5 +++++ plinth/modules/radicale/__init__.py | 5 +++++ plinth/modules/roundcube/__init__.py | 5 +++++ plinth/modules/samba/__init__.py | 4 ++++ plinth/modules/searx/__init__.py | 4 ++++ plinth/modules/security/__init__.py | 5 +++++ plinth/modules/shaarli/__init__.py | 5 +++++ plinth/modules/shadowsocks/__init__.py | 5 +++++ plinth/modules/snapshot/__init__.py | 5 +++++ plinth/modules/ssh/__init__.py | 5 +++++ plinth/modules/sso/__init__.py | 5 +++++ plinth/modules/storage/__init__.py | 5 +++++ plinth/modules/syncthing/__init__.py | 4 ++++ plinth/modules/tahoe/__init__.py | 5 +++++ plinth/modules/tor/__init__.py | 5 +++++ plinth/modules/transmission/__init__.py | 5 +++++ plinth/modules/ttrss/__init__.py | 4 ++++ plinth/modules/upgrades/__init__.py | 5 +++++ plinth/modules/users/__init__.py | 5 +++++ plinth/modules/wireguard/__init__.py | 5 +++++ plinth/modules/wordpress/__init__.py | 4 ++++ plinth/modules/zoph/__init__.py | 5 +++++ plinth/package.py | 10 ++++++++- 55 files changed, 272 insertions(+), 15 deletions(-) diff --git a/plinth/modules/apache/__init__.py b/plinth/modules/apache/__init__.py index 08fdac67c..3ec814c5f 100644 --- a/plinth/modules/apache/__init__.py +++ b/plinth/modules/apache/__init__.py @@ -12,6 +12,7 @@ from plinth import cfg from plinth.daemon import Daemon from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt +from plinth.package import Packages from plinth.utils import format_lazy, is_valid_user_name version = 9 @@ -41,6 +42,9 @@ class ApacheApp(app_module.App): name=_('Apache HTTP Server')) self.add(info) + packages = Packages('packages-apache', managed_packages) + self.add(packages) + web_server_ports = Firewall('firewall-web', _('Web Server'), ports=['http', 'https'], is_external=True) self.add(web_server_ports) diff --git a/plinth/modules/avahi/__init__.py b/plinth/modules/avahi/__init__.py index a7480cf5f..ae7ca6c09 100644 --- a/plinth/modules/avahi/__init__.py +++ b/plinth/modules/avahi/__init__.py @@ -13,6 +13,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.config import get_hostname from plinth.modules.firewall.components import Firewall from plinth.modules.names.components import DomainType +from plinth.package import Packages from plinth.signals import domain_added, domain_removed, post_hostname_change from plinth.utils import format_lazy @@ -65,6 +66,9 @@ class AvahiApp(app_module.App): 'avahi:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-avahi', managed_packages) + self.add(packages) + domain_type = DomainType('domain-type-local', _('Local Network Domain'), 'config:index', can_have_certificate=False) diff --git a/plinth/modules/backups/__init__.py b/plinth/modules/backups/__init__.py index f083d02ce..9fdf8fb22 100644 --- a/plinth/modules/backups/__init__.py +++ b/plinth/modules/backups/__init__.py @@ -17,6 +17,7 @@ from django.utils.translation import gettext_noop from plinth import actions from plinth import app as app_module from plinth import cfg, glib, menu +from plinth.package import Packages from . import api @@ -49,6 +50,7 @@ class BackupsApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, depends=depends, name=_('Backups'), icon='fa-files-o', description=_description, @@ -60,6 +62,9 @@ class BackupsApp(app_module.App): 'backups:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-backups', managed_packages) + self.add(packages) + # Check every hour (every 3 minutes in debug mode) to perform scheduled # backups. interval = 180 if cfg.develop else 3600 diff --git a/plinth/modules/bepasty/__init__.py b/plinth/modules/bepasty/__init__.py index 7dff5f5bf..0170f6780 100644 --- a/plinth/modules/bepasty/__init__.py +++ b/plinth/modules/bepasty/__init__.py @@ -13,6 +13,7 @@ from plinth import frontpage, menu from plinth.modules.apache.components import Uwsgi, Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from . import manifest @@ -79,6 +80,9 @@ class BepastyApp(app_module.App): clients=manifest.clients) self.add(shortcut) + packages = Packages('packages-bepasty', managed_packages) + self.add(packages) + firewall = Firewall('firewall-bepasty', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/bind/__init__.py b/plinth/modules/bind/__init__.py index a2d32b2bb..0423f2a4e 100644 --- a/plinth/modules/bind/__init__.py +++ b/plinth/modules/bind/__init__.py @@ -16,6 +16,7 @@ from plinth import cfg, menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -74,6 +75,7 @@ class BindApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('BIND'), icon='fa-globe-w', short_description=_('Domain Name Server'), @@ -85,6 +87,9 @@ class BindApp(app_module.App): parent_url_name='system') self.add(menu_item) + packages = Packages('packages-bind', managed_packages) + self.add(packages) + firewall = Firewall('firewall-bind', info.name, ports=['dns'], is_external=False) self.add(firewall) diff --git a/plinth/modules/calibre/__init__.py b/plinth/modules/calibre/__init__.py index 16bcab5a3..9bbd7f290 100644 --- a/plinth/modules/calibre/__init__.py +++ b/plinth/modules/calibre/__init__.py @@ -16,6 +16,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -78,6 +79,9 @@ class CalibreApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-calibre', managed_packages) + self.add(packages) + firewall = Firewall('firewall-calibre', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/cockpit/__init__.py b/plinth/modules/cockpit/__init__.py index 70d2ccd53..4efd156e8 100644 --- a/plinth/modules/cockpit/__init__.py +++ b/plinth/modules/cockpit/__init__.py @@ -14,6 +14,7 @@ from plinth.modules import names from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.signals import domain_added, domain_removed from plinth.utils import format_lazy @@ -60,6 +61,7 @@ class CockpitApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Cockpit'), icon='fa-wrench', icon_filename='cockpit', @@ -81,6 +83,9 @@ class CockpitApp(app_module.App): allowed_groups=['admin']) self.add(shortcut) + packages = Packages('packages-cockpit', managed_packages) + self.add(packages) + firewall = Firewall('firewall-cockpit', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/coturn/__init__.py b/plinth/modules/coturn/__init__.py index bf06d7129..1deb2f2be 100644 --- a/plinth/modules/coturn/__init__.py +++ b/plinth/modules/coturn/__init__.py @@ -20,6 +20,7 @@ from plinth.modules.coturn.components import TurnConfiguration, TurnConsumer from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -69,6 +70,9 @@ class CoturnApp(app_module.App): parent_url_name='apps') self.add(menu_item) + packages = Packages('packages-coturn', managed_packages) + self.add(packages) + firewall = Firewall('firewall-coturn', info.name, ports=['coturn-freedombox'], is_external=True) self.add(firewall) diff --git a/plinth/modules/datetime/__init__.py b/plinth/modules/datetime/__init__.py index 7a555c733..486d2ad9a 100644 --- a/plinth/modules/datetime/__init__.py +++ b/plinth/modules/datetime/__init__.py @@ -20,8 +20,6 @@ is_essential = True managed_services = ['systemd-timesyncd'] -managed_packages = [] - _description = [ _('Network time server is a program that maintains the system time ' 'in synchronization with servers on the Internet.') @@ -65,6 +63,7 @@ class DateTimeApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Date & Time'), icon='fa-clock-o', diff --git a/plinth/modules/deluge/__init__.py b/plinth/modules/deluge/__init__.py index d57a72bdf..36cfcba62 100644 --- a/plinth/modules/deluge/__init__.py +++ b/plinth/modules/deluge/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users import add_user_to_share_group from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest @@ -69,6 +70,9 @@ class DelugeApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-deluge', managed_packages) + self.add(packages) + firewall = Firewall('firewall-deluge', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/diaspora/__init__.py b/plinth/modules/diaspora/__init__.py index 78e1a0c4a..8261b8e51 100644 --- a/plinth/modules/diaspora/__init__.py +++ b/plinth/modules/diaspora/__init__.py @@ -12,6 +12,7 @@ from plinth.daemon import Daemon from plinth.errors import DomainNotRegisteredError from plinth.modules.apache.components import Webserver, diagnose_url from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy domain_name_file = "/etc/diaspora/domain_name" @@ -64,6 +65,7 @@ class DiasporaApp(app_module.App): """Create components for the app.""" super().__init__() from . import manifest + info = app_module.Info(app_id=self.app_id, version=version, name=_('diaspora*'), icon_filename='diaspora', short_description=_('Federated Social Network'), @@ -82,6 +84,9 @@ class DiasporaApp(app_module.App): clients=info.clients, login_required=True) self.add(shortcut) + packages = Packages('packages-diaspora', managed_packages) + self.add(packages) + firewall = Firewall('firewall-diaspora', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/dynamicdns/__init__.py b/plinth/modules/dynamicdns/__init__.py index 536351557..6e0435d64 100644 --- a/plinth/modules/dynamicdns/__init__.py +++ b/plinth/modules/dynamicdns/__init__.py @@ -11,6 +11,7 @@ from plinth import cfg, menu from plinth.modules.backups.components import BackupRestore from plinth.modules.names.components import DomainType from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.signals import domain_added from plinth.utils import format_lazy @@ -51,6 +52,7 @@ class DynamicDNSApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, depends=depends, name=_('Dynamic DNS Client'), icon='fa-refresh', @@ -62,6 +64,9 @@ class DynamicDNSApp(app_module.App): 'dynamicdns:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-dynamicdns', managed_packages) + self.add(packages) + domain_type = DomainType('domain-type-dynamic', _('Dynamic Domain Name'), 'dynamicdns:index', can_have_certificate=True) diff --git a/plinth/modules/ejabberd/__init__.py b/plinth/modules/ejabberd/__init__.py index e73847b73..41a5418e7 100644 --- a/plinth/modules/ejabberd/__init__.py +++ b/plinth/modules/ejabberd/__init__.py @@ -21,6 +21,7 @@ from plinth.modules.coturn.components import TurnConfiguration, TurnConsumer from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.signals import (domain_added, post_hostname_change, pre_hostname_change) from plinth.utils import format_lazy @@ -67,6 +68,7 @@ class EjabberdApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('ejabberd'), icon_filename='ejabberd', short_description=_('Chat Server'), @@ -88,6 +90,9 @@ class EjabberdApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-ejabberd', managed_packages) + self.add(packages) + firewall = Firewall('firewall-ejabberd', info.name, ports=['xmpp-client', 'xmpp-server', 'xmpp-bosh'], is_external=True) diff --git a/plinth/modules/firewall/__init__.py b/plinth/modules/firewall/__init__.py index a2aefc6c7..6bc78f56f 100644 --- a/plinth/modules/firewall/__init__.py +++ b/plinth/modules/firewall/__init__.py @@ -13,6 +13,7 @@ from plinth import app as app_module from plinth import cfg, menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from plinth.utils import Version, format_lazy, import_from_gi from . import manifest @@ -62,6 +63,7 @@ class FirewallApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Firewall'), icon='fa-shield', description=_description, @@ -72,6 +74,9 @@ class FirewallApp(app_module.App): 'firewall:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-firewall', managed_packages) + self.add(packages) + daemon = Daemon('daemon-firewall', managed_services[0]) self.add(daemon) @@ -129,8 +134,8 @@ def ignore_dbus_error(dbus_error=None, service_error=None): if parts[0] != 'GDBus.Error': raise - if (dbus_error and parts[1].strip() == 'org.freedesktop.DBus.Error.' + - dbus_error): + if (dbus_error and parts[1].strip() + == 'org.freedesktop.DBus.Error.' + dbus_error): logger.error('Firewalld is not running.') pass elif (service_error and parts[2].strip() == service_error): diff --git a/plinth/modules/gitweb/__init__.py b/plinth/modules/gitweb/__init__.py index 41252e616..5a7c44481 100644 --- a/plinth/modules/gitweb/__init__.py +++ b/plinth/modules/gitweb/__init__.py @@ -16,6 +16,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest from .forms import is_repo_url @@ -73,6 +74,9 @@ class GitwebApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-gitweb', managed_packages) + self.add(packages) + firewall = Firewall('firewall-gitweb', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/i2p/__init__.py b/plinth/modules/i2p/__init__.py index b7bf6bcac..c5e190f20 100644 --- a/plinth/modules/i2p/__init__.py +++ b/plinth/modules/i2p/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.i2p.resources import FAVORITES from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest @@ -77,6 +78,9 @@ class I2PApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-i2p', managed_packages) + self.add(packages) + firewall = Firewall('firewall-i2p-web', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/ikiwiki/__init__.py b/plinth/modules/ikiwiki/__init__.py index 6ccbd1269..6948b660d 100644 --- a/plinth/modules/ikiwiki/__init__.py +++ b/plinth/modules/ikiwiki/__init__.py @@ -13,6 +13,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -64,6 +65,9 @@ class IkiwikiApp(app_module.App): self.refresh_sites() + packages = Packages('packages-ikiwiki', managed_packages) + self.add(packages) + firewall = Firewall('firewall-ikiwiki', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/infinoted/__init__.py b/plinth/modules/infinoted/__init__.py index a8f04118d..be3ef58e8 100644 --- a/plinth/modules/infinoted/__init__.py +++ b/plinth/modules/infinoted/__init__.py @@ -12,6 +12,7 @@ from plinth import cfg, frontpage, menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -42,6 +43,7 @@ class InfinotedApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('infinoted'), icon_filename='infinoted', short_description=_('Gobby Server'), @@ -63,6 +65,9 @@ class InfinotedApp(app_module.App): clients=info.clients, login_required=False) self.add(shortcut) + packages = Packages('packages-infinoted', managed_packages) + self.add(packages) + firewall = Firewall('firewall-infinoted', info.name, ports=['infinoted-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/jsxc/__init__.py b/plinth/modules/jsxc/__init__.py index e12d0a3bf..25200be7d 100644 --- a/plinth/modules/jsxc/__init__.py +++ b/plinth/modules/jsxc/__init__.py @@ -12,6 +12,7 @@ from plinth import app as app_module from plinth import frontpage, menu from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.web_server import StaticFiles from . import manifest @@ -40,6 +41,7 @@ class JSXCApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('JSXC'), icon_filename='jsxc', short_description=_('Chat Client'), @@ -59,6 +61,9 @@ class JSXCApp(app_module.App): clients=info.clients) self.add(shortcut) + packages = Packages('packages-jsxc', managed_packages) + self.add(packages) + firewall = Firewall('firewall-jsxc', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/letsencrypt/__init__.py b/plinth/modules/letsencrypt/__init__.py index 57d397276..2b603c5a0 100644 --- a/plinth/modules/letsencrypt/__init__.py +++ b/plinth/modules/letsencrypt/__init__.py @@ -17,6 +17,7 @@ from plinth.modules import names from plinth.modules.apache.components import diagnose_url from plinth.modules.backups.components import BackupRestore from plinth.modules.names.components import DomainType +from plinth.package import Packages from plinth.signals import domain_added, domain_removed, post_module_loading from plinth.utils import format_lazy @@ -60,6 +61,7 @@ class LetsEncryptApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, depends=depends, name=_('Let\'s Encrypt'), icon='fa-lock', @@ -74,6 +76,9 @@ class LetsEncryptApp(app_module.App): 'letsencrypt:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-letsencrypt', managed_packages) + self.add(packages) + backup_restore = BackupRestore('backup-restore-letsencrypt', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/matrixsynapse/__init__.py b/plinth/modules/matrixsynapse/__init__.py index 5d7cf3de6..83a7aa952 100644 --- a/plinth/modules/matrixsynapse/__init__.py +++ b/plinth/modules/matrixsynapse/__init__.py @@ -21,6 +21,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.coturn.components import TurnConfiguration, TurnConsumer from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt +from plinth.package import Packages from plinth.utils import format_lazy, is_non_empty_file from . import manifest @@ -72,6 +73,7 @@ class MatrixSynapseApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, name=_('Matrix Synapse'), icon_filename='matrixsynapse', short_description=_('Chat Server'), @@ -92,6 +94,9 @@ class MatrixSynapseApp(app_module.App): clients=info.clients, login_required=True) self.add(shortcut) + packages = Packages('packages-matrixsynapse', managed_packages) + self.add(packages) + firewall = Firewall('firewall-matrixsynapse', info.name, ports=['matrix-synapse-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/mediawiki/__init__.py b/plinth/modules/mediawiki/__init__.py index b1d157c47..23f1d073a 100644 --- a/plinth/modules/mediawiki/__init__.py +++ b/plinth/modules/mediawiki/__init__.py @@ -15,6 +15,7 @@ from plinth.daemon import Daemon from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from . import manifest @@ -74,6 +75,9 @@ class MediaWikiApp(app_module.App): clients=info.clients, login_required=True) self.add(shortcut) + packages = Packages('packages-mediawiki', managed_packages) + self.add(packages) + firewall = Firewall('firewall-mediawiki', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/minetest/__init__.py b/plinth/modules/minetest/__init__.py index 4e3b70f45..3ecfc4e9a 100644 --- a/plinth/modules/minetest/__init__.py +++ b/plinth/modules/minetest/__init__.py @@ -13,6 +13,7 @@ from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -57,6 +58,7 @@ class MinetestApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, name=_('Minetest'), icon_filename='minetest', short_description=_('Block Sandbox'), @@ -78,6 +80,9 @@ class MinetestApp(app_module.App): login_required=False) self.add(shortcut) + packages = Packages('packages-minetest', managed_packages) + self.add(packages) + firewall = Firewall('firewall-minetest', info.name, ports=['minetest-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/minidlna/__init__.py b/plinth/modules/minidlna/__init__.py index e4de44d37..2bd9a518b 100644 --- a/plinth/modules/minidlna/__init__.py +++ b/plinth/modules/minidlna/__init__.py @@ -11,6 +11,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import Version from . import manifest @@ -61,28 +62,34 @@ class MiniDLNAApp(app_module.App): parent_url_name='apps', icon=info.icon_filename, ) - firewall = Firewall('firewall-minidlna', info.name, ports=['minidlna'], - is_external=False) - webserver = Webserver('webserver-minidlna', 'minidlna-freedombox', - urls=['http://localhost:8200/']) + self.add(menu_item) + shortcut = frontpage.Shortcut('shortcut-minidlna', info.name, short_description=info.short_description, description=info.description, icon=info.icon_filename, url='/_minidlna/', login_required=True, allowed_groups=list(groups)) + self.add(shortcut) + + packages = Packages('packages-minidlna', managed_packages) + self.add(packages) + + firewall = Firewall('firewall-minidlna', info.name, ports=['minidlna'], + is_external=False) + self.add(firewall) + + webserver = Webserver('webserver-minidlna', 'minidlna-freedombox', + urls=['http://localhost:8200/']) + self.add(webserver) + daemon = Daemon('daemon-minidlna', managed_services[0]) + self.add(daemon) backup_restore = BackupRestore('backup-restore-minidlna', **manifest.backup) self.add(backup_restore) - self.add(menu_item) - self.add(webserver) - self.add(firewall) - self.add(shortcut) - self.add(daemon) - users_and_groups = UsersAndGroups('users-and-groups-minidlna', groups=groups) self.add(users_and_groups) diff --git a/plinth/modules/mldonkey/__init__.py b/plinth/modules/mldonkey/__init__.py index 3d44be83c..088132b63 100644 --- a/plinth/modules/mldonkey/__init__.py +++ b/plinth/modules/mldonkey/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users import add_user_to_share_group from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -73,6 +74,9 @@ class MLDonkeyApp(app_module.App): allowed_groups=list(groups)) self.add(shortcuts) + packages = Packages('packages-mldonkey', managed_packages) + self.add(packages) + firewall = Firewall('firewall-mldonkey', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/monkeysphere/__init__.py b/plinth/modules/monkeysphere/__init__.py index ab612d917..1e10ddb45 100644 --- a/plinth/modules/monkeysphere/__init__.py +++ b/plinth/modules/monkeysphere/__init__.py @@ -9,6 +9,7 @@ from plinth import app as app_module from plinth import menu from plinth.modules.backups.components import BackupRestore from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest @@ -46,6 +47,7 @@ class MonkeysphereApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Monkeysphere'), icon='fa-certificate', description=_description, @@ -57,6 +59,9 @@ class MonkeysphereApp(app_module.App): advanced=True) self.add(menu_item) + packages = Packages('packages-monkeysphere', managed_packages) + self.add(packages) + users_and_groups = UsersAndGroups('users-and-groups-monkeysphere', reserved_usernames=['monkeysphere']) self.add(users_and_groups) diff --git a/plinth/modules/mumble/__init__.py b/plinth/modules/mumble/__init__.py index 57f56b272..c33912af6 100644 --- a/plinth/modules/mumble/__init__.py +++ b/plinth/modules/mumble/__init__.py @@ -17,6 +17,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import Version from . import manifest @@ -48,6 +49,7 @@ class MumbleApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, name=_('Mumble'), icon_filename='mumble', short_description=_('Voice Chat'), @@ -67,6 +69,9 @@ class MumbleApp(app_module.App): configure_url=reverse_lazy('mumble:index'), clients=info.clients) self.add(shortcut) + packages = Packages('packages-mumble', managed_packages) + self.add(packages) + firewall = Firewall('firewall-mumble', info.name, ports=['mumble-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/networks/__init__.py b/plinth/modules/networks/__init__.py index 1d56c5cd8..32d90097f 100644 --- a/plinth/modules/networks/__init__.py +++ b/plinth/modules/networks/__init__.py @@ -12,6 +12,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import actions from plinth import app as app_module from plinth import daemon, kvstore, menu, network +from plinth.package import Packages version = 1 @@ -57,6 +58,7 @@ class NetworksApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Networks'), icon='fa-signal', description=_description, @@ -67,6 +69,9 @@ class NetworksApp(app_module.App): 'networks:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-networks', managed_packages) + self.add(packages) + def diagnose(self): """Run diagnostics and return the results.""" results = super().diagnose() diff --git a/plinth/modules/openvpn/__init__.py b/plinth/modules/openvpn/__init__.py index be6a70247..06d9fd4cf 100644 --- a/plinth/modules/openvpn/__init__.py +++ b/plinth/modules/openvpn/__init__.py @@ -15,6 +15,7 @@ from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -81,6 +82,9 @@ class OpenVPNApp(app_module.App): allowed_groups=['vpn']) self.add(shortcut) + packages = Packages('packages-openvpn', managed_packages) + self.add(packages) + firewall = Firewall('firewall-openvpn', info.name, ports=['openvpn'], is_external=True) self.add(firewall) diff --git a/plinth/modules/pagekite/__init__.py b/plinth/modules/pagekite/__init__.py index dd39e076b..40f2c5913 100644 --- a/plinth/modules/pagekite/__init__.py +++ b/plinth/modules/pagekite/__init__.py @@ -11,6 +11,7 @@ from plinth import cfg, menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.names.components import DomainType +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest, utils @@ -60,6 +61,7 @@ class PagekiteApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, depends=depends, name=_('PageKite'), icon='fa-flag', @@ -73,6 +75,9 @@ class PagekiteApp(app_module.App): 'pagekite:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-pagekite', managed_packages) + self.add(packages) + domain_type = DomainType('domain-type-pagekite', _('PageKite Domain'), 'pagekite:index', can_have_certificate=True) self.add(domain_type) diff --git a/plinth/modules/performance/__init__.py b/plinth/modules/performance/__init__.py index c1f7e3216..61f05da17 100644 --- a/plinth/modules/performance/__init__.py +++ b/plinth/modules/performance/__init__.py @@ -9,6 +9,7 @@ from plinth import app as app_module from plinth import menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from . import manifest @@ -42,6 +43,7 @@ class PerformanceApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Performance'), icon='fa-bar-chart', short_description=_('System Monitoring'), @@ -55,6 +57,9 @@ class PerformanceApp(app_module.App): 'performance:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-performance', managed_packages) + self.add(packages) + backup_restore = BackupRestore('backup-restore-performance', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/privoxy/__init__.py b/plinth/modules/privoxy/__init__.py index 02bec9b21..76bea2307 100644 --- a/plinth/modules/privoxy/__init__.py +++ b/plinth/modules/privoxy/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.apache.components import diagnose_url from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -52,6 +53,7 @@ class PrivoxyApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, name=_('Privoxy'), icon_filename='privoxy', short_description=_('Web Proxy'), @@ -71,6 +73,9 @@ class PrivoxyApp(app_module.App): configure_url=reverse_lazy('privoxy:index'), login_required=True) self.add(shortcut) + packages = Packages('packages-privoxy', managed_packages) + self.add(packages) + firewall = Firewall('firewall-privoxy', info.name, ports=['privoxy'], is_external=False) self.add(firewall) diff --git a/plinth/modules/quassel/__init__.py b/plinth/modules/quassel/__init__.py index bf17d805a..f9a0333f6 100644 --- a/plinth/modules/quassel/__init__.py +++ b/plinth/modules/quassel/__init__.py @@ -17,6 +17,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -56,6 +57,7 @@ class QuasselApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Quassel'), icon_filename='quassel', short_description=_('IRC Client'), @@ -76,6 +78,9 @@ class QuasselApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-quassel', managed_packages) + self.add(packages) + firewall = Firewall('firewall-quassel', info.name, ports=['quassel-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/radicale/__init__.py b/plinth/modules/radicale/__init__.py index 97112e41b..dc93e4174 100644 --- a/plinth/modules/radicale/__init__.py +++ b/plinth/modules/radicale/__init__.py @@ -15,6 +15,7 @@ from plinth.modules.apache.components import Uwsgi, Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import Version, format_lazy from . import manifest @@ -51,6 +52,7 @@ class RadicaleApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Radicale'), icon_filename='radicale', short_description=_('Calendar and Addressbook'), @@ -71,6 +73,9 @@ class RadicaleApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-radicale', managed_packages) + self.add(packages) + firewall = Firewall('firewall-radicale', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/roundcube/__init__.py b/plinth/modules/roundcube/__init__.py index 7455928b4..1a897d082 100644 --- a/plinth/modules/roundcube/__init__.py +++ b/plinth/modules/roundcube/__init__.py @@ -11,6 +11,7 @@ from plinth import frontpage, menu from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import Version from . import manifest @@ -51,6 +52,7 @@ class RoundcubeApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Roundcube'), icon_filename='roundcube', short_description=_('Email Client'), @@ -71,6 +73,9 @@ class RoundcubeApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-roundcube', managed_packages) + self.add(packages) + firewall = Firewall('firewall-roundcube', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/samba/__init__.py b/plinth/modules/samba/__init__.py index f00e332a3..c9d1584e7 100644 --- a/plinth/modules/samba/__init__.py +++ b/plinth/modules/samba/__init__.py @@ -18,6 +18,7 @@ from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -79,6 +80,9 @@ class SambaApp(app_module.App): login_required=True, allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-samba', managed_packages) + self.add(packages) + firewall = Firewall('firewall-samba', info.name, ports=['samba']) self.add(firewall) diff --git a/plinth/modules/searx/__init__.py b/plinth/modules/searx/__init__.py index 1246d760c..5a68055c1 100644 --- a/plinth/modules/searx/__init__.py +++ b/plinth/modules/searx/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.apache.components import Uwsgi, Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest @@ -65,6 +66,9 @@ class SearxApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-searx', managed_packages) + self.add(packages) + firewall = Firewall('firewall-searx', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/security/__init__.py b/plinth/modules/security/__init__.py index 4ccc42b6e..43325562f 100644 --- a/plinth/modules/security/__init__.py +++ b/plinth/modules/security/__init__.py @@ -13,6 +13,7 @@ from plinth import actions from plinth import app as app_module from plinth import menu, module_loader from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from . import manifest @@ -41,6 +42,7 @@ class SecurityApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Security'), icon='fa-lock', manual_page='Security') @@ -50,6 +52,9 @@ class SecurityApp(app_module.App): 'security:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-security', managed_packages) + self.add(packages) + backup_restore = BackupRestore('backup-restore-security', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/shaarli/__init__.py b/plinth/modules/shaarli/__init__.py index b14a82125..2239d2082 100644 --- a/plinth/modules/shaarli/__init__.py +++ b/plinth/modules/shaarli/__init__.py @@ -9,6 +9,7 @@ from plinth import app as app_module from plinth import frontpage, menu from plinth.modules.apache.components import Webserver from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from . import manifest @@ -33,6 +34,7 @@ class ShaarliApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Shaarli'), icon_filename='shaarli', short_description=_('Bookmarks'), @@ -52,6 +54,9 @@ class ShaarliApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-shaarli', managed_packages) + self.add(packages) + firewall = Firewall('firewall-shaarli', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/shadowsocks/__init__.py b/plinth/modules/shadowsocks/__init__.py index 5a30e9bd3..f37f754c8 100644 --- a/plinth/modules/shadowsocks/__init__.py +++ b/plinth/modules/shadowsocks/__init__.py @@ -12,6 +12,7 @@ from plinth import cfg, frontpage, menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -47,6 +48,7 @@ class ShadowsocksApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Shadowsocks'), icon_filename='shadowsocks', @@ -68,6 +70,9 @@ class ShadowsocksApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-shadowsocks', managed_packages) + self.add(packages) + firewall = Firewall('firewall-shadowsocks', info.name, ports=['shadowsocks-local-plinth'], is_external=False) diff --git a/plinth/modules/snapshot/__init__.py b/plinth/modules/snapshot/__init__.py index df3797811..d92a01897 100644 --- a/plinth/modules/snapshot/__init__.py +++ b/plinth/modules/snapshot/__init__.py @@ -14,6 +14,7 @@ from plinth import app as app_module from plinth import menu from plinth.modules import storage from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from . import manifest @@ -52,6 +53,7 @@ class SnapshotApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Storage Snapshots'), icon='fa-film', description=_description, @@ -62,6 +64,9 @@ class SnapshotApp(app_module.App): 'snapshot:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-snapshot', managed_packages) + self.add(packages) + backup_restore = SnapshotBackupRestore('backup-restore-snapshot', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/ssh/__init__.py b/plinth/modules/ssh/__init__.py index 0e3d94b20..efc3addac 100644 --- a/plinth/modules/ssh/__init__.py +++ b/plinth/modules/ssh/__init__.py @@ -15,6 +15,7 @@ from plinth import menu from plinth.daemon import Daemon from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from . import manifest @@ -44,6 +45,7 @@ class SSHApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Secure Shell (SSH) Server'), @@ -54,6 +56,9 @@ class SSHApp(app_module.App): 'ssh:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-ssh', managed_packages) + self.add(packages) + firewall = Firewall('firewall-ssh', info.name, ports=['ssh'], is_external=True) self.add(firewall) diff --git a/plinth/modules/sso/__init__.py b/plinth/modules/sso/__init__.py index a131d69de..a6c2019fb 100644 --- a/plinth/modules/sso/__init__.py +++ b/plinth/modules/sso/__init__.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import actions from plinth import app as app_module +from plinth.package import Packages version = 1 @@ -29,11 +30,15 @@ class SSOApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, depends=depends, name=_('Single Sign On')) self.add(info) + packages = Packages('packages-sso', managed_packages) + self.add(packages) + def setup(helper, old_version=None): """Install the required packages""" diff --git a/plinth/modules/storage/__init__.py b/plinth/modules/storage/__init__.py index 472943a93..1c40575b0 100644 --- a/plinth/modules/storage/__init__.py +++ b/plinth/modules/storage/__init__.py @@ -16,6 +16,7 @@ from plinth import app as app_module from plinth import cfg, glib, menu from plinth.errors import ActionError, PlinthError from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest, udisks2 @@ -49,6 +50,7 @@ class StorageApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Storage'), icon='fa-hdd-o', description=_description, @@ -59,6 +61,9 @@ class StorageApp(app_module.App): 'storage:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-storage', managed_packages) + self.add(packages) + backup_restore = BackupRestore('backup-restore-storage', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/syncthing/__init__.py b/plinth/modules/syncthing/__init__.py index e99ac42a1..776ff9d44 100644 --- a/plinth/modules/syncthing/__init__.py +++ b/plinth/modules/syncthing/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users import add_user_to_share_group from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -80,6 +81,9 @@ class SyncthingApp(app_module.App): allowed_groups=list(self.groups)) self.add(shortcut) + packages = Packages('packages-syncthing', managed_packages) + self.add(packages) + firewall = Firewall('firewall-syncthing-web', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/tahoe/__init__.py b/plinth/modules/tahoe/__init__.py index 946634468..e9630593c 100644 --- a/plinth/modules/tahoe/__init__.py +++ b/plinth/modules/tahoe/__init__.py @@ -16,6 +16,7 @@ from plinth.daemon import Daemon from plinth.modules.apache.components import Webserver, diagnose_url from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -58,6 +59,7 @@ class TahoeApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Tahoe-LAFS'), icon_filename='tahoe-lafs', @@ -78,6 +80,9 @@ class TahoeApp(app_module.App): configure_url=reverse_lazy('tahoe:index'), login_required=True) self.add(shortcut) + packages = Packages('packages-tahoe', managed_packages) + self.add(packages) + firewall = Firewall('firewall-tahoe', info.name, ports=['tahoe-plinth'], is_external=True) self.add(firewall) diff --git a/plinth/modules/tor/__init__.py b/plinth/modules/tor/__init__.py index 8af5c2d21..22d5d4e23 100644 --- a/plinth/modules/tor/__init__.py +++ b/plinth/modules/tor/__init__.py @@ -17,6 +17,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.names.components import DomainType from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.signals import domain_added, domain_removed from . import manifest, utils @@ -51,6 +52,7 @@ class TorApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Tor'), icon_filename='tor', short_description=_('Anonymity Network'), @@ -64,6 +66,9 @@ class TorApp(app_module.App): parent_url_name='apps') self.add(menu_item) + packages = Packages('packages-tor', managed_packages) + self.add(packages) + domain_type = DomainType('domain-type-tor', _('Tor Onion Service'), 'tor:index', can_have_certificate=False) self.add(domain_type) diff --git a/plinth/modules/transmission/__init__.py b/plinth/modules/transmission/__init__.py index a37003436..e28ccc2e6 100644 --- a/plinth/modules/transmission/__init__.py +++ b/plinth/modules/transmission/__init__.py @@ -16,6 +16,7 @@ from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users import add_user_to_share_group from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from . import manifest @@ -49,6 +50,7 @@ class TransmissionApp(app_module.App): groups = { 'bit-torrent': _('Download files using BitTorrent applications') } + info = app_module.Info( app_id=self.app_id, version=version, name=_('Transmission'), icon_filename='transmission', @@ -70,6 +72,9 @@ class TransmissionApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-transmission', managed_packages) + self.add(packages) + firewall = Firewall('firewall-transmission', info.name, ports=['http', 'https', 'transmission-client'], is_external=True) diff --git a/plinth/modules/ttrss/__init__.py b/plinth/modules/ttrss/__init__.py index 06e450f5e..40d7ea7cb 100644 --- a/plinth/modules/ttrss/__init__.py +++ b/plinth/modules/ttrss/__init__.py @@ -14,6 +14,7 @@ from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages from plinth.utils import Version, format_lazy from . import manifest @@ -74,6 +75,9 @@ class TTRSSApp(app_module.App): allowed_groups=list(groups)) self.add(shortcut) + packages = Packages('packages-ttrss', managed_packages) + self.add(packages) + firewall = Firewall('firewall-ttrss', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/upgrades/__init__.py b/plinth/modules/upgrades/__init__.py index 3bdcad2d7..5704d75a4 100644 --- a/plinth/modules/upgrades/__init__.py +++ b/plinth/modules/upgrades/__init__.py @@ -17,6 +17,7 @@ from plinth import actions from plinth import app as app_module from plinth import cfg, glib, kvstore, menu from plinth.modules.backups.components import BackupRestore +from plinth.package import Packages from . import manifest @@ -73,6 +74,7 @@ class UpgradesApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Update'), icon='fa-refresh', description=_description, @@ -83,6 +85,9 @@ class UpgradesApp(app_module.App): 'upgrades:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-upgrades', managed_packages) + self.add(packages) + backup_restore = BackupRestore('backup-restore-upgrades', **manifest.backup) self.add(backup_restore) diff --git a/plinth/modules/users/__init__.py b/plinth/modules/users/__init__.py index 897fb96a3..af9d56363 100644 --- a/plinth/modules/users/__init__.py +++ b/plinth/modules/users/__init__.py @@ -13,6 +13,7 @@ from plinth import actions from plinth import app as app_module from plinth import cfg, menu from plinth.daemon import Daemon +from plinth.package import Packages from .components import UsersAndGroups @@ -60,6 +61,7 @@ class UsersApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, is_essential=is_essential, name=_('Users and Groups'), icon='fa-users', @@ -70,6 +72,9 @@ class UsersApp(app_module.App): 'users:index', parent_url_name='system') self.add(menu_item) + packages = Packages('packages-users', managed_packages) + self.add(packages) + daemon = Daemon('daemon-users', managed_services[0], listen_ports=[(389, 'tcp4'), (389, 'tcp6')]) self.add(daemon) diff --git a/plinth/modules/wireguard/__init__.py b/plinth/modules/wireguard/__init__.py index a55a589ce..0feae35d8 100644 --- a/plinth/modules/wireguard/__init__.py +++ b/plinth/modules/wireguard/__init__.py @@ -9,6 +9,7 @@ from django.utils.translation import gettext_lazy as _ from plinth import app as app_module from plinth import cfg, frontpage, menu from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy, import_from_gi from . import manifest, utils @@ -45,6 +46,7 @@ class WireguardApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info( app_id=self.app_id, version=version, name=_('WireGuard'), icon_filename='wireguard', @@ -67,6 +69,9 @@ class WireguardApp(app_module.App): clients=info.clients) self.add(shortcut) + packages = Packages('packages-wireguard', managed_packages) + self.add(packages) + firewall = Firewall('firewall-wireguard', info.name, ports=['wireguard-freedombox'], is_external=True) self.add(firewall) diff --git a/plinth/modules/wordpress/__init__.py b/plinth/modules/wordpress/__init__.py index d918fd592..8c07b7c05 100644 --- a/plinth/modules/wordpress/__init__.py +++ b/plinth/modules/wordpress/__init__.py @@ -12,6 +12,7 @@ from plinth.daemon import Daemon from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -85,6 +86,9 @@ class WordPressApp(app_module.App): url='/wordpress/', clients=info.clients) self.add(shortcut) + packages = Packages('packages-wordpress', managed_packages) + self.add(packages) + firewall = Firewall('firewall-wordpress', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/modules/zoph/__init__.py b/plinth/modules/zoph/__init__.py index f65754e64..89525c227 100644 --- a/plinth/modules/zoph/__init__.py +++ b/plinth/modules/zoph/__init__.py @@ -14,6 +14,7 @@ from plinth import cfg, frontpage, menu from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall +from plinth.package import Packages from plinth.utils import format_lazy from . import manifest @@ -58,6 +59,7 @@ class ZophApp(app_module.App): def __init__(self): """Create components for the app.""" super().__init__() + info = app_module.Info(app_id=self.app_id, version=version, name=_('Zoph'), icon_filename='zoph', short_description=_('Photo Organizer'), @@ -77,6 +79,9 @@ class ZophApp(app_module.App): login_required=True) self.add(shortcut) + packages = Packages('packages-zoph', managed_packages) + self.add(packages) + firewall = Firewall('firewall-zoph', info.name, ports=['http', 'https'], is_external=True) self.add(firewall) diff --git a/plinth/package.py b/plinth/package.py index 617a4b3fd..496e52d2d 100644 --- a/plinth/package.py +++ b/plinth/package.py @@ -13,13 +13,21 @@ import apt.cache from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy -from plinth import actions +from plinth import actions, app from plinth.errors import ActionError from plinth.utils import format_lazy logger = logging.getLogger(__name__) +class Packages(app.FollowerComponent): + """Component to manage the packages of an app.""" + + def __init__(self, component_id, packages): + self.component_id = component_id + self.packages = packages + + class PackageException(Exception): """A package operation has failed."""