New i18n stuff
This commit is contained in:
parent
c44ee5509e
commit
13d9932c74
@ -25,7 +25,6 @@ module Yesod.Auth
|
|||||||
import Yesod.Core
|
import Yesod.Core
|
||||||
import Yesod.Persist
|
import Yesod.Persist
|
||||||
import Yesod.Json
|
import Yesod.Json
|
||||||
import Text.Blaze
|
|
||||||
import Language.Haskell.TH.Syntax hiding (lift)
|
import Language.Haskell.TH.Syntax hiding (lift)
|
||||||
import qualified Network.Wai as W
|
import qualified Network.Wai as W
|
||||||
import Text.Hamlet (hamlet)
|
import Text.Hamlet (hamlet)
|
||||||
@ -39,6 +38,7 @@ import Data.Text.Encoding.Error (lenientDecode)
|
|||||||
import Web.Routes.Quasi (toSinglePiece, fromSinglePiece)
|
import Web.Routes.Quasi (toSinglePiece, fromSinglePiece)
|
||||||
import Yesod.Auth.Message (AuthMessage, defaultMessage)
|
import Yesod.Auth.Message (AuthMessage, defaultMessage)
|
||||||
import qualified Yesod.Auth.Message as Msg
|
import qualified Yesod.Auth.Message as Msg
|
||||||
|
import Yesod.Form (FormMessage)
|
||||||
|
|
||||||
data Auth = Auth
|
data Auth = Auth
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ data Creds m = Creds
|
|||||||
, credsExtra :: [(Text, Text)]
|
, credsExtra :: [(Text, Text)]
|
||||||
}
|
}
|
||||||
|
|
||||||
class (Yesod m, SinglePiece (AuthId m)) => YesodAuth m where
|
class (Yesod m, SinglePiece (AuthId m), RenderMessage m FormMessage) => YesodAuth m where
|
||||||
type AuthId m
|
type AuthId m
|
||||||
|
|
||||||
-- | Default destination on successful login, if no other
|
-- | Default destination on successful login, if no other
|
||||||
@ -85,11 +85,9 @@ class (Yesod m, SinglePiece (AuthId m)) => YesodAuth m where
|
|||||||
|
|
||||||
renderAuthMessage :: m
|
renderAuthMessage :: m
|
||||||
-> [Text] -- ^ languages
|
-> [Text] -- ^ languages
|
||||||
-> AuthMessage -> Html
|
-> AuthMessage -> Text
|
||||||
renderAuthMessage _ _ = defaultMessage
|
renderAuthMessage _ _ = defaultMessage
|
||||||
|
|
||||||
type Texts = [Text]
|
|
||||||
|
|
||||||
mkYesodSub "Auth"
|
mkYesodSub "Auth"
|
||||||
[ ClassP ''YesodAuth [VarT $ mkName "master"]
|
[ ClassP ''YesodAuth [VarT $ mkName "master"]
|
||||||
]
|
]
|
||||||
@ -114,7 +112,6 @@ setCreds doRedirects creds = do
|
|||||||
y <- getYesod
|
y <- getYesod
|
||||||
maid <- getAuthId creds
|
maid <- getAuthId creds
|
||||||
l <- languages
|
l <- languages
|
||||||
let mr = renderMessage Auth y l
|
|
||||||
case maid of
|
case maid of
|
||||||
Nothing ->
|
Nothing ->
|
||||||
if doRedirects
|
if doRedirects
|
||||||
@ -131,14 +128,14 @@ setCreds doRedirects creds = do
|
|||||||
|]
|
|]
|
||||||
sendResponse rh
|
sendResponse rh
|
||||||
Just ar -> do
|
Just ar -> do
|
||||||
setMessage $ mr Msg.InvalidLogin
|
setMessageI Msg.InvalidLogin
|
||||||
redirect RedirectTemporary ar
|
redirect RedirectTemporary ar
|
||||||
else return ()
|
else return ()
|
||||||
Just aid -> do
|
Just aid -> do
|
||||||
setSession credsKey $ toSinglePiece aid
|
setSession credsKey $ toSinglePiece aid
|
||||||
if doRedirects
|
if doRedirects
|
||||||
then do
|
then do
|
||||||
setMessage $ mr Msg.NowLoggedIn
|
setMessageI Msg.NowLoggedIn
|
||||||
redirectUltDest RedirectTemporary $ loginDest y
|
redirectUltDest RedirectTemporary $ loginDest y
|
||||||
else return ()
|
else return ()
|
||||||
|
|
||||||
@ -229,6 +226,5 @@ redirectLogin = do
|
|||||||
Just z -> redirect RedirectTemporary z
|
Just z -> redirect RedirectTemporary z
|
||||||
Nothing -> permissionDenied "Please configure authRoute"
|
Nothing -> permissionDenied "Please configure authRoute"
|
||||||
|
|
||||||
instance YesodAuth m => YesodMessage Auth m where
|
instance YesodAuth m => RenderMessage m AuthMessage where
|
||||||
type Message Auth m = AuthMessage
|
renderMessage = renderAuthMessage
|
||||||
renderMessage = const renderAuthMessage
|
|
||||||
|
|||||||
@ -81,7 +81,6 @@ authEmail =
|
|||||||
AuthPlugin "email" dispatch $ \tm -> do
|
AuthPlugin "email" dispatch $ \tm -> do
|
||||||
y <- lift getYesod
|
y <- lift getYesod
|
||||||
l <- lift languages
|
l <- lift languages
|
||||||
let mr = renderMessage (getAuth 'x') y l
|
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[whamlet|
|
[whamlet|
|
||||||
#else
|
#else
|
||||||
@ -90,16 +89,16 @@ authEmail =
|
|||||||
<form method="post" action="@{tm loginR}">
|
<form method="post" action="@{tm loginR}">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<th>#{mr Msg.Email}
|
<th>_{Msg.Email}
|
||||||
<td>
|
<td>
|
||||||
<input type="email" name="email">
|
<input type="email" name="email">
|
||||||
<tr>
|
<tr>
|
||||||
<th>#{mr Msg.Password}
|
<th>_{Msg.Password}
|
||||||
<td>
|
<td>
|
||||||
<input type="password" name="password">
|
<input type="password" name="password">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<input type="submit" value=#{mr Msg.LoginViaEmail}>
|
<input type="submit" value=_{Msg.LoginViaEmail}>
|
||||||
<a href="@{tm registerR}">I don't have an account
|
<a href="@{tm registerR}">I don't have an account
|
||||||
|]
|
|]
|
||||||
where
|
where
|
||||||
@ -117,9 +116,8 @@ authEmail =
|
|||||||
getRegisterR :: YesodAuthEmail master => GHandler Auth master RepHtml
|
getRegisterR :: YesodAuthEmail master => GHandler Auth master RepHtml
|
||||||
getRegisterR = do
|
getRegisterR = do
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
mr <- getMessageRender
|
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle $ mr Msg.RegisterLong
|
setTitleI Msg.RegisterLong
|
||||||
addWidget
|
addWidget
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -153,9 +151,8 @@ postRegisterR = do
|
|||||||
tm <- getRouteToMaster
|
tm <- getRouteToMaster
|
||||||
let verUrl = render $ tm $ verify (toSinglePiece lid) verKey
|
let verUrl = render $ tm $ verify (toSinglePiece lid) verKey
|
||||||
sendVerifyEmail email verKey verUrl
|
sendVerifyEmail email verKey verUrl
|
||||||
mr <- getMessageRender
|
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle $ mr Msg.ConfirmationEmailSentTitle
|
setTitleI Msg.ConfirmationEmailSentTitle
|
||||||
addWidget
|
addWidget
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -178,13 +175,11 @@ getVerifyR lid key = do
|
|||||||
Just _uid -> do
|
Just _uid -> do
|
||||||
setCreds False $ Creds "email" email [("verifiedEmail", email)] -- FIXME uid?
|
setCreds False $ Creds "email" email [("verifiedEmail", email)] -- FIXME uid?
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
mr <- getMessageRender
|
setMessageI Msg.AddressVerified
|
||||||
setMessage $ mr Msg.AddressVerified
|
|
||||||
redirect RedirectTemporary $ toMaster setpassR
|
redirect RedirectTemporary $ toMaster setpassR
|
||||||
_ -> return ()
|
_ -> return ()
|
||||||
mr <- getMessageRender
|
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle $ mr Msg.InvalidKey
|
setTitleI Msg.InvalidKey
|
||||||
addWidget
|
addWidget
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -215,8 +210,7 @@ postLoginR = do
|
|||||||
Just _aid ->
|
Just _aid ->
|
||||||
setCreds True $ Creds "email" email [("verifiedEmail", email)] -- FIXME aid?
|
setCreds True $ Creds "email" email [("verifiedEmail", email)] -- FIXME aid?
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
mr <- getMessageRender
|
setMessageI Msg.InvalidEmailPass
|
||||||
setMessage $ mr Msg.InvalidEmailPass
|
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
redirect RedirectTemporary $ toMaster LoginR
|
redirect RedirectTemporary $ toMaster LoginR
|
||||||
|
|
||||||
@ -224,14 +218,13 @@ getPasswordR :: YesodAuthEmail master => GHandler Auth master RepHtml
|
|||||||
getPasswordR = do
|
getPasswordR = do
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
maid <- maybeAuthId
|
maid <- maybeAuthId
|
||||||
mr <- getMessageRender
|
|
||||||
case maid of
|
case maid of
|
||||||
Just _ -> return ()
|
Just _ -> return ()
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
setMessage $ mr Msg.BadSetPass
|
setMessageI Msg.BadSetPass
|
||||||
redirect RedirectTemporary $ toMaster loginR
|
redirect RedirectTemporary $ toMaster loginR
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle $ mr Msg.SetPassTitle
|
setTitleI Msg.SetPassTitle
|
||||||
addWidget
|
addWidget
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -262,20 +255,17 @@ postPasswordR = do
|
|||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
y <- getYesod
|
y <- getYesod
|
||||||
when (new /= confirm) $ do
|
when (new /= confirm) $ do
|
||||||
mr <- getMessageRender
|
setMessageI Msg.PassMismatch
|
||||||
setMessage $ mr Msg.PassMismatch
|
|
||||||
redirect RedirectTemporary $ toMaster setpassR
|
redirect RedirectTemporary $ toMaster setpassR
|
||||||
maid <- maybeAuthId
|
maid <- maybeAuthId
|
||||||
aid <- case maid of
|
aid <- case maid of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
mr <- getMessageRender
|
setMessageI Msg.BadSetPass
|
||||||
setMessage $ mr Msg.BadSetPass
|
|
||||||
redirect RedirectTemporary $ toMaster loginR
|
redirect RedirectTemporary $ toMaster loginR
|
||||||
Just aid -> return aid
|
Just aid -> return aid
|
||||||
salted <- liftIO $ saltPass new
|
salted <- liftIO $ saltPass new
|
||||||
setPassword aid salted
|
setPassword aid salted
|
||||||
mr <- getMessageRender
|
setMessageI Msg.PassUpdated
|
||||||
setMessage $ mr Msg.PassUpdated
|
|
||||||
redirect RedirectTemporary $ loginDest y
|
redirect RedirectTemporary $ loginDest y
|
||||||
|
|
||||||
saltLength :: Int
|
saltLength :: Int
|
||||||
|
|||||||
@ -15,8 +15,6 @@ import Data.Maybe (fromMaybe)
|
|||||||
import Yesod.Form
|
import Yesod.Form
|
||||||
import Yesod.Handler
|
import Yesod.Handler
|
||||||
import Yesod.Widget
|
import Yesod.Widget
|
||||||
import Yesod.Request (languages)
|
|
||||||
import Text.Hamlet (hamlet)
|
|
||||||
import Control.Monad.IO.Class (liftIO)
|
import Control.Monad.IO.Class (liftIO)
|
||||||
import Control.Monad.Trans.Class (lift)
|
import Control.Monad.Trans.Class (lift)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
@ -58,17 +56,13 @@ authFacebook cid secret perms =
|
|||||||
render <- lift getUrlRender
|
render <- lift getUrlRender
|
||||||
let fb = Facebook.Facebook cid secret $ render $ tm url
|
let fb = Facebook.Facebook cid secret $ render $ tm url
|
||||||
let furl = Facebook.getForwardUrl fb $ perms
|
let furl = Facebook.getForwardUrl fb $ perms
|
||||||
y <- lift getYesod
|
|
||||||
l <- lift languages
|
|
||||||
let mr = renderMessage (getAuth 'x') y l
|
|
||||||
addHtml
|
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[hamlet|
|
[whamlet|
|
||||||
#else
|
#else
|
||||||
[$hamlet|
|
[$whamlet|
|
||||||
#endif
|
#endif
|
||||||
<p>
|
<p>
|
||||||
<a href="#{furl}">#{mr Msg.Facebook}
|
<a href="#{furl}">_{Msg.Facebook}
|
||||||
|]
|
|]
|
||||||
|
|
||||||
parseCreds :: Text -> Value -> Data.Aeson.Types.Parser (Creds m)
|
parseCreds :: Text -> Value -> Data.Aeson.Types.Parser (Creds m)
|
||||||
|
|||||||
@ -34,7 +34,7 @@ data AuthMessage =
|
|||||||
| InvalidLogin
|
| InvalidLogin
|
||||||
| NowLoggedIn
|
| NowLoggedIn
|
||||||
|
|
||||||
defaultMessage :: AuthMessage -> Html
|
defaultMessage :: AuthMessage -> Text
|
||||||
defaultMessage NoOpenID = "No OpenID identifier found"
|
defaultMessage NoOpenID = "No OpenID identifier found"
|
||||||
defaultMessage LoginOpenID = "Login via OpenID"
|
defaultMessage LoginOpenID = "Login via OpenID"
|
||||||
defaultMessage Email = "Email"
|
defaultMessage Email = "Email"
|
||||||
@ -45,7 +45,7 @@ defaultMessage EnterEmail = "Enter your e-mail address below, and a confirmation
|
|||||||
defaultMessage ConfirmationEmailSentTitle = "Confirmation e-mail sent"
|
defaultMessage ConfirmationEmailSentTitle = "Confirmation e-mail sent"
|
||||||
defaultMessage (ConfirmationEmailSent email) =
|
defaultMessage (ConfirmationEmailSent email) =
|
||||||
"A confirmation e-mail has been sent to " `mappend`
|
"A confirmation e-mail has been sent to " `mappend`
|
||||||
toHtml email `mappend`
|
email `mappend`
|
||||||
"."
|
"."
|
||||||
defaultMessage AddressVerified = "Address verified, please set a new password"
|
defaultMessage AddressVerified = "Address verified, please set a new password"
|
||||||
defaultMessage InvalidKeyTitle = "Invalid verification key"
|
defaultMessage InvalidKeyTitle = "Invalid verification key"
|
||||||
|
|||||||
@ -43,17 +43,15 @@ authOpenId =
|
|||||||
padding-left: 18px;
|
padding-left: 18px;
|
||||||
|]
|
|]
|
||||||
l <- lift languages
|
l <- lift languages
|
||||||
let mr = renderMessage (getAuth 'x') y l
|
|
||||||
addHamlet
|
|
||||||
#if GHC7
|
#if GHC7
|
||||||
[hamlet|
|
[whamlet|
|
||||||
#else
|
#else
|
||||||
[$hamlet|
|
[$whamlet|
|
||||||
#endif
|
#endif
|
||||||
<form method="get" action="@{tm forwardUrl}">
|
<form method="get" action="@{tm forwardUrl}">
|
||||||
<label for="#{ident}">OpenID:
|
<label for="#{ident}">OpenID: #
|
||||||
<input id="#{ident}" type="text" name="#{name}" value="http://">
|
<input id="#{ident}" type="text" name="#{name}" value="http://">
|
||||||
<input type="submit" value="#{mr Msg.LoginOpenID}">
|
<input type="submit" value="_{Msg.LoginOpenID}">
|
||||||
|]
|
|]
|
||||||
dispatch "GET" ["forward"] = do
|
dispatch "GET" ["forward"] = do
|
||||||
roid <- runInputGet $ iopt textField name
|
roid <- runInputGet $ iopt textField name
|
||||||
@ -72,8 +70,7 @@ authOpenId =
|
|||||||
res
|
res
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
mr <- getMessageRender
|
setMessageI Msg.NoOpenID
|
||||||
setMessage $ mr Msg.NoOpenID
|
|
||||||
redirect RedirectTemporary $ toMaster LoginR
|
redirect RedirectTemporary $ toMaster LoginR
|
||||||
dispatch "GET" ["complete", ""] = dispatch "GET" ["complete"] -- compatibility issues
|
dispatch "GET" ["complete", ""] = dispatch "GET" ["complete"] -- compatibility issues
|
||||||
dispatch "GET" ["complete"] = do
|
dispatch "GET" ["complete"] = do
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user