mediawiki: Make private mode and public registrations mutually exclusive

- Added JavaScript code to make sure that only one of the checkboxes can be
  enabled at any time.
- Handled the condition where a user disables JavaScript and tries to enable
  public registrations when private mode is active. The action will not proceed
  and a warning will be displayed in the response page.

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Joseph Nuthalapati 2018-06-08 17:11:55 +05:30 committed by James Valleroy
parent 2bd6d69e15
commit 62ccfdfebd
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
3 changed files with 71 additions and 14 deletions

View File

@ -53,3 +53,16 @@ Scenario: Disable private mode
Given the mediawiki application is enabled
When I disable mediawiki private mode
Then the mediawiki site should allow anonymous reads and writes
Scenario: Enabling private mode disables public registrations
Given the mediawiki application is enabled
When I enable mediawiki public registrations
And I enable mediawiki private mode
Then the mediawiki site should not allow creating accounts
# Requires JS
Scenario: Enabling public registrations disables private mode
Given the mediawiki application is enabled
When I enable mediawiki private mode
And I enable mediawiki public registrations
Then the mediawiki site should allow creating accounts

View File

@ -0,0 +1,41 @@
{% extends "service.html" %}
{% comment %}
#
# This file is part of FreedomBox.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
{% endcomment %}
{% load i18n %}
{% block page_js %}
<script type="text/javascript">
(function($) {
$('#id_enable_public_registrations').click(function () {
var checkedState = $(this).prop("checked");
if (checkedState) {
$('#id_enable_private_mode').prop('checked', false);
}
});
$('#id_enable_private_mode').click(function () {
var checkedState = $(this).prop("checked");
if (checkedState) {
$('#id_enable_public_registrations').prop('checked', false);
}
});
})(jQuery);
</script>
{% endblock %}

View File

@ -23,10 +23,11 @@ import logging
from django.contrib import messages
from django.utils.translation import ugettext as _
from plinth import actions, views, frontpage
from plinth import actions, views
from plinth.modules import mediawiki
from . import is_public_registration_enabled, is_private_mode_enabled, is_enabled, add_shortcut
from . import (add_shortcut, is_enabled, is_private_mode_enabled,
is_public_registration_enabled)
from .forms import MediaWikiForm
logger = logging.getLogger(__name__)
@ -41,6 +42,7 @@ class MediaWikiServiceView(views.ServiceView):
form_class = MediaWikiForm
manual_page = mediawiki.manual_page
show_status_block = False
template_name = 'mediawiki.html'
def get_initial(self):
"""Return the values to fill in the form."""
@ -82,10 +84,15 @@ class MediaWikiServiceView(views.ServiceView):
if not pub_reg_same:
# note action public-registration restarts, if running now
if new_config['enable_public_registrations']:
actions.superuser_run('mediawiki',
['public-registrations', 'enable'])
messages.success(self.request,
_('Public registrations enabled'))
if not new_config['enable_private_mode']:
actions.superuser_run('mediawiki',
['public-registrations', 'enable'])
messages.success(self.request,
_('Public registrations enabled'))
else:
messages.warning(
self.request, 'Public registrations ' +
'cannot be enabled when private mode is enabled')
else:
actions.superuser_run('mediawiki',
['public-registrations', 'disable'])
@ -94,19 +101,15 @@ class MediaWikiServiceView(views.ServiceView):
if not private_mode_same:
if new_config['enable_private_mode']:
actions.superuser_run('mediawiki',
['private-mode', 'enable'])
actions.superuser_run('mediawiki', ['private-mode', 'enable'])
if new_config['enable_public_registrations']:
# If public registrations are enabled, then disable it
actions.superuser_run('mediawiki',
['public-registrations', 'disable'])
messages.success(self.request,
_('Private mode enabled'))
messages.success(self.request, _('Private mode enabled'))
else:
actions.superuser_run('mediawiki',
['private-mode', 'disable'])
messages.success(self.request,
_('Private mode disabled'))
actions.superuser_run('mediawiki', ['private-mode', 'disable'])
messages.success(self.request, _('Private mode disabled'))
if is_enabled():
add_shortcut()
return super().form_valid(form)