úÎ Å&2      !"#$%&'()*+,-./01None+3=BK4Core user datatype. Store custom information in the  fieldBPassword representation. When updating or creating a user, set to  *A session id for identifying user sessions9An activation token to send out to users via email or sms<A password reset token to send out to users via email or smsAn abstract backend for managing users. A backend library should implement the interface and an end user should build applications on top of this interface.The storage backends userideInitialise the backend. Call once on application launch to for example create missing database tablesWDestory the backend. WARNING: This is only for testing! It deletes all tables and data.NThis cleans up invalid sessions and other tokens. Call periodically as needed.!Retrieve a user from the database&List all users (unlimited, or limited)Count all users Create a user Modify a userModify details of a user Delete a user =Authentificate a user using username/email and password. The 2 describes the session duration! Verify a  *. The session duration can be extended by 2"Destroy a session# Request a  for a given user, valid for 2$ Check if a , is still valid and retrieve the owner of it%%Apply a new password to the owner of  iff the token is still valid& Request an  for a given user, valid for 2'Activate the owner of  iff the token is still valid(8Errors that happen on storage level during token actions*8Errors that happen on storage level during user updating-8Errors that happen on storage level during user creation2  !"#$%&'()*+,-./010  !"#$%&'()*+,-./2-/.*,+() !"#$%&'  10     !"#$%&'()*,+-/.013       !"#$%&'()*+,-./0123 users-0.1.0.0Web.Users.TypesUseru_nameu_email u_passwordu_activeu_morePasswordPasswordHidden PasswordHash PasswordPlain SessionId unSessionIdActivationTokenunActivationTokenPasswordResetTokenunPasswordResetTokenUserStorageBackendUserIdinitUserBackenddestroyUserBackendhousekeepBackend getUserById listUsers countUsers createUser updateUserupdateUserDetails deleteUserauthUser verifySessiondestroySessionrequestPasswordResetverifyPasswordResetTokenapplyNewPasswordrequestActivationToken activateUser TokenError TokenInvalidUpdateUserErrorUserDoesntExitUsernameOrEmailAlreadyExistsCreateUserErrorInvalidPasswordUsernameOrEmailAlreadyTaken$fFromJSONUser $fToJSONUser time-1.4.2Data.Time.Clock.UTCNominalDiffTime