Exemplo n.º 1
0
    def _handle_event(self, conn, event):
        if 'internal' in event and event['internal']:
            return

        conf = conn.manager.config
        if event['type'] == "command":
            commands = glob("%s/commands/%s" %
                    (conf.get('root'), event['command']))
        else:
            commands = glob("%s/hooks/%s/*" %
                (conf.get('root'), event['type']))

        if not commands:
            return

        vars = os.environ.copy()
        for key, val in conf.items():
            vars["HB_%s" % key.upper()] = str(val)

        if conn.network.id:
            vars['HB_NETWORK'] = conn.network.id

        vars['HB_NICK'] = conn.nickname
        vars['HB_XML'] = ElementTree.tostring(conn.manager.config)
        text = ""
        for key, val in event.iteritems():
            if key == 'text':
                text = val
            else:
                vars['HBEV_%s' % key.upper()] = str(val)

        if 'PERL5LIB' in vars:
            vars['PERL5LIB'] = "%s:%s" % (conf.get('perl'), vars['PERL5LIB'])
        else:
            vars['PERL5LIB'] = conf.get('perl')

        if 'PYTHONPATH' in vars:
            vars['PYTHONPATH'] = ("%s:%s" %
                    (conf.get('python'), vars['PYTHONPATH']))
        else:
            vars['PYTHONPATH'] = conf.get('python')

        deferreds = []
        for cmd in commands:
            if os.access(cmd, os.X_OK):
                log.debug("Running %s" % cmd)
                deferred = defer.Deferred()
                deferreds.append(deferred)
                proto = HBProcessProtocol(conn, event, deferred)
                reactor.spawnProcess(proto, cmd, [cmd], vars)

        if len(deferreds) == 1:
            return deferreds[0]
        elif len(deferreds) > 1:
            return defer.DeferredList(deferreds, consumeErrors=True)
Exemplo n.º 2
0
    def _handle_event(self, conn, event):
        if 'internal' in event and event['internal']:
            return

        conf = conn.manager.config
        if event['type'] == "command":
            commands = glob("%s/commands/%s" %
                            (conf.get('root'), event['command']))
        else:
            commands = glob("%s/hooks/%s/*" %
                            (conf.get('root'), event['type']))

        if not commands:
            return

        vars = os.environ.copy()
        for key, val in conf.items():
            vars["HB_%s" % key.upper()] = str(val)

        if conn.network.id:
            vars['HB_NETWORK'] = conn.network.id

        vars['HB_NICK'] = conn.nickname
        vars['HB_XML'] = ElementTree.tostring(conn.manager.config)
        text = ""
        for key, val in event.iteritems():
            if key == 'text':
                text = val
            else:
                vars['HBEV_%s' % key.upper()] = str(val)

        if 'PERL5LIB' in vars:
            vars['PERL5LIB'] = "%s:%s" % (conf.get('perl'), vars['PERL5LIB'])
        else:
            vars['PERL5LIB'] = conf.get('perl')

        if 'PYTHONPATH' in vars:
            vars['PYTHONPATH'] = ("%s:%s" %
                                  (conf.get('python'), vars['PYTHONPATH']))
        else:
            vars['PYTHONPATH'] = conf.get('python')

        deferreds = []
        for cmd in commands:
            if os.access(cmd, os.X_OK):
                log.debug("Running %s" % cmd)
                deferred = defer.Deferred()
                deferreds.append(deferred)
                proto = HBProcessProtocol(conn, event, deferred)
                reactor.spawnProcess(proto, cmd, [cmd], vars)

        if len(deferreds) == 1:
            return deferreds[0]
        elif len(deferreds) > 1:
            return defer.DeferredList(deferreds, consumeErrors=True)
Exemplo n.º 3
0
    def signedOn(self):
        log.info("Signed On!")
        self.factory.clientConnected(self)

        for automsg in self.factory.config.findall('automsg'):
            to = automsg.get('to', None)
            msg = automsg.get('msg', None)

            if to and msg:
                self.msg(to, msg)
            else:
                log.error("Invalid automsg: %s" % ElementTree.tostring(automsg))

        for autojoin in self.factory.config.findall('autojoin'):
            chan = autojoin.get('chan', None)
            password = autojoin.get('password', None)

            if chan:
                self.join(chan, password)
            else:
                log.error("Invalid autojoin: %s" % ElementTree.tostring(autojoin))
Exemplo n.º 4
0
    def signedOn(self):
        log.info("Signed On!")
        self.factory.clientConnected(self)

        for automsg in self.factory.config.findall('automsg'):
            to = automsg.get('to', None)
            msg = automsg.get('msg', None)

            if to and msg:
                self.msg(to, msg)
            else:
                log.error("Invalid automsg: %s" %
                          ElementTree.tostring(automsg))

        for autojoin in self.factory.config.findall('autojoin'):
            chan = autojoin.get('chan', None)
            password = autojoin.get('password', None)

            if chan:
                self.join(chan, password)
            else:
                log.error("Invalid autojoin: %s" %
                          ElementTree.tostring(autojoin))
Exemplo n.º 5
0
    def check(self, event):
        """Check if a command can be run by a user.
        
        Returns a tuple: (True/False, message)
        """

        if self._conf is None:
            acl = None
        elif event['private']:
            acl = self.check_private(event['command'], event['sent_by'])
        else:
            acl = self.check_public(event['command'], event['sent_by'],
                    event['sent_to'])

        if acl is None:
            log.debug("No acl")
            return (True, "")
        else:
            log.debug("Using acl: %s" % ElementTree.tostring(acl).strip())
            action = acl.get("action", "")
            if action == "" or action not in ("allow", "deny"):
                log.error('Invalid acl action="%s", allowing.' % action)
            return (action != "deny", acl.get("msg", ""))
Exemplo n.º 6
0
    def check(self, event):
        """Check if a command can be run by a user.
        
        Returns a tuple: (True/False, message)
        """

        if self._conf is None:
            acl = None
        elif event['private']:
            acl = self.check_private(event['command'], event['sent_by'])
        else:
            acl = self.check_public(event['command'], event['sent_by'],
                                    event['sent_to'])

        if acl is None:
            log.debug("No acl")
            return (True, "")
        else:
            log.debug("Using acl: %s" % ElementTree.tostring(acl).strip())
            action = acl.get("action", "")
            if action == "" or action not in ("allow", "deny"):
                log.error('Invalid acl action="%s", allowing.' % action)
            return (action != "deny", acl.get("msg", ""))
Exemplo n.º 7
0
 def start(_):
     config = ElementTree.tostring(self.buildConfig())
     self.manager = core.HBotManager(xml=config)
     return self.tester.notify('join', self.nickname)