Server Module

Серверный модуль мессенджера. Обрабатывает словари - сообщения, хранит публичные ключи клиентов и симметричные для обмена сообщениями. Публичный и приватный ключ сервера хранится в папке secret

Использование

Модуль поддерживает аргументы командной строки:

  1. -p - Порт, на котором принимаются соединения

  2. -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)

server_log_config.py