コード例 #1
0
def parser(client, payload, main_number, mime, message_type=None):
    data = bert.decode(bytes(payload))
    global main_id
    global friend_id
    global chat
    global message_id

    if data[0] == Atom("Profile"):
        for field in data[3][0][6]:
            if field[-1] == Atom('friend'):
                if field[1].split(b'_')[0] == string_to_bytes(main_number):
                    log.debug('Main profile found')
                    main_id = field[1]
                    friend_id = field[1]
                    chat = p2p(from_user=main_id, to=main_id)

        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           message_model(mime,
                                         container=Atom('chain'),
                                         feed_id=chat,
                                         from_user=main_id,
                                         to=main_id)),
                       qos=2,
                       retain=False)

    if data[0] == Atom(
            'Message') and message_type == 'delete for me' and data[-1] == []:
        message_id = data[1]
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           send_message(main_id, friend_id, chat, mime,
                                        message_id, message_type, main_id)),
                       qos=2,
                       retain=False)

    elif data[0] == Atom('Message') and data[-1] == Atom('delete'):
        log.debug('Verify group patched')
        Verify.true(data[1], "No message ID")
        client.disconnect()

    elif data[0] == Atom('Message'):
        log.debug('Verify group patched')
        Verify.true(data[1], "No message ID")
        client.disconnect()

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #2
0
def parser(client, payload, first_name, last_name, user_name=None):
    data = bert.decode(bytes(payload))
    global userid

    if data[0] == Atom('Profile') and (data[-1]) == Atom('init'):
        roaster = (bert.decode(bytes(payload))[3])
        global user_id
        user_id = roaster[0][1]
        rost = roster(user_id=user_id,
                      first_name=first_name,
                      last_name=last_name,
                      status=Atom('patch'))
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(rost),
                       qos=2,
                       retain=False)

    elif data[0] == Atom('Roster') and (data[-1]) == Atom('patch'):
        log.debug(user_id)
        log.debug(user_name)
        rost = roster(user_id=user_id,
                      my_username=user_name,
                      status=Atom('nick'))
        log.debug(rost)
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(rost),
                       qos=2,
                       retain=False)

    elif user_name and data[0] == Atom('Roster') and (
            data[-1]) == Atom('nick'):
        log.info("Verify roster/nick updated")
        Verify.true(data[5] == string_to_bytes(user_name),
                    'Username does not set')
        client.disconnect()

    elif data[0] == Atom('Roster') and (
            data[-1]) == Atom('patch') and user_name is None:
        log.info("Verify user register")
        Verify.true(data[2] == string_to_bytes(first_name),
                    'First Name doesnt update')
        client.disconnect()

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    elif data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #3
0
def parser(client, payload, new_alias):
    data = bert.decode(bytes(payload))
    global room_id
    global member_id

    if data[0] == Atom("Profile"):
        for field in data:
            if field and list == type(field):
                for room in field[0]:
                    if room and list == type(room) and room[0][0] == Atom(
                            'Room'):
                        for member_field in room[-1]:
                            if member_field and list == type(member_field) and tuple == type(member_field[0]) \
                                    and member_field[0][0] == Atom('Member'):
                                global member_id
                                member_id = member_field[0][1]

        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           member(member_id=member_id,
                                  container=Atom('chain'),
                                  alias=new_alias,
                                  status=Atom('patch'))),
                       qos=2,
                       retain=False)

    if data[0] == Atom('Member'):
        log.debug('Verify member patched')
        Verify.equals(string_to_bytes(new_alias), data[11], 'Not new alias')
        client.disconnect()

    if data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #4
0
def parser(client, payload, main_number):
    data = bert.decode(bytes(payload))

    for node in data:
        if node == Atom('Profile') and data[8] == 'init':
            roster = (bert.decode(bytes(payload))[3])
            user_id = roster[0][1]
            my = main_number + '_' + str(user_id)
            contacts = data[3][0][6]
            for field in contacts:
                if field[0] == Atom('Contact') and field[-1] == Atom('authorization'):
                    client.publish(topic="events/1//api/anon//", payload=bytearray(
                        friend(my_id=my, friend_id=field[1], status=Atom('confirm'))), qos=2, retain=False)

    if data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #5
0
def parser(client, payload, room_name):
    data = bert.decode(bytes(payload))
    global room_id
    global my_alias

    if data[0] == Atom("Profile"):
        for field in data:
            if field and list == type(field):
                for room in field[0]:
                    if room and list == type(room) and room[0][0] == Atom('Room'):
                        global room_id
                        room_id = room[-1][1]

        global my_alias
        my_alias = data[3][0][4] if data[3][0][4] else data[3][0][2]+data[3][0][3]
        client.publish(topic="events/1//api/anon//", payload=bytearray(
            patch_group(room_id, room_name)), qos=2,
                       retain=False)

    if data[0] == Atom('Message'):
        log.debug('Verify group patched')
        for field in data:
            if field and list == type(field) and tuple == type(field[0]):
                print(field[0][3])
                Verify.equals(b'Group is renamed to "'+string_to_bytes(room_name)+b'"', field[0][3], 'No message about patch')
        client.disconnect()

    if data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #6
