Diaspora: Checkbox to enable or disable user registrations

This commit is contained in:
Joseph Nuthalpati 2017-07-19 11:37:23 +05:30 committed by James Valleroy
parent 3e38a3e3f1
commit 4abb7cd885
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
7 changed files with 103 additions and 60 deletions

View File

@ -27,6 +27,8 @@ import subprocess
from plinth import action_utils from plinth import action_utils
from plinth.modules import diaspora from plinth.modules import diaspora
DIASPORA_YAML = "/etc/diaspora/diaspora.yml"
def parse_arguments(): def parse_arguments():
"""Return parsed command line arguments as dictionary.""" """Return parsed command line arguments as dictionary."""
@ -38,6 +40,10 @@ def parse_arguments():
subparsers.add_parser('enable', help='Enable diaspora* web server') subparsers.add_parser('enable', help='Enable diaspora* web server')
subparsers.add_parser('disable', help='Disable diaspora* web server') subparsers.add_parser('disable', help='Disable diaspora* web server')
subparsers.add_parser('enable-user-registrations', help='Allow users to' \
'sign up to this diaspora* pod without an invitation.')
subparsers.add_parser('disable-user-registrations', help='Allow only, ' \
'users with an invitation to register to this diaspora* pod')
subparsers.add_parser('start-diaspora', help='Start diaspora* service') subparsers.add_parser('start-diaspora', help='Start diaspora* service')
subparsers.add_parser( subparsers.add_parser(
'disable-ssl', help="Disable SSL on the diaspora* application server") 'disable-ssl', help="Disable SSL on the diaspora* application server")
@ -55,6 +61,7 @@ def subcommand_setup(arguments):
with open('/etc/diaspora/domain_name', 'w') as dnf: with open('/etc/diaspora/domain_name', 'w') as dnf:
dnf.write(domain_name) dnf.write(domain_name)
set_domain_name(domain_name) set_domain_name(domain_name)
uncomment_user_registrations()
action_utils.service_start('diaspora') action_utils.service_start('diaspora')
action_utils.webserver_enable('diaspora-plinth') action_utils.webserver_enable('diaspora-plinth')
@ -92,8 +99,33 @@ def subcommand_disable_ssl(_):
""" """
# Using sed because ruamel.yaml has a bug for this kind of files # Using sed because ruamel.yaml has a bug for this kind of files
subprocess.call([ subprocess.call([
"sed", "-i", "s/#require_ssl: true/require_ssl: false/g", "sed", "-i", "s/#require_ssl: true/require_ssl: false/g", DIASPORA_YAML
"/etc/diaspora/diaspora.yml" ])
def uncomment_user_registrations():
"""Uncomment the enable_registrations line which is commented by default"""
subprocess.call([
"sed", "-i", "s/#enable_registrations/enable_registrations/g",
DIASPORA_YAML
])
def subcommand_enable_user_registrations(_):
"""Enable new user registrations on the diaspora* pod """
subprocess.call([
"sed", "-i",
"s/enable_registrations: false/enable_registrations: true/g",
DIASPORA_YAML
])
def subcommand_disable_user_registrations(_):
"""Disable new user registrations on the diaspora* pod """
subprocess.call([
"sed", "-i",
"s/enable_registrations: true/enable_registrations: false/g",
DIASPORA_YAML
]) ])

View File

@ -42,6 +42,9 @@ class DomainSelectionForm(forms.Form):
self.fields['domain_name'].choices = utils.get_domain_names() self.fields['domain_name'].choices = utils.get_domain_names()
domain_name = forms.ChoiceField( domain_name = forms.ChoiceField(
label=_('Select the domain name to be used for this application'), label=_('Select a domain name to be used with this application'),
help_text=_(
'Warning! The application may not work properly if domain name is changed later.'
),
choices=[] choices=[]
) )

View File

@ -139,6 +139,24 @@ def disable():
frontpage.remove_shortcut('diaspora') frontpage.remove_shortcut('diaspora')
def is_user_registrations_enabled():
"""Return whether user registrations are enabled"""
with open('/etc/diaspora/diaspora.yml') as f:
for line in f.readlines():
if "enable_registrations" in line:
return line.split(":")[1].strip() == "true"
def enable_user_registrations():
"""Allow users to register without invitation"""
actions.superuser_run('diaspora', ['enable-user-registrations'])
def disable_user_registrations():
"""Disallow users from registering without invitation"""
actions.superuser_run('diaspora', ['disable-user-registrations'])
def diagnose(): def diagnose():
"""Run diagnostics and return the results.""" """Run diagnostics and return the results."""
results = [] results = []

View File

