Ejemplo n.º 1
0
    def get_userstats(self,user,comp_name,domain):
        """
        Get stats of user. Accepts params:
        
        user - user jid
        comp_name - component name which should receive answer (usually we are)
        domain - our domain
        
        returns callback with one cb added - it converts answer to dict with fields name,fulljid,ip,status
        """
    
        def process_stats(item):
            """
            Process result of user-stats command
            
            Extract IP address and related info and returns it as dict
            """
            x = xpath.queryForNodes("//x/field[@var='ipaddresses']",item)
            if not x:
                raise ValueError, "Wrong response from stats-request"
                
            frm = Form.fromElement(x[0])
            values = frm.getValues()
            jid = JID(values['accountjid'])
            ipport = values['ipaddresses']
            
            ip, port = ipport.split(':')

            userstats = dict()
            userstats['username'] = jid.userhost()
            userstats['fulljid'] = jid.full() #full jid which causes current change, i.e. which is connestion actualy used
            userstats['ip'] = ip
            return userstats
    
        #TODO: implement error handling if ACL doesn't allows us to call admin commands
        iq = IQ(self.xmlstream)
        iq['to'] = domain
        iq['from'] = comp_name
        cmd = iq.addElement((NS_COMMANDS,'command'))
        cmd['node'] = CMD_ADMIN_USER_STATS
       
        frm = Form('submit')
        frm.addField( Field(fieldType='hidden',var='FORM_TYPE',value=NS_ADMIN) )
        frm.addField( Field(fieldType='jid-single',var='accountjid',value=user.full()) )
        cmd.addChild(frm.toElement())
        d = iq.send(domain)
        d.addCallback(process_stats)
        return d
Ejemplo n.º 2
0
 def configure_node(data):
     request = PubSubRequestWithConf('configureSet')
     request.recipient = JID(self.pubsub_name)
     request.nodeIdentifier = PUB_NODE
     request.sender = JID(self.name)
     
     frm = Form('submit')
     frm.addField( Field(fieldType='hidden',var='FORM_TYPE',value=NS_PUBSUB_NODE_CONFIG) )
     frm.addField( Field(var='pubsub#title',value='Live presence events') )
     frm.addField( Field(var='pubsub#persist_items',value='1') )
     frm.addField( Field(var='pubsub#deliver_payloads',value='1') )
     frm.addField( Field(var='pubsub#send_last_published_item',value='never') )
     frm.addField( Field(var='pubsub#presence_based_delivery',value='0') )
     frm.addField( Field(var='pubsub#access_model',value='open') )
     frm.addField( Field(var='pubsub#node_type',value='leaf') )
     frm.addField( Field(var='pubsub#max_items',value='100') )
     
     request.configureForm = frm
     request.send(self.xmlstream)