sqglobe / securedialogues Goto Github PK
View Code? Open in Web Editor NEWПриложение обеспечивает дополнительный уровень шифрования сообщений, котрые передаются через сервисы подобные Gmail
License: MIT License
Приложение обеспечивает дополнительный уровень шифрования сообщений, котрые передаются через сервисы подобные Gmail
License: MIT License
Необходимо реализовать подклас QTranslator, который бы выполнял перевод с помощью gettext.
Добавть модель ContactDiscoveringModel, которая будет отображать контент ContactDiscoveringContainer в виде таблицы. Со следующими полями: channel, adress, name и date_time.
Добавить класс AbstractDispatchErrorsSink, который будет выполнять обработку ошибок в маршрутизации сообщений. Класс должен иметь один виртуальный метол, который получат тип ошибки и сообщение. В реализации для сообщений, для которых не найден контакт и которые имееют тип ContactDiscover, должны складываться в отдельный контейнер ContactDiscoveringContainer.
Переписать все сообщения в модуле messages на английский и обернуть в вызов gettext
Добавить функции валидации адреса. Это представлено шаблонной функцией, параметр шаблона отвечает за тип адреса. Функция принимает строку адреса и возвращает std::optional с обработанной строкой. Эта оюраюотка может включать в себя удаление пробелов или нечто иное.
Добавить новый тип сообщений ContactDiscover. Это сообщение может быть отправлено только вне диалога, причем dialog_id генерируется каджый раз уникальным. Сообщение содержит публичный ключ и имя, которое ввел пользователь.
Необходимо добавить плагин для вщаимодействия через VK
Добавить контейнер 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
получает сообщений. Возвращает MessageIteratorconnect
выполняет подключение с переданными параметрамиСтратегия обработки ошибок - возврат кода ошибки вместо исключений
Добавить в меню пункт "Настройки". По клику на данный пункт должно открываться диалоговое окно с настройками. На данный момент доступно лишь изменение языка. В диалоге присутствуют кнопки сохранить и отмена. Все изменения вступают в силу при сохранении. Необходимо добавить класс настроек, который будет доступен на изменение только диалогу, а всей остальной системе через указвтель на const. Диалог и класс настроек должны создаваться одним фабричным методом. Для хранения настроек должен использоваться стандартный механизм qt. При сохранении настроек должен посылаться сигнал settingsChanged
Необходимо добавить плагин для Gmail
Добавить в интерфейс кнопку над "Создать диалог" - "Контакт". По клику на кнопку должен появлять диалог с выбором канала отправки, имя для получателя и вводом адресата. По клику на кнопку ок, произаодится валидация адресата и выпоняется отправка ContactDiscover .
Добавить диалог с таблицей для ContactDiscoveringModel. Добавить всплывающее меню для этой таблицы с пунктами: добавить контакт, просмотр контакта и удаление контакта. Выбор меню работает так же как если бы пользователь работал через стандартный интерфейс. При добавлении/удалении удалются соответствующие записи из таблицы, модели, контейнера
Когда пользователь запускает приложение в первый раз, должно отображаться приветственное окно с сылкой на документацию и репозиторий проекта
Рассмотреть вариант переноса кнопок меню в toolbox
Добавить в проект модуль cmake, который будет предоставлять методы для генерации файла перевода gettext
Добавить в приложение статическую сборку библиотеки lubcurl. Скорее всего для этого ее необхрдимо будет подклбчить через git submodule. Зависимая от нее curl-wrapper должна быть перенесена в папку plugin-libs
Добавить поагин для работы через smtp
Необходимо добавить сборки для релиза со включенными флагами оптимизации, а так же interprocedural_optimization
Для дебага должен быть представлен флаг для включения sanitizer для gcc
Добавить класс-оболочку, которая будет получать уведомление об изменении настроек и при необходимости устанавливать настройки локали. А затем рассылать уведомление об изменении языка
Обеспечить выполнение тестов без ошибок
Необходимо настроить перевод пакета gui с использованием Qt Linguist
Необходимо добавить обертки для PluginWidget
и PluginMessageCommunicator
. PluginWidget
должен возвращать умный указатель на PluginConnectionInfo
, а PluginMessageCommunicator
умный указатель на RecievedMessagesIterator
При ошибке сохранения контактов/подключений, поля в карточке очищаются
Добавить контейнер для плагинов. Контейнер должен иметь метод для сканирования папки с плагинами и создания объектов. Возвращать асоциативный массив с идентификатором плагина и его именем, фасад плагина по его идентификатором
В пакете gui должен использоваться только английский язык.
В плагинах должен работать стандартный механизм интернационализации.
Изменить ConnectionWidget на использование плагинов
Функция производит поиск плагинов в определенной папке, извлекает из плагина его фасад.
После этого плагин добавляется в контейнер
Необходимо добавить новый класс DiscoverContactAgent. Этот класс должен получать от пользователя (через соответствующие обертки) имя, адоес и моникер канала, формировать сообщение DiscoverContact и отправлять его через MessageDespatcher::sendAndForget
Перенести ConnectionHolder и сериализатор на использование плагинов
После того, как все адаптеры перенесены в плагины, необходимо удалить неиспользуемый код
Необходимо размещать плагин в отдельной папке с расширением "adpt". Структура папки:
Plugin.adpt
|
|---- description.xml
|----- Plugin.so
|----- local
|---- lang-ru.ts
Файл описывает мета-информацию т плагине со списком языков и соответствующих файлов локализации, расположении и имени лсновной разделяемой библиотеки плагина, версии и пр.
Так же необходимо добавить описание xml-схемы для валидации description.xml и процедуру cmake для упаковки плагина в папку
Добавить плагин-заглушку с пустым виджетом, пустым connection info и пр для тестов
Добавить набор классов, которые будут предоставлять приложению доступ к функциям плагина
Диалог похож на карточку редактирования контактов. При открытии на просмотр все поля не активны. При редактировании доступны поля: name. При сохранении должен генерироваться сигнал
Необходимо изменить интерфейс adapter под использование плагинов . Добавить реализацию для плагинов.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.