{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE CPP #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} module Yesod.Auth.OpenId ( authOpenId , forwardUrl , claimedKey , opLocalKey , credsIdentClaimed , IdentifierType (..) ) where import Yesod.Auth import qualified Web.Authenticate.OpenId as OpenId import Yesod.Form import Yesod.Core import Data.Text (Text, isPrefixOf) import qualified Yesod.Auth.Message as Msg import UnliftIO.Exception (tryAny) import Data.Maybe (fromMaybe) import qualified Data.Text as T forwardUrl :: AuthRoute forwardUrl = PluginR "openid" ["forward"] data IdentifierType = Claimed | OPLocal authOpenId :: forall master. YesodAuth master => IdentifierType -> [(Text, Text)] -- ^ extension fields -> AuthPlugin master authOpenId idType extensionFields = AuthPlugin "openid" dispatch login where complete = PluginR "openid" ["complete"] name :: Text name = "openid_identifier" login :: (AuthRoute -> Route master) -> WidgetFor master () login tm = do ident <- newIdent toWidget [cassius|##{ident} background: #fff url(http://www.myopenid.com/static/openid-icon-small.gif) no-repeat scroll 0pt 50%; padding-left: 18px; |] [whamlet| $newline never