Пример #1
0
    # Загружаем ключи с файла, если же файла нет, то генерируем новую пару.
    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
Пример #2
0
            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_()
Пример #3
0
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()
Пример #4
0
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()