browserid.hs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. {-# LANGUAGE OverloadedStrings #-}
  2. {-# LANGUAGE TypeFamilies #-}
  3. {-# LANGUAGE QuasiQuotes #-}
  4. {-# LANGUAGE TemplateHaskell #-}
  5. {-# LANGUAGE MultiParamTypeClasses #-}
  6. import Yesod.Core
  7. import Yesod.Auth
  8. import Yesod.Auth.BrowserId
  9. import Data.Text (Text)
  10. import Text.Hamlet (hamlet)
  11. import Control.Monad.IO.Class (liftIO)
  12. import Yesod.Form
  13. import Network.Wai.Handler.Warp (run)
  14. import Network.HTTP.Conduit
  15. import Network.TLS
  16. import Network.Wai.Middleware.RequestLogger
  17. data BID = BID { httpManager :: Manager }
  18. mkYesod "BID" [parseRoutes|
  19. / RootR GET
  20. /after AfterLoginR GET
  21. /auth AuthR Auth getAuth
  22. |]
  23. getRootR :: Handler ()
  24. getRootR = redirect $ AuthR LoginR
  25. getAfterLoginR :: Handler Html
  26. getAfterLoginR = do
  27. mauth <- maybeAuthId
  28. defaultLayout $ toWidget [hamlet|
  29. <p>Auth: #{show mauth}
  30. |]
  31. instance Yesod BID where
  32. approot = ApprootStatic "http://localhost:3000"
  33. instance YesodAuth BID where
  34. type AuthId BID = Text
  35. loginDest _ = AfterLoginR
  36. logoutDest _ = AuthR LoginR
  37. getAuthId = return . Just . credsIdent
  38. authPlugins _ = [authBrowserId def]
  39. authHttpManager = httpManager
  40. maybeAuthId = lookupSession credsKey
  41. instance RenderMessage BID FormMessage where
  42. renderMessage _ _ = defaultFormMessage
  43. main :: IO ()
  44. main = do
  45. m <- newManager conduitManagerSettings
  46. toWaiApp (BID m) >>= run 3000 . logStdoutDev