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 new file mode 100755 index 000000000..07068b49e --- /dev/null +++ b/actions/xmpp-register @@ -0,0 +1,2 @@ +#!/bin/sh +ejabberdctl register "$1" `hostname` "$2" diff --git a/actions/xmpp-setup b/actions/xmpp-setup new file mode 100755 index 000000000..9a9e910ad --- /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 new file mode 100644 index 000000000..6140cf1c5 --- /dev/null +++ b/modules/installed/services/xmpp.py @@ -0,0 +1,96 @@ +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 privilegedactions import privilegedaction_run +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, 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 +""" + 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!") + + if username and password: + 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) + 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