Use newer Mozilla Persona API (#453)

This commit is contained in:
Michael Snoyman 2012-11-18 19:03:26 +02:00
parent b7aa72e104
commit 6a7102f44e
3 changed files with 38 additions and 4 deletions

View File

@ -13,7 +13,11 @@ import Text.Hamlet (hamlet)
import qualified Data.Text as T
import Data.Maybe (fromMaybe)
import Control.Monad.IO.Class (liftIO)
import Control.Monad (when)
import Control.Exception (throwIO)
import Text.Julius (julius, rawJS)
import Data.Aeson (toJSON)
import Network.URI (uriPath, parseURI)
pid :: Text
pid = "browserid"
@ -61,12 +65,41 @@ helper maudience = AuthPlugin
_ -> notFound
, apLogin = \toMaster -> do
addScriptRemote browserIdJs
onclick <- lift newIdent
render <- lift getUrlRender
let login = toJSON $ getPath $ render (toMaster LoginR)
toWidget [julius|
function #{rawJS onclick}() {
navigator.id.watch({
onlogin: function (assertion) {
if (assertion) {
alert("@{toMaster complete}/" + assertion);
document.location = "@{toMaster complete}/" + assertion;
}
},
onlogout: function () {}
});
navigator.id.request({
returnTo: #{login} + "?autologin=true"
});
}
|]
autologin <- fmap (== Just "true") $ lift $ lookupGetParam "autologin"
when autologin $ toWidget [julius|
#{rawJS onclick}();
|]
toWidget [hamlet|
$newline never
<p>
<a href="javascript:navigator.id.getVerifiedEmail(function(a){if(a)document.location='@{toMaster complete}/'+a});">
<a href="javascript:#{onclick}()">
<img src="https://browserid.org/i/sign_in_green.png">
|]
}
where
stripScheme t = fromMaybe t $ T.stripPrefix "//" $ snd $ T.breakOn "//" t
getPath t = fromMaybe t $ do
uri <- parseURI $ T.unpack t
return $ T.pack $ uriPath uri

View File

@ -13,6 +13,7 @@ import Yesod.Form
import Network.Wai.Handler.Warp (run)
import Network.HTTP.Conduit
import Network.TLS
import Network.Wai.Middleware.RequestLogger
data BID = BID { httpManager :: Manager }
@ -49,6 +50,4 @@ instance RenderMessage BID FormMessage where
main :: IO ()
main = do
m <- newManager def
{ managerCheckCerts = \_ _ -> return CertificateUsageAccept
}
toWaiApp (BID m) >>= run 3000
toWaiApp (BID m) >>= run 3000 . logStdoutDev

View File

@ -26,6 +26,7 @@ library
, yesod-persistent >= 1.1 && < 1.2
, hamlet >= 1.1 && < 1.2
, shakespeare-css >= 1.0 && < 1.1
, shakespeare-js >= 1.0.2 && < 1.2
, yesod-json >= 1.1 && < 1.2
, containers
, unordered-containers
@ -40,6 +41,7 @@ library
, lifted-base >= 0.1
, blaze-html >= 0.5 && < 0.6
, blaze-markup >= 0.5.1 && < 0.6
, network
exposed-modules: Yesod.Auth
Yesod.Auth.BrowserId