示例#1
0
def create_keyset(data):
    keyD = KeySetDAO()

    userD = UserDAO()
    user_list = []
    for i in range(0, 4, 2):
        res = userD.select_by_nickname(data[i])
        if (res == None):
            print('usuário ' + user + ' não encontrados')
            return
        user_list.append(res[0])

    users = tuple(user_list)

    convD = ConversationDAO()
    conv = convD.select_by_users(users)

    if (conv == None):
        print('erro conversa')
        return

    for i in range(2):
        res = keyD.select_by_owner_conversation((users[i], conv[0]))
        if (res != None):
            print("Algo deu errado no keyset")
            return -1

    return keyD.insert(
        tuple([users[0], data[1], users[1], data[3]] + [conv[0]]))
示例#2
0
def login_handler(conn, ip, port, MAX_BUFFER_SIZE=4096):

    key = CryptoEngine()
    key.init_RSA_mode()

    private_key, public_key = key.generate_RSA_keypair()

    conn.sendall(public_key)  # public_key do servidor

    LOG('Requisição de login!\n')

    LOG('publickey enviada com sucesso!')

    input_from_client = conn.recv(MAX_BUFFER_SIZE)

    siz = sys.getsizeof(input_from_client)
    if siz >= MAX_BUFFER_SIZE:
        print('The length of input is probably too long: {}'.format(siz))

    res = process_input(input_from_client)

    user = key.decrypt_RSA_string(cipher_str=res["user"])
    password = key.decrypt_RSA_string(cipher_str=res["password"])
    pb_key = res["publickey"]

    user_db = UserDAO()

    if user_db.try_to_login(nickname=user, password=password,
                            publickey=pb_key):
        conn.sendall('True'.encode("utf8"))  # send it to client
        conn.sendall(pb_key)
    else:
        conn.sendall('False'.encode("utf8"))  # send it to client
示例#3
0
def insert_user(data):
    userD = UserDAO()
    username = data[0]
    res = userD.select_by_nickname(username)

    if (res != None):
        print("já possui cadastro")
        return res

    res = userD.insert(data)
    def select_friends_of_user(self, nickname):
        uDAO = UserDAO()

        current_user = uDAO.select_by_nickname(nickname)

        if (len(current_user) < 1):
            return False

        query = "SELECT user_id, nickname, public_key FROM chat_user WHERE user_id IN (SELECT first_user FROM user_relation WHERE second_user = %s AND relation_type = 'friends' UNION SELECT second_user FROM user_relation WHERE first_user = %s AND relation_type = 'friends')"

        return self.conn.query(query, query_data=tuple([current_user[0]] * 2))
示例#5
0
def send_msg_handler(conn, MAX_BUFFER_SIZE=4096):

    input_from_client = conn.recv(MAX_BUFFER_SIZE)

    sender_receiver = process_input(input_from_client)

    msg_db = MessageDAO()
    conv_db = ConversationDAO()
    key_set_db = KeySetDAO()
    user_db = UserDAO()

    user_ids = []

    res = user_db.select_by_nickname(sender_receiver["sender"])

    if res is not None:
        user_ids.append(res[0])
        print(user_ids)

        res = user_db.select_by_nickname(sender_receiver["receiver"])

        if res is not None:
            user_ids.append(res[0])

            res = conv_db.select_by_users(user_ids)

            if res is not None:

                conv_id = res[0]
                AES = key_set_db.select_by_owner_conversation(
                    (user_ids[1], conv_id))[2]
                conn.sendall(bytes(AES))

    temp_msg_list = msg_db.fetch_unread_messages_by_users(
        sender_receiver["receiver"], sender_receiver["sender"])

    messages_list = []
    for msg in temp_msg_list:
        messages_list.append(
            (msg[0], bytes(msg[1]), msg[2], msg[3], msg[4], msg[5], msg[6]))

    conn.sendall(pickle.dumps(messages_list))

    if "--ALLREAD--" in conn.recv(MAX_BUFFER_SIZE).decode("utf8"):
        for msg in temp_msg_list:
            msg_db.update(msg[0])
