X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=333d06700ecda6529d4b8d29bb99e401a651f409;hb=502b47a608a55374bd28b6b698971f9f697e2d20;hp=644e9b9720d831758b8762cc948da0a0d5f5d9e6;hpb=d6f3eedebc7f9619b04dffc5f48faa792950fdcd;p=quassel.git diff --git a/src/core/core.h b/src/core/core.h index 644e9b97..333d0670 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -18,8 +18,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef CORE_H -#define CORE_H +#pragma once + +#include +#include #include #include @@ -36,6 +38,7 @@ #include "authenticator.h" #include "bufferinfo.h" +#include "deferredptr.h" #include "message.h" #include "oidentdconfiggenerator.h" #include "sessionthread.h" @@ -89,10 +92,21 @@ public: /** * \param userName The user's login name * \param password The user's uncrypted password + * \param authenticator The name of the auth provider service used to log the user in, defaults to "Database". * \return The user's ID if valid; 0 otherwise */ - static inline UserId addUser(const QString &userName, const QString &password) { - return instance()->_storage->addUser(userName, password); + static inline UserId addUser(const QString &userName, const QString &password, const QString &authenticator = "Database") { + return instance()->_storage->addUser(userName, password, authenticator); + } + + //! Does a comparison test against the authenticator in the database and the authenticator currently in use for a UserID. + /** + * \param userid The user's ID (note: not login name). + * \param authenticator The name of the auth provider service used to log the user in, defaults to "Database". + * \return True if the userid was configured with the passed authenticator, false otherwise. + */ + static inline bool checkAuthProvider(const UserId userid, const QString &authenticator) { + return instance()->_storage->getUserAuthenticator(userid) == authenticator; } //! Change a user's password @@ -103,6 +117,13 @@ public: */ static bool changeUserPassword(UserId userId, const QString &password); + //! Check if we can change a user password. + /** + * \param userID The user's ID + * \return true, if we can change their password, false otherwise + */ + static bool canChangeUserPassword(UserId userId); + //! Store a user setting persistently /** * \param userId The users Id @@ -525,20 +546,7 @@ public: static QVariantList backendInfo(); static QVariantList authenticatorInfo(); - /** - * Checks if a storage backend is the default storage backend. This - * hardcodes this information into the core (not the client). - * - * \param backend The backend to check. - * - * @return True if storage backend is default, false otherwise. - */ - static inline bool isStorageBackendDefault(const Storage *backend) - { - return (backend->displayName() == "SQLite") ? true : false; - } - - static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authBackend, const QVariantMap &authSetupMap); + 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; } @@ -552,7 +560,7 @@ public slots: */ void syncStorage(); void setupInternalClientSession(InternalPeer *clientConnection); - QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authBackend, const QVariantMap &authSetupMap); + 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. @@ -589,29 +597,34 @@ private: //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); QString setupCoreForInternalUsage(); + bool createUser(); + + template + void registerStorageBackend(); + + template + void registerAuthenticator(); + void registerStorageBackends(); - bool registerStorageBackend(Storage *); - void unregisterStorageBackends(); - void unregisterStorageBackend(Storage *); + void registerAuthenticators(); - void registerAuthenticatorBackends(); - bool registerAuthenticatorBackend(Authenticator *); - void unregisterAuthenticatorBackends(); - void unregisterAuthenticatorBackend(Authenticator *); + DeferredSharedPtr storageBackend(const QString& backendId) const; + DeferredSharedPtr authenticator(const QString& authenticatorId) const; bool selectBackend(const QString &backend); - bool createUser(); + bool selectAuthenticator(const QString &backend); + bool saveBackendSettings(const QString &backend, const QVariantMap &settings); - void saveAuthBackendSettings(const QString &backend, const QVariantMap &settings); - QVariantMap promptForSettings(const Storage *storage); + void saveAuthenticatorSettings(const QString &backend, const QVariantMap &settings); + + template + QVariantMap promptForSettings(const Backend *backend); private: QSet _connectingClients; QHash _sessions; - - // Have both a storage backend and an authenticator backend. - Storage *_storage; - Authenticator *_authenticator; + DeferredSharedPtr _storage; ///< Active storage backend + DeferredSharedPtr _authenticator; ///< Active authenticator QTimer _storageSyncTimer; #ifdef HAVE_SSL @@ -620,21 +633,18 @@ private: QTcpServer _server, _v6server; #endif - OidentdConfigGenerator *_oidentdConfigGenerator; + OidentdConfigGenerator *_oidentdConfigGenerator {nullptr}; - QHash _storageBackends; - QHash _authenticatorBackends; + std::vector> _registeredStorageBackends; + std::vector> _registeredAuthenticators; QDateTime _startTime; bool _configured; - static AbstractSqlMigrationReader *getMigrationReader(Storage *storage); - static AbstractSqlMigrationWriter *getMigrationWriter(Storage *storage); + static std::unique_ptr getMigrationReader(Storage *storage); + static std::unique_ptr getMigrationWriter(Storage *storage); static void stdInEcho(bool on); static inline void enableStdInEcho() { stdInEcho(true); } static inline void disableStdInEcho() { stdInEcho(false); } }; - - -#endif