Exemple #1
0
    def plugin_init(self):
        self._cids = {}

        self.xmpp['xep_0030'].add_feature('urn:xmpp:bob')

        register_stanza_plugin(Iq, BitsOfBinary)

        self.xmpp.register_handler(
            Callback('Bits of Binary - Iq',
                StanzaPath('iq/bob'),
                self._handle_bob_iq))

        self.xmpp.register_handler(
            Callback('Bits of Binary - Message',
                StanzaPath('message/bob'),
                self._handle_bob))

        self.xmpp.register_handler(
            Callback('Bits of Binary - Presence',
                StanzaPath('presence/bob'),
                self._handle_bob))

        self.api.register(self._get_bob, 'get_bob', default=True)
        self.api.register(self._set_bob, 'set_bob', default=True)
        self.api.register(self._del_bob, 'del_bob', default=True)
Exemple #2
0
    def plugin_init(self):
        self.gpg = GPG(gnupghome=self.gpg_home,
                       gpgbinary=self.gpg_binary,
                       use_agent=self.use_agent,
                       keyring=self.keyring)

        self.xmpp.add_filter('out', self._sign_presence)

        self._keyids = {}

        self.api.register(self._set_keyid, 'set_keyid', default=True)
        self.api.register(self._get_keyid, 'get_keyid', default=True)
        self.api.register(self._del_keyid, 'del_keyid', default=True)
        self.api.register(self._get_keyids, 'get_keyids', default=True)

        register_stanza_plugin(Presence, Signed)
        register_stanza_plugin(Message, Encrypted)

        self.xmpp.add_event_handler('unverified_signed_presence',
                self._handle_unverified_signed_presence,
                threaded=True)

        self.xmpp.register_handler(
                Callback('Signed Presence',
                    StanzaPath('presence/signed'),
                    self._handle_signed_presence))

        self.xmpp.register_handler(
                Callback('Encrypted Message',
                    StanzaPath('message/encrypted'),
                    self._handle_encrypted_message))
Exemple #3
0
    def plugin_init(self):
        """ Start the XEP-0325 plugin """

        self.xmpp.register_handler(
                Callback('Control Event:DirectSet',
                    StanzaPath('message/set'),
                    self._handle_direct_set))

        self.xmpp.register_handler(
                Callback('Control Event:SetReq',
                    StanzaPath('iq@type=set/set'),
                    self._handle_set_req))

        self.xmpp.register_handler(
                Callback('Control Event:SetResponse',
                    StanzaPath('iq@type=result/setResponse'),
                    self._handle_set_response))

        self.xmpp.register_handler(
                Callback('Control Event:SetResponseError',
                    StanzaPath('iq@type=error/setResponse'),
                    self._handle_set_response))

        # Server side dicts
        self.nodes = {}
        self.sessions = {}

        self.last_seqnr = 0
        self.seqnr_lock = Lock()

        ## For testning only
        self.test_authenticated_from = ""
Exemple #4
0
    def plugin_init(self):
        register_stanza_plugin(Iq, RPCQuery)
        register_stanza_plugin(RPCQuery, MethodCall)
        register_stanza_plugin(RPCQuery, MethodResponse)

        self.xmpp.registerHandler(
            Callback('RPC Call', MatchXPath('{%s}iq/{%s}query/{%s}methodCall' % (self.xmpp.default_ns, RPCQuery.namespace, RPCQuery.namespace)),
            self._handle_method_call)
        )
        self.xmpp.registerHandler(
            Callback('RPC Call', MatchXPath('{%s}iq/{%s}query/{%s}methodResponse' % (self.xmpp.default_ns, RPCQuery.namespace, RPCQuery.namespace)),
            self._handle_method_response)
        )
        self.xmpp.registerHandler(
            Callback('RPC Call', MatchXPath('{%s}iq/{%s}error' % (self.xmpp.default_ns, self.xmpp.default_ns)),
            self._handle_error)
        )
        self.xmpp.add_event_handler('jabber_rpc_method_call', self._on_jabber_rpc_method_call)
        self.xmpp.add_event_handler('jabber_rpc_method_response', self._on_jabber_rpc_method_response)
        self.xmpp.add_event_handler('jabber_rpc_method_fault', self._on_jabber_rpc_method_fault)
        self.xmpp.add_event_handler('jabber_rpc_error', self._on_jabber_rpc_error)
        self.xmpp.add_event_handler('error', self._handle_error)
        #self.activeCalls = []

        self.xmpp['xep_0030'].add_feature('jabber:iq:rpc')
        self.xmpp['xep_0030'].add_identity('automation','rpc')