示例#6
0
    def fetch_unread_messages_by_users(self, receiving_user, other_user):
        uDAO = UserDAO()
        users_ids = []

        res = uDAO.select_by_nickname(other_user)
        if (res != None):
            users_ids.append(res[0])
        else:
            return False

        res = uDAO.select_by_nickname(receiving_user)
        if (res != None):
            users_ids.append(res[0])
        else:
            return False

        query = "SELECT * FROM message WHERE conversation_id IN (SELECT conversation_id FROM conversation WHERE user_one = %s AND user_two = %s) AND was_received = '0' AND receiving_user = %s"
        data = tuple(sorted([users_ids[0], users_ids[1]]) + [users_ids[1]])
        return self.conn.query(query, query_data=data)
    def invite_friend(self, nickname, friend_nickname):
        uDAO = UserDAO()

        friend_found = uDAO.select_by_nickname(friend_nickname)
        current_user = uDAO.select_by_nickname(nickname)

        relation_exists = self.select_relation_of_users(
            (friend_found[0], current_user[0]))

        if (len(relation_exists) > 0):
            return False

        if (friend_found != None and current_user != None):
            res = self.insert((friend_found[0], current_user[0], 'friends'))
            if (res == 1):
                return (friend_found[0], friend_found[1], friend_found[4])
            else:
                return False
        else:
            return False
示例#8
0
def create_conversation(data):
    convD = ConversationDAO()

    userD = UserDAO()
    user_list = []
    for user in data:
        res = userD.select_by_nickname(user)
        if (res == None):
            print('usuário ' + user + ' não encontrados')
            return
        user_list.append(res[0])

    users = tuple(user_list)
    res = convD.select_by_users(users)

    if (res != None):
        print("já possui conversa")
        return -1

    return convD.insert(users)
示例#9
0
def create_relation(data):
    relD = UserRelationDAO()

    userD = UserDAO()
    user_list = []
    for user in data:
        res = userD.select_by_nickname(user)
        if (res == None):
            print('usuário ' + user + ' não encontrados')
            return
        user_list.append(res[0])

    users = tuple(user_list)

    res = relD.select_by_users(users)

    if (res != None):
        print("já possui relação")
        return -1

    return relD.insert(tuple([users[0], users[1], 'friends']))
示例#10
0
def receive_msg_handler(conn, MAX_BUFFER_SIZE=4096):

    sender_receiver = process_input(conn.recv(MAX_BUFFER_SIZE))

    user_db = UserDAO()
    conv_db = ConversationDAO()
    key_set_db = KeySetDAO()
    message_db = MessageDAO()

    user_ids = []

    res = user_db.select_by_nickname(sender_receiver["sender"])

    if res is not None:
        user_ids.append(res[0])
        print(user_ids)

        res = user_db.select_by_nickname(sender_receiver["receiver"])

        if res is not None:
            user_ids.append(res[0])

            res = conv_db.select_by_users(user_ids)

            if res is not None:

                conv_id = res[0]
                AES = key_set_db.select_by_owner_conversation(
                    (user_ids[0], conv_id))[2]

                conn.sendall("--OKTOSEND--".encode("utf8"))
                conn.sendall(bytes(AES))

                msg = process_input(conn.recv(MAX_BUFFER_SIZE))
                date = msg[3]
                exp_date = date + datetime.timedelta(days=2)
                msg_info = (msg[0], date, exp_date, user_ids[1], '0', conv_id)
                if message_db.insert(msg_info) is 1:
                    conn.sendall("--OK--".encode("utf8"))

            else:
                conn.sendall("--NOCONV--".encode("utf8"))
                AES_USER_FRIEND = process_input(conn.recv(MAX_BUFFER_SIZE))

                res = conv_db.insert(user_ids)

                if res is 1:
                    conv_id = conv_db.select_by_users(user_ids)[0]
                    res = key_set_db.insert(
                        (user_ids[0], AES_USER_FRIEND["AES_USER"], user_ids[1],
                         AES_USER_FRIEND["AES_FRIEND"], conv_id))
                    if res is 2:
                        conn.sendall("--OKTOSEND--".encode("utf8"))

                        msg = process_input(conn.recv(MAX_BUFFER_SIZE))
                        date = msg[3]
                        exp_date = date + datetime.timedelta(days=2)
                        msg_info = (msg[0], date, exp_date, user_ids[1], '0',
                                    conv_id)
                        if message_db.insert(msg_info) is 1:
                            conn.sendall("--OK--".encode("utf8"))