From d0157e09ab8544fb7823df83bf862fb964555470 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 29 Sep 2013 22:28:26 -0400 Subject: [PATCH 1/5] Non-functional XMPP account registration form. --- modules/installed/services/xmpp.py | 54 ++++++++++++++++++++++++++++++ modules/xmpp.py | 1 + 2 files changed, 55 insertions(+) create mode 100644 modules/installed/services/xmpp.py create mode 120000 modules/xmpp.py diff --git a/modules/installed/services/xmpp.py b/modules/installed/services/xmpp.py new file mode 100644 index 000000000..a5aac83b7 --- /dev/null +++ b/modules/installed/services/xmpp.py @@ -0,0 +1,54 @@ +import cherrypy +from gettext import gettext as _ +from modules.auth import require +from plugin_mount import PagePlugin, FormPlugin +import cfg +from forms import Form +from util import Message + +class xmpp(PagePlugin): + def __init__(self, *args, **kwargs): + PagePlugin.__init__(self, *args, **kwargs) + self.register_page("services.xmpp") + self.register_page("services.xmpp.register") + cfg.html_root.services.menu.add_item("XMPP", "icon-comment", "/services/xmpp", 40) + + @cherrypy.expose + @require() + def index(self): + main = "

XMPP Server Configuration

" + sidebar_right = """ +Register XMPP Account +""" + return self.fill_template(title="XMPP Server Configuration", main=main, sidebar_right=sidebar_right) + +class register(FormPlugin, PagePlugin): + url = ["/services/xmpp/register"] + + sidebar_left = '' + sidebar_right = _("Register XMPP Account") + + def main(self, username='', message=None, *args, **kwargs): + form = Form(title="Register XMPP Account", + action="/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() + + def process_form(self, username=None, password=None, **kwargs): + msg = Message() + + if not username: msg.add = _("Must specify a username!") + if not password: msg.add = _("Must specify a password!") + + # register account using script + + if not msg: + msg.add = _("Registered account for %s." % username) + cfg.log(msg.text) + main = self.main(username, msg=msg.text) + return self.fill_template(title="XMPP Server Configuration", main=main, sidebar_left=self.sidebar_left, sidebar_right=self.sidebar_right) + diff --git a/modules/xmpp.py b/modules/xmpp.py new file mode 120000 index 000000000..f31c66cd0 --- /dev/null +++ b/modules/xmpp.py @@ -0,0 +1 @@ +installed/services/xmpp.py \ No newline at end of file From 2fd1d6e7b25a51711bdaf8b645ed3006a1cd2fb7 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 29 Sep 2013 23:00:54 -0400 Subject: [PATCH 2/5] Added action to register xmpp account. --- actions/xmpp-register | 2 ++ modules/installed/services/xmpp.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100755 actions/xmpp-register diff --git a/actions/xmpp-register b/actions/xmpp-register new file mode 100755 index 000000000..88c7fa26f --- /dev/null +++ b/actions/xmpp-register @@ -0,0 +1,2 @@ +#!/bin/sh +ejabberdctl register $1 `hostname` $2 diff --git a/modules/installed/services/xmpp.py b/modules/installed/services/xmpp.py index a5aac83b7..1a8c3d6a4 100644 --- a/modules/installed/services/xmpp.py +++ b/modules/installed/services/xmpp.py @@ -4,6 +4,7 @@ from modules.auth import require from plugin_mount import PagePlugin, FormPlugin import cfg from forms import Form +from privilegedactions import privilegedaction_run from util import Message class xmpp(PagePlugin): @@ -44,10 +45,10 @@ class register(FormPlugin, PagePlugin): if not username: msg.add = _("Must specify a username!") if not password: msg.add = _("Must specify a password!") - # register account using script - - if not msg: + if username and password: + privilegedaction_run("xmpp-register", [username, password]) msg.add = _("Registered account for %s." % username) + cfg.log(msg.text) main = self.main(username, msg=msg.text) return self.fill_template(title="XMPP Server Configuration", main=main, sidebar_left=self.sidebar_left, sidebar_right=self.sidebar_right) From 349517339d7f723903894d51976c9daf77681494 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Thu, 3 Oct 2013 06:16:37 -0400 Subject: [PATCH 3/5] Check output of XMPP account registration. --- modules/installed/services/xmpp.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/installed/services/xmpp.py b/modules/installed/services/xmpp.py index 1a8c3d6a4..7965153ef 100644 --- a/modules/installed/services/xmpp.py +++ b/modules/installed/services/xmpp.py @@ -46,8 +46,14 @@ class register(FormPlugin, PagePlugin): if not password: msg.add = _("Must specify a password!") if username and password: - privilegedaction_run("xmpp-register", [username, password]) - msg.add = _("Registered account for %s." % username) + output, error = privilegedaction_run("xmpp-register", [username, password]) + if error: + raise Exception("something is wrong: " + error) + + if "successfully registered" in output: + msg.add = _("Registered account for %s." % username) + else: + msg.add = _("Failed to register account for %s: %o" % (username, output)) cfg.log(msg.text) main = self.main(username, msg=msg.text) From 17f3965db8543248983852ab4ba199a6326234f2 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Thu, 3 Oct 2013 19:18:51 -0400 Subject: [PATCH 4/5] Added XMPP settings form with control of in-band registration. --- actions/xmpp-setup | 46 ++++++++++++++++++++++++++++++ modules/installed/services/xmpp.py | 37 +++++++++++++++++++++++- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100755 actions/xmpp-setup diff --git a/actions/xmpp-setup b/actions/xmpp-setup new file mode 100755 index 000000000..6c5d0c4fc --- /dev/null +++ b/actions/xmpp-setup @@ -0,0 +1,46 @@ +#!/bin/sh + +if grep --quiet "^{access, register, \[{allow, all}\]}." /etc/ejabberd/ejabberd.cfg; then + xmpp_inband_enable=true +else + xmpp_inband_enable=false +fi +xmpp_inband_enable_cur=$xmpp_inband_enable +export xmpp_inband_enable + +while [ "$1" ] ; do + arg="$1" + shift + case "$arg" in + inband_enable|noinband_enable) # Not using disable for consistency with other options + if [ 'inband_enable' = "$arg" ] ; then + xmpp_inband_enable=true + else + xmpp_inband_enable=false + fi + export xmpp_inband_enable + ;; + status) + printstatus() { + if $2 ; then + echo $1 + else + echo no$1 + fi + } + printstatus inband_enable $xmpp_inband_enable_cur + exit 0 + ;; + *) + ;; + esac +done + +if [ "$xmpp_inband_enable" != "$xmpp_inband_enable_cur" ] ; then + if $xmpp_inband_enable ; then + sed -i s/"^{access, register, \[{deny, all}\]}."/"{access, register, \[{allow, all}\]}."/ /etc/ejabberd/ejabberd.cfg + else + sed -i s/"^{access, register, \[{allow, all}\]}."/"{access, register, \[{deny, all}\]}."/ /etc/ejabberd/ejabberd.cfg + fi + ejabberdctl restart +fi diff --git a/modules/installed/services/xmpp.py b/modules/installed/services/xmpp.py index 7965153ef..6140cf1c5 100644 --- a/modules/installed/services/xmpp.py +++ b/modules/installed/services/xmpp.py @@ -16,8 +16,43 @@ class xmpp(PagePlugin): @cherrypy.expose @require() - def index(self): + def index(self, submitted=False, **kwargs): + checkedinfo = { + 'inband_enable' : False, + } + + if submitted: + 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) + privilegedaction_run("xmpp-setup", opts) + + output, error = privilegedaction_run("xmpp-setup", ['status']) + if error: + raise Exception("something is wrong: " + error) + for option in output.split(): + checkedinfo[option] = True + main = "

XMPP Server Configuration

" + form = Form(title="Configuration", + action="/services/xmpp", + name="configure_xmpp", + message='') + form.checkbox(_("Allow In-Band Registration"), name="xmpp_inband_enable", + id="xmpp_inband_enable", checked=checkedinfo['inband_enable']) + form.hidden(name="submitted", value="True") + form.html(_("

When enabled, anyone who can reach this server will be allowed to register an account through an XMPP client.

")) + form.submit(_("Update setup")) + main += form.render() + sidebar_right = """ Register XMPP Account """ From 41d57cc5fcd48c2a7a114334647f78d3a5d84954 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sat, 5 Oct 2013 18:16:55 -0400 Subject: [PATCH 5/5] Put quotes around variables in action scripts. --- actions/owncloud-setup | 6 +++--- actions/xmpp-register | 2 +- actions/xmpp-setup | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/actions/owncloud-setup b/actions/owncloud-setup index e5c8eb44f..01352a8b6 100755 --- a/actions/owncloud-setup +++ b/actions/owncloud-setup @@ -23,10 +23,10 @@ while [ "$1" ] ; do ;; status) printstatus() { - if $2 ; then - echo $1 + if "$2" ; then + echo "$1" else - echo no$1 + echo no"$1" fi } printstatus enable $owncloud_enable_cur diff --git a/actions/xmpp-register b/actions/xmpp-register index 88c7fa26f..07068b49e 100755 --- a/actions/xmpp-register +++ b/actions/xmpp-register @@ -1,2 +1,2 @@ #!/bin/sh -ejabberdctl register $1 `hostname` $2 +ejabberdctl register "$1" `hostname` "$2" diff --git a/actions/xmpp-setup b/actions/xmpp-setup index 6c5d0c4fc..9a9e910ad 100755 --- a/actions/xmpp-setup +++ b/actions/xmpp-setup @@ -22,10 +22,10 @@ while [ "$1" ] ; do ;; status) printstatus() { - if $2 ; then - echo $1 + if "$2" ; then + echo "$1" else - echo no$1 + echo no"$1" fi } printstatus inband_enable $xmpp_inband_enable_cur