Exemple #5
0
    def plugin_init(self):
        self.streams = {}
        self.pending_streams = {3: 5}
        self.pending_close_streams = {}
        self._stream_lock = threading.Lock()

        self.max_block_size = self.config.get('max_block_size', 8192)
        self.window_size = self.config.get('window_size', 1)
        self.auto_accept = self.config.get('auto_accept', True)
        self.accept_stream = self.config.get('accept_stream', None)

        register_stanza_plugin(Iq, Open)
        register_stanza_plugin(Iq, Close)
        register_stanza_plugin(Iq, Data)

        self.xmpp.register_handler(
            Callback('IBB Open', StanzaPath('iq@type=set/ibb_open'),
                     self._handle_open_request))

        self.xmpp.register_handler(
            Callback('IBB Close', StanzaPath('iq@type=set/ibb_close'),
                     self._handle_close))

        self.xmpp.register_handler(
            Callback('IBB Data', StanzaPath('iq@type=set/ibb_data'),
                     self._handle_data))

        self.xmpp['xep_0030'].add_feature('http://jabber.org/protocol/ibb')
Exemple #6
0
    def __init__(self, hostname, jid, password, room, nick, roompass, loop,
                 jibri_start_callback, jibri_stop_callback,
                 jibri_health_callback, recording_lock, signal_queue):
        sleekxmpp.ClientXMPP.__init__(self, jid, password)

        self.hostname = hostname
        self.room = room
        self.nick = nick
        self.roompass = roompass
        self.jid = jid
        self.jibri_start_callback = jibri_start_callback
        self.jibri_stop_callback = jibri_stop_callback
        self.jibri_health_callback = jibri_health_callback
        self.iq_callback = self.on_jibri_iq
        self.recording_lock = recording_lock
        self.queue = signal_queue
        self.loop = loop
        self.controllerJid = ''

        self.add_event_handler("session_start", self.start)
        self.add_event_handler("muc::%s::got_online" % self.room,
                               self.muc_online)

        self.register_handler(
            Callback('Jibri IQ callback', StanzaPath('iq@type=set/jibri'),
                     self.on_jibri_iq))
        self.xmpp.register_handler(
            Callback('Disco Info', StanzaPath('iq/disco_info'),
                     self.handle_disco_info))

        register_stanza_plugin(Iq, JibriElement)
        register_stanza_plugin(Iq, JibriStatusElement)
Exemple #7
0
    def plugin_init(self):
        self.node_event_map = {}

        self.xmpp.register_handler(
                Callback('Pubsub Event: Items',
                    StanzaPath('message/pubsub_event/items'),
                    self._handle_event_items))
        self.xmpp.register_handler(
                Callback('Pubsub Event: Purge',
                    StanzaPath('message/pubsub_event/purge'),
                    self._handle_event_purge))
        self.xmpp.register_handler(
                Callback('Pubsub Event: Delete',
                    StanzaPath('message/pubsub_event/delete'),
                    self._handle_event_delete))
        self.xmpp.register_handler(
                Callback('Pubsub Event: Configuration',
                    StanzaPath('message/pubsub_event/configuration'),
                    self._handle_event_configuration))
        self.xmpp.register_handler(
                Callback('Pubsub Event: Subscription',
                    StanzaPath('message/pubsub_event/subscription'),
                    self._handle_event_subscription))

        self.xmpp['xep_0131'].supported_headers.add('SubID')
Exemple #8
0
    def plugin_init(self):
        self.streams = {}
        self.pending_streams = {}
        self.pending_close_streams = {}
        self._stream_lock = threading.Lock()

        register_stanza_plugin(Iq, Open)
        register_stanza_plugin(Iq, Close)
        register_stanza_plugin(Iq, Data)
        register_stanza_plugin(Message, Data)

        self.xmpp.register_handler(
            Callback('IBB Open', StanzaPath('iq@type=set/ibb_open'),
                     self._handle_open_request))

        self.xmpp.register_handler(
            Callback('IBB Close', StanzaPath('iq@type=set/ibb_close'),
                     self._handle_close))

        self.xmpp.register_handler(
            Callback('IBB Data', StanzaPath('iq@type=set/ibb_data'),
                     self._handle_data))

        self.xmpp.register_handler(
            Callback('IBB Message Data', StanzaPath('message/ibb_data'),
                     self._handle_data))
