+ //! 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);
+ }
+
+
+ //! Create a Network in the Storage and store it's Id in the given NetworkInfo
+ /** \note This method is thredsafe.
+ *
+ * \param user The core user
+ * \param networkInfo a NetworkInfo definition to store the newly created ID in
+ * \return true if successfull.
+ */
+ static bool createNetwork(UserId user, NetworkInfo &info);
+
+ //! Apply the changes to NetworkInfo info to the storage engine
+ /** \note This method is thredsafe.
+ *
+ * \param user The core user
+ * \param networkInfo The Updated NetworkInfo
+ * \return true if successfull.
+ */
+ static inline bool updateNetwork(UserId user, const NetworkInfo &info)
+ {
+ return instance()->_storage->updateNetwork(user, info);
+ }
+
+
+ //! Permanently remove a Network and all the data associated with it.
+ /** \note This method is thredsafe.
+ *
+ * \param user The core user
+ * \param networkId The network to delete
+ * \return true if successfull.
+ */
+ static inline bool removeNetwork(UserId user, const NetworkId &networkId)
+ {
+ return instance()->_storage->removeNetwork(user, networkId);
+ }
+
+
+ //! Returns a list of all NetworkInfos for the given UserId user
+ /** \note This method is thredsafe.