0
def parser(chat_type,
           client,
           payload,
           main_number,
           friend_number,
           mime,
           message_type=None):
    data = bert.decode(bytes(payload))
    global main_id
    global friend_id
    global p2p_chat
    global group_chat
    global message_id
    global member_id
    global group_friend_id

    if data[0] == Atom("Profile"):
        for field in data[3][0][6]:
            if field[-1] == Atom('friend'):
                if field[8]:
                    p2p_chat = field[8][3]

        group_chat = data[3][0][7][-1][7][0][3]
        group_friend_id = data[3][0][7][-1][1]

        if chat_type == 'p2p' or chat_type == 'myself':
            for field in data[3][0][6]:
                if field[-1] == Atom('friend'):
                    if field[1].split(b'_')[0] == string_to_bytes(main_number):
                        log.debug('Main profile found')
                        main_id = field[1]
                        if chat_type == 'myself':
                            friend_id = main_id
                            message_id = field[8][1]
                            p2p_chat = field[8][3]
                        if chat_type == 'p2p':
                            if field[0] == Atom('Contact') and field[-1] == Atom('friend') and \
                                    field[1].split(b'_')[0] == string_to_bytes(friend_number):
                                friend_id = field[1]
                                if field[8]:
                                    message_id = field[8][1]
                                    p2p_chat = field[8][3]

            feature_model = feature(id='Autotest_feature_id' +
                                    str(time.time()).split('.')[0],
                                    key='TimeZone',
                                    value='Europe/Kiev',
                                    group='JOB_TIMEZONE')
            message_model = bert.decode(
                send_message(main_id, friend_id, p2p_chat, mime, data[1],
                             message_type))
            act_model = act(name='publish', data=main_id)
            time_plus_ten_min = (int(str(time.time()).split('.')[0]) +
                                 6000) * 1000
            client.publish(topic="events/1//api/anon//",
                           payload=bytearray(
                               job(feed_id=act_model,
                                   time=time_plus_ten_min,
                                   data=[message_model],
                                   settings=feature_model,
                                   status=Atom('init'))),
                           qos=2,
                           retain=False)

        if chat_type == 'group':
            for field in data[3][0][6]:
                if field[-1] == Atom('friend'):
                    if field[1].split(b'_')[0] == string_to_bytes(main_number):
                        log.debug('Main profile found')
                        main_id = field[1]

            message_id = data[3][0][7][-1][15][1]
            friend_id = data[3][0][7][-1][1]
            member_id = data[3][0][7][-1][7][0][1]

            log.debug('Send job')
            feature_model = feature(id='Autotest_feature_id' +
                                    str(time.time()).split('.')[0],
                                    key='TimeZone',
                                    value='Europe/Kiev',
                                    group='JOB_TIMEZONE')
            message_model = bert.decode(
                send_message(main_id, group_friend_id, group_chat, mime,
                             data[1], message_type))

            act_model = act(name='publish', data=main_id)
            time_plus_ten_min = (int(str(time.time()).split('.')[0]) +
                                 600) * 1000
            client.publish(topic="events/1//api/anon//",
                           payload=bytearray(
                               job(feed_id=act_model,
                                   time=time_plus_ten_min,
                                   data=[message_model],
                                   settings=feature_model,
                                   status=Atom('init'))),
                           qos=2,
                           retain=False)

    elif data[0] == Atom('Job') and data[-1] == Atom('pending'):
        log.debug('Verify job go to pending')
        Verify.true(data[0] == Atom('Job') and data[-1] == Atom('pending'),
                    'Job not in pending')
        client.disconnect()

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #7
0
def parser(chat_type,
           client,
           payload,
           main_number,
           friend_number,
           mime,
           message_type=None):
    data = bert.decode(bytes(payload))
    global main_id
    global friend_id
    global p2p_chat
    global group_chat
    global message_id
    global member_id
    global group_friend_id

    if data[0] == Atom("Profile"):
        for field in data[3][0][6]:
            if field[-1] == Atom('friend'):
                if field[8]:
                    p2p_chat = field[8][3]

        group_chat = data[3][0][7][-1][7][0][3]
        group_friend_id = data[3][0][7][-1][1]
        for field in data[3][0][6]:
            if field[0] == Atom('Contact') and field[-1] == Atom('friend') and \
                    field[1].split(b'_')[0] == string_to_bytes(friend_number):
                friend_id = field[1]

        if chat_type == 'p2p':
            for field in data[3][0][6]:
                if field[-1] == Atom('friend'):
                    if field[1].split(b'_')[0] == string_to_bytes(main_number):
                        log.debug('Main profile found')
                        main_id = field[1]
                    if field[0] == Atom('Contact') and field[-1] == Atom('friend') and \
                            field[1].split(b'_')[0] == string_to_bytes(friend_number):
                        friend_id = field[1]
                    if field[8]:
                        message_id = field[8][1]
            d = send_message(main_id,
                             friend_id,
                             p2p_chat,
                             mime,
                             message_id,
                             message_type,
                             message_text=message_text)
            log.info('=' * 5 + 'REQUEST' + '=' * 5 + '\r\n' +
                     str(bert.decode(d)) + '\r\n')
            client.publish(topic="events/1//api/anon//",
                           payload=bytearray(d),
                           qos=2,
                           retain=False)

        if chat_type == 'group':
            for field in data[3][0][6]:
                if field[-1] == Atom('friend'):
                    if field[1].split(b'_')[0] == string_to_bytes(main_number):
                        log.debug('Main profile found')
                        main_id = field[1]

            message_id = data[3][0][7][-1][15][1]
            member_id = data[3][0][7][-1][7][0][1]

            d = send_message(main_id,
                             group_friend_id,
                             group_chat,
                             mime,
                             message_id,
                             message_type,
                             message_text=message_text)
            log.info('=' * 5 + 'REQUEST' + '=' * 5 + '\r\n' +
                     str(bert.decode(d)) + '\r\n')
            client.publish(topic="events/1//api/anon//",
                           payload=bytearray(d),
                           qos=2,
                           retain=False)

    elif data[0] == Atom('Message') and data[11] == [Atom('forward')]:
        log.debug('Verify')
        log.debug(data)
        client.disconnect()

    elif data[0] == Atom('Message'):
        log.debug('Send job')
        message_model = []
        if chat_type == 'p2p':
            message_model = bert.decode(
                send_message(main_id,
                             group_friend_id,
                             group_chat,
                             mime,
                             data[1],
                             message_type='forward',
                             message_text=message_text))
        elif chat_type == 'group':
            message_model = bert.decode(
                send_message(main_id,
                             friend_id,
                             p2p_chat,
                             mime,
                             data[1],
                             message_type='forward',
                             message_text=message_text))
        act_model = act(name='publish', data=main_id)
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           job(feed_id=act_model,
                               data=[message_model],
                               status=Atom('init'))),
                       qos=2,
                       retain=False)

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #8
0
def parser(client,
           payload,
           main_number,
           friend_phone,
           avatar=False,
           alias_check=False):
    data = bert.decode(bytes(payload))
    global user_id
    global main_first_name
    global main_last_name

    if data[0] == Atom('Profile') and data[8] == 'init':
        contacts = data[3][0][6]
        for field in contacts:
            if field[0] == Atom('Contact') and field[1].split(
                    b'_')[0] == string_to_bytes(main_number):
                log.debug('Main profile found')
                user_id = main_id = field[1]
                main_first_name = field[3]
                main_last_name = field[4]
                main_alias = []
                if field[5]:
                    main_alias = field[5]
            if field[0] == Atom('Contact') and field[-1] == Atom('friend') and \
                    field[1].split(b'_')[0] == string_to_bytes(friend_phone):
                friend_id = field[1]
                friend_first_name = field[3]
                friend_last_name = field[4]
                friend_alias = []
                if field[5]:
                    friend_alias = field[5]
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           create_group(main_id, main_first_name,
                                        main_last_name, main_alias, friend_id,
                                        friend_first_name, friend_last_name,
                                        friend_alias, avatar)),
                       qos=2,
                       retain=False)

    if data[0] == Atom('Room') and alias_check:
        log.info('Verify group created and alias exist')
        Verify.true(
            (data[15][10][0][3] == user_id + b' created the group' and ([
                field[0][11] for field in data if field and list == type(field)
                and int != type(field[0]) and field[0][-1] == Atom("admin")
            ][0] == main_first_name + main_last_name)),
            "No message about creation")
        client.disconnect()

    elif data[0] == Atom('Room'):
        log.info("Verify group creation")
        Verify.true((data[15][10][0][3] == user_id + b' created the group' and
                     (data[8] != [] if avatar else True)),
                    "No message about creation")
        client.disconnect()

    if data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #9
