yesod-auth 1.4.12 → 1.4.13
raw patch · 8 files changed
+309/−119 lines, 8 filesdep ~yesod-core
Dependency ranges changed: yesod-core
Files
- ChangeLog.md +5/−0
- Yesod/Auth.hs +4/−4
- Yesod/Auth/BrowserId.hs +3/−0
- Yesod/Auth/Email.hs +186/−70
- Yesod/Auth/GoogleEmail2.hs +2/−2
- Yesod/Auth/Hardcoded.hs +4/−1
- Yesod/Auth/Message.hs +103/−40
- yesod-auth.cabal +2/−2
ChangeLog.md view
@@ -1,3 +1,8 @@+## 1.4.13++* Add a CSRF token to the login form from `Yesod.Auth.Hardcoded`, making it compatible with the CSRF middleware [#1161](https://github.com/yesodweb/yesod/pull/1161)+* Multiple session messages. [#1187](https://github.com/yesodweb/yesod/pull/1187)+ ## 1.4.12 * Deprecated Yesod.Auth.GoogleEmail
Yesod/Auth.hs view
@@ -189,9 +189,9 @@ authHttpManager :: master -> Manager -- | Called on a successful login. By default, calls- -- @setMessageI NowLoggedIn@.+ -- @addMessageI "success" NowLoggedIn@. onLogin :: HandlerT master IO ()- onLogin = setMessageI Msg.NowLoggedIn+ onLogin = addMessageI "success" Msg.NowLoggedIn -- | Called on logout. By default, does nothing onLogout :: HandlerT master IO ()@@ -214,10 +214,10 @@ maybeAuthId = defaultMaybeAuthId -- | Called on login error for HTTP requests. By default, calls- -- @setMessage@ and redirects to @dest@.+ -- @addMessage@ with "error" as status and redirects to @dest@. onErrorHtml :: (MonadResourceBase m) => Route master -> Text -> HandlerT master m Html onErrorHtml dest msg = do- setMessage $ toHtml msg+ addMessage "error" $ toHtml msg fmap asHtml $ redirect dest -- | runHttpRequest gives you a chance to handle an HttpException and retry
Yesod/Auth/BrowserId.hs view
@@ -2,7 +2,10 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE RecordWildCards #-}+-- | NOTE: Mozilla Persona will be shut down by the end of 2016, therefore this+-- module is no longer recommended for use. module Yesod.Auth.BrowserId+ {-# DEPRECATED "Mozilla Persona will be shut down by the end of 2016" #-} ( authBrowserId , createOnClick, createOnClickOverride , def
Yesod/Auth/Email.hs view
@@ -107,6 +107,11 @@ , emailCredsEmail :: Email } +data ForgotPasswordForm = ForgotPasswordForm { forgotEmail :: Text }+data PasswordForm = PasswordForm { passwordCurrent :: Text, passwordNew :: Text, passwordConfirm :: Text }+data UserForm = UserForm { email :: Text }+data UserLoginForm = UserLoginForm { loginEmail :: Text, loginPassword :: Text }+ class ( YesodAuth site , PathPiece (AuthEmailId site) , (RenderMessage site Msg.AuthMessage)@@ -253,30 +258,9 @@ -> AuthHandler site TypedContent setPasswordHandler = defaultSetPasswordHandler --authEmail :: YesodAuthEmail m => AuthPlugin m+authEmail :: (YesodAuthEmail m) => AuthPlugin m authEmail =- AuthPlugin "email" dispatch $ \tm ->- [whamlet|-$newline never-<form method="post" action="@{tm loginR}">- <table>- <tr>- <th>_{Msg.Email}- <td>- <input type="email" name="email" required>- <tr>- <th>_{Msg.Password}- <td>- <input type="password" name="password" required>- <tr>- <td colspan="2">- <button type=submit .btn .btn-success>- _{Msg.LoginViaEmail}- - <a href="@{tm registerR}" .btn .btn-default>- _{Msg.RegisterLong}-|]+ AuthPlugin "email" dispatch emailLoginHandler where dispatch "GET" ["register"] = getRegisterR >>= sendResponse dispatch "POST" ["register"] = postRegisterR >>= sendResponse@@ -294,24 +278,99 @@ getRegisterR :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) Html getRegisterR = registerHandler +emailLoginHandler :: YesodAuthEmail master => (Route Auth -> Route master) -> WidgetT master IO ()+emailLoginHandler toParent = do+ (widget, enctype) <- liftWidgetT $ generateFormPost loginForm++ [whamlet|+ <form method="post" action="@{toParent loginR}">+ <div id="emailLoginForm">+ ^{widget}+ <div>+ <button type=submit .btn .btn-success>+ _{Msg.LoginViaEmail}+ + <a href="@{toParent registerR}" .btn .btn-default>+ _{Msg.RegisterLong}+ |]+ where+ loginForm extra = do++ emailMsg <- renderMessage' Msg.Email+ (emailRes, emailView) <- mreq emailField (emailSettings emailMsg) Nothing++ passwordMsg <- renderMessage' Msg.Password+ (passwordRes, passwordView) <- mreq passwordField (passwordSettings passwordMsg) Nothing++ let userRes = UserLoginForm <$> emailRes <*> passwordRes+ let widget = do+ [whamlet|+ #{extra}+ <div>+ ^{fvInput emailView}+ <div>+ ^{fvInput passwordView}+ |]++ return (userRes, widget)+ emailSettings emailMsg = do+ FieldSettings {+ fsLabel = SomeMessage Msg.Email,+ fsTooltip = Nothing,+ fsId = Just "email",+ fsName = Just "email",+ fsAttrs = [("autofocus", ""), ("placeholder", emailMsg)]+ }+ passwordSettings passwordMsg =+ FieldSettings {+ fsLabel = SomeMessage Msg.Password,+ fsTooltip = Nothing,+ fsId = Just "password",+ fsName = Just "password",+ fsAttrs = [("placeholder", passwordMsg)]+ }+ renderMessage' msg = do+ langs <- languages+ master <- getYesod+ return $ renderAuthMessage master langs msg -- | Default implementation of 'registerHandler'. -- -- Since: 1.2.6 defaultRegisterHandler :: YesodAuthEmail master => AuthHandler master Html defaultRegisterHandler = do- email <- newIdent- tp <- getRouteToParent+ (widget, enctype) <- lift $ generateFormPost registrationForm+ toParentRoute <- getRouteToParent lift $ authLayout $ do setTitleI Msg.RegisterLong [whamlet| <p>_{Msg.EnterEmail}- <form method="post" action="@{tp registerR}">+ <form method="post" action="@{toParentRoute registerR}" enctype=#{enctype}> <div id="registerForm">- <label for=#{email}>_{Msg.Email}:- <input ##{email} type="email" name="email" width="150" autofocus>+ ^{widget} <button .btn>_{Msg.Register} |]+ where+ registrationForm extra = do+ let emailSettings = FieldSettings {+ fsLabel = SomeMessage Msg.Email,+ fsTooltip = Nothing,+ fsId = Just "email",+ fsName = Just "email",+ fsAttrs = [("autofocus", "")]+ } + (emailRes, emailView) <- mreq emailField emailSettings Nothing++ let userRes = UserForm <$> emailRes+ let widget = do+ [whamlet|+ #{extra}+ ^{fvLabel emailView}+ ^{fvInput emailView}+ |]++ return (userRes, widget)+ registerHelper :: YesodAuthEmail master => Bool -- ^ allow usernames? -> Route Auth@@ -365,19 +424,39 @@ -- Since: 1.2.6 defaultForgotPasswordHandler :: YesodAuthEmail master => AuthHandler master Html defaultForgotPasswordHandler = do- tp <- getRouteToParent- email <- newIdent+ (widget, enctype) <- lift $ generateFormPost forgotPasswordForm+ toParent <- getRouteToParent lift $ authLayout $ do setTitleI Msg.PasswordResetTitle [whamlet| <p>_{Msg.PasswordResetPrompt}- <form method="post" action="@{tp forgotPasswordR}">- <div id="registerForm">- <label for=#{email}>_{Msg.ProvideIdentifier}- <input ##{email} type=text name="email" width="150" autofocus>- <button .btn>_{Msg.SendPasswordResetEmail}+ <form method=post action=@{toParent forgotPasswordR} enctype=#{enctype}>+ <div id="forgotPasswordForm">+ ^{widget}+ <button .btn>_{Msg.SendPasswordResetEmail} |]+ where+ forgotPasswordForm extra = do+ (emailRes, emailView) <- mreq emailField emailSettings Nothing+ + let forgotPasswordRes = ForgotPasswordForm <$> emailRes+ let widget = do+ [whamlet|+ #{extra}+ ^{fvLabel emailView}+ ^{fvInput emailView}+ |]+ return (forgotPasswordRes, widget) + emailSettings =+ FieldSettings {+ fsLabel = SomeMessage Msg.ProvideIdentifier,+ fsTooltip = Nothing,+ fsId = Just "forgotPassword",+ fsName = Just "email",+ fsAttrs = [("autofocus", "")]+ }+ postForgotPasswordR :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) TypedContent postForgotPasswordR = registerHelper True forgotPasswordR @@ -400,7 +479,7 @@ let msgAv = Msg.AddressVerified selectRep $ do provideRep $ do- lift $ setMessageI msgAv+ lift $ addMessageI "success" msgAv fmap asHtml $ redirect setpassR provideJsonMessage $ mr msgAv _ -> invalidKey mr@@ -461,41 +540,78 @@ -- Since: 1.2.6 defaultSetPasswordHandler :: YesodAuthEmail master => Bool -> AuthHandler master TypedContent defaultSetPasswordHandler needOld = do- tp <- getRouteToParent- pass0 <- newIdent- pass1 <- newIdent- pass2 <- newIdent- mr <- lift getMessageRender+ messageRender <- lift getMessageRender+ toParent <- getRouteToParent selectRep $ do- provideJsonMessage $ mr Msg.SetPass- provideRep $ lift $ authLayout $ do- setTitleI Msg.SetPassTitle- [whamlet|-$newline never-<h3>_{Msg.SetPass}-<form method="post" action="@{tp setpassR}">- <table>- $if needOld- <tr>- <th>- <label for=#{pass0}>Current Password- <td>- <input ##{pass0} type="password" name="current" autofocus>- <tr>- <th>- <label for=#{pass1}>_{Msg.NewPass}- <td>- <input ##{pass1} type="password" name="new" :not needOld:autofocus>- <tr>- <th>- <label for=#{pass2}>_{Msg.ConfirmPass}- <td>- <input ##{pass2} type="password" name="confirm">- <tr>- <td colspan="2">- <input type="submit" value=_{Msg.SetPassTitle}>-|]+ provideJsonMessage $ messageRender Msg.SetPass+ provideRep $ lift $ authLayout $ do+ (widget, enctype) <- liftWidgetT $ generateFormPost $ setPasswordForm needOld+ setTitleI Msg.SetPassTitle+ [whamlet|+ <h3>_{Msg.SetPass}+ <form method="post" action="@{toParent setpassR}">+ ^{widget}+ |]+ where+ setPasswordForm needOld extra = do+ (currentPasswordRes, currentPasswordView) <- mreq passwordField currentPasswordSettings Nothing+ (newPasswordRes, newPasswordView) <- mreq passwordField newPasswordSettings Nothing+ (confirmPasswordRes, confirmPasswordView) <- mreq passwordField confirmPasswordSettings Nothing + let passwordFormRes = PasswordForm <$> currentPasswordRes <*> newPasswordRes <*> confirmPasswordRes+ let widget = do+ [whamlet|+ #{extra}+ <table>+ $if needOld+ <tr>+ <th>+ ^{fvLabel currentPasswordView}+ <td>+ ^{fvInput currentPasswordView}+ <tr>+ <th>+ ^{fvLabel newPasswordView}+ <td>+ ^{fvInput newPasswordView}+ <tr>+ <th>+ ^{fvLabel confirmPasswordView}+ <td>+ ^{fvInput confirmPasswordView}+ <tr>+ <td colspan="2">+ <input type=submit value=_{Msg.SetPassTitle}>+ |]++ return (passwordFormRes, widget)+ currentPasswordSettings =+ FieldSettings {+ fsLabel = SomeMessage Msg.CurrentPassword,+ fsTooltip = Nothing,+ fsId = Just "currentPassword",+ fsName = Just "current",+ fsAttrs = [("autofocus", "")]+ }+ newPasswordSettings =+ FieldSettings {+ fsLabel = SomeMessage Msg.NewPass,+ fsTooltip = Nothing,+ fsId = Just "newPassword",+ fsName = Just "new",+ fsAttrs = [("autofocus", ""), (":not", ""), ("needOld:autofocus", "")]+ }+ confirmPasswordSettings =+ FieldSettings {+ fsLabel = SomeMessage Msg.ConfirmPass,+ fsTooltip = Nothing,+ fsId = Just "confirmPassword",+ fsName = Just "confirm",+ fsAttrs = [("autofocus", "")]+ }+++ postPasswordR :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) TypedContent postPasswordR = do maid <- lift maybeAuthId@@ -534,7 +650,7 @@ y <- lift $ do setPassword aid salted deleteSession loginLinkKey- setMessageI msgOk+ addMessageI "success" msgOk getYesod mr <- lift getMessageRender
Yesod/Auth/GoogleEmail2.hs view
@@ -59,7 +59,7 @@ lift, liftIO, lookupGetParam, lookupSession, notFound, redirect, setSession, whamlet, (.:),- setMessage, getYesod, authRoute,+ addMessage, getYesod, authRoute, toHtml) @@ -200,7 +200,7 @@ case err of "access_denied" -> "Access denied" _ -> "Unknown error occurred: " `T.append` err- setMessage $ toHtml msg+ addMessage "error" $ toHtml msg lift $ redirect $ logoutDest master Just c -> return c
Yesod/Auth/Hardcoded.hs view
@@ -160,10 +160,13 @@ where dispatch "POST" ["login"] = postLoginR >>= sendResponse dispatch _ _ = notFound- loginWidget toMaster =+ loginWidget toMaster = do+ request <- getRequest [whamlet| $newline never <form method="post" action="@{toMaster loginR}">+ $maybe t <- reqToken request+ <input type=hidden name=#{defaultCsrfParamName} value=#{t}> <table> <tr> <th>_{Msg.UserName}
Yesod/Auth/Message.hs view
@@ -17,6 +17,7 @@ , czechMessage , russianMessage , dutchMessage+ , danishMessage ) where import Data.Monoid (mappend,(<>))@@ -60,6 +61,7 @@ | ProvideIdentifier | SendPasswordResetEmail | PasswordResetPrompt+ | CurrentPassword | InvalidUsernamePass | Logout | LogoutTitle@@ -78,6 +80,7 @@ englishMessage Email = "Email" englishMessage UserName = "User name" englishMessage Password = "Password"+englishMessage CurrentPassword = "Current Password" englishMessage Register = "Register" englishMessage RegisterLong = "Register a new account" englishMessage EnterEmail = "Enter your e-mail address below, and a confirmation e-mail will be sent to you."@@ -124,6 +127,7 @@ portugueseMessage Email = "E-mail" portugueseMessage UserName = "Nome de usuário" -- FIXME by Google Translate "user name" portugueseMessage Password = "Senha"+portugueseMessage CurrentPassword = "Palavra de passe" portugueseMessage Register = "Registrar" portugueseMessage RegisterLong = "Registrar uma nova conta" portugueseMessage EnterEmail = "Por favor digite seu endereço de e-mail abaixo e um e-mail de confirmação será enviado para você."@@ -171,6 +175,7 @@ spanishMessage Email = "Correo electrónico" spanishMessage UserName = "Nombre de Usuario" -- FIXME by Google Translate "user name" spanishMessage Password = "Contraseña"+spanishMessage CurrentPassword = "Contraseña actual" spanishMessage Register = "Registrarse" spanishMessage RegisterLong = "Registrar una nueva cuenta" spanishMessage EnterEmail = "Coloque su dirección de correo electrónico, y un correo de confirmación le será enviado a su cuenta."@@ -218,6 +223,7 @@ swedishMessage Email = "Epost" swedishMessage UserName = "Användarnamn" -- FIXME by Google Translate "user name" swedishMessage Password = "Lösenord"+swedishMessage CurrentPassword = "Current password" swedishMessage Register = "Registrera" swedishMessage RegisterLong = "Registrera ett nytt konto" swedishMessage EnterEmail = "Skriv in din epost nedan så kommer ett konfirmationsmail skickas till adressen."@@ -266,6 +272,7 @@ germanMessage Email = "Email" germanMessage UserName = "Benutzername" -- FIXME by Google Translate "user name" germanMessage Password = "Passwort"+germanMessage CurrentPassword = "Aktuelles Passwort" germanMessage Register = "Registrieren" germanMessage RegisterLong = "Neuen Account registrieren" germanMessage EnterEmail = "Bitte die e-Mail Adresse angeben, eine Bestätigungsmail wird verschickt."@@ -283,7 +290,7 @@ germanMessage SetPass = "Neues Passwort angeben" germanMessage NewPass = "Neues Passwort" germanMessage ConfirmPass = "Bestätigen"-germanMessage PassMismatch = "Die Passwörter stimmten nicht überein"+germanMessage PassMismatch = "Die Passwörter stimmen nicht überein" germanMessage PassUpdated = "Passwort überschrieben" germanMessage Facebook = "Login über Facebook" germanMessage LoginViaEmail = "Login via e-Mail"@@ -303,7 +310,7 @@ germanMessage i@(IdentifierNotFound _) = englishMessage i germanMessage Logout = "Ausloggen" -- FIXME by Google Translate germanMessage LogoutTitle = "Ausloggen" -- FIXME by Google Translate-germanMessage AuthError = "Authorisierungsfehler" -- FIXME by Google Translate+germanMessage AuthError = "Autorisierungsfehler" -- FIXME by Google Translate frenchMessage :: AuthMessage -> Text frenchMessage NoOpenID = "Aucun fournisseur OpenID n'a été trouvé"@@ -313,6 +320,7 @@ frenchMessage Email = "Adresse électronique" frenchMessage UserName = "Nom d'utilisateur" -- FIXME by Google Translate "user name" frenchMessage Password = "Mot de passe"+frenchMessage CurrentPassword = "Mot de passe actuel" frenchMessage Register = "S'inscrire" frenchMessage RegisterLong = "Créer un compte" frenchMessage EnterEmail = "Entrez ci-dessous votre adresse électronique, et un message de confirmation vous sera envoyé"@@ -359,6 +367,7 @@ norwegianBokmålMessage Email = "E-post" norwegianBokmålMessage UserName = "Brukernavn" -- FIXME by Google Translate "user name" norwegianBokmålMessage Password = "Passord"+norwegianBokmålMessage CurrentPassword = "Current password" norwegianBokmålMessage Register = "Registrer" norwegianBokmålMessage RegisterLong = "Registrer en ny konto" norwegianBokmålMessage EnterEmail = "Skriv inn e-postadressen din nedenfor og en e-postkonfirmasjon vil bli sendt."@@ -406,6 +415,7 @@ japaneseMessage Email = "Eメール" japaneseMessage UserName = "ユーザー名" -- FIXME by Google Translate "user name" japaneseMessage Password = "パスワード"+japaneseMessage CurrentPassword = "Current password" japaneseMessage Register = "登録" japaneseMessage RegisterLong = "新規アカウント登録" japaneseMessage EnterEmail = "メールアドレスを入力してください。確認メールが送られます"@@ -453,6 +463,7 @@ finnishMessage Email = "Sähköposti" finnishMessage UserName = "Käyttäjätunnus" -- FIXME by Google Translate "user name" finnishMessage Password = "Salasana"+finnishMessage Password = "Current password" finnishMessage Register = "Luo uusi" finnishMessage RegisterLong = "Luo uusi tili" finnishMessage EnterEmail = "Kirjoita alle sähköpostiosoitteesi, johon vahvistussähköposti lähetetään."@@ -501,6 +512,7 @@ chineseMessage Email = "邮箱" chineseMessage UserName = "用户名" -- FIXME by Google Translate "user name" chineseMessage Password = "密码"+chineseMessage CurrentPassword = "Current password" chineseMessage Register = "注册" chineseMessage RegisterLong = "注册新帐户" chineseMessage EnterEmail = "输入你的邮箱地址,你将收到一封确认邮件。"@@ -548,6 +560,7 @@ czechMessage Email = "E-mail" czechMessage UserName = "Uživatelské jméno" czechMessage Password = "Heslo"+czechMessage CurrentPassword = "Current password" czechMessage Register = "Registrovat" czechMessage RegisterLong = "Zaregistrovat nový účet" czechMessage EnterEmail = "Níže zadejte svou e-mailovou adresu a bude vám poslán potvrzovací e-mail."@@ -595,6 +608,7 @@ russianMessage Email = "Эл.почта" russianMessage UserName = "Имя пользователя" russianMessage Password = "Пароль"+russianMessage CurrentPassword = "Current password" russianMessage Register = "Регистрация" russianMessage RegisterLong = "Создать учётную запись" russianMessage EnterEmail = "Введите свой адрес эл.почты ниже, вам будет отправлено письмо для подтверждения."@@ -641,6 +655,7 @@ dutchMessage Email = "E-mail" dutchMessage UserName = "Gebruikersnaam" -- FIXME by Google Translate "user name" dutchMessage Password = "Wachtwoord"+dutchMessage CurrentPassword = "Current password" dutchMessage Register = "Registreren" dutchMessage RegisterLong = "Registreer een nieuw account" dutchMessage EnterEmail = "Voer uw e-mailadres hieronder in, er zal een bevestigings-e-mail naar u worden verzonden."@@ -680,44 +695,92 @@ dutchMessage AuthError = "Verificatiefout" -- FIXME by Google Translate croatianMessage :: AuthMessage -> Text-croatianMessage NoOpenID = "Nije pronađen OpenID identifikator"-croatianMessage LoginOpenID = "Prijava uz OpenID"-croatianMessage LoginGoogle = "Prijava uz Google"-croatianMessage LoginYahoo = "Prijava uz Yahoo"-croatianMessage Facebook = "Prijava uz Facebook"+croatianMessage NoOpenID = "Nije pronađen OpenID identifikator"+croatianMessage LoginOpenID = "Prijava uz OpenID"+croatianMessage LoginGoogle = "Prijava uz Google"+croatianMessage LoginYahoo = "Prijava uz Yahoo"+croatianMessage Facebook = "Prijava uz Facebook" croatianMessage LoginViaEmail = "Prijava putem e-pošte"-croatianMessage Email = "E-pošta"-croatianMessage UserName = "Korisničko ime"-croatianMessage Password = "Lozinka"-croatianMessage Register = "Registracija"-croatianMessage RegisterLong = "Registracija novog računa"-croatianMessage EnterEmail = "Dolje unesite adresu e-pošte, pa ćemo vam poslati e-poruku za potvrdu."+croatianMessage Email = "E-pošta"+croatianMessage UserName = "Korisničko ime"+croatianMessage Password = "Lozinka"+croatianMessage CurrentPassword = "Current Password"+croatianMessage Register = "Registracija"+croatianMessage RegisterLong = "Registracija novog računa"+croatianMessage EnterEmail = "Dolje unesite adresu e-pošte, pa ćemo vam poslati e-poruku za potvrdu." croatianMessage PasswordResetPrompt = "Dolje unesite adresu e-pošte ili korisničko ime, pa ćemo vam poslati e-poruku za potvrdu."-croatianMessage ConfirmationEmailSentTitle = "E-poruka za potvrdu"+croatianMessage ConfirmationEmailSentTitle = "E-poruka za potvrdu" croatianMessage (ConfirmationEmailSent email) = "E-poruka za potvrdu poslana je na adresu " <> email <> "."-croatianMessage AddressVerified = "Adresa ovjerena, postavite novu lozinku"-croatianMessage InvalidKeyTitle = "Ključ za ovjeru nije valjan"-croatianMessage InvalidKey = "Nažalost, taj ključ za ovjeru nije valjan."-croatianMessage InvalidEmailPass = "Kombinacija e-pošte i lozinke nije valjana"-croatianMessage InvalidUsernamePass = "Kombinacija korisničkog imena i lozinke nije valjana"-croatianMessage BadSetPass = "Za postavljanje lozinke morate biti prijavljeni"-croatianMessage SetPassTitle = "Postavi lozinku"-croatianMessage SetPass = "Postavite novu lozinku"-croatianMessage NewPass = "Nova lozinka"-croatianMessage ConfirmPass = "Potvrda lozinke"-croatianMessage PassMismatch = "Lozinke se ne podudaraju, pokušajte ponovo"-croatianMessage PassUpdated = "Lozinka ažurirana"-croatianMessage InvalidLogin = "Prijava nije valjana"-croatianMessage NowLoggedIn = "Sada ste prijavljeni u"-croatianMessage LoginTitle = "Prijava"-croatianMessage PleaseProvideUsername = "Unesite korisničko ime"-croatianMessage PleaseProvidePassword = "Unesite lozinku"-croatianMessage NoIdentifierProvided = "Nisu dani e-pošta/korisničko ime"-croatianMessage InvalidEmailAddress = "Dana adresa e-pošte nije valjana"-croatianMessage PasswordResetTitle = "Poništavanje lozinke"-croatianMessage ProvideIdentifier = "E-pošta ili korisničko ime"-croatianMessage SendPasswordResetEmail = "Pošalji e-poruku za poništavanje lozinke"-croatianMessage (IdentifierNotFound ident) = "Korisničko ime/e-pošta nisu pronađeni: " <> ident-croatianMessage Logout = "Odjava"-croatianMessage LogoutTitle = "Odjava"-croatianMessage AuthError = "Pogreška provjere autentičnosti"+croatianMessage AddressVerified = "Adresa ovjerena, postavite novu lozinku"+croatianMessage InvalidKeyTitle = "Ključ za ovjeru nije valjan"+croatianMessage InvalidKey = "Nažalost, taj ključ za ovjeru nije valjan."+croatianMessage InvalidEmailPass = "Kombinacija e-pošte i lozinke nije valjana"+croatianMessage InvalidUsernamePass = "Kombinacija korisničkog imena i lozinke nije valjana"+croatianMessage BadSetPass = "Za postavljanje lozinke morate biti prijavljeni"+croatianMessage SetPassTitle = "Postavi lozinku"+croatianMessage SetPass = "Postavite novu lozinku"+croatianMessage NewPass = "Nova lozinka"+croatianMessage ConfirmPass = "Potvrda lozinke"+croatianMessage PassMismatch = "Lozinke se ne podudaraju, pokušajte ponovo"+croatianMessage PassUpdated = "Lozinka ažurirana"+croatianMessage InvalidLogin = "Prijava nije valjana"+croatianMessage NowLoggedIn = "Sada ste prijavljeni u"+croatianMessage LoginTitle = "Prijava"+croatianMessage PleaseProvideUsername = "Unesite korisničko ime"+croatianMessage PleaseProvidePassword = "Unesite lozinku"+croatianMessage NoIdentifierProvided = "Nisu dani e-pošta/korisničko ime"+croatianMessage InvalidEmailAddress = "Dana adresa e-pošte nije valjana"+croatianMessage PasswordResetTitle = "Poništavanje lozinke"+croatianMessage ProvideIdentifier = "E-pošta ili korisničko ime"+croatianMessage SendPasswordResetEmail = "Pošalji e-poruku za poništavanje lozinke"+croatianMessage (IdentifierNotFound ident) = "Korisničko ime/e-pošta nisu pronađeni: " <> ident+croatianMessage Logout = "Odjava"+croatianMessage LogoutTitle = "Odjava"+croatianMessage AuthError = "Pogreška provjere autentičnosti"++danishMessage :: AuthMessage -> Text+danishMessage NoOpenID = "Mangler OpenID identifier"+danishMessage LoginOpenID = "Login med OpenID"+danishMessage LoginGoogle = "Login med Google"+danishMessage LoginYahoo = "Login med Yahoo"+danishMessage Email = "E-mail"+danishMessage UserName = "Brugernavn"+danishMessage Password = "Kodeord"+danishMessage CurrentPassword = "Nuværende kodeord"+danishMessage Register = "Opret"+danishMessage RegisterLong = "Opret en ny konto"+danishMessage EnterEmail = "Indtast din e-mailadresse nedenfor og en bekræftelsesmail vil blive sendt til dig."+danishMessage ConfirmationEmailSentTitle = "Bekræftelsesmail sendt"+danishMessage (ConfirmationEmailSent email) =+ "En bekræftelsesmail er sendt til " `mappend`+ email `mappend`+ "."+danishMessage AddressVerified = "Adresse bekræftet, sæt venligst et nyt kodeord"+danishMessage InvalidKeyTitle = "Ugyldig verifikationsnøgle"+danishMessage InvalidKey = "Beklager, det var en ugyldigt verifikationsnøgle."+danishMessage InvalidEmailPass = "Ugyldigt e-mail/kodeord"+danishMessage BadSetPass = "Du skal være logget ind for at sætte et kodeord"+danishMessage SetPassTitle = "Sæt kodeord"+danishMessage SetPass = "Sæt et nyt kodeord"+danishMessage NewPass = "Nyt kodeord"+danishMessage ConfirmPass = "Bekræft"+danishMessage PassMismatch = "Kodeordne var forskellige, prøv venligst igen"+danishMessage PassUpdated = "Kodeord opdateret"+danishMessage Facebook = "Login med Facebook"+danishMessage LoginViaEmail = "Login med e-mail"+danishMessage InvalidLogin = "Ugyldigt login"+danishMessage NowLoggedIn = "Du er nu logget ind"+danishMessage LoginTitle = "Log ind"+danishMessage PleaseProvideUsername = "Indtast venligst dit brugernavn"+danishMessage PleaseProvidePassword = "Indtasy venligst dit kodeord"+danishMessage NoIdentifierProvided = "Mangler e-mail/username"+danishMessage InvalidEmailAddress = "Ugyldig e-mailadresse indtastet"+danishMessage PasswordResetTitle = "Nulstilning af kodeord"+danishMessage ProvideIdentifier = "E-mail eller brugernavn"+danishMessage SendPasswordResetEmail = "Send kodeordsnulstillingsmail"+danishMessage PasswordResetPrompt = "Indtast din e-mailadresse eller dit brugernavn nedenfor, så bliver en kodeordsnulstilningsmail sendt til dig."+danishMessage InvalidUsernamePass = "Ugyldigt brugernavn/kodeord"+danishMessage (IdentifierNotFound ident) = "Brugernavn findes ikke: " `mappend` ident+danishMessage Logout = "Log ud"+danishMessage LogoutTitle = "Log ud"+danishMessage AuthError = "Fejl ved bekræftelse af identitet"
yesod-auth.cabal view
@@ -1,5 +1,5 @@ name: yesod-auth-version: 1.4.12+version: 1.4.13 license: MIT license-file: LICENSE author: Michael Snoyman, Patrick Brisbin@@ -23,7 +23,7 @@ build-depends: base >= 4 && < 5 , authenticate >= 1.3 , bytestring >= 0.9.1.4- , yesod-core >= 1.4 && < 1.5+ , yesod-core >= 1.4.20 && < 1.5 , wai >= 1.4 , template-haskell , base16-bytestring