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)
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)
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)
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 )