def addUserToGroup(self, user, group):
        '''add a user to a group'''

        gid = self.contactManager.getGroupId(group)
        contactID = self.contactManager.getContactId(user)
        if gid == None:
            common.debug('Group not found')
            return
        if gid in self.contactManager.getContact(user).groups:
            common.debug('User already in group')
            return
        if gid == 'nogroup':
            common.debug('Cannot move to no group')
            return            
        
        self.contactManager.addUserToGroup(user, gid)
        self.emit('user-list-change')

        request = SoapManager.SoapRequest(
            'http://www.msn.com/webservices/AddressBook/ABGroupContactAdd', \
            'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.moveUserToGroup % (gid, contactID), \
            self.onUserAddedToGroup, (user, group, gid))

        SoapManager.put(request)
    def unblockUser(self, email, stage=0):
        '''unblock an user'''

        if stage == 0:
            self.sendDL('RML', email, '4')
            self.sendDL('ADL', email, '2')
    
            self.contactManager.unblockContact(email)
            contact = self.contactManager.getContact(email)
            self.emit('user-attr-changed', contact)
    
            request = SoapManager.SoapRequest(\
                'http://www.msn.com/webservices/AddressBook/DeleteMember', \
                'omega.contacts.msn.com', 443, '/abservice/SharingService.asmx', \
                XmlTemplates.deleteMember%('BlockUnblock', 'Block', email), \
                self.onUserUnblocked, (email, 0))
    
            SoapManager.put(request)
        
        elif stage == 1:
            request = SoapManager.SoapRequest(
                'http://www.msn.com/webservices/AddressBook/AddMember', \
                'omega.contacts.msn.com', 443, '/abservice/SharingService.asmx', \
                XmlTemplates.addMember%('BlockUnblock', 'Allow', email), \
                self.onUserUnblocked, (email, 1))
            SoapManager.put(request)
    def renameGroup(self, oldGroup, newGroup):
        '''rename a group from the group list'''

        if oldGroup == newGroup:
            common.debug('oldgroup and new group are the same')
            return
        if self.contactManager.getGroupId(newGroup) != None:
            common.debug('That group name is already in use')
            return
            
        gid = self.contactManager.getGroupId(oldGroup)
        if gid == None:
            common.debug('The specified group does not exist')
            return
        else:
            self.contactManager.renameGroup(gid, newGroup)
            group = self.contactManager.getGroup(gid)
            objOldGroup = ContactData.Group(oldGroup)
            self.emit('group-attr-changed', objOldGroup, group)
            request = SoapManager.SoapRequest(
                'http://www.msn.com/webservices/AddressBook/ABGroupUpdate', \
                'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                XmlTemplates.renameGroup % (gid, common.escape(newGroup)), \
                self.onGroupRenamed, (oldGroup, newGroup))
            SoapManager.put(request)
    def getStorageAuthCache(self, email):
        common.debug('request storage auth cache ' + email)
        
        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/storage/w10/GetItemVersion', \
            'storage.msn.com', 80, '/storageservice/schematizedstore.asmx', \
            XmlTemplates.schematizedStore%(email), self.onGetStorageAuthCache)

        SoapManager.put(request)
Example #5
0
 def tooLarge( self ):
     '''Return the mail data using soap if there are too many OIMs'''
     t,p=self.msn.passportid[2:].split('&p=')
     request = SoapManager.SoapRequest( 'http://www.hotmail.msn.com/ws/2004/09/oim/rsi/GetMetadata',\
                             'rsi.hotmail.com', 443,\
                             '/rsi/rsi.asmx', \
                             XmlTemplates.getMailData%(t,p) )
     SoapManager.put( request )
     response = SoapManager.get()
     return self.parseMailData( response.body )
    def getAddressBookAsync(self):
        '''request the address book dont return until we get it'''
        
        common.debug('request Address book')

        request = SoapManager.SoapRequest(
            'http://www.msn.com/webservices/AddressBook/ABFindAll', \
            'contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.addressBook, self.onGetAddressBook)

        SoapManager.put(request)
    def getMembershipListAsync(self):
        '''request the membership list return and put a callback'''

        common.debug('request Membership list')

        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/AddressBook/FindMembership', \
            'contacts.msn.com', 443, '/abservice/SharingService.asmx', \
            XmlTemplates.membershipList, self.onGetMembershipList)

        SoapManager.put(request)
    def getDynamicItemsAsync(self):
        '''request dynamic items (spaces and all that) return
        and put a callback'''

        common.debug('request Dynamic Items')

        request = SoapManager.SoapRequest(
            'http://www.msn.com/webservices/AddressBook/ABFindAll', \
            'contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.dynamicItems, self.onGetDynamicItems)

        SoapManager.put(request)
Example #9
0
 def retry(self, response):
     '''Retry to send Soap Request with new data'''
     if self.retrys < 3:
         self.retrys += 1
         body = self.template.safe_substitute( self.d )
         
         newRequest = SoapManager.SoapRequest( response.action,
             response.host, response.port, response.path, body,
             response.callback )
         SoapManager.put( newRequest )
     elif self.retrys > 3:
         to, message = self._parseSentMessage()
         self.msn.emit( 'send-message-error', to, message, 'Auth Error' )
    def getMembershipListSync(self):
        '''request the membership list dont return until we get it'''

        common.debug('request Membership list')

        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/AddressBook/FindMembership', \
            'contacts.msn.com', 443, '/abservice/SharingService.asmx', \
            XmlTemplates.membershipList)

        SoapManager.put(request)
        response = SoapManager.get()

        return self.onGetMembershipList(response)
    def getDynamicItemsSync(self):
        '''request dynamic items (spaces and all that) dont return
        until we get that'''

        common.debug('request Dynamic Items')

        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/AddressBook/ABFindAll', \
            'contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.dynamicItems)

        SoapManager.put(request)
        response = SoapManager.get()

        return self.onGetDynamicItems(response)
    def getUserProfile(self, email, storageAuthCache = None):
        if storageAuthCache == None:
            self.getStorageAuthCache(email)
        else:
            common.debug('request user profile ' + email)

            cid = str(self.contactManager.getContact(email).cid)
            request = SoapManager.SoapRequest(
                'http://www.msn.com/webservices/spaces/v1/GetXmlFeed', \
                'cid-580B3F2402D4CDA4.cc.services.spaces.live.com', 80, \
                '/contactcard/contactcardservice.asmx', \
                XmlTemplates.space % (self.t, "", cid, storageAuthCache, "en-US"), \
                self.onGetUserProfile)

            SoapManager.put(request)
    def moveUserToGroup(self, user, srcGroup, destGroup, stage=0):
        '''move a user from a group erasing it from de source group'''

        if stage == 0:
            contactID = self.contactManager.getContactId(user)
            sourceGid = self.contactManager.getGroupId(srcGroup)
            destGid = self.contactManager.getGroupId(destGroup)
            
            # moving to/from No group = adding to destGroup / removing from srcGroup
            if sourceGid == 'nogroup':
                self.addUserToGroup(user, destGroup)
                return
            if destGid == 'nogroup':
                self.removeUserFromGroup(user, srcGroup)
                return
            
            # check whether or not it's an allowed movement
            if srcGroup == destGroup:
                common.debug('src and dest groups are the same')
                return
            elif self.contactManager.getGroup(destGid).getUser(user) != None:
                common.debug('dest group already contain the user')
                return
            
            # make the visual changes
            self.contactManager.removeUserFromGroup(user, sourceGid)
            self.contactManager.addUserToGroup(user, destGid)
            self.emit('user-list-change')
    
            # remove the user from the srcGroup
            request = SoapManager.SoapRequest(
                'http://www.msn.com/webservices/AddressBook/ABGroupContactDelete', \
                'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                XmlTemplates.deleteUserFromGroup%(contactID,sourceGid), \
                self.onMoveUserToGroup, (user, srcGroup, destGroup, 0))
            SoapManager.put(request)
        
        elif stage == 1:
            gid = self.contactManager.getGroupId(destGroup)
            contactID = self.contactManager.getContactId(user)
        
            # add the user to the destGroup
            request = SoapManager.SoapRequest(\
                'http://www.msn.com/webservices/AddressBook/ABGroupContactAdd', \
                'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                XmlTemplates.moveUserToGroup%(gid, contactID), \
                self.onMoveUserToGroup, (user, srcGroup, destGroup, 1))
            SoapManager.put(request)
    def addGroup(self, group):
        '''add a group to the group list'''

        if self.contactManager.getGroupId(group) != None:
            common.debug('Unable to add: Group "' + group \
                               + '" already exists')
            return

        name = group.replace(' ', '%20')

        request = SoapManager.SoapRequest(
                    'http://www.msn.com/webservices/AddressBook/ABGroupAdd', \
                    'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                    XmlTemplates.addGroup % (group,), \
                    self.onGroupAdded, (group,))
        SoapManager.put(request)
    def changeNick(self, nick, user='******', initial=False):
        '''change the nick, type can be Me or Normal'''
        nick = nick.decode('utf-8', 'replace').encode('utf-8')
        if user == 'Me':
            if not initial and self.nick == nick:
                common.debug('trying to set the same nick')
                return

            if len(nick) > 129:
                # to avoid problems with utf-8
                return
            
            oldNick = self.nick
            self.nick = nick
            #self.contactManager.setContactNick(self.user, self.nick)
            self.emit('self-nick-changed', oldNick, self.nick)
            
            self.socket.sendCommand("PRP", "MFN " + urllib.quote(nick))

            nick = common.escape(nick)
            if not initial:
                request = SoapManager.SoapRequest(
                    'http://www.msn.com/webservices/AddressBook/ABContactUpdate', \
                    'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                    XmlTemplates.changeNick % (user, nick), \
                    self.onNickChanged, (self.user, oldNick))
        else:
            # why this change the contact alias?
            # it's a good question, but remember to sign your
            # comments with --~~~~, like this: --dx [talk] 9/11 3:47
            oldAlias = self.contactManager.getContactAlias(user)
            
            self.contactManager.setContactAlias(user, nick)
            contact = self.contactManager.getContact(user)
            self.emit('user-attr-changed', contact)

            contactID = str(self.contactManager.getContactId(user))
            nick = str(common.escape(nick))
            if not initial:
                request = SoapManager.SoapRequest(
                    'http://www.msn.com/webservices/AddressBook/ABContactUpdate', \
                    'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                    str(XmlTemplates.renameContact % (contactID, nick)), \
                    self.onNickChanged, (user, oldAlias))

        if not initial:
            SoapManager.put(request)
    def getAddressBookSync(self):
        '''request the address book return and put a callback'''
    
        common.debug('request Address book')

        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/AddressBook/ABFindAll', \
            'contacts.msn.com', 443, \
            '/abservice/abservice.asmx', XmlTemplates.addressBook)

        SoapManager.put(request)
        response = SoapManager.get()

        common.debug(str(response.status))

        if response.status[0] == 200:
            self.newCacheFile(self.user + '_ab.xml', response.body)
    def removeUser(self, email):
        '''remove an user from the friendr list'''

        self.sendDL('RML', email, '1')
        
        contact = self.contactManager.getContact(email)
        contactID = self.contactManager.getContactId(email)
        
        # make the contact not visible
        self.contactManager.removeContact(email)
        self.emit('user-list-change')

        request = SoapManager.SoapRequest(\
            'http://www.msn.com/webservices/AddressBook/ABContactDelete', \
            'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.contactRemove % (contactID,), \
            self.onUserRemoved, (email, contact))
        SoapManager.put(request)
    def removeUserFromGroup(self, user, group):
        '''remove user from a group'''

        contactID = self.contactManager.getContactId(user)
        sourceGid = self.contactManager.getGroupId(group)

        if sourceGid == '' or sourceGid == 'nogroup':
            return
        
        self.contactManager.removeUserFromGroup(user, sourceGid)
        self.emit('user-list-change')

        request = SoapManager.SoapRequest(
            'http://www.msn.com/webservices/AddressBook/ABGroupContactDelete', \
            'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.deleteUserFromGroup % (contactID,sourceGid), \
            self.onUserRemovedFromGroup, (sourceGid, group, user))

        SoapManager.put(request)
    def removeGroup(self, group):
        '''remove a group from the group list'''

        gid = self.contactManager.getGroupId(group)
        if gid:
            groupObj = self.contactManager.getGroup(gid)
            self.contactManager.removeGroup(gid)
            self.emit('user-list-change')
            
            request = SoapManager.SoapRequest(
                'http://www.msn.com/webservices/AddressBook/ABGroupDelete', \
                'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
                XmlTemplates.deleteGroup % (gid,), \
                self.onGroupRemoved, (gid, groupObj))

            SoapManager.put(request)
        else:
            common.debug('Unable to remove: Group "' + group \
                               + '" does not exist')
    def addUser(self, email, group):
        '''add an user to the friend list'''

        if self.contactManager.contact_exists(email):
            # We already have that contact
            return

        self.sendDL('ADL', email, '1')
        self.sendDL('ADL', email, '2')

        # need to add it in prevention of ILN. Don't update user list
        self.contactManager.addNewContact(email)
        
        request = SoapManager.SoapRequest(
            'http://www.msn.com/webservices/AddressBook/ABContactAdd', \
            'omega.contacts.msn.com', 443, '/abservice/abservice.asmx', \
            XmlTemplates.contactAdd % (email,), \
            self.onUserAdded, (email, group))

        SoapManager.put(request)
Example #21
0
 def soapRequest(self,url,description,server,port,path,soapTemplate,d):
     '''Soap request method handle Tweener challenge and Lock key challenge'''
     soapHandle = SoapHandle( self, soapTemplate, d )
     body=soapTemplate.safe_substitute(d)
     request = SoapManager.SoapRequest( url, server, port, path, body, soapHandle.handle )
     SoapManager.put( request )