Sunil Mohan Adapa 74a6042ed8
*: Show Learn More... links in frontpage with description
Closes: #1797.

Tests:

- For each affected app, install the app, visit frontpage. Select the shortcut.
Notice that Learn More... link is shown and clicking on the link takes us to the
manual page of the app.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2022-05-22 05:44:22 -04:00

102 lines
3.4 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
FreedomBox app for wireguard.
"""
from django.urls import reverse_lazy
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
nm = import_from_gi('NM', '1.0')
_description = [
_('WireGuard is a fast, modern, secure VPN tunnel.'),
format_lazy(
_('It can be used to connect to a VPN provider which supports '
'WireGuard, and to route all outgoing traffic from {box_name} '
'through the VPN.'), box_name=_(cfg.box_name)),
format_lazy(
_('A second use case is to connect a mobile device to {box_name} '
'while travelling. While connected to a public Wi-Fi network, all '
'traffic can be securely relayed through {box_name}.'),
box_name=_(cfg.box_name))
]
app = None
SERVER_INTERFACE = 'wg0'
class WireguardApp(app_module.App):
"""FreedomBox app for wireguard."""
app_id = 'wireguard'
_version = 1
def __init__(self):
"""Create components for the app."""
super().__init__()
info = app_module.Info(
app_id=self.app_id, version=self._version, name=_('WireGuard'),
icon_filename='wireguard',
short_description=_('Virtual Private Network'),
description=_description, manual_page='WireGuard',
clients=manifest.clients,
donation_url='https://www.wireguard.com/donations/')
self.add(info)
menu_item = menu.Menu('menu-wireguard', info.name,
info.short_description, info.icon_filename,
'wireguard:index', parent_url_name='apps')
self.add(menu_item)
shortcut = frontpage.Shortcut(
'shortcut-wireguard', info.name,
short_description=info.short_description, icon=info.icon_filename,
description=info.description, manual_page=info.manual_page,
configure_url=reverse_lazy('wireguard:index'), login_required=True,
clients=info.clients)
self.add(shortcut)
packages = Packages('packages-wireguard', ['wireguard'])
self.add(packages)
firewall = Firewall('firewall-wireguard', info.name,
ports=['wireguard-freedombox'], is_external=True)
self.add(firewall)
def enable(self):
"""Enable the app by simply storing a flag in key/value store."""
from plinth import kvstore
super().enable()
kvstore.set('wireguard-enabled', True)
utils.enable_connections(True)
def disable(self):
"""Disable the app by simply storing a flag in key/value store."""
from plinth import kvstore
super().disable()
kvstore.set('wireguard-enabled', False)
utils.enable_connections(False)
def is_enabled(self):
"""Return whether all leader components are enabled and flag is set."""
from plinth import kvstore
enabled = super().is_enabled()
return enabled and kvstore.get_default('wireguard-enabled', False)
def setup(helper, old_version=None):
"""Install and configure the module."""
app.setup(old_version)
helper.call('post', app.enable)