X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=7da4f2272cfd7cd4f4d28d0d42327f6a15a0cd62;hb=41b9d689945e784b160a25d12076600ff4b7ae90;hp=a9ede2e36ab46d576b097a5658eec4599f5647f5;hpb=67e4eb295238453c94da41185bcdb20d908859d6;p=quassel.git diff --git a/src/core/core.h b/src/core/core.h index a9ede2e3..7da4f227 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -44,13 +45,16 @@ #include "sessionthread.h" #include "storage.h" #include "types.h" +#include "identserver.h" class CoreAuthHandler; class CoreSession; -struct NetworkInfo; +class InternalPeer; class SessionThread; class SignalProxy; +struct NetworkInfo; + class AbstractSqlMigrationReader; class AbstractSqlMigrationWriter; @@ -60,10 +64,9 @@ class Core : public QObject public: static Core *instance(); - static void destroy(); - static void saveState(); - static void restoreState(); + Core(); + ~Core() override; /*** Storage access ***/ // These methods are threadsafe. @@ -682,34 +685,18 @@ public: static bool sslSupported(); - /** - * Reloads SSL certificates used for connection with clients - * - * @return True if certificates reloaded successfully, otherwise false. - */ - static bool reloadCerts(); - - static void cacheSysIdent(); - static QVariantList backendInfo(); static QVariantList authenticatorInfo(); static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap); - static inline QTimer &syncTimer() { return instance()->_storageSyncTimer; } + static inline QTimer *syncTimer() { return &instance()->_storageSyncTimer; } inline OidentdConfigGenerator *oidentdConfigGenerator() const { return _oidentdConfigGenerator; } + inline IdentServer *identServer() const { return _identServer; } static const int AddClientEventId; -public slots: - //! Make storage data persistent - /** \note This method is threadsafe. - */ - void syncStorage(); - void setupInternalClientSession(InternalPeer *clientConnection); - QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap); - signals: //! Sent when a BufferInfo is updated in storage. void bufferInfoUpdated(UserId user, const BufferInfo &info); @@ -717,8 +704,33 @@ signals: //! Relay from CoreSession::sessionState(). Used for internal connection only void sessionState(const Protocol::SessionState &sessionState); + //! Emitted when database schema upgrade starts or ends + void dbUpgradeInProgress(bool inProgress); + +public slots: + bool init(); + + /** Persist storage. + * + * @note This method is threadsafe. + */ + void syncStorage(); + + /** + * Reload SSL certificates used for connection with clients. + * + * @return True if certificates reloaded successfully, otherwise false. + */ + bool reloadCerts(); + + void cacheSysIdent(); + + QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authenticator, const QVariantMap &authSetupMap); + + void connectInternalPeer(QPointer peer); + protected: - virtual void customEvent(QEvent *event); + void customEvent(QEvent *event) override; private slots: bool startListening(); @@ -739,15 +751,11 @@ private slots: bool changeUserPass(const QString &username); private: - Core(); - ~Core(); - void init(); - static Core *instanceptr; - SessionThread *sessionForUser(UserId userId, bool restoreState = false); void addClientHelper(RemotePeer *peer, UserId uid); //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); QString setupCoreForInternalUsage(); + void setupInternalClientSession(QPointer peer); bool createUser(); @@ -769,17 +777,22 @@ private: bool saveBackendSettings(const QString &backend, const QVariantMap &settings); void saveAuthenticatorSettings(const QString &backend, const QVariantMap &settings); + void saveState(); + void restoreState(); + template QVariantMap promptForSettings(const Backend *backend); private: + static Core *_instance; QSet _connectingClients; QHash _sessions; DeferredSharedPtr _storage; ///< Active storage backend DeferredSharedPtr _authenticator; ///< Active authenticator - QTimer _storageSyncTimer; QMap _authUserNames; + QTimer _storageSyncTimer; + #ifdef HAVE_SSL SslServer _server, _v6server; #else @@ -793,7 +806,12 @@ private: QDateTime _startTime; - bool _configured; + IdentServer *_identServer {nullptr}; + + bool _initialized{false}; + bool _configured{false}; + + QPointer _pendingInternalConnection; /// Whether or not strict ident mode is enabled, locking users' idents to Quassel username bool _strictIdentEnabled;