X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=644e9b9720d831758b8762cc948da0a0d5f5d9e6;hp=c71dfa8c37ae77e195600857430a547605dbf8e2;hb=d6f3eedebc7f9619b04dffc5f48faa792950fdcd;hpb=9d54503555534a2c554f09a33df6afa33d6308ec diff --git a/src/core/core.h b/src/core/core.h index c71dfa8c..644e9b97 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -34,6 +34,7 @@ # include #endif +#include "authenticator.h" #include "bufferinfo.h" #include "message.h" #include "oidentdconfiggenerator.h" @@ -74,6 +75,34 @@ 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 + * \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); + } + + //! Change a user's password + /** + * \param userId The user's ID + * \param password The user's unencrypted new password + * \return true, if the password change was successful + */ + static bool changeUserPassword(UserId userId, const QString &password); + //! Store a user setting persistently /** * \param userId The users Id @@ -485,9 +514,31 @@ public: static inline QDateTime startTime() { return instance()->_startTime; } static inline bool isConfigured() { return instance()->_configured; } static bool sslSupported(); + + /** + * Reloads SSL certificates used for connection with clients + * + * @return True if certificates reloaded successfully, otherwise false. + */ + static bool reloadCerts(); + 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); + 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; } @@ -501,7 +552,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. @@ -520,17 +571,20 @@ 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); + bool changeUserPass(const QString &username); + private: Core(); ~Core(); void init(); static Core *instanceptr; - SessionThread *createSession(UserId userId, bool restoreState = false); + SessionThread *sessionForUser(UserId userId, bool restoreState = false); void addClientHelper(RemotePeer *peer, UserId uid); //void processCoreSetup(QTcpSocket *socket, QVariantMap &msg); QString setupCoreForInternalUsage(); @@ -539,16 +593,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); - void createUser(); - void changeUserPass(const QString &username); - void saveBackendSettings(const QString &backend, const QVariantMap &settings); + 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; + QHash _sessions; + + // Have both a storage backend and an authenticator backend. Storage *_storage; + Authenticator *_authenticator; QTimer _storageSyncTimer; #ifdef HAVE_SSL @@ -560,6 +623,7 @@ private: OidentdConfigGenerator *_oidentdConfigGenerator; QHash _storageBackends; + QHash _authenticatorBackends; QDateTime _startTime;