#ifndef CONNECTIONCONTROLLER_H #define CONNECTIONCONTROLLER_H #include #include class MasterController; class ConnectionConfig; class ConnectionList; class ConnectionTreeModel; class ConnectionManagerWindow; class PasswordManager; class QTimer; class ConnectionController : public QObject { Q_OBJECT public: explicit ConnectionController(MasterController *parent = nullptr); ~ConnectionController(); void init(); ConnectionTreeModel *getConnectionTreeModel() { return m_connectionTreeModel; } void showConnectionManager(); void openSqlWindowForConnection(QModelIndex index); void openServerWindowForConnection(QModelIndex index); void openBackupDlgForConnection(QModelIndex index); /// Starts the form for creating a new conncetion. /// This function returns immidiatly! void createConnection(); /// Starts the form for editing a conncetion. /// This function returns immidiatly! void editConnection(QModelIndex index); void addGroup(); void removeGroup(QModelIndex index); std::shared_ptr passwordManager(); private: MasterController *m_masterController; ConnectionList *m_connectionList = nullptr; ConnectionTreeModel *m_connectionTreeModel = nullptr; ConnectionManagerWindow *m_connectionManagerWindow = nullptr; QTimer *m_relockTimer = nullptr; /** Using long lived object so it can remember its master password for sometime * if the user wishes it. */ std::shared_ptr m_passwordManager; /** Retrieves the connection password from the user (directly or through the psk db) * */ bool retrieveConnectionPassword(ConnectionConfig &cc); bool decodePassword(const std::string &password_id, const std::string_view &enc_password, std::string &password); bool encodePassword(const std::string &password_id, const std::string &password, std::string &enc_password); /// /// /// \return bool: succeeded, int: relock timeout /// bool UnlockPasswordManagerIfNeeded(); static std::string getPskId(const ConnectionConfig &cc); private slots: void relock(); }; #endif // CONNECTIONCONTROLLER_H