mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
Added an option to enable/disable private mode in mediawiki
Add tests for mediawiki private mode Signed-off-by: Hemanth Kumar Veeranki <hemanthveeranki@gmail.com> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
b9019017f0
commit
6f5b4fba38
@ -48,6 +48,11 @@ def parse_arguments():
|
|||||||
pub_reg.add_argument('command', choices=('enable', 'disable', 'status'),
|
pub_reg.add_argument('command', choices=('enable', 'disable', 'status'),
|
||||||
help=help_pub_reg)
|
help=help_pub_reg)
|
||||||
|
|
||||||
|
help_private_mode = 'Enable/Disable/Status private mode.'
|
||||||
|
private_mode = subparsers.add_parser('private-mode', help=help_private_mode)
|
||||||
|
private_mode.add_argument('command', choices=('enable', 'disable', 'status'),
|
||||||
|
help=help_private_mode)
|
||||||
|
|
||||||
change_password = subparsers.add_parser('change-password',
|
change_password = subparsers.add_parser('change-password',
|
||||||
help='Change user password')
|
help='Change user password')
|
||||||
change_password.add_argument('--username', default='admin',
|
change_password.add_argument('--username', default='admin',
|
||||||
@ -171,6 +176,42 @@ def subcommand_public_registrations(arguments):
|
|||||||
conf_file.write(line)
|
conf_file.write(line)
|
||||||
|
|
||||||
|
|
||||||
|
def subcommand_private_mode(arguments):
|
||||||
|
"""Enable or Disable Private mode for wiki"""
|
||||||
|
with open(CONF_FILE, 'r') as conf_file:
|
||||||
|
lines = conf_file.readlines()
|
||||||
|
|
||||||
|
def is_edit_line(line):
|
||||||
|
return line.startswith("$wgGroupPermissions['*']['edit']")
|
||||||
|
|
||||||
|
def is_read_line(line):
|
||||||
|
return line.startswith("$wgGroupPermissions['*']['read']")
|
||||||
|
|
||||||
|
edit_conf_lines = list(filter(is_edit_line, lines))
|
||||||
|
read_conf_lines = list(filter(is_read_line, lines))
|
||||||
|
if arguments.command == 'status':
|
||||||
|
if edit_conf_lines and read_conf_lines:
|
||||||
|
print('enabled' if ('false' in read_conf_lines[0]) and
|
||||||
|
('false' in edit_conf_lines[0]) else 'disabled')
|
||||||
|
else:
|
||||||
|
print('disabled')
|
||||||
|
else:
|
||||||
|
with open(CONF_FILE, 'w') as conf_file:
|
||||||
|
conf_value = 'false;' if arguments.command == 'enable' else 'true;'
|
||||||
|
for line in lines:
|
||||||
|
if is_edit_line(line) or is_read_line(line):
|
||||||
|
words = line.split()
|
||||||
|
words[-1] = conf_value
|
||||||
|
conf_file.write(" ".join(words) + '\n')
|
||||||
|
else:
|
||||||
|
conf_file.write(line)
|
||||||
|
|
||||||
|
if edit_conf_lines is None:
|
||||||
|
conf_file.write("$wgGroupPermissions['*']['edit'] = " + conf_value + '\n')
|
||||||
|
if read_conf_lines is None:
|
||||||
|
conf_file.write("$wgGroupPermissions['*']['read'] = " + conf_value + '\n')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Parse arguments and perform all duties."""
|
"""Parse arguments and perform all duties."""
|
||||||
arguments = parse_arguments()
|
arguments = parse_arguments()
|
||||||
|
|||||||
@ -41,4 +41,15 @@ Scenario: Enable public registrations
|
|||||||
Scenario: Disable public registrations
|
Scenario: Disable public registrations
|
||||||
Given the mediawiki application is enabled
|
Given the mediawiki application is enabled
|
||||||
When I disable mediawiki public registrations
|
When I disable mediawiki public registrations
|
||||||
Then the mediawiki site should not allow creating accounts
|
Then the mediawiki site should not allow creating accounts
|
||||||
|
|
||||||
|
Scenario: Enable private mode
|
||||||
|
Given the mediawiki application is enabled
|
||||||
|
When I enable mediawiki private mode
|
||||||
|
Then the mediawiki site should not allow creating accounts
|
||||||
|
Then the mediawiki site should not allow anonymous reads and writes
|
||||||
|
|
||||||
|
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
|
||||||
|
|||||||
@ -174,3 +174,13 @@ def enable_mediawiki_public_registrations(browser):
|
|||||||
@when(parsers.parse('I disable mediawiki public registrations'))
|
@when(parsers.parse('I disable mediawiki public registrations'))
|
||||||
def disable_mediawiki_public_registrations(browser):
|
def disable_mediawiki_public_registrations(browser):
|
||||||
application.disable_mediawiki_public_registrations(browser)
|
application.disable_mediawiki_public_registrations(browser)
|
||||||
|
|
||||||
|
|
||||||
|
@when(parsers.parse('I enable mediawiki private mode'))
|
||||||
|
def enable_mediawiki_private_mode(browser):
|
||||||
|
application.enable_mediawiki_private_mode(browser)
|
||||||
|
|
||||||
|
|
||||||
|
@when(parsers.parse('I disable mediawiki private mode'))
|
||||||
|
def disable_mediawiki_private_mode(browser):
|
||||||
|
application.disable_mediawiki_private_mode(browser)
|
||||||
|
|||||||
@ -50,3 +50,13 @@ def mediawiki_allows_creating_accounts(browser):
|
|||||||
@then(parsers.parse('the mediawiki site should not allow creating accounts'))
|
@then(parsers.parse('the mediawiki site should not allow creating accounts'))
|
||||||
def mediawiki_does_not_allow_creating_accounts(browser):
|
def mediawiki_does_not_allow_creating_accounts(browser):
|
||||||
site.verify_mediawiki_no_create_account_link(browser)
|
site.verify_mediawiki_no_create_account_link(browser)
|
||||||
|
|
||||||
|
|
||||||
|
@then(parsers.parse('the mediawiki site should allow anonymous reads and writes'))
|
||||||
|
def mediawiki_allows_anonymous_reads_edits(browser):
|
||||||
|
site.verify_mediawiki_anonymous_reads_edits_link(browser)
|
||||||
|
|
||||||
|
|
||||||
|
@then(parsers.parse('the mediawiki site should not allow anonymous reads and writes'))
|
||||||
|
def mediawiki_does_not_allow__account_creation_anonymous_reads_edits(browser):
|
||||||
|
site.verify_mediawiki_no_anonymous_reads_edits_link(browser)
|
||||||
@ -232,3 +232,17 @@ def disable_mediawiki_public_registrations(browser):
|
|||||||
interface.nav_to_module(browser, 'mediawiki')
|
interface.nav_to_module(browser, 'mediawiki')
|
||||||
_change_status(browser, 'mediawiki', 'disabled',
|
_change_status(browser, 'mediawiki', 'disabled',
|
||||||
checkbox_id='id_enable_public_registrations')
|
checkbox_id='id_enable_public_registrations')
|
||||||
|
|
||||||
|
|
||||||
|
def enable_mediawiki_private_mode(browser):
|
||||||
|
"""Enable public registrations in MediaWiki."""
|
||||||
|
interface.nav_to_module(browser, 'mediawiki')
|
||||||
|
_change_status(browser, 'mediawiki', 'enabled',
|
||||||
|
checkbox_id='id_enable_private_mode')
|
||||||
|
|
||||||
|
|
||||||
|
def disable_mediawiki_private_mode(browser):
|
||||||
|
"""Enable public registrations in MediaWiki."""
|
||||||
|
interface.nav_to_module(browser, 'mediawiki')
|
||||||
|
_change_status(browser, 'mediawiki', 'disabled',
|
||||||
|
checkbox_id='id_enable_private_mode')
|
||||||
|
|||||||
@ -69,3 +69,18 @@ def verify_mediawiki_no_create_account_link(browser):
|
|||||||
browser.visit(config['DEFAULT']['url'] + '/mediawiki')
|
browser.visit(config['DEFAULT']['url'] + '/mediawiki')
|
||||||
assert eventually(browser.is_element_not_present_by_id,
|
assert eventually(browser.is_element_not_present_by_id,
|
||||||
args=['pt-createaccount'])
|
args=['pt-createaccount'])
|
||||||
|
|
||||||
|
|
||||||
|
def verify_mediawiki_anonymous_reads_edits_link(browser):
|
||||||
|
browser.visit(config['DEFAULT']['url'] + '/mediawiki')
|
||||||
|
assert eventually(browser.is_element_present_by_id,
|
||||||
|
args=['ca-nstab-main'])
|
||||||
|
|
||||||
|
|
||||||
|
def verify_mediawiki_no_anonymous_reads_edits_link(browser):
|
||||||
|
browser.visit(config['DEFAULT']['url'] + '/mediawiki')
|
||||||
|
assert eventually(browser.is_element_not_present_by_id,
|
||||||
|
args=['ca-nstab-main'])
|
||||||
|
assert eventually(browser.is_element_present_by_id,
|
||||||
|
args=['ca-nstab-special'])
|
||||||
|
|
||||||
|
|||||||
@ -134,3 +134,10 @@ def get_public_registration_status():
|
|||||||
output = actions.superuser_run('mediawiki',
|
output = actions.superuser_run('mediawiki',
|
||||||
['public-registrations', 'status'])
|
['public-registrations', 'status'])
|
||||||
return output.strip() == 'enabled'
|
return output.strip() == 'enabled'
|
||||||
|
|
||||||
|
|
||||||
|
def get_private_mode_status():
|
||||||
|
""" Return wheter private mode is enabled or disabled"""
|
||||||
|
output = actions.superuser_run('mediawiki',
|
||||||
|
['private-mode', 'status'])
|
||||||
|
return output.strip() == 'enabled'
|
||||||
|
|||||||
@ -36,3 +36,9 @@ class MediaWikiForm(ServiceForm): # pylint: disable=W0232
|
|||||||
label=_('Enable public registrations'), required=False, help_text=_(
|
label=_('Enable public registrations'), required=False, help_text=_(
|
||||||
'If enabled, anyone on the internet will be able to '
|
'If enabled, anyone on the internet will be able to '
|
||||||
'create an account on your MediaWiki instance.'))
|
'create an account on your MediaWiki instance.'))
|
||||||
|
|
||||||
|
enable_private_mode = forms.BooleanField(
|
||||||
|
label=_('Enable private mode'), required=False, help_text=_(
|
||||||
|
'If enabled, Access will be restricted. Only people '
|
||||||
|
'who have accounts can read/write to the wiki. '
|
||||||
|
'Public registrations will also be disabled.'))
|
||||||
|
|||||||
@ -26,7 +26,7 @@ from django.utils.translation import ugettext as _
|
|||||||
from plinth import actions, views
|
from plinth import actions, views
|
||||||
from plinth.modules import mediawiki
|
from plinth.modules import mediawiki
|
||||||
|
|
||||||
from . import get_public_registration_status
|
from . import get_public_registration_status, get_private_mode_status
|
||||||
from .forms import MediaWikiForm
|
from .forms import MediaWikiForm
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -46,7 +46,8 @@ class MediaWikiServiceView(views.ServiceView):
|
|||||||
"""Return the values to fill in the form."""
|
"""Return the values to fill in the form."""
|
||||||
initial = super().get_initial()
|
initial = super().get_initial()
|
||||||
initial.update({
|
initial.update({
|
||||||
'enable_public_registrations': get_public_registration_status()
|
'enable_public_registrations': get_public_registration_status(),
|
||||||
|
'enable_private_mode': get_private_mode_status()
|
||||||
})
|
})
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
@ -60,13 +61,14 @@ class MediaWikiServiceView(views.ServiceView):
|
|||||||
|
|
||||||
app_same = is_unchanged('is_enabled')
|
app_same = is_unchanged('is_enabled')
|
||||||
pub_reg_same = is_unchanged('enable_public_registrations')
|
pub_reg_same = is_unchanged('enable_public_registrations')
|
||||||
|
private_mode_same = is_unchanged('enable_private_mode')
|
||||||
|
|
||||||
if new_config['password']:
|
if new_config['password']:
|
||||||
actions.superuser_run('mediawiki', ['change-password'],
|
actions.superuser_run('mediawiki', ['change-password'],
|
||||||
input=new_config['password'].encode())
|
input=new_config['password'].encode())
|
||||||
messages.success(self.request, _('Password updated'))
|
messages.success(self.request, _('Password updated'))
|
||||||
|
|
||||||
if app_same and pub_reg_same:
|
if app_same and pub_reg_same and private_mode_same:
|
||||||
if not self.request._messages._queued_messages:
|
if not self.request._messages._queued_messages:
|
||||||
messages.info(self.request, _('Setting unchanged'))
|
messages.info(self.request, _('Setting unchanged'))
|
||||||
elif not app_same:
|
elif not app_same:
|
||||||
@ -90,4 +92,20 @@ class MediaWikiServiceView(views.ServiceView):
|
|||||||
messages.success(self.request,
|
messages.success(self.request,
|
||||||
_('Public registrations disabled'))
|
_('Public registrations disabled'))
|
||||||
|
|
||||||
|
if not private_mode_same:
|
||||||
|
if new_config['enable_private_mode']:
|
||||||
|
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'))
|
||||||
|
else:
|
||||||
|
actions.superuser_run('mediawiki',
|
||||||
|
['private-mode', 'disable'])
|
||||||
|
messages.success(self.request,
|
||||||
|
_('Private mode disabled'))
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user