X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=835e7879c9bcd5e343d56fb8b1c503da1f6f9547;hp=f9746451f4c9fdd54543beac683977f061da6a19;hb=7fb88a023ef8e4658b39d22c2d88c0d8bd6709f8;hpb=10e6f4629e39c66cfb8db6ab2806bf8f13ec700b diff --git a/src/core/core.h b/src/core/core.h index f9746451..835e7879 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -34,6 +34,7 @@ # include #endif +#include "authenticator.h" #include "bufferinfo.h" #include "message.h" #include "oidentdconfiggenerator.h" @@ -74,6 +75,36 @@ public: return instance()->_storage->validateUser(userName, password); } + //! Authenticate user against auth backend + /** + * \param userName The user's login name + * \param password The user's uncrypted password + * \return The user's ID if valid; 0 otherwise + */ + static inline UserId authenticateUser(const QString &userName, const QString &password) { + return instance()->_authenticator->validateUser(userName, password); + } + + //! Add a new user, exposed so auth providers can call this without being the storage. + /** + * \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, 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 /** @@ -503,6 +534,7 @@ public: static bool reloadCerts(); static QVariantList backendInfo(); + static QVariantList authenticatorInfo(); /** * Checks if a storage backend is the default storage backend. This @@ -517,7 +549,7 @@ public: return (backend->displayName() == "SQLite") ? true : false; } - static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData); + static QString setup(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authBackend, const QVariantMap &authSetupMap); static inline QTimer &syncTimer() { return instance()->_storageSyncTimer; } @@ -531,7 +563,7 @@ public slots: */ void syncStorage(); void setupInternalClientSession(InternalPeer *clientConnection); - QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData); + QString setupCore(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData, const QString &authBackend, const QVariantMap &authSetupMap); signals: //! Sent when a BufferInfo is updated in storage. @@ -550,6 +582,7 @@ private slots: void clientDisconnected(); bool initStorage(const QString &backend, const QVariantMap &settings, bool setup = false); + bool initAuthenticator(const QString &backend, const QVariantMap &settings, bool setup = false); void socketError(QAbstractSocket::SocketError err, const QString &errorString); void setupClientSession(RemotePeer *, UserId); @@ -571,15 +604,25 @@ private: bool registerStorageBackend(Storage *); void unregisterStorageBackends(); void unregisterStorageBackend(Storage *); + + void registerAuthenticatorBackends(); + bool registerAuthenticatorBackend(Authenticator *); + void unregisterAuthenticatorBackends(); + void unregisterAuthenticatorBackend(Authenticator *); + bool selectBackend(const QString &backend); bool createUser(); bool saveBackendSettings(const QString &backend, const QVariantMap &settings); + void saveAuthBackendSettings(const QString &backend, const QVariantMap &settings); QVariantMap promptForSettings(const Storage *storage); private: QSet _connectingClients; QHash _sessions; + + // Have both a storage backend and an authenticator backend. Storage *_storage; + Authenticator *_authenticator; QTimer _storageSyncTimer; #ifdef HAVE_SSL @@ -591,6 +634,7 @@ private: OidentdConfigGenerator *_oidentdConfigGenerator; QHash _storageBackends; + QHash _authenticatorBackends; QDateTime _startTime;