summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks/XMPPInterface.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hooks/XMPPInterface.py')
-rw-r--r--module/plugins/hooks/XMPPInterface.py126
1 files changed, 73 insertions, 53 deletions
diff --git a/module/plugins/hooks/XMPPInterface.py b/module/plugins/hooks/XMPPInterface.py
index b61428392..50dd40774 100644
--- a/module/plugins/hooks/XMPPInterface.py
+++ b/module/plugins/hooks/XMPPInterface.py
@@ -12,15 +12,16 @@ from module.plugins.hooks.IRCInterface import IRCInterface
class XMPPInterface(IRCInterface, JabberClient):
__name__ = "XMPPInterface"
__type__ = "hook"
- __version__ = "0.11"
+ __version__ = "0.12"
+ __status__ = "testing"
- __config__ = [("jid", "str", "Jabber ID", "user@exmaple-jabber-server.org"),
- ("pw", "str", "Password", ""),
- ("tls", "bool", "Use TLS", False),
- ("owners", "str", "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"),
- ("info_file", "bool", "Inform about every file finished", False),
- ("info_pack", "bool", "Inform about every package finished", True),
- ("captcha", "bool", "Send captcha requests", True)]
+ __config__ = [("jid" , "str" , "Jabber ID" , "user@exmaple-jabber-server.org" ),
+ ("pw" , "str" , "Password" , "" ),
+ ("tls" , "bool", "Use TLS" , False ),
+ ("owners" , "str" , "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"),
+ ("info_file", "bool", "Inform about every file finished" , False ),
+ ("info_pack", "bool", "Inform about every package finished" , True ),
+ ("captcha" , "bool", "Send captcha requests" , True )]
__description__ = """Connect to jabber and let owner perform different tasks"""
__license__ = "GPLv3"
@@ -33,22 +34,22 @@ class XMPPInterface(IRCInterface, JabberClient):
def __init__(self, core, manager):
IRCInterface.__init__(self, core, manager)
- self.jid = JID(self.getConfig('jid'))
- password = self.getConfig('pw')
+ self.jid = JID(self.get_config('jid'))
+ password = self.get_config('pw')
- # if bare JID is provided add a resource -- it is required
+ #: If bare JID is provided add a resource -- it is required
if not self.jid.resource:
self.jid = JID(self.jid.node, self.jid.domain, "pyLoad")
- if self.getConfig('tls'):
+ if self.get_config('tls'):
tls_settings = streamtls.TLSSettings(require=True, verify_peer=False)
auth = ("sasl:PLAIN", "sasl:DIGEST-MD5")
else:
tls_settings = None
auth = ("sasl:DIGEST-MD5", "digest")
- # setup client with provided connection information
- # and identity data
+ #: Setup client with provided connection information
+ #: And identity data
JabberClient.__init__(self, self.jid, password,
disco_name="pyLoad XMPP Client", disco_type="bot",
tls_settings=tls_settings, auth_methods=auth)
@@ -59,75 +60,81 @@ class XMPPInterface(IRCInterface, JabberClient):
]
- def coreReady(self):
+ def activate(self):
self.new_package = {}
self.start()
- def packageFinished(self, pypack):
+ def package_finished(self, pypack):
try:
- if self.getConfig('info_pack'):
+ if self.get_config('info_pack'):
self.announce(_("Package finished: %s") % pypack.name)
except Exception:
pass
- def downloadFinished(self, pyfile):
+ def download_finished(self, pyfile):
try:
- if self.getConfig('info_file'):
+ if self.get_config('info_file'):
self.announce(
- _("Download finished: %(name)s @ %(plugin)s") % {"name": pyfile.name, "plugin": pyfile.pluginname})
+ _("Download finished: %(name)s @ %(plugin)s") % {'name': pyfile.name, 'plugin': pyfile.pluginname})
except Exception:
pass
def run(self):
- # connect to IRC etc.
+ #: Connect to IRC etc.
self.connect()
try:
self.loop()
except Exception, ex:
- self.logError(ex)
+ self.log_error(ex)
def stream_state_changed(self, state, arg):
- """This one is called when the state of stream connecting the component
+ """
+ This one is called when the state of stream connecting the component
to a server changes. This will usually be used to let the user
- know what is going on."""
- self.logDebug("*** State changed: %s %r ***" % (state, arg))
+ know what is going on.
+ """
+ self.log_debug("*** State changed: %s %r ***" % (state, arg))
def disconnected(self):
- self.logDebug("Client was disconnected")
+ self.log_debug("Client was disconnected")
def stream_closed(self, stream):
- self.logDebug("Stream was closed", stream)
+ self.log_debug("Stream was closed", stream)
def stream_error(self, err):
- self.logDebug("Stream Error", err)
+ self.log_debug("Stream Error", err)
def get_message_handlers(self):
- """Return list of (message_type, message_handler) tuples.
+ """
+ Return list of (message_type, message_handler) tuples.
The handlers returned will be called when matching message is received
- in a client session."""
+ in a client session.
+ """
return [("normal", self.message)]
def message(self, stanza):
- """Message handler for the component."""
+ """
+ Message handler for the component.
+ """
subject = stanza.get_subject()
body = stanza.get_body()
t = stanza.get_type()
- self.logDebug("Message from %s received." % unicode(stanza.get_from()))
- self.logDebug("Body: %s Subject: %s Type: %s" % (body, subject, t))
+ self.log_debug("Message from %s received." % stanza.get_from())
+ self.log_debug("Body: %s Subject: %s Type: %s" % (body, subject, t))
if t == "headline":
- # 'headline' messages should never be replied to
+ #: 'headline' messages should never be replied to
return True
if subject:
subject = u"Re: " + subject
@@ -135,11 +142,11 @@ class XMPPInterface(IRCInterface, JabberClient):
to_jid = stanza.get_from()
from_jid = stanza.get_to()
- #j = JID()
+ # j = JID()
to_name = to_jid.as_utf8()
from_name = from_jid.as_utf8()
- names = self.getConfig('owners').split(";")
+ names = self.get_config('owners').split(";")
if to_name in names or to_jid.node + "@" + to_jid.domain in names:
messages = []
@@ -168,7 +175,7 @@ class XMPPInterface(IRCInterface, JabberClient):
messages.append(m)
except Exception, e:
- self.logError(e)
+ self.log_error(e)
return messages
@@ -181,9 +188,11 @@ class XMPPInterface(IRCInterface, JabberClient):
def announce(self, message):
- """ send message to all owners"""
- for user in self.getConfig('owners').split(";"):
- self.logDebug("Send message to", user)
+ """
+ Send message to all owners
+ """
+ for user in self.get_config('owners').split(";"):
+ self.log_debug("Send message to", user)
to_jid = JID(user)
@@ -200,51 +209,62 @@ class XMPPInterface(IRCInterface, JabberClient):
stream.send(m)
- def beforeReconnecting(self, ip):
+ def before_reconnect(self, ip):
self.disconnect()
- def afterReconnecting(self, ip):
+ def after_reconnect(self, ip):
self.connect()
class VersionHandler(object):
- """Provides handler for a version query.
+ """
+ Provides handler for a version query.
This class will answer version query and announce 'jabber:iq:version' namespace
- in the client's disco#info results."""
-
+ in the client's disco#info results.
+ """
implements(IIqHandlersProvider, IFeaturesProvider)
def __init__(self, client):
- """Just remember who created this."""
+ """
+ Just remember who created this.
+ """
self.client = client
def get_features(self):
- """Return namespace which should the client include in its reply to a
- disco#info query."""
+ """
+ Return namespace which should the client include in its reply to a
+ disco#info query.
+ """
return ["jabber:iq:version"]
def get_iq_get_handlers(self):
- """Return list of tuples (element_name, namespace, handler) describing
- handlers of <iq type='get'/> stanzas"""
+ """
+ Return list of tuples (element_name, namespace, handler) describing
+ handlers of <iq type='get'/> stanzas
+ """
return [("query", "jabber:iq:version", self.get_version)]
def get_iq_set_handlers(self):
- """Return empty list, as this class provides no <iq type='set'/> stanza handler."""
+ """
+ Return empty list, as this class provides no <iq type='set'/> stanza handler.
+ """
return []
def get_version(self, iq):
- """Handler for jabber:iq:version queries.
+ """
+ Handler for jabber:iq:version queries.
jabber:iq:version queries are not supported directly by PyXMPP, so the
XML node is accessed directly through the libxml2 API. This should be
- used very carefully!"""
+ used very carefully!
+ """
iq = iq.make_result_response()
q = iq.new_query("jabber:iq:version")
q.newTextChild(q.ns(), "name", "Echo component")