Giter VIP home page Giter VIP logo

sqglobe / securedialogues Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 4.0 1.84 MB

Приложение обеспечивает дополнительный уровень шифрования сообщений, котрые передаются через сервисы подобные Gmail

License: MIT License

Shell 0.09% CMake 5.95% Makefile 0.53% C++ 93.23% C 0.19%
aes cmake cpp17 docker messaging oath2 rsa security-tools

securedialogues's People

Contributors

sqglobe avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

securedialogues's Issues

Общий механизм обработки ошибок деспетчеризации

Добавить класс AbstractDispatchErrorsSink, который будет выполнять обработку ошибок в маршрутизации сообщений. Класс должен иметь один виртуальный метол, который получат тип ошибки и сообщение. В реализации для сообщений, для которых не найден контакт и которые имееют тип ContactDiscover, должны складываться в отдельный контейнер ContactDiscoveringContainer.

Валидация адреса

Добавить функции валидации адреса. Это представлено шаблонной функцией, параметр шаблона отвечает за тип адреса. Функция принимает строку адреса и возвращает std::optional с обработанной строкой. Эта оюраюотка может включать в себя удаление пробелов или нечто иное.

Новый тип сообщений для обмена контактами

Добавить новый тип сообщений ContactDiscover. Это сообщение может быть отправлено только вне диалога, причем dialog_id генерируется каджый раз уникальным. Сообщение содержит публичный ключ и имя, которое ввел пользователь.

Контейнер для хранения полученных контактов

Добавить контейнер ContactDiscoveringContainer. Он должен быть таким же, как и остальные контейнеры и хранить структуру с полями: date_time, channel_moniker, contact_adress, public_key, name, dialog_id, уникальный ключ - dialog_id

Обработка всех сообщений

Сообщения, которые пришли, но не были полученые приложением, так как оно было закрыто. Должны быть обработаны после запуска. Для этого адаптерам необходимо сохранять
последний идентификатор обработанного сообщения и извлекать все, которые располагаются после него при первом запросе сообщений

Интерфейс для плагина

Статическая библиотека реализует общий интерфейс для плагинов. Код приложения загружает
динамическую библиотеку и импортирует функцию, которая возвращает фасад для библиотеки, который позволяет получить/создать/удалить основные объекты библиотеки.

Интерфейс предоставляет следующие функции:

  • get_facade - возвращает класс фасада для плагина
  • PlaginFacade - абстрактный класс фасада. Релизует следующий функционал:
    • получения указателя на виджет
    • удаление объекта соединения
    • получение указателя на класс для сериализации/десериализации
    • получение указателя на класс для отправки сообщений
    • получение идентификатора плагина
    • получение имени плагина для отображения пользователю
  • PluginWidget - абстрактный класс виджета, который имеет следующий функционал:
    • получение объекта соединения
    • проверка валидности соединения (возвращает сообщение в формате const char * или nullptr если сообщение валидно)
    • установка соединения
  • ConnectionInfo - класс параметров соединения. Возвращает уникальный идентификатор плагина.
  • ConnectionSerializer - абстарктный класс, который выполняет сериализацию/десериализацию параметров соединения. Предоставляет следующие методы:
    • serialize выполняет сериализацию объекта в буфер
    • get_size возвращает необходимый размер буфера для сериализации объекта
    • deserialize выполняет десериализацию буфер в объект соединения
  • MessageIterator абстрактный класс для итераторации по списку полученных сообщений. В деструкторе удаляет список полученных сообщений.
  • MessageAdapter - адаптер для получения и отправки сообщений. Функции:
    • send отправляет сообщение указанному адресату
    • recieve получает сообщений. Возвращает MessageIterator
    • connect выполняет подключение с переданными параметрами

Стратегия обработки ошибок - возврат кода ошибки вместо исключений

Настройки

Добавить в меню пункт "Настройки". По клику на данный пункт должно открываться диалоговое окно с настройками. На данный момент доступно лишь изменение языка. В диалоге присутствуют кнопки сохранить и отмена. Все изменения вступают в силу при сохранении. Необходимо добавить класс настроек, который будет доступен на изменение только диалогу, а всей остальной системе через указвтель на const. Диалог и класс настроек должны создаваться одним фабричным методом. Для хранения настроек должен использоваться стандартный механизм qt. При сохранении настроек должен посылаться сигнал settingsChanged

Кнопка для отправки своих контактных данных

Добавить в интерфейс кнопку над "Создать диалог" - "Контакт". По клику на кнопку должен появлять диалог с выбором канала отправки, имя для получателя и вводом адресата. По клику на кнопку ок, произаодится валидация адресата и выпоняется отправка ContactDiscover .

Добавить диалог для отображения полученных контактных данных

Добавить диалог с таблицей для ContactDiscoveringModel. Добавить всплывающее меню для этой таблицы с пунктами: добавить контакт, просмотр контакта и удаление контакта. Выбор меню работает так же как если бы пользователь работал через стандартный интерфейс. При добавлении/удалении удалются соответствующие записи из таблицы, модели, контейнера

Приветственное окно

Когда пользователь запускает приложение в первый раз, должно отображаться приветственное окно с сылкой на документацию и репозиторий проекта

Модуль cmake для gettext

Добавить в проект модуль cmake, который будет предоставлять методы для генерации файла перевода gettext

Статическая библиотека libcurl

Добавить в приложение статическую сборку библиотеки lubcurl. Скорее всего для этого ее необхрдимо будет подклбчить через git submodule. Зависимая от нее curl-wrapper должна быть перенесена в папку plugin-libs

Добавить сборки релиза и отладки

Необходимо добавить сборки для релиза со включенными флагами оптимизации, а так же interprocedural_optimization

Для дебага должен быть представлен флаг для включения sanitizer для gcc

Оболочка для переводов

Добавить класс-оболочку, которая будет получать уведомление об изменении настроек и при необходимости устанавливать настройки локали. А затем рассылать уведомление об изменении языка

Обертки для widget и communicator

Необходимо добавить обертки для PluginWidget и PluginMessageCommunicator. PluginWidget должен возвращать умный указатель на PluginConnectionInfo, а PluginMessageCommunicator умный указатель на RecievedMessagesIterator

Добавить контейнер для плагинов

Добавить контейнер для плагинов. Контейнер должен иметь метод для сканирования папки с плагинами и создания объектов. Возвращать асоциативный массив с идентификатором плагина и его именем, фасад плагина по его идентификатором

Добавить функцию поиска плагинов

Функция производит поиск плагинов в определенной папке, извлекает из плагина его фасад.
После этого плагин добавляется в контейнер

Инфраструктура отправки сообщения Discover

Необходимо добавить новый класс DiscoverContactAgent. Этот класс должен получать от пользователя (через соответствующие обертки) имя, адоес и моникер канала, формировать сообщение DiscoverContact и отправлять его через MessageDespatcher::sendAndForget

Упаковка плагина в отдельной папке

Необходимо размещать плагин в отдельной папке с расширением "adpt". Структура папки:

Plugin.adpt
|
|---- description.xml
|----- Plugin.so
|----- local
       |---- lang-ru.ts

Файл описывает мета-информацию т плагине со списком языков и соответствующих файлов локализации, расположении и имени лсновной разделяемой библиотеки плагина, версии и пр.

Так же необходимо добавить описание xml-схемы для валидации description.xml и процедуру cmake для упаковки плагина в папку

Плагин-заглушка

Добавить плагин-заглушку с пустым виджетом, пустым connection info и пр для тестов

Connection

Необходимо изменить интерфейс adapter под использование плагинов . Добавить реализацию для плагинов.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.