@ -22,17 +22,12 @@ from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from plinth import utils from plinth import utils
from plinth.forms import ServiceForm
class DiasporaForm(forms.Form): class DiasporaServiceForm(ServiceForm):
"""Form to do initial configuration of diaspora""" """Service Form with additional fields for diaspora*"""
domain_name = forms.ChoiceField( is_user_registrations_enabled = forms.BooleanField(
label=_('Select the domain name to be used for diaspora*'), label=_('Enable new user registrations'),
help_text=_( required=False
'Warning! Do not change the FreedomBox domain name after setting up diaspora*' )
),
choices=[])
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['domain_name'].choices = utils.get_domain_names()

View File

@ -14,25 +14,29 @@
# You should have received a copy of the GNU Affero General Public License # 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/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
""" """
Views for the diaspora module Views for the diaspora module
""" """
from django.contrib import messages
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext as _
from django.views.generic import FormView from django.views.generic import FormView
from plinth import actions from plinth import actions
from plinth.forms import DomainSelectionForm
from plinth.modules import diaspora from plinth.modules import diaspora
from plinth.modules.diaspora.forms import DiasporaForm
from plinth.utils import get_domain_names from plinth.utils import get_domain_names
from plinth.views import ServiceView from plinth.views import ServiceView
from .forms import DiasporaServiceForm
class DiasporaSetupView(FormView): class DiasporaSetupView(FormView):
"""Show diaspora setup page.""" """Show diaspora setup page."""
template_name = 'diaspora-pre-setup.html' template_name = 'diaspora-pre-setup.html'
form_class = DiasporaForm form_class = DomainSelectionForm
description = diaspora.description description = diaspora.description
title = diaspora.title title = diaspora.title
success_url = reverse_lazy('diaspora:index') success_url = reverse_lazy('diaspora:index')
@ -56,6 +60,7 @@ class DiasporaSetupView(FormView):
class DiasporaServiceView(ServiceView): class DiasporaServiceView(ServiceView):
"""Show diaspora service page.""" """Show diaspora service page."""
form_class = DiasporaServiceForm
service_id = diaspora.managed_services[0] service_id = diaspora.managed_services[0]
template_name = 'diaspora-post-setup.html' template_name = 'diaspora-post-setup.html'
diagnostics_module_name = 'diaspora' diagnostics_module_name = 'diaspora'
@ -63,11 +68,39 @@ class DiasporaServiceView(ServiceView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
if not diaspora.is_setup(): if not diaspora.is_setup():
return redirect('diaspora:setup') return redirect('diaspora:setup')
return super().dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['domain_name'] = diaspora.get_configured_domain_name() context['domain_name'] = diaspora.get_configured_domain_name()
return context return context
def get_initial(self):
"""Return the status of the service to fill in the form."""
return {
'is_enabled':
self.service.is_enabled(),
'is_user_registrations_enabled':
diaspora.is_user_registrations_enabled(),
'is_running':
self.service.is_running()
}
def form_valid(self, form):
"""Enable/disable user registrations"""
old_status = form.initial['is_user_registrations_enabled']
new_status = form.cleaned_data['is_user_registrations_enabled']
if old_status == new_status:
if not self.request._messages._queued_messages:
messages.info(self.request, _('Setting unchanged'))
else:
if new_status:
diaspora.enable_user_registrations()
messages.success(self.request, _('User registrations enabled'))
else:
diaspora.disable_user_registrations()
messages.success(self.request,
_('User registrations disabled'))
return super().form_valid(form)

View File

@ -1,38 +0,0 @@
#
# This file is part of Plinth.
#
# 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/>.
#
"""
Forms for configuring matrix-synapse.
"""
from django import forms
from django.utils.translation import ugettext_lazy as _
from plinth.utils import get_domain_names
class MatrixSynapseForm(forms.Form):
"""Form to do initial configuration of matrix-synapse."""
domain_name = forms.ChoiceField(
label=_('Select the domain name'),
choices=[]
)
def __init__(self, *args, **kwargs):
"""Initialize the form object."""
super().__init__(*args, **kwargs)
self.fields['domain_name'].choices = get_domain_names()

View File

@ -26,14 +26,14 @@ from django.views.generic import FormView
from plinth import actions from plinth import actions
from plinth import views from plinth import views
from plinth.modules import matrixsynapse from plinth.modules import matrixsynapse
from plinth.modules.matrixsynapse.forms import MatrixSynapseForm from plinth.forms import DomainSelectionForm
from plinth.utils import get_domain_names from plinth.utils import get_domain_names
class SetupView(FormView): class SetupView(FormView):
"""Show matrix-synapse setup page.""" """Show matrix-synapse setup page."""
template_name = 'matrix-synapse-pre-setup.html' template_name = 'matrix-synapse-pre-setup.html'
form_class = MatrixSynapseForm form_class = DomainSelectionForm
success_url = reverse_lazy('matrixsynapse:index') success_url = reverse_lazy('matrixsynapse:index')
def form_valid(self, form): def form_valid(self, form):