mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
Convert xmpp pages to Django forms
This commit is contained in:
parent
cde500f2b7
commit
0bd1798baf
19
modules/installed/services/templates/xmpp_configure.html
Normal file
19
modules/installed/services/templates/xmpp_configure.html
Normal file
@ -0,0 +1,19 @@
|
||||
{% extends "login_nav.html" %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block main_block %}
|
||||
|
||||
{% for severity, message in messages %}
|
||||
<div class='alert alert-{{ severity }}'>{{ message }}</div>
|
||||
{% endfor %}
|
||||
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
{{ form|bootstrap }}
|
||||
|
||||
<input type="submit" class="btn-primary" value="Update setup"/>
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
19
modules/installed/services/templates/xmpp_register.html
Normal file
19
modules/installed/services/templates/xmpp_register.html
Normal file
@ -0,0 +1,19 @@
|
||||
{% extends "login_nav.html" %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block main_block %}
|
||||
|
||||
{% for severity, message in messages %}
|
||||
<div class='alert alert-{{ severity }}'>{{ message }}</div>
|
||||
{% endfor %}
|
||||
|
||||
<form class="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
{{ form|bootstrap }}
|
||||
|
||||
<input type="submit" class="btn-primary" value="Register XMPP Account"/>
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
@ -1,9 +1,9 @@
|
||||
import cherrypy
|
||||
from django import forms
|
||||
from gettext import gettext as _
|
||||
from modules.auth import require
|
||||
from plugin_mount import PagePlugin, FormPlugin
|
||||
from plugin_mount import PagePlugin
|
||||
import cfg
|
||||
from forms import Form
|
||||
import actions
|
||||
import service
|
||||
import util
|
||||
@ -15,13 +15,14 @@ SIDE_MENU = {'title': _('XMPP'),
|
||||
{'url': '/services/xmpp/register',
|
||||
'text': 'Register XMPP Account'}]}
|
||||
|
||||
class xmpp(PagePlugin):
|
||||
|
||||
class XMPP(PagePlugin):
|
||||
"""XMPP Page"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
PagePlugin.__init__(self, *args, **kwargs)
|
||||
self.register_page("services.xmpp")
|
||||
self.register_page("services.xmpp.configure")
|
||||
self.register_page("services.xmpp.register")
|
||||
cfg.html_root.services.menu.add_item("XMPP", "icon-comment", "/services/xmpp", 40)
|
||||
self.register_page('services.xmpp')
|
||||
cfg.html_root.services.menu.add_item('XMPP', 'icon-comment',
|
||||
'/services/xmpp', 40)
|
||||
|
||||
self.client_service = service.Service(
|
||||
'xmpp-client', _('Chat Server - client connections'),
|
||||
@ -37,6 +38,7 @@ class xmpp(PagePlugin):
|
||||
@cherrypy.expose
|
||||
@require()
|
||||
def index(**kwargs):
|
||||
"""Serve XMPP page"""
|
||||
del kwargs # Unused
|
||||
main = "<p>XMPP Server Accounts and Configuration</p>"
|
||||
|
||||
@ -45,58 +47,60 @@ class xmpp(PagePlugin):
|
||||
return util.render_template(title="XMPP Server", main=main,
|
||||
sidebar_right=sidebar_right)
|
||||
|
||||
class configure(FormPlugin, PagePlugin):
|
||||
url = ["/services/xmpp/configure"]
|
||||
|
||||
class ConfigureForm(forms.Form): # pylint: disable-msg=W0232
|
||||
"""Configuration form"""
|
||||
inband_enabled = forms.BooleanField(
|
||||
label=_('Allow In-Band Registration'), required=False,
|
||||
help_text=_('When enabled, anyone who can reach this server will be \
|
||||
allowed to register an account through an XMPP client'))
|
||||
|
||||
# XXX: Only present due to issue with submitting empty form
|
||||
dummy = forms.CharField(label='Dummy', initial='dummy',
|
||||
widget=forms.HiddenInput())
|
||||
|
||||
|
||||
class Configure(PagePlugin):
|
||||
"""Configuration page"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
PagePlugin.__init__(self, *args, **kwargs)
|
||||
self.register_page("services.xmpp.configure")
|
||||
|
||||
@cherrypy.expose
|
||||
@require()
|
||||
def index(self, **kwargs):
|
||||
"""Serve the configuration form"""
|
||||
status = self.get_status()
|
||||
|
||||
form = None
|
||||
messages = []
|
||||
|
||||
if kwargs:
|
||||
form = ConfigureForm(kwargs, prefix='xmpp')
|
||||
# pylint: disable-msg=E1101
|
||||
if form.is_valid():
|
||||
self._apply_changes(status, form.cleaned_data, messages)
|
||||
status = self.get_status()
|
||||
form = ConfigureForm(initial=status, prefix='xmpp')
|
||||
else:
|
||||
form = ConfigureForm(initial=status, prefix='xmpp')
|
||||
|
||||
sidebar_right = util.render_template(template='menu_block',
|
||||
menu=SIDE_MENU)
|
||||
return util.render_template(template='xmpp_configure',
|
||||
title=_('Configure XMPP Server'),
|
||||
form=form, messages=messages,
|
||||
sidebar_right=sidebar_right)
|
||||
|
||||
@staticmethod
|
||||
def sidebar_right(**kwargs):
|
||||
"""Return rendered string for sidebar on the right"""
|
||||
del kwargs # Unused
|
||||
|
||||
return util.render_template(template='menu_block', menu=SIDE_MENU)
|
||||
|
||||
def main(self, xmpp_inband_enable=False, message=None, *args, **kwargs):
|
||||
output, error = actions.superuser_run("xmpp-setup", 'status')
|
||||
def get_status():
|
||||
"""Return the current status"""
|
||||
output, error = actions.run('xmpp-setup', 'status')
|
||||
if error:
|
||||
raise Exception("something is wrong: " + error)
|
||||
if "inband_enable" in output.split():
|
||||
xmpp_inband_enable = True
|
||||
raise Exception('Error getting status: %s' % error)
|
||||
|
||||
form = Form(title="Configure XMPP Server",
|
||||
action=cfg.server_dir + "/services/xmpp/configure/index",
|
||||
name="configure_xmpp_form",
|
||||
message=message)
|
||||
form.checkbox(_("Allow In-Band Registration"), name="xmpp_inband_enable",
|
||||
id="xmpp_inband_enable", checked=xmpp_inband_enable)
|
||||
# hidden field is needed because checkbox doesn't post if not checked
|
||||
form.hidden(name="submitted", value="True")
|
||||
form.html(_("<p>When enabled, anyone who can reach this server will be allowed to register an account through an XMPP client.</p>"))
|
||||
form.submit(_("Update setup"))
|
||||
return form.render()
|
||||
|
||||
def process_form(self, **kwargs):
|
||||
checkedinfo = {
|
||||
'inband_enable' : False,
|
||||
}
|
||||
|
||||
opts = []
|
||||
for k in kwargs.keys():
|
||||
if 'on' == kwargs[k]:
|
||||
shortk = k.split("xmpp_").pop()
|
||||
checkedinfo[shortk] = True
|
||||
|
||||
for key in checkedinfo.keys():
|
||||
if checkedinfo[key]:
|
||||
opts.append(key)
|
||||
else:
|
||||
opts.append('no'+key)
|
||||
actions.run("xmpp-setup", opts)
|
||||
|
||||
return ''
|
||||
|
||||
|
||||
class register(FormPlugin, PagePlugin):
|
||||
url = ["/services/xmpp/register"]
|
||||
return {'inband_enabled': 'inband_enable' in output.split()}
|
||||
|
||||
@staticmethod
|
||||
def sidebar_right(**kwargs):
|
||||
@ -105,36 +109,81 @@ class register(FormPlugin, PagePlugin):
|
||||
|
||||
return util.render_template(template='menu_block', menu=SIDE_MENU)
|
||||
|
||||
def main(self, username='', message=None, *args, **kwargs):
|
||||
form = Form(title="Register XMPP Account",
|
||||
action=cfg.server_dir + "/services/xmpp/register/index",
|
||||
name="register_xmpp_form",
|
||||
message=message)
|
||||
form.text_input(_("Username"), name="username", value=username)
|
||||
form.text_input(_("Password"), name="password", type="password")
|
||||
form.submit(label=_("Register XMPP Account"), name="register")
|
||||
return form.render()
|
||||
@staticmethod
|
||||
def _apply_changes(old_status, new_status, messages):
|
||||
"""Apply the form changes"""
|
||||
cfg.log.info('Status - %s, %s' % (old_status, new_status))
|
||||
|
||||
def process_form(self, username=None, password=None, **kwargs):
|
||||
msg = util.Message()
|
||||
if old_status['inband_enabled'] == new_status['inband_enabled']:
|
||||
messages.append(('info', _('Setting unchanged')))
|
||||
return
|
||||
|
||||
if not username:
|
||||
msg.add(_("Must specify a username!"))
|
||||
if new_status['inband_enabled']:
|
||||
messages.append(('success', _('Inband registration enabled')))
|
||||
option = 'inband_enable'
|
||||
else:
|
||||
messages.append(('success', _('Inband registration disabled')))
|
||||
option = 'noinband_enable'
|
||||
|
||||
if not password:
|
||||
msg.add(_("Must specify a password!"))
|
||||
cfg.log.info('Option - %s' % option)
|
||||
|
||||
if username and password:
|
||||
output, error = actions.superuser_run(
|
||||
"xmpp-register", [username, password])
|
||||
if error:
|
||||
raise Exception("something is wrong: " + error)
|
||||
_output, error = actions.superuser_run('xmpp-setup', [option])
|
||||
del _output
|
||||
if error:
|
||||
raise Exception('Error running command - %s' % error)
|
||||
|
||||
if "successfully registered" in output:
|
||||
msg.add(_("Registered account for %s." % username))
|
||||
else:
|
||||
msg.add(_("Failed to register account for %s: %s" % (username, output)))
|
||||
|
||||
cfg.log(msg.text)
|
||||
class RegisterForm(forms.Form): # pylint: disable-msg=W0232
|
||||
"""Configuration form"""
|
||||
username = forms.CharField(label=_('Username'))
|
||||
|
||||
return msg.text
|
||||
password = forms.CharField(
|
||||
label=_('Password'), widget=forms.PasswordInput())
|
||||
|
||||
|
||||
class Register(PagePlugin):
|
||||
"""User registration page"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
PagePlugin.__init__(self, *args, **kwargs)
|
||||
self.register_page('services.xmpp.register')
|
||||
|
||||
@cherrypy.expose
|
||||
@require()
|
||||
def index(self, **kwargs):
|
||||
"""Serve the registration form"""
|
||||
form = None
|
||||
messages = []
|
||||
|
||||
if kwargs:
|
||||
form = RegisterForm(kwargs, prefix='xmpp')
|
||||
# pylint: disable-msg=E1101
|
||||
if form.is_valid():
|
||||
self._register_user(form.cleaned_data, messages)
|
||||
form = RegisterForm(prefix='xmpp')
|
||||
else:
|
||||
form = RegisterForm(prefix='xmpp')
|
||||
|
||||
sidebar_right = util.render_template(template='menu_block',
|
||||
menu=SIDE_MENU)
|
||||
return util.render_template(template='xmpp_register',
|
||||
title=_('Register XMPP Account'),
|
||||
form=form, messages=messages,
|
||||
sidebar_right=sidebar_right)
|
||||
|
||||
@staticmethod
|
||||
def _register_user(data, messages):
|
||||
"""Register a new XMPP user"""
|
||||
output, error = actions.superuser_run(
|
||||
'xmpp-register', [data['username'], data['password']])
|
||||
if error:
|
||||
raise Exception('Error registering user - %s' % error)
|
||||
|
||||
if 'successfully registered' in output:
|
||||
messages.append(('success',
|
||||
_('Registered account for %s' %
|
||||
data['username'])))
|
||||
else:
|
||||
messages.append(('error',
|
||||
_('Failed to register account for %s: %s') %
|
||||
(data['username'], output)))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user