Unified OpenID 1 and 2
This commit is contained in:
parent
ba671beb8d
commit
c9d0fd57a2
@ -8,8 +8,6 @@ import Yesod
|
|||||||
import Yesod.Helpers.Auth2
|
import Yesod.Helpers.Auth2
|
||||||
import qualified Web.Authenticate.OpenId as OpenId
|
import qualified Web.Authenticate.OpenId as OpenId
|
||||||
import Control.Monad.Attempt
|
import Control.Monad.Attempt
|
||||||
import qualified Web.Authenticate.OpenId2 as OpenId2
|
|
||||||
import Control.Exception (toException)
|
|
||||||
|
|
||||||
forwardUrl :: AuthRoute
|
forwardUrl :: AuthRoute
|
||||||
forwardUrl = PluginR "openid" ["forward"]
|
forwardUrl = PluginR "openid" ["forward"]
|
||||||
@ -18,8 +16,7 @@ authOpenId :: YesodAuth m => AuthPlugin m
|
|||||||
authOpenId =
|
authOpenId =
|
||||||
AuthPlugin "openid" dispatch login
|
AuthPlugin "openid" dispatch login
|
||||||
where
|
where
|
||||||
complete1 = PluginR "openid" ["complete1"]
|
complete = PluginR "openid" ["complete"]
|
||||||
complete2 = PluginR "openid" ["complete2"]
|
|
||||||
name = "openid_identifier"
|
name = "openid_identifier"
|
||||||
login tm = do
|
login tm = do
|
||||||
ident <- newIdent
|
ident <- newIdent
|
||||||
@ -31,7 +28,7 @@ authOpenId =
|
|||||||
addBody [$hamlet|
|
addBody [$hamlet|
|
||||||
%form!method=get!action=@tm.forwardUrl@
|
%form!method=get!action=@tm.forwardUrl@
|
||||||
%label!for=openid OpenID: $
|
%label!for=openid OpenID: $
|
||||||
%input#$ident$!type=text!name=$name$
|
%input#$ident$!type=text!name=$name$!value="http://"
|
||||||
%input!type=submit!value="Login via OpenID"
|
%input!type=submit!value="Login via OpenID"
|
||||||
|]
|
|]
|
||||||
dispatch "GET" ["forward"] = do
|
dispatch "GET" ["forward"] = do
|
||||||
@ -40,20 +37,11 @@ authOpenId =
|
|||||||
FormSuccess oid -> do
|
FormSuccess oid -> do
|
||||||
render <- getUrlRender
|
render <- getUrlRender
|
||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
let complete2' = render $ toMaster complete2
|
let complete' = render $ toMaster complete
|
||||||
res2 <- runAttemptT $ OpenId2.getForwardUrl oid complete2'
|
|
||||||
msg <-
|
|
||||||
case res2 of
|
|
||||||
Failure e -> return $ toException e
|
|
||||||
Success url -> redirectString RedirectTemporary url
|
|
||||||
let complete' = render $ toMaster complete1
|
|
||||||
res <- runAttemptT $ OpenId.getForwardUrl oid complete'
|
res <- runAttemptT $ OpenId.getForwardUrl oid complete'
|
||||||
attempt
|
attempt
|
||||||
(\err -> do
|
(\err -> do
|
||||||
setMessage $ string $ unlines
|
setMessage $ string $ show err
|
||||||
[ show err
|
|
||||||
, show $ toException msg
|
|
||||||
]
|
|
||||||
redirect RedirectTemporary $ toMaster LoginR
|
redirect RedirectTemporary $ toMaster LoginR
|
||||||
)
|
)
|
||||||
(redirectString RedirectTemporary)
|
(redirectString RedirectTemporary)
|
||||||
@ -62,9 +50,7 @@ authOpenId =
|
|||||||
toMaster <- getRouteToMaster
|
toMaster <- getRouteToMaster
|
||||||
setMessage $ string "No OpenID identifier found"
|
setMessage $ string "No OpenID identifier found"
|
||||||
redirect RedirectTemporary $ toMaster LoginR
|
redirect RedirectTemporary $ toMaster LoginR
|
||||||
dispatch "GET" ["complete1"] = completeHelper OpenId.authenticate
|
dispatch "GET" ["complete"] = completeHelper OpenId.authenticate
|
||||||
dispatch "GET" ["complete2"] =
|
|
||||||
completeHelper (fmap OpenId.Identifier . OpenId2.authenticate)
|
|
||||||
dispatch _ _ = notFound
|
dispatch _ _ = notFound
|
||||||
|
|
||||||
completeHelper
|
completeHelper
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user