+ //! 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;
+ }
+
+ //! 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);
+ }
+
+