+ //! Validate user
+ /**
+ * \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 validateUser(const QString& userName, const QString& password)
+ {
+ 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;
+ }
+
+ //! Gets the authenticator configured for a user.
+ /**
+ * \param userName The user's name as a QString.
+ * \return String value corresponding to the user's configure dauthenticator.
+ */
+ static inline QString getUserAuthenticator(const QString& userName)
+ {
+ return instance()->_storage->getUserAuthenticator(instance()->_storage->getUserId(userName));
+ }
+
+ //! Gets the user ID mapped to a username. This is necessary so that non-database auth methods can log in users properly.
+ /**
+ * \param userName The user's name as a QString.
+ * \return userId The user's ID.
+ */
+ static inline UserId getUserId(const QString& userName)
+ {
+ return instance()->_storage->getUserId(userName);
+ }
+
+ //! 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);
+
+ //! 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
+ * \param settingName The Name of the Setting
+ * \param data The Value
+ */
+ static inline void setUserSetting(UserId userId, const QString& settingName, const QVariant& data)
+ {
+ instance()->_storage->setUserSetting(userId, settingName, data);
+ }
+
+ //! Retrieve a persistent user setting
+ /**
+ * \param userId The users Id
+ * \param settingName The Name of the Setting
+ * \param defaultValue Value to return in case it's unset.
+ * \return the Value of the Setting or the default value if it is unset.
+ */
+ static inline QVariant getUserSetting(UserId userId, const QString& settingName, const QVariant& defaultValue = QVariant())
+ {
+ return instance()->_storage->getUserSetting(userId, settingName, defaultValue);
+ }
+
+ /* Identity handling */
+ static inline IdentityId createIdentity(UserId user, CoreIdentity& identity)
+ {
+ return instance()->_storage->createIdentity(user, identity);
+ }
+
+ static bool updateIdentity(UserId user, const CoreIdentity& identity) { return instance()->_storage->updateIdentity(user, identity); }
+
+ static void removeIdentity(UserId user, IdentityId identityId) { instance()->_storage->removeIdentity(user, identityId); }
+
+ static QList<CoreIdentity> identities(UserId user) { return instance()->_storage->identities(user); }
+