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]]))
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
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))
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])
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
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)
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']))
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"))