Exemple #9
0
    def plugin_init(self):
        """
        Start the XEP-0030 plugin.
        """
        self.xmpp.register_handler(
                Callback('Disco Info',
                         StanzaPath('iq/disco_info'),
                         self._handle_disco_info))

        self.xmpp.register_handler(
                Callback('Disco Items',
                         StanzaPath('iq/disco_items'),
                         self._handle_disco_items))

        register_stanza_plugin(Iq, DiscoInfo)
        register_stanza_plugin(Iq, DiscoItems)

        self.static = StaticDisco(self.xmpp, self)

        self.use_cache = self.config.get('use_cache', True)
        self.wrap_results = self.config.get('wrap_results', False)

        self._disco_ops = [
                'get_info', 'set_info', 'set_identities', 'set_features',
                'get_items', 'set_items', 'del_items', 'add_identity',
                'del_identity', 'add_feature', 'del_feature', 'add_item',
                'del_item', 'del_identities', 'del_features', 'cache_info',
                'get_cached_info', 'supports', 'has_identity']

        for op in self._disco_ops:
            self.api.register(getattr(self.static, op), op, default=True)
Exemple #10
0
    def __init__(self, sjid, password, room, nick, leaderboard):
        """Initialize EcheLOn."""
        sleekxmpp.ClientXMPP.__init__(self, sjid, password)
        self.whitespace_keepalive = False

        self.sjid = sleekxmpp.jid.JID(sjid)
        self.room = room
        self.nick = nick

        self.leaderboard = leaderboard
        self.report_manager = ReportManager(self.leaderboard)

        register_stanza_plugin(Iq, BoardListXmppPlugin)
        register_stanza_plugin(Iq, GameReportXmppPlugin)
        register_stanza_plugin(Iq, ProfileXmppPlugin)

        self.register_handler(
            Callback('Iq Boardlist', StanzaPath('iq@type=get/boardlist'),
                     self._iq_board_list_handler))
        self.register_handler(
            Callback('Iq GameReport', StanzaPath('iq@type=set/gamereport'),
                     self._iq_game_report_handler))
        self.register_handler(
            Callback('Iq Profile', StanzaPath('iq@type=get/profile'),
                     self._iq_profile_handler))

        self.add_event_handler('session_start', self._session_start)
        self.add_event_handler('muc::%s::got_online' % self.room,
                               self._muc_online)
        self.add_event_handler('muc::%s::got_offline' % self.room,
                               self._muc_offline)
        self.add_event_handler('groupchat_message', self._muc_message)
    def plugin_init(self):
        """
        Start the XEP-0030 plugin.
        """
        self.xep = '0030'
        self.description = 'Service Discovery'
        self.stanza = sleekxmpp.plugins.xep_0030.stanza

        self.xmpp.register_handler(
            Callback('Disco Info', StanzaPath('iq/disco_info'),
                     self._handle_disco_info))

        self.xmpp.register_handler(
            Callback('Disco Items', StanzaPath('iq/disco_items'),
                     self._handle_disco_items))

        register_stanza_plugin(Iq, DiscoInfo)
        register_stanza_plugin(Iq, DiscoItems)

        self.static = StaticDisco(self.xmpp)

        self._disco_ops = [
            'get_info', 'set_identities', 'set_features', 'get_items',
            'set_items', 'del_items', 'add_identity', 'del_identity',
            'add_feature', 'del_feature', 'add_item', 'del_item',
            'del_identities', 'del_features'
        ]
        self.default_handlers = {}
        self._handlers = {}
        for op in self._disco_ops:
            self._add_disco_op(op, getattr(self.static, op))
