#ifndef SERVERSCONTROLLER_H #define SERVERSCONTROLLER_H #include #include #include #include #include #include #include "core/utils/containerEnum.h" #include "core/utils/containers/containerUtils.h" #include "core/utils/protocolEnum.h" #include "core/utils/errorCodes.h" #include "core/utils/routeModes.h" #include "core/utils/commonStructs.h" #include "core/repositories/secureServersRepository.h" #include "core/repositories/secureAppSettingsRepository.h" #include "core/models/serverConfig.h" #include "core/models/containerConfig.h" class SshSession; class InstallController; using namespace amnezia; /** * @brief Core business logic controller for server operations * * This controller contains pure business logic for managing servers. */ class ServersController : public QObject { Q_OBJECT public: struct GatewayStacksData { QSet userCountryCodes; QSet serviceTypes; bool isEmpty() const { return userCountryCodes.isEmpty() && serviceTypes.isEmpty(); } bool operator==(const GatewayStacksData &other) const; QJsonObject toJson() const; }; public: explicit ServersController(SecureServersRepository* serversRepository, SecureAppSettingsRepository* appSettingsRepository = nullptr, QObject *parent = nullptr); ~ServersController() = default; // Server management void addServer(const ServerConfig &server); void editServer(int index, const ServerConfig &server); void removeServer(int index); void setDefaultServerIndex(int index); // Container management void setDefaultContainer(int serverIndex, DockerContainer container); void updateContainerConfig(int serverIndex, DockerContainer container, const ContainerConfig &config); // Cache management void clearCachedProfile(int serverIndex, DockerContainer container); // XRay subscription config getters/setters void setCurrentConfigIndex(int index); int getCurrentConfigIndex() const; QString getConfigString(const int index) const; QString getConfigName(const int index) const; QJsonArray getConfigNames() const; // Getters QJsonArray getServersArray() const; QVector getServers() const; int getDefaultServerIndex() const; int getServersCount() const; ServerConfig getServerConfig(int serverIndex) const; ServerCredentials getServerCredentials(int serverIndex) const; ContainerConfig getContainerConfig(int serverIndex, DockerContainer container) const; QPair getDnsPair(int serverIndex, bool isAmneziaDnsEnabled) const; GatewayStacksData gatewayStacks() const; // Validation bool isServerFromApiAlreadyExists(const QString &userCountryCode, const QString &serviceType, const QString &serviceProtocol) const; bool hasInstalledContainers(int serverIndex) const; signals: void gatewayStacksExpanded(); public slots: void recomputeGatewayStacks(); private: SecureServersRepository* m_serversRepository; SecureAppSettingsRepository* m_appSettingsRepository; GatewayStacksData m_gatewayStacks; }; #endif // SERVERSCONTROLLER_H