yesod-auth 0.8.1.1 → 1.0.0
raw patch · 11 files changed
+110/−87 lines, 11 filesdep ~authenticatedep ~basedep ~hamlet
Dependency ranges changed: authenticate, base, hamlet, http-conduit, persistent, persistent-template, shakespeare-css, transformers, wai, yesod-core, yesod-form, yesod-json, yesod-persistent
Files
- Yesod/Auth.hs +5/−7
- Yesod/Auth/BrowserId.hs +1/−4
- Yesod/Auth/Dummy.hs +3/−6
- Yesod/Auth/Email.hs +6/−14
- Yesod/Auth/GoogleEmail.hs +1/−4
- Yesod/Auth/HashDB.hs +5/−9
- Yesod/Auth/Message.hs +70/−0
- Yesod/Auth/OpenId.hs +3/−7
- Yesod/Auth/Rpxnow.hs +1/−5
- include/qq.h +0/−10
- yesod-auth.cabal +15/−21
Yesod/Auth.hs view
@@ -1,9 +1,9 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveDataTypeable #-} {-# OPTIONS_GHC -fno-warn-orphans #-}@@ -27,8 +27,6 @@ , AuthException (..) ) where -#include "qq.h"- import Control.Monad (when) import Control.Monad.Trans.Maybe @@ -132,7 +130,7 @@ [ ClassP ''YesodAuth [VarT $ mkName "master"] ] #define STRINGS *Texts- [QQ(parseRoutes)|+ [parseRoutes| /check CheckR GET /login LoginR GET /logout LogoutR GET POST@@ -151,7 +149,7 @@ Nothing -> when doRedirects $ do case authRoute y of- Nothing -> do rh <- defaultLayout $ addHtml [QQ(shamlet)| <h1>Invalid login |]+ Nothing -> do rh <- defaultLayout $ toWidget [shamlet| <h1>Invalid login |] sendResponse rh Just ar -> do setMessageI Msg.InvalidLogin redirect ar@@ -166,10 +164,10 @@ creds <- maybeAuthId defaultLayoutJson (do setTitle "Authentication Status"- addHtml $ html' creds) (jsonCreds creds)+ toWidget $ html' creds) (jsonCreds creds) where html' creds =- [QQ(shamlet)|+ [shamlet| <h1>Authentication Status $maybe _ <- creds <p>Logged in.
Yesod/Auth/BrowserId.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} module Yesod.Auth.BrowserId ( authBrowserId@@ -16,8 +15,6 @@ import Control.Monad.IO.Class (liftIO) import Control.Exception (throwIO) -#include "qq.h"- pid :: Text pid = "browserid" @@ -64,7 +61,7 @@ _ -> notFound , apLogin = \toMaster -> do addScriptRemote browserIdJs- addHamlet [QQ(hamlet)|+ toWidget [hamlet| <p> <a href="javascript:navigator.id.getVerifiedEmail(function(a){if(a)document.location='@{toMaster complete}/'+a});"> <img src="https://browserid.org/i/sign_in_green.png">
Yesod/Auth/Dummy.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} -- | Provides a dummy authentication module that simply lets a user specify -- his/her identifier. This is not intended for real world use, just for@@ -8,13 +7,11 @@ ( authDummy ) where -#include "qq.h"- import Yesod.Auth import Yesod.Form (runInputPost, textField, ireq) import Yesod.Handler (notFound) import Text.Hamlet (hamlet)-import Yesod.Widget (addHamlet)+import Yesod.Widget (toWidget) authDummy :: YesodAuth m => AuthPlugin m authDummy =@@ -26,9 +23,9 @@ dispatch _ _ = notFound url = PluginR "dummy" [] login authToMaster =- addHamlet [QQ(hamlet)|+ toWidget [hamlet| <form method="post" action="@{authToMaster url}">- \Your new identifier is: + Your new identifier is: # <input type="text" name="ident"> <input type="submit" value="Dummy Login"> |]
Yesod/Auth/Email.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE QuasiQuotes, TypeFamilies #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleContexts #-} module Yesod.Auth.Email@@ -15,8 +14,6 @@ , isValidPass ) where -#include "qq.h"- import Network.Mail.Mime (randomString) import Yesod.Auth import System.Random@@ -33,8 +30,7 @@ import Yesod.Form import Yesod.Handler import Yesod.Content-import Yesod.Widget-import Yesod.Core+import Yesod.Core (PathPiece, fromPathPiece, whamlet, defaultLayout, setTitleI, toPathPiece) import Control.Monad.IO.Class (liftIO) import qualified Yesod.Auth.Message as Msg @@ -82,7 +78,7 @@ authEmail :: YesodAuthEmail m => AuthPlugin m authEmail = AuthPlugin "email" dispatch $ \tm ->- [QQ(whamlet)|+ [whamlet| <form method="post" action="@{tm loginR}"> <table> <tr>@@ -115,8 +111,7 @@ toMaster <- getRouteToMaster defaultLayout $ do setTitleI Msg.RegisterLong- addWidget- [QQ(whamlet)|+ [whamlet| <p>_{Msg.EnterEmail} <form method="post" action="@{toMaster registerR}"> <label for="email">_{Msg.Email}@@ -146,8 +141,7 @@ sendVerifyEmail email verKey verUrl defaultLayout $ do setTitleI Msg.ConfirmationEmailSentTitle- addWidget- [QQ(whamlet)| <p>_{Msg.ConfirmationEmailSent email} |]+ [whamlet| <p>_{Msg.ConfirmationEmailSent email} |] getVerifyR :: YesodAuthEmail m => AuthEmailId m -> Text -> GHandler Auth m RepHtml@@ -167,8 +161,7 @@ _ -> return () defaultLayout $ do setTitleI Msg.InvalidKey- addWidget- [QQ(whamlet)| <p>_{Msg.InvalidKey} |]+ [whamlet| <p>_{Msg.InvalidKey} |] postLoginR :: YesodAuthEmail master => GHandler Auth master () postLoginR = do@@ -206,8 +199,7 @@ redirect $ toMaster LoginR defaultLayout $ do setTitleI Msg.SetPassTitle- addWidget- [QQ(whamlet)|+ [whamlet| <h3>_{Msg.SetPass} <form method="post" action="@{toMaster setpassR}"> <table>
Yesod/Auth/GoogleEmail.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} -- | Use an email address as an identifier via Google's OpenID login system. --@@ -18,9 +17,8 @@ import Yesod.Auth import qualified Web.Authenticate.OpenId as OpenId -import Yesod.Form import Yesod.Handler-import Yesod.Widget+import Yesod.Widget (whamlet) import Yesod.Request import Text.Blaze (toHtml) import Data.Text (Text)@@ -39,7 +37,6 @@ AuthPlugin "googleemail" dispatch login where complete = PluginR "googleemail" ["complete"]- name = "openid_identifier" login tm = [whamlet|<a href=@{tm forwardUrl}>_{Msg.LoginGoogle}|] dispatch "GET" ["forward"] = do
Yesod/Auth/HashDB.hs view
@@ -2,7 +2,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE GADTs #-}@@ -72,13 +71,11 @@ , migrateUsers ) where -#include "qq.h"- import Yesod.Persist import Yesod.Handler import Yesod.Form import Yesod.Auth-import Yesod.Widget (addHamlet)+import Yesod.Widget (toWidget) import Text.Hamlet (hamlet, shamlet) import Control.Applicative ((<$>), (<*>))@@ -179,7 +176,7 @@ (validateUser <$> (uniq =<< mu) <*> mp) if isValid then setCreds True $ Creds "hashdb" (fromMaybe "" mu) []- else do setMessage [QQ(shamlet)| Invalid username/password |]+ else do setMessage [shamlet| Invalid username/password |] toMaster <- getRouteToMaster redirect $ toMaster LoginR @@ -210,7 +207,7 @@ -- user exists Just (Entity uid _) -> return $ Just uid Nothing -> do- setMessage [QQ(shamlet)| User not found |]+ setMessage [shamlet| User not found |] redirect $ authR LoginR -- | Prompt for username and password, validate that against a database@@ -223,8 +220,7 @@ , PersistStore b (GHandler Auth m) , PersistUnique b (GHandler Auth m)) => (Text -> Maybe (Unique user b)) -> AuthPlugin m-authHashDB uniq = AuthPlugin "hashdb" dispatch $ \tm -> addHamlet- [QQ(hamlet)|+authHashDB uniq = AuthPlugin "hashdb" dispatch $ \tm -> toWidget [hamlet| <div id="header"> <h1>Login @@ -261,7 +257,7 @@ -- | Generate data base instances for a valid user share [mkPersist sqlSettings, mkMigrate "migrateUsers"]- [QQ(persistUpperCase)|+ [persistUpperCase| User username Text Eq password Text
Yesod/Auth/Message.hs view
@@ -6,6 +6,8 @@ -- * All languages , englishMessage , portugueseMessage+ , swedishMessage+ , germanMessage ) where import Data.Monoid (mappend)@@ -113,3 +115,71 @@ portugueseMessage LoginTitle = "Entrar no site" portugueseMessage PleaseProvideUsername = "Por favor digite seu nome de usuário" portugueseMessage PleaseProvidePassword = "Por favor digite sua senha"++swedishMessage :: AuthMessage -> Text+swedishMessage NoOpenID = "Fann ej OpenID identifierare"+swedishMessage LoginOpenID = "Logga in via OpenID"+swedishMessage LoginGoogle = "Logga in via Google"+swedishMessage LoginYahoo = "Logga in via Yahoo"+swedishMessage Email = "Epost"+swedishMessage Password = "Lösenord"+swedishMessage Register = "Registrera"+swedishMessage RegisterLong = "Registrera ett nytt konto"+swedishMessage EnterEmail = "Skriv in din epost nedan så kommer ett konfirmationsmail skickas till adressen."+swedishMessage ConfirmationEmailSentTitle = "Konfirmationsmail skickat"+swedishMessage (ConfirmationEmailSent email) =+ "Ett konfirmationsmeddelande har skickats till" `mappend`+ email `mappend`+ "."+swedishMessage AddressVerified = "Adress verifierad, vänligen välj nytt lösenord"+swedishMessage InvalidKeyTitle = "Ogiltig verifikationsnyckel"+swedishMessage InvalidKey = "Tyvärr, du angav en ogiltig verifimationsnyckel."+swedishMessage InvalidEmailPass = "Ogiltig epost/lösenord kombination"+swedishMessage BadSetPass = "Du måste vara inloggad för att ange ett lösenord"+swedishMessage SetPassTitle = "Ange lösenord"+swedishMessage SetPass = "Ange nytt lösenord"+swedishMessage NewPass = "Nytt lösenord"+swedishMessage ConfirmPass = "Godkänn"+swedishMessage PassMismatch = "Lösenorden matcha ej, vänligen försök igen"+swedishMessage PassUpdated = "Lösenord updaterades"+swedishMessage Facebook = "Logga in med Facebook"+swedishMessage LoginViaEmail = "Logga in via epost"+swedishMessage InvalidLogin = "Ogiltigt login"+swedishMessage NowLoggedIn = "Du är nu inloggad"+swedishMessage LoginTitle = "Logga in"+swedishMessage PleaseProvideUsername = "Vänligen fyll i användarnamn"+swedishMessage PleaseProvidePassword = "Vänligen fyll i lösenord"++germanMessage :: AuthMessage -> Text+germanMessage NoOpenID = "Kein OpenID-Identifier gefunden"+germanMessage LoginOpenID = "Login via OpenID"+germanMessage LoginGoogle = "Login via Google"+germanMessage LoginYahoo = "Login via Yahoo"+germanMessage Email = "Email"+germanMessage Password = "Passwort"+germanMessage Register = "Registrieren"+germanMessage RegisterLong = "Neuen Account registrieren"+germanMessage EnterEmail = "Bitte die e-Mail Adresse angeben, eine Bestätigungsmail wird verschickt."+germanMessage ConfirmationEmailSentTitle = "Bestätigung verschickt."+germanMessage (ConfirmationEmailSent email) =+ "Eine Bestätigung wurde an " `mappend`+ email `mappend`+ "versandt."+germanMessage AddressVerified = "Adresse bestätigt, bitte neues Passwort angeben"+germanMessage InvalidKeyTitle = "Ungültiger Bestätigungsschlüssel"+germanMessage InvalidKey = "Das war leider ein ungültiger Bestätigungsschlüssel"+germanMessage InvalidEmailPass = "Ungültiger Nutzername oder Passwort"+germanMessage BadSetPass = "Um das Passwort zu ändern muss man eingeloggt sein"+germanMessage SetPassTitle = "Passwort angeben"+germanMessage SetPass = "Neues Passwort angeben"+germanMessage NewPass = "Neues Passwort"+germanMessage ConfirmPass = "Bestätigen"+germanMessage PassMismatch = "Die Passwörter stimmten nicht überein"+germanMessage PassUpdated = "Passwort überschrieben"+germanMessage Facebook = "Login über Facebook"+germanMessage LoginViaEmail = "Login via e-Mail"+germanMessage InvalidLogin = "Ungültiger Login"+germanMessage NowLoggedIn = "Login erfolgreich"+germanMessage LoginTitle = "Login"+germanMessage PleaseProvideUsername = "Bitte Nutzername angeben"+germanMessage PleaseProvidePassword = "Bitte Passwort angeben"
Yesod/Auth/OpenId.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} module Yesod.Auth.OpenId ( authOpenId@@ -7,14 +6,12 @@ , forwardUrl ) where -#include "qq.h"- import Yesod.Auth import qualified Web.Authenticate.OpenId as OpenId import Yesod.Form import Yesod.Handler-import Yesod.Widget+import Yesod.Widget (toWidget, whamlet) import Yesod.Request import Text.Cassius (cassius) import Text.Blaze (toHtml)@@ -36,12 +33,11 @@ name = "openid_identifier" login tm = do ident <- lift newIdent- addCassius- [QQ(cassius)|##{ident}+ toWidget [cassius|##{ident} background: #fff url(http://www.myopenid.com/static/openid-icon-small.gif) no-repeat scroll 0pt 50%; padding-left: 18px; |]- [QQ(whamlet)|+ [whamlet| <form method="get" action="@{tm forwardUrl}"> <input type="hidden" name="openid_identifier" value="https://www.google.com/accounts/o8/id"> <button .openid-google>_{Msg.LoginGoogle}
Yesod/Auth/Rpxnow.hs view
@@ -1,12 +1,9 @@ {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} module Yesod.Auth.Rpxnow ( authRpxnow ) where -#include "qq.h"- import Yesod.Auth import qualified Web.Authenticate.Rpxnow as Rpxnow import Control.Monad (mplus)@@ -27,8 +24,7 @@ where login tm = do let url = {- FIXME urlEncode $ -} tm $ PluginR "rpxnow" []- addHamlet- [QQ(hamlet)|+ toWidget [hamlet| <iframe src="http://#{app}.rpxnow.com/openid/embed?token_url=@{url}" scrolling="no" frameBorder="no" allowtransparency="true" style="width:400px;height:240px"> |] dispatch _ [] = do
− include/qq.h
@@ -1,10 +0,0 @@---- CPP macro which choses which quasyquotes syntax to use depending--- on GHC version.------ QQ stands for quasyquote.-#if GHC7-# define QQ(x) x-#else-# define QQ(x) $x-#endif
yesod-auth.cabal view
@@ -1,6 +1,6 @@ name: yesod-auth-version: 0.8.1.1-license: BSD3+version: 1.0.0+license: MIT license-file: LICENSE author: Michael Snoyman, Patrick Brisbin maintainer: Michael Snoyman <michael@snoyman.com>@@ -10,39 +10,34 @@ cabal-version: >= 1.6.0 build-type: Simple homepage: http://www.yesodweb.com/-extra-source-files: include/qq.h description: Authentication for Yesod. flag ghc7 library- if flag(ghc7)- build-depends: base >= 4.3 && < 5- cpp-options: -DGHC7- else- build-depends: base >= 4 && < 4.3- build-depends: authenticate >= 1.0 && < 1.1+ build-depends: base >= 4 && < 5+ , authenticate >= 1.2 && < 1.3 , bytestring >= 0.9.1.4 && < 0.10- , yesod-core >= 0.10.1 && < 0.11- , wai >= 1.1 && < 1.2+ , yesod-core >= 1.0 && < 1.1+ , wai >= 1.2 && < 1.3 , template-haskell , pureMD5 >= 2.0 && < 2.2 , random >= 1.0.0.2 && < 1.1 , text >= 0.7 && < 0.12 , mime-mail >= 0.3 && < 0.5 , blaze-html >= 0.4.1.3 && < 0.5- , yesod-persistent >= 0.3.1 && < 0.4- , hamlet >= 0.10 && < 0.11- , shakespeare-css >= 0.10 && < 0.11- , yesod-json >= 0.3.1 && < 0.4+ , yesod-persistent >= 1.0 && < 1.1+ , hamlet >= 1.0 && < 1.1+ , shakespeare-css >= 1.0 && < 1.1+ , yesod-json >= 1.0 && < 1.1 , containers , unordered-containers- , yesod-form >= 0.4.1 && < 0.5- , transformers >= 0.2.2 && < 0.3- , persistent >= 0.8 && < 0.9- , persistent-template >= 0.8 && < 0.9+ , yesod-form >= 1.0 && < 1.1+ , transformers >= 0.2.2 && < 0.4+ , persistent >= 0.9 && < 0.10+ , persistent-template >= 0.9 && < 0.10 , SHA >= 1.4.1.3 && < 1.6- , http-conduit >= 1.2.5 && < 1.3+ , http-conduit >= 1.4 && < 1.5 , aeson >= 0.5 , pwstore-fast >= 2.2 && < 3 , lifted-base >= 0.1 && < 0.2@@ -57,7 +52,6 @@ Yesod.Auth.Message Yesod.Auth.GoogleEmail ghc-options: -Wall- include-dirs: include source-repository head type: git