#ifndef APICONFIGSCONTROLLER_H #define APICONFIGSCONTROLLER_H #include #include "configurators/openvpn_configurator.h" #include "ui/models/api/apiServicesModel.h" #include "ui/models/servers_model.h" class ApiConfigsController : public QObject { Q_OBJECT public: ApiConfigsController(const QSharedPointer &serversModel, const QSharedPointer &apiServicesModel, const std::shared_ptr &settings, QObject *parent = nullptr); Q_PROPERTY(QList qrCodes READ getQrCodes NOTIFY vpnKeyExportReady) Q_PROPERTY(int qrCodesCount READ getQrCodesCount NOTIFY vpnKeyExportReady) public slots: bool exportNativeConfig(const QString &serverCountryCode, const QString &fileName); // bool exportVpnKey(const QString &fileName); void prepareVpnKeyExport(); bool fillAvailableServices(); bool importServiceFromGateway(); bool updateServiceFromGateway(const int serverIndex, const QString &newCountryCode, const QString &newCountryName, bool reloadServiceConfig = false); bool updateServiceFromTelegram(const int serverIndex); bool isConfigValid(); signals: void errorOccurred(ErrorCode errorCode); void installServerFromApiFinished(const QString &message); void changeApiCountryFinished(const QString &message); void reloadServerFromApiFinished(const QString &message); void updateServerFromApiFinished(); void vpnKeyExportReady(); private: struct ApiPayloadData { OpenVpnConfigurator::ConnectionData certRequest; QString wireGuardClientPrivKey; QString wireGuardClientPubKey; }; ApiPayloadData generateApiPayloadData(const QString &protocol); QJsonObject fillApiPayload(const QString &protocol, const ApiPayloadData &apiPayloadData); void fillServerConfig(const QString &protocol, const ApiPayloadData &apiPayloadData, const QByteArray &apiResponseBody, QJsonObject &serverConfig); QList getQrCodes(); int getQrCodesCount(); QList m_qrCodes; QSharedPointer m_serversModel; QSharedPointer m_apiServicesModel; std::shared_ptr m_settings; }; #endif // APICONFIGSCONTROLLER_H