0
def parser(client,
           payload,
           first_name=None,
           last_name=None,
           user_name=None,
           avatar=None):
    data = bert.decode(bytes(payload))

    if data[0] == Atom('Profile') and (data[-1]) == Atom('init'):
        roas = (bert.decode(bytes(payload))[3])
        userid = roas[0][1]
        if user_name:
            first_name = ''
            last_name = ''
            avatar = []
            status = Atom('nick')
        elif avatar:
            first_name = []
            last_name = []
            user_name = ''
            status = Atom('patch')
        else:
            avatar = []
            status = Atom('patch')
        client.publish(topic="events/1//api/anon//",
                       payload=bytearray(
                           roster(user_id=userid,
                                  first_name=first_name,
                                  last_name=last_name,
                                  my_username='',
                                  avatar=avatar,
                                  status=status)),
                       qos=2,
                       retain=False)

    if data[0] == Atom('Roster') and (data[-1]) == Atom('nick'):
        log.info("Verify roster/nick updated")
        Verify.true(data[5] == string_to_bytes(user_name),
                    'Username does not set')
        client.disconnect()

    elif data[0] == Atom('Roster') and (data[-1]) == Atom('patch') and avatar:
        log.info("Verify roster/avatar updated")
        Verify.true(data[11] == string_to_bytes(avatar),
                    'Username does not set')
        client.disconnect()

    elif data[0] == Atom('Roster') and (data[-1]) == Atom('patch'):
        log.info("Verify roster/name updated")
        Verify.true(data[2] == string_to_bytes(first_name),
                    'Username does not set')
        client.disconnect()

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b'') or data == \
            (Atom('io'), (Atom('error'), Atom('invalid_nick')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    if data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")
コード例 #10
0
def parser(client, payload, name, main_number, friend_phone, avatar=False, alias_check=False, group_avatar=None):
    data = bert.decode(bytes(payload))
    global user_id
    global main_id
    global main_first_name
    global main_last_name
    global main_alias
    global friend_id
    global friend_first_name
    global friend_last_name
    global friend_alias

    if data[0] == Atom('Profile') and data[8] == 'init':
        contacts = data[3][0][6]
        for field in contacts:
            if field[0] == Atom('Contact') and field[1].split(b'_')[0] == string_to_bytes(main_number):
                log.debug('Main profile found')
                user_id = main_id = field[1]
                main_first_name = field[3]
                main_last_name = field[4]
                main_alias = []
                if field[5]:
                    main_alias = field[5]
            if field[0] == Atom('Contact') and field[-1] == Atom('friend') and \
                    field[1].split(b'_')[0] == string_to_bytes(friend_phone):
                friend_id = field[1]
                friend_first_name = field[3]
                friend_last_name = field[4]
                friend_alias = []
                if field[5]:
                    friend_alias = field[5]
        room_id = 'Autotest_group_id'+str(time.time()).split('.')[0]
        friend_member = member(container=Atom('chain'), phone_id=friend_id, names=friend_first_name,
                               surnames=friend_last_name, alias=friend_alias, status=Atom('member'))
        main_admin = member(container=Atom('chain'), phone_id=main_id, names=main_first_name, surnames=main_last_name,
                            alias=main_alias, status=Atom('admin'))
        room_data = []
        if group_avatar:
            avatar_module = Atom('Desc')
            avatar_id = 'Autotest_avatar' + str(time.time()).split('.')[0]
            mime = 'image'
            avatar_payload = "https://s3-us-west-2.amazonaws.com/nynja-defaults/Image_" \
                             "153310818583129_86FC1EF5-C297-4A1A-9FA1-A7D3C5E27E0E1533108186.jpg"
            parentid = []
            avatar_data = []
            room_data = [(avatar_module, avatar_id, mime, avatar_payload, parentid, avatar_data)]

        client.publish(topic="events/1//api/anon//", payload=bytearray(
            room(room_id=room_id,name=name,members=[bert.decode(friend_member)], admins=[bert.decode(main_admin)],
                 data=room_data, room_status=Atom('create'))), qos=2, retain=False)

    if data[0] == Atom('Room') and alias_check:
        log.info('Verify group created and alias exist')
        Verify.true((data[15][10][0][3] == user_id + b' created the group' and
                     ([field[0][11] for field in data if field and list == type(field) and int != type(field[0]) and
                       field[0][-1] == Atom("admin")][0] == main_first_name + main_last_name)),
                    "No message about creation")
        client.disconnect()

    elif data[0] == Atom('Room'):
        log.info("Verify group creation")
        Verify.true((data[15][10][0][3] == user_id + b' created the group' and
                     (data[8] != [] if avatar else True)), "No message about creation")
        client.disconnect()

    elif data == (Atom('io'), (Atom('error'), Atom('invalid_data')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise InvalidData("Invalid data response")

    elif data == (Atom('io'), (Atom('error'), Atom('permission_denied')), b''):
        log.error("Something going wrong")
        client.disconnect()
        raise PermissionDenied("No permission")