# Загружаем ключи с файла, если же файла нет, то генерируем новую пару. dir_path = os.getcwd() key_file = os.path.join(dir_path, f'{client_name}.key') if not os.path.exists(key_file): keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key: key.write(keys.export_key()) else: with open(key_file, 'rb') as key: keys = RSA.import_key(key.read()) # !!!keys.publickey().export_key() logger.debug("Keys sucsessfully loaded.") # Создаём объект базы данных database = ClientDatabase(client_name) # Создаём объект - транспорт и запускаем транспортный поток try: transport = ClientTransport(server_port, server_address, database, client_name, client_passwd, keys) logger.debug("Transport ready.") except ServerError as error: message = QMessageBox() message.critical(start_dialog, 'Ошибка сервера', error.text) sys.exit(1) transport.setDaemon(True) transport.start() # Удалим объект диалога за ненадобностью del start_dialog
del start_dialog else: exit(0) dir_path = os.path.dirname(os.path.realpath(__file__)) key_file = os.path.join(dir_path, f'{account_name}.key') if not os.path.exists(key_file): keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key: key.write(keys.exportKey()) else: with open(key_file, 'rb') as key: keys = RSA.importKey(key.read()) keys.publickey().exportKey() database = ClientDatabase(account_name) try: transport = ClientTransport(PORT, ADDRESS, database, account_name, client_passwd, keys) except Exception as error: print(error) exit(1) transport.setDaemon(True) transport.start() main_window = ClientMainWindow(database, transport, keys) main_window.make_connection(transport) main_window.setWindowTitle(f'Чат Программа alpha release - {account_name}') client_app.exec_()
def main_cycle(): """ The main loop of the client. Launches the app. If there's no nickname provided, prompts the login dialog. Otherwise generates the public key (in case it's the first launch), opens a client's socket and starts the GUI. """ address, port, nickname, password = get_launch_params() client_socket = None client_app = QApplication(argv) welcome_dialog = ClientLoginDialog() if not nickname or not password: client_app.exec_() if welcome_dialog.ok_flag: nickname = welcome_dialog.nickname.text() password = welcome_dialog.password.text() else: sys_exit(0) CLIENT_LOGGER.info( 'Запущено приложение-клиент с параметрами: ' 'адрес сервера - %s, серверный порт - ' '%s, никнейм клиента - %s.' % (address, port, nickname) ) cur_dir = os.getcwd() key_file = os.path.join(cur_dir, f'{nickname}.key') if not os.path.exists(key_file): keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key: key.write(keys.export_key()) else: with open(key_file, 'rb') as key: pub_keys = RSA.import_key(key.read()) client_db = ClientDatabase(nickname) try: client_socket = ClientSocket( address, port, nickname, client_db, password, pub_keys ) except ServerError as e: msg = QMessageBox() msg.critical( welcome_dialog, 'Ошибка сервера!', e.error_message ) CLIENT_LOGGER.error( 'При подключении сервер вернул ошибку: %s' % e.error_message) sys_exit(1) else: client_socket.setDaemon(True) client_socket.start() del welcome_dialog client_main_window = MainWindowClient( client_db, client_socket, pub_keys) client_main_window.establish_connection(client_socket) client_main_window.setWindowTitle( "Takmachat pre-alpha - %s" % nickname) client_app.exec_() client_socket.shutdown_socket() client_socket.join()
def main(port, addr, name, password): server_address = addr server_port = port client_name = name client_passwd = password print(client_name, password) if server_port < 1024 or server_port > 65535: client_logger.critical( f'Попытка запуска сервера с указанием неподходящего порта {server_port} сервера.' f'Допустимы адреса с 1024 до 65535.') sys.exit(1) # Создаём клиентокое приложение client_app = QApplication(sys.argv) #Если имя пользователя не было указано в командной строке то запросим его start_dialog = UserNameDialog() if not client_name or not client_passwd: client_app.exec_() # Если пользователь ввёл имя и нажал ОК, то сохраняем ведённое и удаляем объект, инааче выходим if start_dialog.ok_pressed: client_name = start_dialog.client_name.text() client_passwd = start_dialog.client_passwd.text() else: sys.exit(0) # Записываем логи client_logger.info( f'Запущен клиент с парамертами: адрес сервера: {server_address} , порт: {server_port}, имя пользователя: {client_name}' ) # Загружаем ключи с файла, если же файла нет, то генерируем новую пару. #dir_path = os.path.dirname(os.path.realpath(__file__)) dir_path = os.getcwd() key_file = os.path.join(dir_path, f'{client_name}.key') if not os.path.exists(key_file): keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key: key.write(keys.export_key()) else: with open(key_file, 'rb') as key: keys = RSA.import_key(key.read()) keys.publickey().export_key() # Создаём объект базы данных database = ClientDatabase(client_name) # Создаём объект - транспорт и запускаем транспортный поток try: transfer = ClientTransfer(server_port, server_address, database, client_name, client_passwd, keys) except ServerError as error: print(error.text) sys.exit(1) transfer.setDaemon(True) transfer.start() # Удалим объект диалога за ненадобностью del start_dialog # Создаём GUI main_window = ClientMainWindow(database, transfer, keys) main_window.make_connection(transfer) main_window.setWindowTitle(f'Чат Программа alpha release - {client_name}') client_app.exec_() # Раз графическая оболочка закрылась, закрываем транспорт transfer.transfer_shutdown() transfer.join()