úÎ%î#5      !"#$%&'()*+,-./01234None+3=BK 4Core user datatype. Store custom information in the  field?Password representation. When updating or creating a user, use 2e to create one. The implementation details of this type are ONLY for use in backend implementations. /Plaintext passsword. Used for authentification. *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 user Modify details of a user! Delete a user"=Authentificate a user using username/email and password. The 5 describes the session duration# Verify a  *. The session duration can be extended by 5$Destroy a session% Request a  for a given user, valid for 5& 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 5)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 creation21Construct a password from plaintext by hashing it3-Check a plaintext password against a password4&Strip the password from the user type.7  !"#$%&'()*+,-./01234675  !"#$%&'()*+,-./012345 !"#$%&'() 24 3 /10,.-*+    !"#$%&'()*+,.-/10234678        !"#$%&'()*+,-./01234567 users-0.2.0.1Web.Users.TypesUseru_nameu_email u_passwordu_activeu_morePasswordPasswordHidden PasswordHash PasswordPlainunPasswordPlain SessionId unSessionIdActivationTokenunActivationTokenPasswordResetTokenunPasswordResetTokenUserStorageBackendUserIdinitUserBackenddestroyUserBackendhousekeepBackend getUserById listUsers countUsers createUser updateUserupdateUserDetails deleteUserauthUser verifySessiondestroySessionrequestPasswordResetverifyPasswordResetTokenapplyNewPasswordrequestActivationToken activateUser TokenError TokenInvalidUpdateUserErrorUserDoesntExitUsernameOrEmailAlreadyExistsCreateUserErrorInvalidPasswordUsernameOrEmailAlreadyTaken makePasswordverifyPassword hidePassword time-1.4.2Data.Time.Clock.UTCNominalDiffTime$fFromJSONUser $fToJSONUser