Exemple #12
0
    def __init__(self, jid, password, plugin_config={}, plugin_whitelist=[],
                 escape_quotes=True, sasl_mech=None, lang='en'):
        BaseXMPP.__init__(self, jid, 'jabber:client')

        self.escape_quotes = escape_quotes
        self.plugin_config = plugin_config
        self.plugin_whitelist = plugin_whitelist
        self.default_port = 5222
        self.default_lang = lang

        self.credentials = {}

        self.password = password

        self.stream_header = "<stream:stream to='%s' %s %s %s %s>" % (
                self.boundjid.host,
                "xmlns:stream='%s'" % self.stream_ns,
                "xmlns='%s'" % self.default_ns,
                "xml:lang='%s'" % self.default_lang,
                "version='1.0'")
        self.stream_footer = "</stream:stream>"

        self.features = set()
        self._stream_feature_handlers = {}
        self._stream_feature_order = []

        self.dns_service = 'xmpp-client'

        #TODO: Use stream state here
        self.authenticated = False
        self.sessionstarted = False
        self.bound = False
        self.bindfail = False

        self.add_event_handler('connected', self._reset_connection_state)
        self.add_event_handler('session_bind', self._handle_session_bind)
        self.add_event_handler('roster_update', self._handle_roster)

        self.register_stanza(StreamFeatures)

        self.register_handler(
                Callback('Stream Features',
                         MatchXPath('{%s}features' % self.stream_ns),
                         self._handle_stream_features))
        self.register_handler(
                Callback('Roster Update',
                         StanzaPath('iq@type=set/roster'),
                         lambda iq: self.event('roster_update', iq)))

        # Setup default stream features
        self.register_plugin('feature_starttls')
        self.register_plugin('feature_bind')
        self.register_plugin('feature_session')
        self.register_plugin('feature_rosterver')
        self.register_plugin('feature_preapproval')
        self.register_plugin('feature_mechanisms')

        if sasl_mech:
            self['feature_mechanisms'].use_mech = sasl_mech
