From b0321d7d29e5a295e820f86c87dc383c16d01350 Mon Sep 17 00:00:00 2001 From: lispyclouds Date: Tue, 14 Feb 2017 18:34:51 +0530 Subject: [PATCH] openvpn: Allow non-admin users to download their own profiles - This adds OpenVPN icon - This enables the OpenVPN app on the index page. - This allows only admins to create the certs for OpenVPN and admins and non admins can not download their own profiles via the app icon. --- LICENSES | 1 + plinth/modules/openvpn/__init__.py | 32 ++++++++++++++++++------ plinth/modules/openvpn/urls.py | 3 ++- plinth/modules/openvpn/views.py | 14 +++++------ static/themes/default/icons/openvpn.png | Bin 0 -> 31627 bytes 5 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 static/themes/default/icons/openvpn.png diff --git a/LICENSES b/LICENSES index 938375ef6..27a77fc8b 100644 --- a/LICENSES +++ b/LICENSES @@ -57,3 +57,4 @@ otherwise. - static/themes/default/icons/transmission.png :: [[https://transmissionbt.com/][GPL]] - static/themes/default/icons/ttrss.png :: [[https://tt-rss.org/gitlab/fox/tt-rss][GPL]] - static/themes/default/icons/xmpp.png :: [[https://www.ejabberd.im/][GPL3]] +- static/themes/default/icons/openvpn.png :: [[https://github.com/thekishanraval/Logos][GPLv3]] diff --git a/plinth/modules/openvpn/__init__.py b/plinth/modules/openvpn/__init__.py index 137e2820e..3909a3c46 100644 --- a/plinth/modules/openvpn/__init__.py +++ b/plinth/modules/openvpn/__init__.py @@ -18,12 +18,13 @@ """ Plinth module to configure OpenVPN server. """ - +from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg +from plinth import frontpage from plinth import service as service_module from plinth.utils import format_lazy @@ -53,7 +54,8 @@ description = [ def init(): - """Intialize the OpenVPN module.""" + """Initialize the OpenVPN module.""" + menu = cfg.main_menu.get('apps:index') menu.add_urlname(title, 'glyphicon-lock', 'openvpn:index') @@ -63,14 +65,34 @@ def init(): service = service_module.Service( managed_services[0], title, ports=['openvpn'], is_external=True) + print(is_setup()) + if is_enabled() and is_setup(): + add_shortcut() + + +def is_enabled(): + return action_utils.service_is_enabled('openvpn') + def setup(helper, old_version=None): """Install and configure the module.""" + helper.install(managed_packages) global service if service is None: service = service_module.Service( managed_services[0], title, ports=['openvpn'], is_external=True) + add_shortcut() + + +def add_shortcut(): + frontpage.add_shortcut('openvpn', title, + details=description + [ + 'Download Profile' + ], + configure_url=reverse_lazy('openvpn:index'), + login_required=True) def is_setup(): @@ -80,8 +102,4 @@ def is_setup(): def diagnose(): """Run diagnostics and return the results.""" - results = [] - - results.append(action_utils.diagnose_port_listening(1194, 'udp4')) - - return results + return [action_utils.diagnose_port_listening(1194, 'udp4')] diff --git a/plinth/modules/openvpn/urls.py b/plinth/modules/openvpn/urls.py index e8808b883..2ecd82851 100644 --- a/plinth/modules/openvpn/urls.py +++ b/plinth/modules/openvpn/urls.py @@ -21,11 +21,12 @@ URLs for the OpenVPN module. from django.conf.urls import url +from plinth.utils import non_admin_view from . import views urlpatterns = [ url(r'^apps/openvpn/$', views.index, name='index'), url(r'^apps/openvpn/setup/$', views.setup, name='setup'), - url(r'^apps/openvpn/profile/$', views.profile, name='profile'), + url(r'^apps/openvpn/profile/$', non_admin_view(views.profile), name='profile'), ] diff --git a/plinth/modules/openvpn/views.py b/plinth/modules/openvpn/views.py index 38119e992..ca4e87674 100644 --- a/plinth/modules/openvpn/views.py +++ b/plinth/modules/openvpn/views.py @@ -75,7 +75,6 @@ def setup(request): return redirect('openvpn:index') -@require_POST def profile(request): """Provide the user's profile for download.""" username = request.user.username @@ -97,14 +96,13 @@ def profile(request): def get_status(): """Get the current settings from OpenVPN server.""" - status = {'is_setup': openvpn.is_setup(), - 'setup_running': False, - 'enabled': openvpn.service.is_enabled(), - 'is_running': openvpn.service.is_running()} - status['setup_running'] = bool(setup_process) - - return status + return { + 'is_setup': openvpn.is_setup(), + 'setup_running': bool(setup_process), + 'enabled': openvpn.service.is_enabled(), + 'is_running': openvpn.service.is_running() + } def _collect_setup_result(request): diff --git a/static/themes/default/icons/openvpn.png b/static/themes/default/icons/openvpn.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5e9ba4c26d2c72e200227158466769e5289624 GIT binary patch literal 31627 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 literal 0 HcmV?d00001