Esempio n. 1
0
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")
Esempio n. 2
0
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")
Esempio n. 3
0
    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")
Esempio n. 4
0
    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")