From 1dcfa06dd8c1f0cc6d17fdef170e33231cbbfcdd Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Sat, 5 Feb 2022 17:49:57 +0000 Subject: [PATCH] mediawiki: Serve hidden service over http for .onion domains [sunil: rename the form field variable] [sunil: rename the parater to get/set_server_url functions] [sunil: remove unused PrependWidget, can be added back later] [sunil: update functional tests] Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy Reviewed-by: Sunil Mohan Adapa --- plinth/modules/mediawiki/__init__.py | 8 +++-- plinth/modules/mediawiki/forms.py | 35 +++---------------- .../mediawiki/tests/test_functional.py | 13 +++---- .../modules/mediawiki/tests/test_settings.py | 6 ++-- plinth/modules/mediawiki/views.py | 8 ++--- 5 files changed, 24 insertions(+), 46 deletions(-) diff --git a/plinth/modules/mediawiki/__init__.py b/plinth/modules/mediawiki/__init__.py index 5dd860795..f2215ab09 100644 --- a/plinth/modules/mediawiki/__init__.py +++ b/plinth/modules/mediawiki/__init__.py @@ -157,7 +157,11 @@ def get_server_url(): return urlparse(server_url).netloc -def set_server_url(server_url): +def set_server_url(domain): """Set the value of $wgServer.""" + protocol = 'https' + if domain.endswith('.onion'): + protocol = 'http' + actions.superuser_run('mediawiki', - ['set-server-url', f'https://{server_url}']) + ['set-server-url', f'{protocol}://{domain}']) diff --git a/plinth/modules/mediawiki/forms.py b/plinth/modules/mediawiki/forms.py index eac74de63..b672865a8 100644 --- a/plinth/modules/mediawiki/forms.py +++ b/plinth/modules/mediawiki/forms.py @@ -6,8 +6,6 @@ FreedomBox app for configuring MediaWiki. import pathlib from django import forms -from django.forms import Widget -from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ @@ -21,31 +19,6 @@ def get_skins(): if skin.is_dir()] -class PrependWidget(Widget): - """Widget to create input-groups with prepended text.""" - - def __init__(self, base_widget, data, *args, **kwargs): - """Initialize widget and get base instance""" - super(PrependWidget, self).__init__(*args, **kwargs) - self.base_widget = base_widget(*args, **kwargs) - self.data = data - - def render(self, name, value, attrs=None, renderer=None): - """Render base widget and add bootstrap spans.""" - attrs['class'] = 'form-control' - field = self.base_widget.render(name, value, attrs, renderer) - widget_html = ''' -
- - - %(data)s - - - %(field)s -
''' - return mark_safe((widget_html) % {'field': field, 'data': self.data}) - - class MediaWikiForm(forms.Form): # pylint: disable=W0232 """MediaWiki configuration form.""" password = forms.CharField( @@ -56,11 +29,11 @@ class MediaWikiForm(forms.Form): # pylint: disable=W0232 'Leave this field blank to keep the current password.'), required=False, widget=forms.PasswordInput, min_length=10) - server_url = forms.CharField( - label=_('Server URL'), required=False, help_text=_( + domain = forms.CharField( + label=_('Domain'), required=False, help_text=_( 'Used by MediaWiki to generate URLs that point to the wiki ' - 'such as in footer, feeds and emails.'), - widget=PrependWidget(base_widget=forms.TextInput, data='https://')) + 'such as in footer, feeds and emails. Examples: ' + '"myfreedombox.example.org" or "example.onion".')) enable_public_registrations = forms.BooleanField( label=_('Enable public registrations'), required=False, diff --git a/plinth/modules/mediawiki/tests/test_functional.py b/plinth/modules/mediawiki/tests/test_functional.py index 4382176eb..768521950 100644 --- a/plinth/modules/mediawiki/tests/test_functional.py +++ b/plinth/modules/mediawiki/tests/test_functional.py @@ -6,8 +6,9 @@ Functional, browser based tests for mediawiki app. import pathlib from urllib.parse import urlparse -import requests import pytest +import requests + from plinth.tests import functional from plinth.tests.functional import config @@ -24,7 +25,7 @@ class TestMediawikiApp(functional.BaseAppTests): """Setup the app.""" functional.login(session_browser) functional.install(session_browser, 'mediawiki') - _set_server_url(session_browser) + _set_domain(session_browser) def test_public_registrations(self, session_browser): """Test enabling public registrations.""" @@ -241,9 +242,9 @@ def __has_main_page(browser): return 'This page has been deleted.' not in content.text -def _set_server_url(browser): - """Set the value of server url to the value in the given env_var.""" +def _set_domain(browser): + """Set the value of domain to the value in the given env_var.""" functional.nav_to_module(browser, 'mediawiki') - server_url = urlparse(config['DEFAULT']['url']).netloc - browser.find_by_id('id_server_url').fill(server_url) + domain = urlparse(config['DEFAULT']['url']).netloc + browser.find_by_id('id_domain').fill(domain) functional.submit(browser, form_class='form-configuration') diff --git a/plinth/modules/mediawiki/tests/test_settings.py b/plinth/modules/mediawiki/tests/test_settings.py index e5db63689..3ffc87b18 100644 --- a/plinth/modules/mediawiki/tests/test_settings.py +++ b/plinth/modules/mediawiki/tests/test_settings.py @@ -63,6 +63,6 @@ def test_default_skin(): def test_server_url(): """Test getting and setting $wgServer.""" assert mediawiki.get_server_url() == 'freedombox.local' - new_server_url = 'mydomain.freedombox.rocks' - mediawiki.set_server_url(new_server_url) - assert mediawiki.get_server_url() == new_server_url + new_domain = 'mydomain.freedombox.rocks' + mediawiki.set_server_url(new_domain) + assert mediawiki.get_server_url() == new_domain diff --git a/plinth/modules/mediawiki/views.py b/plinth/modules/mediawiki/views.py index 44401433b..e6f2203b6 100644 --- a/plinth/modules/mediawiki/views.py +++ b/plinth/modules/mediawiki/views.py @@ -32,7 +32,7 @@ class MediaWikiAppView(views.AppView): 'enable_public_registrations': is_public_registration_enabled(), 'enable_private_mode': is_private_mode_enabled(), 'default_skin': get_default_skin(), - 'server_url': get_server_url() + 'domain': get_server_url() }) return initial @@ -93,8 +93,8 @@ class MediaWikiAppView(views.AppView): mediawiki.set_default_skin(new_config['default_skin']) messages.success(self.request, _('Default skin changed')) - if is_changed('server_url'): - mediawiki.set_server_url(new_config['server_url']) - messages.success(self.request, _('Server URL updated')) + if is_changed('domain'): + mediawiki.set_server_url(new_config['domain']) + messages.success(self.request, _('Domain name updated')) return super().form_valid(form)