{-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell, MultiParamTypeClasses, OverloadedStrings #-} import Yesod import Web.Authenticate.BrowserId import Data.Maybe (fromMaybe) import Network.HTTP.Conduit import Data.Text (Text) data BID = BID mkYesod "BID" [parseRoutes| / RootR GET /complete/#Text CompleteR GET |] instance Yesod BID where approot = ApprootStatic "http://localhost:3000" getRootR = defaultLayout $ do addScriptRemote browserIdJs addJulius [julius| function bidClick() { navigator.id.getVerifiedEmail(function(assertion) { if (assertion) { document.location = "/complete/" + assertion; } else { alert("Invalid BrowserId login"); } }); } |] addHamlet [hamlet|

|] getCompleteR assertion = do memail <- withManager $ checkAssertion "localhost:3000" assertion defaultLayout $ addHamlet [hamlet|

You tried to log in, let's see if it worked. $maybe email <- memail

Yes it did! You are: #{email} $nothing

Nope, sorry |] main = warp 3000 BID