Use newer Mozilla Persona API (#453)
This commit is contained in:
parent
b7aa72e104
commit
6a7102f44e
@ -13,7 +13,11 @@ import Text.Hamlet (hamlet)
|
|||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Control.Monad.IO.Class (liftIO)
|
import Control.Monad.IO.Class (liftIO)
|
||||||
|
import Control.Monad (when)
|
||||||
import Control.Exception (throwIO)
|
import Control.Exception (throwIO)
|
||||||
|
import Text.Julius (julius, rawJS)
|
||||||
|
import Data.Aeson (toJSON)
|
||||||
|
import Network.URI (uriPath, parseURI)
|
||||||
|
|
||||||
pid :: Text
|
pid :: Text
|
||||||
pid = "browserid"
|
pid = "browserid"
|
||||||
@ -61,12 +65,41 @@ helper maudience = AuthPlugin
|
|||||||
_ -> notFound
|
_ -> notFound
|
||||||
, apLogin = \toMaster -> do
|
, apLogin = \toMaster -> do
|
||||||
addScriptRemote browserIdJs
|
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|
|
toWidget [hamlet|
|
||||||
$newline never
|
$newline never
|
||||||
<p>
|
<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">
|
<img src="https://browserid.org/i/sign_in_green.png">
|
||||||
|]
|
|]
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
stripScheme t = fromMaybe t $ T.stripPrefix "//" $ snd $ T.breakOn "//" t
|
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
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import Yesod.Form
|
|||||||
import Network.Wai.Handler.Warp (run)
|
import Network.Wai.Handler.Warp (run)
|
||||||
import Network.HTTP.Conduit
|
import Network.HTTP.Conduit
|
||||||
import Network.TLS
|
import Network.TLS
|
||||||
|
import Network.Wai.Middleware.RequestLogger
|
||||||
|
|
||||||
data BID = BID { httpManager :: Manager }
|
data BID = BID { httpManager :: Manager }
|
||||||
|
|
||||||
@ -49,6 +50,4 @@ instance RenderMessage BID FormMessage where
|
|||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
m <- newManager def
|
m <- newManager def
|
||||||
{ managerCheckCerts = \_ _ -> return CertificateUsageAccept
|
toWaiApp (BID m) >>= run 3000 . logStdoutDev
|
||||||
}
|
|
||||||
toWaiApp (BID m) >>= run 3000
|
|
||||||
|
|||||||
@ -26,6 +26,7 @@ library
|
|||||||
, yesod-persistent >= 1.1 && < 1.2
|
, yesod-persistent >= 1.1 && < 1.2
|
||||||
, hamlet >= 1.1 && < 1.2
|
, hamlet >= 1.1 && < 1.2
|
||||||
, shakespeare-css >= 1.0 && < 1.1
|
, shakespeare-css >= 1.0 && < 1.1
|
||||||
|
, shakespeare-js >= 1.0.2 && < 1.2
|
||||||
, yesod-json >= 1.1 && < 1.2
|
, yesod-json >= 1.1 && < 1.2
|
||||||
, containers
|
, containers
|
||||||
, unordered-containers
|
, unordered-containers
|
||||||
@ -40,6 +41,7 @@ library
|
|||||||
, lifted-base >= 0.1
|
, lifted-base >= 0.1
|
||||||
, blaze-html >= 0.5 && < 0.6
|
, blaze-html >= 0.5 && < 0.6
|
||||||
, blaze-markup >= 0.5.1 && < 0.6
|
, blaze-markup >= 0.5.1 && < 0.6
|
||||||
|
, network
|
||||||
|
|
||||||
exposed-modules: Yesod.Auth
|
exposed-modules: Yesod.Auth
|
||||||
Yesod.Auth.BrowserId
|
Yesod.Auth.BrowserId
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user