Convert xmpp pages to Django forms

This commit is contained in:
Sunil Mohan Adapa 2014-05-11 16:26:16 +05:30
parent cde500f2b7
commit 0bd1798baf
3 changed files with 168 additions and 81 deletions

View 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 %}

View 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 %}

View File

@ -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)))