Server Module¶
Серверный модуль мессенджера. Обрабатывает словари - сообщения, хранит публичные ключи клиентов и симметричные для обмена сообщениями. Публичный и приватный ключ сервера хранится в папке secret
Использование
Модуль поддерживает аргументы командной строки:
-p - Порт, на котором принимаются соединения
-a - Адрес, с которого принимаются соединения
Примеры использования:
Запуск сервера на порту 8000 с адресом «localhost»:
python server.py
Запуск сервера на выбранном порту и адресе:
python server.py -p 8080 -a 172.107.198.234
server.py¶
Запускаемы модуль содержит парсер аргументов командной строки и функционал инициализации приложения
- class backend.server.ServerClass(addr, port, wait, database)¶
Класс ServerClass принимает подключения от пользователей и обменивается с ними сообщениями
- Атрибуты:
addr (str): Ip-адрес подключения port (str): Порт подключения wait (int): Ожидание подключения database (type): Обьект базы данных
- Методы:
socket_init(): Инициализирует сокет сервера create_keys_for_encryption(): Создает или получает ключи шифрования для сервера (публичный, приватный) get_and_send_message(): Отправляет и получает сообщения от пользователя generic_privat_and_public_keys_server(): Создает ключи шифрования для сервера (публичный, приватный) generic_symmetric_key_server(): Создает симметричный ключ шифрования encrypted_message(msg_byte, public_key, symmetric_key): Шифрует сообщения гибридным шифрованием decrypted_message(data, privat_key): Расшифровывает сообщения
- add_contact_to_user(message, socket_of_user)¶
Функция принимает запрос на добавление контакта для пользователя и добавляет его ему в контакты
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- authorization_user_on_server(message, socket_of_user)¶
Функция принимает сообщение от пользователя на авторизацию, авторизирует его и отправляет ему ответ
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- create_keys_for_encryption()¶
Создает или получает ключи сервера
- Результат:
Строку «Ok» или «Error»
- decrypted_message(data, privat_key)¶
Метод расшифровывает и десериализует сообщения
- Параметры:
data – Кодированное сообщение. Тип binary
privat_key – Приватный ключ сервера. Тип str
- Результат:
Расшифрованное и десериализованное сообщение. Тип dict
- encrypted_message(msg_byte, public_key, symmetric_key)¶
Метод шифрует сообщение методом гибридного шифрования
- Параметры:
msg_byte – Кодированное сообщение. Тип binary
public_key – Публичный ключ пользователя. Тип str
symmetric_key – Симметричный ключ сообщения. Тип str
- Результат:
Зашифрованное и сериализованное сообщение. Тип binary
- exchange_symmetric_keys_users(message, socket_of_user)¶
Метод работает с сохранением, изменением и отправкой симметричного ключа для обмена сообщениями между пользователями
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- generic_privat_and_public_keys_server()¶
Генерируем публичный и приватный ключи для шифровки сообщения и возвращаем их в строковом формате
- Результат:
Возвращает приватный и публичный ключ сервера. Тип str
- generic_symmetric_key_server()¶
Генерируем симметричный ключ и возвращаем его в строковом формате
- Результат:
Возвращает симметричный ключ. Тип bytes
- get_and_send_message()¶
Отправляет и получает сообщения от сервера
- Результат:
Ничего
- get_contacts_user(message, socket_of_user)¶
Функция принимает запрос на получение всех контактов определенного пользователя и отправляет их
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- get_messages_target_user(message, socket_of_user)¶
Функция принимает запрос на получение всех сообщений определенного пользователя и отправляет их
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- get_statistic_all_users(message, socket_of_user)¶
Функция принимает запрос на получение статистики зарегестрированных пользователей и отправляет ее
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- get_target_users(message, socket_of_user)¶
Функция принимает запрос на получение зарегестрированных пользователей, логин которых начинается на определенное значение и отправляет их
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- logout_user(message, socket_of_user)¶
Функция принимает запрос на выход из аккаунта и выходит
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- registration_user_on_server(message, socket_of_user)¶
Функция принимает сообщение от пользователя на регистрацию, регистрирует его и отправляет ему ответ
- Параметры:
message – Сообщение. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строку «Ok»
- send_and_get_public_key_server(message, socket_of_user)¶
Функция принимает сообщение от пользователя на отправку публичного ключа и отправляет в ответ ключ. Сообщение передается в незашифрованном виде
- Параметры:
message –
socket_of_user –
- Результат:
- send_and_get_public_key_user(message, socket_of_user)¶
Берет публичный ключ пользователя из базы данных и отправляет его ему
- Параметры:
message – Сообщение от пользователя. Тип dict
socket_of_user – Сокет пользователя. Тип obj
- Результат:
Строка «Ok»
- socket_init()¶
Инициализирует сокет сервера
- Результат:
Ничего
descriptor.py¶
- class backend.descriptor.ServerCheckPort¶
Класс дескриптор порта. Запрещает установку значения меньше 0 и удаление атрибута
metaclasses.py¶
- class backend.metaclasses.ClientVerifier(clsname, base, attrs)¶
Метакласс для клиента. Запрещает создание сокета и использование методов listen и accept
- class backend.metaclasses.ServerVerifier¶
Метакласс для пользователя. Запрещает использовать метод connect
utils.py¶
- backend.utils.check_user_is_online(login, socket_user)¶
Функция проверяет онлайн пользователь или нет
- backend.utils.deserialization_message(message)¶
Десериализация сообщения
- backend.utils.init_socket_tcp()¶
Инициализация сокета
- backend.utils.install_param_in_socket_server()¶
Устанавливаем введенные пользователем параметры подключения к серверу/создания сервера
- backend.utils.serialization_message(message)¶
Сериализуем сообщение
- backend.utils.sys_param_reboot()¶
Обновление параметров командной строки
variables.py¶
crud.py¶
model.py¶
- class backend.server_database.model.Contacts(**kwargs)¶
- class backend.server_database.model.History(**kwargs)¶
- class backend.server_database.model.HistoryMessageUsers(**kwargs)¶
- class backend.server_database.model.User(**kwargs)¶