{-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell, MultiParamTypeClasses, OverloadedStrings #-} import Yesod.Core import Web.Authenticate.OpenId import qualified Web.Authenticate.OpenId.Providers as P import Network.HTTP.Conduit import Yesod.Form import Network.Wai.Handler.Warp (run) import Text.Lucius (lucius) data OID = OID mkYesod "OID" [parseRoutes| / RootR GET /forward ForwardR GET /complete CompleteR GET |] instance Yesod OID where approot = ApprootStatic "http://localhost:3000" getRootR :: Handler RepHtml getRootR = defaultLayout [whamlet|
OpenId: # |] instance RenderMessage OID FormMessage where renderMessage _ _ = defaultFormMessage getForwardR :: Handler () getForwardR = do openid <- runInputGet $ ireq textField "openid_identifier" render <- getUrlRender url <- withManager $ getForwardUrl openid (render CompleteR) Nothing [] redirect url getCompleteR :: Handler RepHtml getCompleteR = do params <- reqGetParams `fmap` getRequest oir <- withManager $ authenticateClaimed params defaultLayout $ do toWidget [lucius| table { border-collapse: collapse; } th, td { border: 1px solid #666; padding: 5px; vertical-align: top; } th { text-align: right; } |] [whamlet|

Successfully logged in.
OP Local #{identifier $ oirOpLocal oir}
Claimed $maybe c <- oirClaimed oir \#{identifier c} $nothing none
Params $forall (k, v) <- oirParams oir
#{k} #{v}
GET params $forall (k, v) <- params
#{k} #{v} |] main :: IO () main = toWaiApp OID >>= run 3000