From fe56ef37617d4ba8f5fd95c639ab0577d15555d6 Mon Sep 17 00:00:00 2001
From: Sunil Mohan Adapa
Date: Sun, 11 May 2014 10:56:26 +0530
Subject: [PATCH] Convert pagekite pages to use Django forms
---
modules/installed/router/pagekite.py | 208 ++++++++----------
.../router/templates/pagekite_configure.html | 60 +++++
templates/base.html | 4 +-
3 files changed, 150 insertions(+), 122 deletions(-)
create mode 100644 modules/installed/router/templates/pagekite_configure.html
diff --git a/modules/installed/router/pagekite.py b/modules/installed/router/pagekite.py
index cc87fac2a..799a8860d 100644
--- a/modules/installed/router/pagekite.py
+++ b/modules/installed/router/pagekite.py
@@ -20,14 +20,14 @@ Plinth module for configuring PageKite service
"""
import cherrypy
+from django import forms
+from django.core import validators
from gettext import gettext as _
import actions
import cfg
-from forms import Form
from modules.auth import require
-from plugin_mount import PagePlugin, FormPlugin
-import re
+from plugin_mount import PagePlugin
import util
@@ -39,7 +39,6 @@ class PageKite(PagePlugin):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("router.setup.pagekite")
- self.register_page("router.setup.pagekite.configure")
cfg.html_root.router.setup.menu.add_item(
_("Public Visibility (PageKite)"), "icon-flag",
"/router/setup/pagekite", 50)
@@ -48,7 +47,7 @@ class PageKite(PagePlugin):
@cherrypy.expose
@require()
def index(**kwargs):
- """Serve introcution page"""
+ """Serve introdution page"""
del kwargs # Unused
menu = {'title': _('PageKite'),
@@ -61,29 +60,82 @@ class PageKite(PagePlugin):
sidebar_right=sidebar_right)
-class configure(FormPlugin, PagePlugin): # pylint: disable-msg=C0103
+class TrimmedCharField(forms.CharField):
+ """Trim the contents of a CharField"""
+ def clean(self, value):
+ """Clean and validate the field value"""
+ if value:
+ value = value.strip()
+
+ return super(TrimmedCharField, self).clean(value)
+
+
+class ConfigureForm(forms.Form): # pylint: disable-msg=W0232
+ """Form to configure PageKite"""
+ enabled = forms.BooleanField(label=_('Enable PageKite'),
+ required=False)
+
+ server = forms.CharField(
+ label=_('Server'), required=False,
+ help_text=_('Currently only pagekite.net server is supported'),
+ widget=forms.TextInput(attrs={'placeholder': 'pagekite.net',
+ 'disabled': 'disabled'}))
+
+ kite_name = TrimmedCharField(
+ label=_('Kite name'),
+ help_text=_('Example: mybox1-myacc.pagekite.me'),
+ validators=[
+ validators.RegexValidator(r'^[\w-]{1,63}(\.[\w-]{1,63})*$',
+ _('Invalid kite name'))])
+
+ kite_secret = TrimmedCharField(
+ label=_('Kite secret'),
+ help_text=_('A secret associated with the kite or the default secret \
+for your account if no secret is set on the kite'))
+
+ http_enabled = forms.BooleanField(
+ label=_('Web Server (HTTP)'), required=False,
+ help_text=_('Site will be available at \
+http://mybox1-myacc.pagekite.me \
+'))
+
+ ssh_enabled = forms.BooleanField(
+ label=_('Secure Shell (SSH)'), required=False,
+ help_text=_('See SSH client setup instructions'))
+
+
+class Configure(PagePlugin): # pylint: disable-msg=C0103
"""Main configuration form"""
order = 65
- url = ["/router/setup/pagekite/configure"]
+ def __init__(self, *args, **kwargs):
+ PagePlugin.__init__(self, *args, **kwargs)
- js = """
-
-"""
+ if kwargs:
+ form = ConfigureForm(kwargs, prefix='pagekite')
+ # 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='pagekite')
+ else:
+ form = ConfigureForm(initial=status, prefix='pagekite')
+
+ return util.render_template(template='pagekite_configure',
+ title=_('Configure PageKite'), form=form,
+ messages=messages)
def get_status(self):
"""
@@ -112,99 +164,11 @@ $('#pagekite-enable').change(function() {
status['service'] = {}
for service in ('http', 'ssh'):
output = self._run(['get-service-status', service])
- status['service'][service] = (output.split()[0] == 'enabled')
+ status[service + '_enabled'] = (output.split()[0] == 'enabled')
return status
- def main(self, *args, **kwargs):
- """Build and return the main content area which is the form"""
- del args # unused
-
- status = self.get_status()
-
- if not status:
- return _('''
-PageKite is not installed, please install it. PageKite comes
-pre-installed with {box_name}. On any Debian based system (such as
-{box_name}) you may install it using the command 'aptitude install
-pagekite'
''').format(box_name=cfg.box_name)
-
- try:
- message = kwargs['message'].text
- except KeyError:
- message = None
- form = Form(
- title="Configure PageKite",
- action=cfg.server_dir + "/router/setup/pagekite/configure/",
- name="configure_pagekite_form", message=message)
-
- form.checkbox(_("Enable PageKite"), name="pagekite_enable",
- id="pagekite-enable", checked=status['enabled'])
-
- show_form = "block" if status['enabled'] else "none"
- form.html('''
-'''.format(show_form=show_form))
-
- form.html(_("
PageKite Account
"))
- form.text_input(_("Server"), name="pagekite_server",
- id="pagekite-server", value="pagekite.net")
- form.text_input(_("Kite name"), name="pagekite_kite_name",
- id="pagekite-kite-name", value=status['kite_name'])
- form.text_input(_("Kite secret"), name="pagekite_kite_secret",
- id="pagekite-kite-secret", value=status['kite_secret'])
-
- form.html(_("Services
"))
- form.checkbox(_("Web Server (HTTP)"), name="pagekite_http_enable",
- id="pagekite-http-enable",
- checked=status['service']['http'])
- form.checkbox(_("Secure Shell (SSH)"), name="pagekite_ssh_enable",
- id="pagekite-ssh-enable",
- checked=status['service']['ssh'])
-
- form.html("
") # pagekite-post-enable-form
-
- form.submit(_("Update setup"))
- return form.render()
-
- def process_form(self, **kwargs):
- """Handle form submission"""
- status = self.get_status()
-
- message, new_status = self.validate_form(**kwargs)
- if not message.text:
- self.apply_changes(status, new_status, message)
-
- return message
-
- @staticmethod
- def validate_form(**kwargs):
- """Check whether all the input form values are correct"""
- new_status = {}
- message = util.Message()
-
- domain_name_re = r'^[\w-]{1,63}(\.[\w-]{1,63})*$'
- pagekite_kite_name = kwargs.get('pagekite_kite_name', '').strip()
- if not re.match(domain_name_re, pagekite_kite_name):
- message.add(_('Invalid kite name'))
- else:
- new_status['kite_name'] = pagekite_kite_name
-
- pagekite_kite_secret = kwargs.get('pagekite_kite_secret', '').strip()
- if not pagekite_kite_secret:
- message.add(_('Invalid kite secret'))
- else:
- new_status['kite_secret'] = pagekite_kite_secret
-
- new_status['enabled'] = (kwargs.get('pagekite_enable') == 'on')
- new_status['service'] = {
- 'http': (kwargs.get('pagekite_http_enable') == 'on'),
- 'ssh': (kwargs.get('pagekite_ssh_enable') == 'on')
- }
-
- return message, new_status
-
- def apply_changes(self, old_status, new_status, message):
+ def _apply_changes(self, old_status, new_status, messages):
"""Apply the changes to PageKite configuration"""
cfg.log.info('New status is - %s' % new_status)
@@ -214,27 +178,29 @@ pagekite'''').format(box_name=cfg.box_name)
if old_status['enabled'] != new_status['enabled']:
if new_status['enabled']:
self._run(['set-status', 'enable'])
- message.add(_('PageKite enabled'))
+ messages.append(('success', _('PageKite enabled')))
else:
self._run(['set-status', 'disable'])
- message.add(_('PageKite disabled'))
+ messages.append(('success', _('PageKite disabled')))
if old_status['kite_name'] != new_status['kite_name'] or \
old_status['kite_secret'] != new_status['kite_secret']:
self._run(['set-kite', '--kite-name', new_status['kite_name'],
'--kite-secret', new_status['kite_secret']])
- message.add(_('Kite details set'))
+ messages.append(('success', _('Kite details set')))
- for service, old_value in old_status['service'].items():
- if old_value != new_status['service'][service]:
- if new_status['service'][service]:
+ for service in ['http', 'ssh']:
+ if old_status[service + '_enabled'] != \
+ new_status[service + '_enabled']:
+ if new_status[service + '_enabled']:
self._run(['set-service-status', service, 'enable'])
- message.add(_('Service enabled: {service}')
- .format(service=service))
+ messages.append(('success', _('Service enabled: {service}')
+ .format(service=service)))
else:
self._run(['set-service-status', service, 'disable'])
- message.add(_('Service disabled: {service}')
- .format(service=service))
+ messages.append(('success',
+ _('Service disabled: {service}')
+ .format(service=service)))
if old_status != new_status:
self._run(['start'])
diff --git a/modules/installed/router/templates/pagekite_configure.html b/modules/installed/router/templates/pagekite_configure.html
new file mode 100644
index 000000000..0492f1b5e
--- /dev/null
+++ b/modules/installed/router/templates/pagekite_configure.html
@@ -0,0 +1,60 @@
+{% extends "login_nav.html" %}
+{% load bootstrap %}
+
+{% block main_block %}
+
+{% if pagekite_status = 'not_installed' %}
+
+ PageKite is not installed, please install it. PageKite comes
+ pre-installed with {{ cfg.box_name }}. On any Debian based system
+ (such as {{ cfg.box_name }}) you may install it using the command
+ 'aptitude install pagekite'
+
+{% else %}
+
+ {% for severity, message in messages %}
+ {{ message }}
+ {% endfor %}
+
+
+
+{% endif %}
+
+{% endblock %}
+
+{% block js_block %}
+ {{ js|safe }}
+
+
+{% endblock %}
diff --git a/templates/base.html b/templates/base.html
index c08b3b8ea..6bb30a8df 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -193,6 +193,8 @@
- {{ js|safe }}
+ {% block js_block %}
+ {{ js|safe }}
+ {% endblock %}