def i_update_user_after_sipc_auth_success(user, res_obj): """ get and set contacts, configurations, last login {time,ip} """ body_dom = minidom.parseString(res_obj.body) # parse client node client_node = body_dom.getElementsByTagName("client")[0] map_node_attr_to_obj(client_node, user) # parse user-info node user_info_node = body_dom.getElementsByTagName("user-info")[0] _parse_personal_node(user, user_info_node) _parse_configs_node(user, user_info_node) _parse_custom_config_node(user, user_info_node) _parse_contact_list_node(user, user_info_node) # ignore score node _parse_services_node(user, user_info_node) _parse_quotas_node(user, user_info_node) # ignore capability-list node #user.contact_list.append(user.to_contact()) data = { "version" : user.version, "contact_list_version" : user.contact_list_version, "custom_config_version" : user.custom_config_version, "sid" : user.sid, } save_data_to_local_json(data, "user_info_versions.json")
def _parse_personal_node(user, body_dom): # results -> user-info -> personal personal_node = body_dom.getElementsByTagName("personal")[0] pn_attr = personal_node.getAttribute version = pn_attr("version") if user.version == version: logger.info("version matched, skip update") return map_node_attr_to_obj(personal_node, user) data = xml_node_attributes2dict(personal_node) data["sid"] = user.sid save_data_to_local_json(data, "personal_node.json")
def _consume_noti_sync_user_info_v4(self, res_obj): body_dom = minidom.parseString(res_obj.body) contact_list_nodes = body_dom.getElementsByTagName("contact-list") if not contact_list_nodes: return assert len(contact_list_nodes) == 1 contact_list_node = contact_list_nodes[0] contact_list_version = contact_list_node.getAttribute("version") if self.user.contact_list_version != contact_list_version: self.user.contact_list_version = contact_list_version buddy_nodes = body_dom.getElementsByTagName("buddy") for buddy_node in buddy_nodes: attr = buddy_node.getAttribute user_id = attr("user-id") contact = self.user.group_agent.get_contact_by_user_id(user_id) # someone send add buddy application to you, # and you send buddy application before any reply, # contact will be not found in self.user.contact_list. if not contact: continue if attr("action") == "remove": logger.error("!!! Your buddy (uri: %s) %s you" % (contact.uri, attr("action"))) convs = self.user.conversations() conv = convs.get(contact.uri, None) if conv: assert conv.sock != self.user.get_sock() conv.over() del conv self.user.group_agent.remove_user_by_user_id(user_id) elif attr("action") == "add": logger.info("!!! Your buddy (uri: %s) %s you" % (contact.uri, attr("action"))) cat = Contact(user=self.blah.user) map_node_attr_to_obj(buddy_node, cat) self.user.contact_list.append(cat) cat.buddy_lists = attr("buddy-lists") cat.online_notify = attr("online-notify") cat.permission_values = attr("permission-values")
def _consume_noti_sync_user_info_v4(self, res_obj): body_dom = minidom.parseString(res_obj.body) contact_list_nodes = body_dom.getElementsByTagName("contact-list") if not contact_list_nodes: return assert len(contact_list_nodes) == 1 contact_list_node = contact_list_nodes[0] contact_list_version = contact_list_node.getAttribute("version") if self.user.contact_list_version != contact_list_version: self.user.contact_list_version = contact_list_version buddy_nodes = body_dom.getElementsByTagName("buddy") for buddy_node in buddy_nodes: attr = buddy_node.getAttribute user_id = attr("user-id") contact = self.user.group_agent.get_contact_by_user_id(user_id) # someone send add buddy application to you, # and you send buddy application before any reply, # contact will be not found in self.user.contact_list. if not contact: continue if attr("action") == "remove": logger.error("!!! Your buddy (uri: %s) %s you" % (contact.uri, attr("action"))) convs = self.user.conversations() conv = convs.get(contact.uri, None) if conv: assert conv.sock != self.user.get_sock() conv.over() del conv self.user.group_agent.remove_user_by_user_id(user_id) elif attr("action") == "add": logger.info("!!! Your buddy (uri: %s) %s you" % (contact.uri, attr("action"))) cat = Contact(user = self.blah.user) map_node_attr_to_obj(buddy_node, cat) self.user.contact_list.append(cat) cat.buddy_lists = attr("buddy-lists") cat.online_notify = attr("online-notify") cat.permission_values = attr("permission-values")