rVv      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                       ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e fghijklmnopqrstuNone+0KL     None+0KL None(*+03457>CKLN2 Ian arbitrary, but unique string that the user uses to identify themselves%}when creating JSON field names, drop the first character. Since we are using lens, the leading character should always be _.&"convert a value to a JSON encoded v'"convert a value to a JSON encoded v(#convert an error to a JSON encoded v*an *% address. No validation in performed.. A unique .4The shared secret is used to encrypt a users data on a per-user basis. We can invalidate a JWT value by changing the shared secret.<the < type is used to represent errors in a language agnostic manner. The errors are translated into human readable form via the I18N translations.DA map which stores the 4 for each F Generate a Salt from 128 bits of data from  /dev/urandomV, with the system RNG as a fallback. This is the function used to generate salts by  makePassword.G Generate a 4 from  /dev/urandom.see: FH Generate a 4 from .see: FI An empty DJ^This value is used to configure the type of new user registrations permitted for this system.K'new users can create their own accountsLjnew users can apply to create their own accounts, but a moderator must approve them before they are activeM'only the admin can create a new accountNNthis acid-state value contains the state common to all authentication methodsS#default session time out in secondsZa reasonable initial Nwset the 4 for ! overwritten any previous secret.xget the 4 for y3set the default inactivity timeout for new sessionsz3set the default inactivity timeout for new sessions{set the J|get the J} Create a new .. This will allocate a new . The returned . value will have the updated .~ Create a new .. This will allocate a new . The returned . value will have the updated .Update an existing .. Must already have a valid .Delete . with the specified  look up a . by their   look up a . by their  look up a . by their *&get the entire AuthenticateState value[The [= type represents the encrypted data used to identify a user.{get the 4 for *. Generate one if they don't have one yet.||b is used by the routing system to select which authentication backend should handle this request. is the encrypted form of the [4 which is passed between the server and the client. create a [ for .The  isAuthAdmin? paramater is a function which will be called to determine if o is a user who should be given Administrator privileges. This includes the ability to things such as set the OpenId+ realm, change the registeration mode, etc.decode and verify the . If successful, return the [ otherwise . name of the  used to hold the  create a [ for . and add a  to the v see also:  delete the [ get, decode, and verify the [ from the .get, decode, and verify the [ from the  Authorization HTTP headerget, decode, and verify the [ looking first in the  Authorization header and then in . see also: , get the calls  but returns only the a  for AuthenicateURLLhelper function which converts a URL for an authentication backend into an . !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZwxy,default timout in seconds (should be >= 180)z{|}~[\]^_`abcdefghijklmnopqrstuvwxyz{|}~isAuthAdmin functionthe user| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|#$%&'( !")-*+,3./012:;987456EFGHDI<=>?@ABCJKLMNOPQRSTXYWUVZuvstyzwxqropmnklijghefcdab_`{[\]^|}~p !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZwxyz{|}~[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneNone35None(+0357>KLNoneNone(+0357>L hash a password stringverify a passwordset the password for delete the password for Iverify that the supplied password matches the stored hashed password for 3verify that the supplied username/password is valid JSON record for new account data$JSON record for change password data JSON record for new account dataaccount handler JSON record for new account datarequest reset passwordissueResetToken\password in plain textsalted and hashedpassword in plain texthashed version of passwordUserIdthe hashed passwordUserIdUserIdplain-text password     J    e     9       None +0357KL !"#$%&' !"#$'&% !"#$   !"#$%&' None()()()() None(+0357>KL *+,-./0123456 *+,-./012345 /*+,-.3210465 *+,-./0123456 None +07>LO.Get the OpenId realm to use for authenticationP,set the realm used for OpenId AuthenticationIMPORTANT: Changing this value after users have registered is likely to invalidate existing OpenId tokens resulting in users no longer being able to access their old accounts.-789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc"789:?@ADEFGHJKLMNOPRSTUVWXYZ[\^_`a9>789:=<;B?@ACHDEFGIKJQLMNOP[\YZWXUV]]]]]]]]]]]]]RST^cb_`a789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc NonededededeNone +0357KLfghijklmnopqrs fghijklmnoplkfghijsrqmnop fghijklmnopqrsNonetutututu !"#$%&'()*+,-./ !0012234567889:;;<=>?@@ABCDEFGHIJKLMNOPQRSTUVWXYYZ[\]^_`abcdeefghhiijjkkllmmnnooppqqrrssttuuvwwxyz{|}~eG                                       ! " # G $ % & ' ( ) ) * + , - - . / 0 1 2 3 4 5 6 7 8 9 : : ; < < = = > > ? ? @ A B C D E F GHIJK  LMNOPQRSTUVWXYZ[\]^_`abcdQefghijklmnopqrstuvwxyz{|}~happs_84wjeGSrmcS9ZPIc8chLmmHappstack.Authenticate.Core)Happstack.Authenticate.OpenId.PartialsURL+Happstack.Authenticate.Password.PartialsURL!Happstack.Authenticate.ControllerHappstack.Authenticate.Route#Happstack.Authenticate.Password.URL+Happstack.Authenticate.Password.Controllers$Happstack.Authenticate.Password.Core(Happstack.Authenticate.Password.Partials%Happstack.Authenticate.Password.Route!Happstack.Authenticate.OpenId.URL"Happstack.Authenticate.OpenId.Core)Happstack.Authenticate.OpenId.Controllers&Happstack.Authenticate.OpenId.Partials#Happstack.Authenticate.OpenId.RouteSystemRandomuseri_AR0hHsocvNO99ghHvVYwFv Data.UserId succUserIdrUserIdunUserId _unUserIdUserId PartialURL UsingGoogle UsingYahoo RealmForm rUsingGoogle rUsingYahoo rRealmForm partialURL$fPathInfoPartialURL LoginInlineLoginLogoutSignupPasswordChangePasswordRequestResetPasswordFormResetPasswordForm rLoginInlinerLoginrLogoutrSignupPasswordrChangePasswordrRequestResetPasswordFormrResetPasswordFormUsername _unUsernameHappstackAuthenticateI18N jsonOptionstoJSONResponse toJSONSuccess toJSONError unUsernameEmail_unEmail rUsernameUser_userId _username_emailunEmail SharedSecret_unSharedSecretIxUserUserIxsemailuserIdusername CoreErrorHandlerNotFoundURLDecodeFailedUsernameAlreadyExistsAuthorizationRequired ForbiddenJSONDecodeFailed InvalidUserId SharedSecretsunSharedSecretgenSharedSecretgenSharedSecretDevURandomgenSharedSecretSysRandominitialSharedSecretsNewAccountModeOpenRegistrationModeratedRegistrationClosedRegistrationAuthenticateState_sharedSecrets_users _nextUserId_defaultSessionTimeout_newAccountModedefaultSessionTimeoutnewAccountMode nextUserId sharedSecretsusersinitialAuthenticateStateToken _tokenUser_tokenIsAuthAdminGetAuthenticateStateGetUserByEmailGetUserByUserIdGetUserByUsername DeleteUser UpdateUserCreateAnonymousUser CreateUserGetNewAccountModeSetNewAccountModeGetSharedSecretSetSharedSecretGetDefaultSessionTimeoutSetDefaultSessionTimeoutgetOrGenSharedSecretAuthenticationMethod_unAuthenticationMethod TokenTexttokenIsAuthAdmin tokenUser issueTokendecodeAndVerifyTokenauthCookieNameaddTokenCookiedeleteTokenCookiegetTokenCookiegetTokenHeadergetToken getUserIdunAuthenticationMethodAuthenticateURLAuthenticationMethods ControllersAuthenticationHandlersAuthenticationHandlerrAuthenticationMethodrAuthenticationMethods rControllersauthenticateURLnestAuthenticationMethodauthenticateCtrlauthenticateCtrlJsrouteinitAuthentication$fIntegerSupplyRouteT AccountURLPasswordpasswordAuthenticationMethod PasswordURLAccountPartialPasswordRequestReset PasswordResetUsernamePasswordCtrl rPassword accountURL$fPathInfoAccountURLrTokenrAccountrPartialrPasswordRequestResetrPasswordResetrUsernamePasswordCtrl passwordURLnestPasswordURL$fPathInfoPasswordURLusernamePasswordCtrlusernamePasswordCtrlJs PasswordErrorNotAuthenticated NotAuthorizedInvalidUsernameInvalidPasswordInvalidUsernamePasswordNoEmailAddressMissingResetTokenInvalidResetTokenPasswordMismatchpasswordErrorMessageE$fToJExprPasswordError$fFromJSONPasswordError$fToJSONPasswordError HashedPass _unHashedPass5$fRenderMessageHappstackAuthenticateI18NPasswordError$fSafeCopyHashedPass PasswordState _passwords unHashedPass mkHashedPassverifyHashedPass$fSafeCopyPasswordState passwordsinitialPasswordState setPassworddeletePasswordverifyPasswordForUserIdUserPass_user _passwordVerifyPasswordForUserIdDeletePassword SetPasswordverifyPassword*TFCo:R:MethodResultVerifyPasswordForUserIdNewAccountData_naUser _naPassword_naPasswordConfirmpasswordusertoken$fToJExprUserPass$fFromJSONUserPass$fToJSONUserPassChangePasswordData_cpOldPassword_cpNewPassword_cpNewPasswordConfirm naPasswordnaPasswordConfirmnaUser$fFromJSONNewAccountData$fToJSONNewAccountDataRequestResetPasswordData _rrpUsername cpNewPasswordcpNewPasswordConfirm cpOldPasswordaccount$fFromJSONChangePasswordData$fToJSONChangePasswordDataResetPasswordData _rpPassword_rpPasswordConfirm _rpResetToken rrpUsernamepasswordRequestResetissueResetTokensendResetEmail"$fFromJSONRequestResetPasswordData $fToJSONRequestResetPasswordData rpPasswordrpPasswordConfirm rpResetToken passwordResetdecodeAndVerifyResetToken$fFromJSONResetPasswordData$fToJSONResetPasswordData PartialMsgs UsernameMsgEmailMsg PasswordMsgPasswordConfirmationMsg SignUpMsg SignInMsg LogoutMsgOldPasswordMsgNewPasswordMsgNewPasswordConfirmationMsgChangePasswordMsgRequestPasswordResetMsgPartial' routePartialsignupPasswordFormusernamePasswordForm logoutFormchangePasswordFormrequestResetPasswordFormresetPasswordForm$fEmbedAsAttrRouteTAttr$fEmbedAsChildRouteTPartialMsgs3$fRenderMessageHappstackAuthenticateI18NPartialMsgs routePassword initPassword OpenIdURL BeginDanceReturnToRealmopenIdAuthenticationMethod rBeginDance rReturnTorRealm openIdURL nestOpenIdURL$fPathInfoOpenIdURL OpenIdErrorUnknownIdentifieropenIdErrorMessageE$fToJExprOpenIdError$fFromJSONOpenIdError$fToJSONOpenIdError$fSafeCopyIdentifier OpenIdState_1_identifiers_13$fRenderMessageHappstackAuthenticateI18NOpenIdError$fSafeCopyOpenIdState_1 OpenIdState _identifiers _openIdRealm identifiers_1$fSafeCopyOpenIdState identifiers openIdRealminitialOpenIdStateidentifierToUserIdassociateIdentifierWithUserIdgetOpenIdRealmsetOpenIdRealm$fMigrateOpenIdState SetRealmData_srOpenIdRealmSetOpenIdRealmGetOpenIdRealmAssociateIdentifierWithUserIdIdentifierToUserId!TFCo:R:MethodResultSetOpenIdRealm srOpenIdRealmrealm getIdentifier$fFromJSONSetRealmData$fToJSONSetRealmData openIdCtrl openIdCtrlJsUsingGoogleMsg UsingYahooMsg SetRealmMsgOpenIdRealmMsg usingGoogle usingYahoo realmForm routeOpenId initOpenIdhapps_KSlyY6zGeceGGCxSokTwFNHappstack.Server.Internal.TypesResponsesetSharedSecretgetSharedSecretsetDefaultSessionTimeoutgetDefaultSessionTimeoutsetNewAccountModegetNewAccountMode createUsercreateAnonymousUser updateUser deleteUsergetUserByUsernamegetUserByUserIdgetUserByEmailgetAuthenticateStatebaseGHC.BaseNothing Happstack.Server.Internal.CookieCookiewebro_85D8P4XaGH4EsZGM5mpvnBWeb.Routes.BoomerangRouter$fSafeCopyUsername$fPathInfoUsername$fFromJSONUsername$fToJSONUsername$fSafeCopyEmail$fPathInfoEmail$fFromJSONEmail $fToJSONEmail$fSafeCopyUser$fIndexable:User$fFromJSONUser $fToJSONUser$fSafeCopySharedSecret$fToJExprCoreError$fFromJSONCoreError$fToJSONCoreError$fSafeCopyCoreError1$fRenderMessageHappstackAuthenticateI18NCoreError$fSafeCopyNewAccountMode$fSafeCopyAuthenticateState'TFCo:R:MethodResultGetAuthenticateState$fFromJSONToken $fToJSONToken$fPathInfoAuthenticationMethod$fSafeCopyAuthenticationMethod$fFromJSONAuthenticationMethod$fToJSONAuthenticationMethod$fPathInfoAuthenticateURL