Add json support for postRegisterR
This commit is contained in:
parent
a337bf6d58
commit
19840cdc89
@ -4,6 +4,7 @@
|
|||||||
{-# LANGUAGE PatternGuards #-}
|
{-# LANGUAGE PatternGuards #-}
|
||||||
{-# LANGUAGE QuasiQuotes #-}
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
{-# LANGUAGE Rank2Types #-}
|
{-# LANGUAGE Rank2Types #-}
|
||||||
|
{-# LANGUAGE ScopedTypeVariables#-}
|
||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
-- | A Yesod plugin for Authentication via e-mail
|
-- | A Yesod plugin for Authentication via e-mail
|
||||||
--
|
--
|
||||||
@ -70,6 +71,8 @@ import Data.Time (addUTCTime, getCurrentTime)
|
|||||||
import Safe (readMay)
|
import Safe (readMay)
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
import qualified Text.Email.Validate
|
import qualified Text.Email.Validate
|
||||||
|
import Network.HTTP.Types.Status (status400)
|
||||||
|
import Data.Aeson.Types (Parser(..), Result(..), parseMaybe, withObject)
|
||||||
|
|
||||||
loginR, registerR, forgotPasswordR, setpassR :: AuthRoute
|
loginR, registerR, forgotPasswordR, setpassR :: AuthRoute
|
||||||
loginR = PluginR "email" ["login"]
|
loginR = PluginR "email" ["login"]
|
||||||
@ -376,6 +379,11 @@ defaultRegisterHandler = do
|
|||||||
|
|
||||||
return (userRes, widget)
|
return (userRes, widget)
|
||||||
|
|
||||||
|
parseEmail :: Value -> Parser Text
|
||||||
|
parseEmail = withObject "email" (\obj -> do
|
||||||
|
email' <- obj .: "email"
|
||||||
|
return email')
|
||||||
|
|
||||||
registerHelper :: YesodAuthEmail master
|
registerHelper :: YesodAuthEmail master
|
||||||
=> Bool -- ^ allow usernames?
|
=> Bool -- ^ allow usernames?
|
||||||
-> Route Auth
|
-> Route Auth
|
||||||
@ -383,7 +391,14 @@ registerHelper :: YesodAuthEmail master
|
|||||||
registerHelper allowUsername dest = do
|
registerHelper allowUsername dest = do
|
||||||
y <- lift getYesod
|
y <- lift getYesod
|
||||||
checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName
|
checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName
|
||||||
midentifier <- lookupPostParam "email"
|
pidentifier <- lookupPostParam "email"
|
||||||
|
(jidentifier :: Result Value) <- lift parseJsonBody
|
||||||
|
let midentifier = case pidentifier of
|
||||||
|
Nothing -> case jidentifier of
|
||||||
|
Error _ -> Nothing
|
||||||
|
Success val -> parseMaybe parseEmail val
|
||||||
|
Just _ -> pidentifier
|
||||||
|
|
||||||
let eidentifier = case midentifier of
|
let eidentifier = case midentifier of
|
||||||
Nothing -> Left Msg.NoIdentifierProvided
|
Nothing -> Left Msg.NoIdentifierProvided
|
||||||
Just x
|
Just x
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user