Exemple #13
0
    def __init__(self, sjid, password, room, nick, ratingsbot):
        sleekxmpp.ClientXMPP.__init__(self, sjid, password)
        self.sjid = sjid
        self.room = room
        self.nick = nick
        self.ratingsBotWarned = False

        self.ratingsBot = ratingsbot
        # Game collection
        self.gameList = GameList()

        # Store mapping of nicks and XmppIDs, attached via presence stanza
        self.nicks = {}
        self.presences = {}  # Obselete when XEP-0060 is implemented.

        self.lastLeft = ""

        register_stanza_plugin(Iq, PlayerXmppPlugin)
        register_stanza_plugin(Iq, GameListXmppPlugin)
        register_stanza_plugin(Iq, BoardListXmppPlugin)
        register_stanza_plugin(Iq, GameReportXmppPlugin)
        register_stanza_plugin(Iq, ProfileXmppPlugin)

        self.register_handler(
            Callback('Iq Player',
                     StanzaPath('iq/player'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq Gamelist',
                     StanzaPath('iq/gamelist'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq Boardlist',
                     StanzaPath('iq/boardlist'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq GameReport',
                     StanzaPath('iq/gamereport'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq Profile',
                     StanzaPath('iq/profile'),
                     self.iqhandler,
                     instream=True))

        self.add_event_handler("session_start", self.start)
        self.add_event_handler("muc::%s::got_online" % self.room,
                               self.muc_online)
        self.add_event_handler("muc::%s::got_offline" % self.room,
                               self.muc_offline)
        self.add_event_handler("groupchat_message", self.muc_message)
        self.add_event_handler("changed_status", self.presence_change)
Exemple #14
0
    def plugin_init(self):
        register_stanza_plugin(Iq, BlockList)
        register_stanza_plugin(Iq, Block)
        register_stanza_plugin(Iq, Unblock)

        self.xmpp.register_handler(
            Callback('Blocked Contact', StanzaPath('iq@type=set/block'),
                     self._handle_blocked))

        self.xmpp.register_handler(
            Callback('Unblocked Contact', StanzaPath('iq@type=set/unblock'),
                     self._handle_unblocked))
Exemple #15
0
    def __init__(self, jid, password, ssl=False, plugin_config={},
                 plugin_whitelist=[], escape_quotes=True, sasl_mech=None):
        BaseXMPP.__init__(self, jid, 'jabber:client')

        self.set_jid(jid)
        self.escape_quotes = escape_quotes
        self.plugin_config = plugin_config
        self.plugin_whitelist = plugin_whitelist
        self.default_port = 5222

        self.credentials = {}

        self.password = password

        self.stream_header = "<stream:stream to='%s' %s %s version='1.0'>" % (
                self.boundjid.host,
                "xmlns:stream='%s'" % self.stream_ns,
                "xmlns='%s'" % self.default_ns)
        self.stream_footer = "</stream:stream>"

        self.features = set()
        self._stream_feature_handlers = {}
        self._stream_feature_order = []

        #TODO: Use stream state here
        self.authenticated = False
        self.sessionstarted = False
        self.bound = False
        self.bindfail = False

        self.add_event_handler('connected', self._handle_connected)
        self.add_event_handler('session_bind', self._handle_session_bind)

        self.register_stanza(StreamFeatures)

        self.register_handler(
                Callback('Stream Features',
                         MatchXPath('{%s}features' % self.stream_ns),
                         self._handle_stream_features))
        self.register_handler(
                Callback('Roster Update',
                         MatchXPath('{%s}iq/{%s}query' % (
                             self.default_ns,
                             'jabber:iq:roster')),
                         self._handle_roster))

        # Setup default stream features
        self.register_plugin('feature_starttls')
        self.register_plugin('feature_bind')
        self.register_plugin('feature_session')
        self.register_plugin('feature_mechanisms',
                pconfig={'use_mech': sasl_mech} if sasl_mech else None)
        self.register_plugin('feature_rosterver')
Exemple #16
0
    def __init__(self, sjid, password, room, nick):
        sleekxmpp.ClientXMPP.__init__(self, sjid, password)
        self.sjid = sjid
        self.room = room
        self.nick = nick
        self.ratingListCache = {}
        self.ratingCacheReload = True
        self.boardListCache = {}
        self.boardCacheReload = True

        # Init leaderboard object
        self.leaderboard = LeaderboardList(room)

        # gameReport to leaderboard abstraction
        self.reportManager = ReportManager(self.leaderboard)

        # Store mapping of nicks and XmppIDs, attached via presence stanza
        self.nicks = {}

        self.lastLeft = ""

        register_stanza_plugin(Iq, PlayerXmppPlugin)
        register_stanza_plugin(Iq, BoardListXmppPlugin)
        register_stanza_plugin(Iq, GameReportXmppPlugin)
        register_stanza_plugin(Iq, ProfileXmppPlugin)

        self.register_handler(
            Callback('Iq Player',
                     StanzaPath('iq/player'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq Boardlist',
                     StanzaPath('iq/boardlist'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq GameReport',
                     StanzaPath('iq/gamereport'),
                     self.iqhandler,
                     instream=True))
        self.register_handler(
            Callback('Iq Profile',
                     StanzaPath('iq/profile'),
                     self.iqhandler,
                     instream=True))

        self.add_event_handler("session_start", self.start)
        self.add_event_handler("muc::%s::got_online" % self.room,
                               self.muc_online)
        self.add_event_handler("muc::%s::got_offline" % self.room,
                               self.muc_offline)
Exemple #17
0
    def plugin_init(self):
        self.xmpp.register_handler(
            Callback('Carbon Received', StanzaPath('message/carbon_received'),
                     self._handle_carbon_received))
        self.xmpp.register_handler(
            Callback('Carbon Sent', StanzaPath('message/carbon_sent'),
                     self._handle_carbon_sent))

        register_stanza_plugin(Message, stanza.ReceivedCarbon)
        register_stanza_plugin(Message, stanza.SentCarbon)
        register_stanza_plugin(Message, stanza.PrivateCarbon)
        register_stanza_plugin(Iq, stanza.CarbonEnable)
        register_stanza_plugin(Iq, stanza.CarbonDisable)
Exemple #18
0
 def plugin_init(self):
     self.xmpp.register_handler(
         Callback('HTTP Request', StanzaPath('iq/http-req'),
                  self._handle_request))
     self.xmpp.register_handler(
         Callback('HTTP Response', StanzaPath('iq/http-resp'),
                  self._handle_response))
     register_stanza_plugin(Iq, HTTPRequest, iterable=True)
     register_stanza_plugin(Iq, HTTPResponse, iterable=True)
     register_stanza_plugin(HTTPRequest, Headers, iterable=True)
     register_stanza_plugin(HTTPRequest, HTTPData, iterable=True)
     register_stanza_plugin(HTTPResponse, Headers, iterable=True)
     register_stanza_plugin(HTTPResponse, HTTPData, iterable=True)
Exemple #19
0
    def plugin_init(self):
        register_stanza_plugin(Message, Request)
        register_stanza_plugin(Message, Received)

        self.xmpp.add_filter('out', self._filter_add_receipt_request)

        self.xmpp.register_handler(
            Callback('Message Receipt', StanzaPath('message/receipt'),
                     self._handle_receipt_received))

        self.xmpp.register_handler(
            Callback('Message Receipt Request',
                     StanzaPath('message/request_receipt'),
                     self._handle_receipt_request))
Exemple #20
0
    def run(self, payload, instream=False):
        """
        Execute the callback function with the matched stanza's
        XML contents, instead of the stanza itself.

        Overrides BaseHandler.run

        Arguments:
            payload  -- The matched stanza object.
            instream -- Force the handler to execute during
                        stream processing. Used only by prerun.
                        Defaults to False.
        """
        Callback.run(self, payload.xml, instream)
Exemple #21
0
    def run(self, payload, instream=False):
        """
        Execute the callback function with the matched stanza's
        XML contents, instead of the stanza itself.

        Overrides BaseHandler.run

        Arguments:
            payload  -- The matched stanza object.
            instream -- Force the handler to execute during
                        stream processing. Used only by prerun.
                        Defaults to False.
        """
        Callback.run(self, payload.xml, instream)
Exemple #22
0
    def plugin_init(self):
        register_stanza_plugin(Message, stanza.NoSave)
        register_stanza_plugin(Iq, stanza.NoSaveQuery)

        self.xmpp.register_handler(
            Callback('Google Nosave', StanzaPath('iq@type=set/google_nosave'),
                     self._handle_nosave_change))
Exemple #23
0
    def plugin_init(self):
        """Start the XEP-0050 plugin."""
        self.xep = '0050'
        self.description = 'Ad-Hoc Commands'
        self.stanza = stanza

        self.threaded = self.config.get('threaded', True)
        self.commands = {}
        self.sessions = self.config.get('session_db', {})

        self.xmpp.register_handler(
            Callback("Ad-Hoc Execute", StanzaPath('iq@type=set/command'),
                     self._handle_command))

        register_stanza_plugin(Iq, stanza.Command)

        self.xmpp.add_event_handler('command_execute',
                                    self._handle_command_start,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_next',
                                    self._handle_command_next,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_cancel',
                                    self._handle_command_cancel,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_complete',
                                    self._handle_command_complete,
                                    threaded=self.threaded)
Exemple #24
0
    def plugin_init(self):
        """Start the XEP-0050 plugin."""
        self.threaded = self.config.get('threaded', True)
        self.commands = {}
        self.sessions = self.config.get('session_db', {})

        self.xmpp.register_handler(
            Callback("Ad-Hoc Execute", StanzaPath('iq@type=set/command'),
                     self._handle_command))

        register_stanza_plugin(Iq, Command)
        register_stanza_plugin(Command, Form)

        self.xmpp.add_event_handler('command_execute',
                                    self._handle_command_start,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_next',
                                    self._handle_command_next,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_cancel',
                                    self._handle_command_cancel,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_complete',
                                    self._handle_command_complete,
                                    threaded=self.threaded)

        self.xmpp['xep_0030'].add_feature(Command.namespace)
        self.xmpp['xep_0030'].set_items(node=Command.namespace, items=tuple())
Exemple #25
0
    def plugin_init(self):
        register_stanza_plugin(Iq, stanza.UserSettings)

        self.xmpp.register_handler(
            Callback('Google Settings',
                     StanzaPath('iq@type=set/google_settings'),
                     self._handle_settings_change))
Exemple #26
0
    def __init__(self,
                 jid,
                 secret,
                 host=None,
                 port=None,
                 plugin_config={},
                 plugin_whitelist=[],
                 use_jc_ns=False):
        if use_jc_ns:
            default_ns = 'jabber:client'
        else:
            default_ns = 'jabber:component:accept'
        BaseXMPP.__init__(self, jid, default_ns)

        self.auto_authorize = None
        self.stream_header = "<stream:stream %s %s to='%s'>" % (
            'xmlns="jabber:component:accept"',
            'xmlns:stream="%s"' % self.stream_ns, jid)
        self.stream_footer = "</stream:stream>"
        self.server_host = host
        self.server_port = port
        self.secret = secret

        self.plugin_config = plugin_config
        self.plugin_whitelist = plugin_whitelist
        self.is_component = True

        self.register_handler(
            Callback('Handshake',
                     MatchXPath('{jabber:component:accept}handshake'),
                     self._handle_handshake))
        self.add_event_handler('presence_probe', self._handle_probe)
Exemple #27
0
    def plugin_init(self):
        self.xmpp.register_handler(
                Callback('Direct MUC Invitations',
                         StanzaPath('message/groupchat_invite'),
                         self._handle_invite))

        register_stanza_plugin(Message, Invite)
Exemple #28
0
    def plugin_init(self):
        """Start the XEP-0050 plugin."""
        self.sessions = self.session_db
        if self.sessions is None:
            self.sessions = {}

        self.commands = {}

        self.xmpp.register_handler(
            Callback("Ad-Hoc Execute", StanzaPath('iq@type=set/command'),
                     self._handle_command))

        register_stanza_plugin(Iq, Command)
        register_stanza_plugin(Command, Form, iterable=True)

        self.xmpp.add_event_handler('command_execute',
                                    self._handle_command_start,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_next',
                                    self._handle_command_next,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_cancel',
                                    self._handle_command_cancel,
                                    threaded=self.threaded)
        self.xmpp.add_event_handler('command_complete',
                                    self._handle_command_complete,
                                    threaded=self.threaded)
Exemple #29
0
    def testIqErrorException(self):
        """Test using error exceptions with Iq stanzas."""
        def handle_iq(iq):
            raise XMPPError(condition='feature-not-implemented',
                            text="We don't do things that way here.",
                            etype='cancel',
                            clear=False)

        self.stream_start()
        self.xmpp.register_handler(
            Callback('Test Iq',
                     MatchXPath('{%s}iq/{test}query' % self.xmpp.default_ns),
                     handle_iq))

        self.recv("""
          <iq type="get" id="0">
            <query xmlns="test" />
          </iq>
        """)

        self.send("""
          <iq type="error" id="0">
            <query xmlns="test" />
            <error type="cancel" code="501">
              <feature-not-implemented
                  xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
              <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
                We don&apos;t do things that way here.
              </text>
            </error>
          </iq>
        """,
                  use_values=False)
Exemple #30
0
    def start(self):
        """
        Démarre le service
        """
        xmppDomain = self.configService.value("XMPP_DOMAIN_NAME")
        xmppUser = self.configService.value("XMPP_USERNAME")
        self.xmpp = ClientXMPP(xmppUser,
                               self.configService.value("XMPP_PASSWORD"))

        # ajout des listeners et plugins
        self.xmpp.add_event_handler("session_start", self.session_start)
        self.xmpp.register_plugin('XmppMessagePlugin', module=xmpp)
        self.xmpp.register_handler(
            Callback(
                'SEN1 Message',
                MatchXPath('{%s}message/{http://xmpp.rocks}Sen1Message' %
                           self.xmpp.default_ns), self.receiveMessage))
        register_stanza_plugin(Message, XmppMessageStanza)

        if (not self.xmpp.connect(address=(xmppDomain, 5222))):
            raise Exception("Cannot bind XMPP session to {}".format(xmppUser))

        self.logger.info(
            "Start XMPP protocol : bind session {}...".format(xmppUser))

        self.xmpp.process()
Exemple #31
0
    def __init__(self):
        """ Initializes the CommonTranport with the XEP-0060 support.
        """

        ClientXMPP.__init__(self, config['user']['jid'],
                            config['user']['passwd'])

        self.connected = Event()
        self.disconnected = Event()
        self.rsync_running = Event()
        self.rsync_finished = Event()
        self.wait_close = False
        self.failed_auth = False

        # Register and configure pubsub plugin.
        self.register_plugin('xep_0060')
        self.register_handler(
            Callback('Pubsub event', StanzaPath('message/pubsub_event'),
                     self._pubsub_event))

        # Shortcut to access to the xep_0060 plugin.
        self.pubsub = self.plugin["xep_0060"]

        # Register and configure data form plugin.
        self.register_plugin('xep_0004')

        # Shortcuts to access to the xep_0004 plugin.
        self.form = self.plugin['xep_0004']

        # Shortcuts to access to the config server information
        self.pubsub_addr = config['server']['pubsub']
        self.server_addr = config['server']['master']

        # Register events
        self.add_event_handler('session_start', self.start)
        self.add_event_handler('failed_auth', self._on_failed_auth)
        self.add_event_handler('stream_error', self.stream_err)
        self.add_event_handler('message', self.message)
        self.add_event_handler('message_form', self.message_form)
        self.add_event_handler('message_xform', self.message_form)
        self.register_handler(
            Callback('RsyncFinished Handler',
                     StanzaPath('iq@type=set/rsyncfinished'),
                     self._handle_rsync_finished))

        eventbus.register('new-rsync', self._on_new_rsync)