-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Authentication for Yesod.
--   
--   Authentication for Yesod.
@package yesod-auth
@version 1.1.7

module Yesod.Auth.Message
data AuthMessage
NoOpenID :: AuthMessage
LoginOpenID :: AuthMessage
LoginGoogle :: AuthMessage
LoginYahoo :: AuthMessage
Email :: AuthMessage
Password :: AuthMessage
Register :: AuthMessage
RegisterLong :: AuthMessage
EnterEmail :: AuthMessage
ConfirmationEmailSentTitle :: AuthMessage
ConfirmationEmailSent :: Text -> AuthMessage
AddressVerified :: AuthMessage
InvalidKeyTitle :: AuthMessage
InvalidKey :: AuthMessage
InvalidEmailPass :: AuthMessage
BadSetPass :: AuthMessage
SetPassTitle :: AuthMessage
SetPass :: AuthMessage
NewPass :: AuthMessage
ConfirmPass :: AuthMessage
PassMismatch :: AuthMessage
PassUpdated :: AuthMessage
Facebook :: AuthMessage
LoginViaEmail :: AuthMessage
InvalidLogin :: AuthMessage
NowLoggedIn :: AuthMessage
LoginTitle :: AuthMessage
PleaseProvideUsername :: AuthMessage
PleaseProvidePassword :: AuthMessage

-- | Defaults to <a>englishMessage</a>.
defaultMessage :: AuthMessage -> Text
englishMessage :: AuthMessage -> Text
portugueseMessage :: AuthMessage -> Text
swedishMessage :: AuthMessage -> Text
germanMessage :: AuthMessage -> Text
frenchMessage :: AuthMessage -> Text
norwegianBokmålMessage :: AuthMessage -> Text
japaneseMessage :: AuthMessage -> Text
finnishMessage :: AuthMessage -> Text

module Yesod.Auth
data Auth
type AuthRoute = Route Auth
data AuthPlugin master
AuthPlugin :: Text -> (Method -> [Piece] -> GHandler Auth master ()) -> (forall sub. (Route Auth -> Route master) -> GWidget sub master ()) -> AuthPlugin master
apName :: AuthPlugin master -> Text
apDispatch :: AuthPlugin master -> Method -> [Piece] -> GHandler Auth master ()
apLogin :: AuthPlugin master -> forall sub. (Route Auth -> Route master) -> GWidget sub master ()
getAuth :: a -> Auth
class (Yesod master, PathPiece (AuthId master), RenderMessage master FormMessage) => YesodAuth master where type family AuthId master loginHandler = defaultLayout $ do { setTitleI LoginTitle; tm <- lift getRouteToMaster; master <- lift getYesod; mapM_ (flip apLogin tm) (authPlugins master) } renderAuthMessage _ _ = defaultMessage redirectToReferer _ = False onLogin = setMessageI NowLoggedIn onLogout = return () maybeAuthId = defaultMaybeAuthId
loginDest :: YesodAuth master => master -> Route master
logoutDest :: YesodAuth master => master -> Route master
getAuthId :: YesodAuth master => Creds master -> GHandler sub master (Maybe (AuthId master))
authPlugins :: YesodAuth master => master -> [AuthPlugin master]
loginHandler :: YesodAuth master => GHandler Auth master RepHtml
renderAuthMessage :: YesodAuth master => master -> [Text] -> AuthMessage -> Text
redirectToReferer :: YesodAuth master => master -> Bool
authHttpManager :: YesodAuth master => master -> Manager
onLogin :: YesodAuth master => GHandler sub master ()
onLogout :: YesodAuth master => GHandler sub master ()
maybeAuthId :: YesodAuth master => GHandler sub master (Maybe (AuthId master))

-- | User credentials
data Creds master
Creds :: Text -> Text -> [(Text, Text)] -> Creds master

-- | How the user was authenticated
credsPlugin :: Creds master -> Text

-- | Identifier. Exact meaning depends on plugin.
credsIdent :: Creds master -> Text
credsExtra :: Creds master -> [(Text, Text)]

-- | Sets user credentials for the session after checking them with
--   authentication backends.
setCreds :: YesodAuth master => Bool -> Creds master -> GHandler sub master ()

-- | Clears current user credentials for the session.
--   
--   Since 1.1.7
clearCreds :: YesodAuth master => Bool -> GHandler sub master ()

-- | Retrieves user credentials from the session, if user is authenticated.
--   
--   Since 1.1.2
defaultMaybeAuthId :: YesodAuth master => GHandler sub master (Maybe (AuthId master))
maybeAuth :: (YesodAuth master, PersistMonadBackend (b (GHandler sub master)) ~ PersistEntityBackend val, b ~ YesodPersistBackend master, Key val ~ AuthId master, PersistStore (b (GHandler sub master)), PersistEntity val, YesodPersist master) => GHandler sub master (Maybe (Entity val))
requireAuthId :: YesodAuth master => GHandler sub master (AuthId master)
requireAuth :: (YesodAuth master, b ~ YesodPersistBackend master, PersistMonadBackend (b (GHandler sub master)) ~ PersistEntityBackend val, Key val ~ AuthId master, PersistStore (b (GHandler sub master)), PersistEntity val, YesodPersist master) => GHandler sub master (Entity val)
data AuthException
InvalidBrowserIDAssertion :: AuthException
InvalidFacebookResponse :: AuthException
instance Typeable AuthException
instance Show AuthException
instance Show (Route Auth)
instance Eq (Route Auth)
instance Read (Route Auth)
instance Exception AuthException
instance YesodAuth master => RenderMessage master AuthMessage
instance (Yesod master, YesodAuth master) => YesodDispatch Auth master
instance RenderRoute Auth

module Yesod.Auth.BrowserId

-- | Log into browser ID with an audience value determined from the
--   <a>approot</a>.
authBrowserId :: YesodAuth m => AuthPlugin m

-- | Log into browser ID with the given audience value. Note that this must
--   be your actual hostname, or login will fail.
authBrowserIdAudience :: YesodAuth m => Text -> AuthPlugin m

-- | Generates a function to handle on-click events, and returns that
--   function name.
createOnClick :: (Route Auth -> Route master) -> GWidget sub master Text


-- | Provides a dummy authentication module that simply lets a user specify
--   his/her identifier. This is not intended for real world use, just for
--   testing.
module Yesod.Auth.Dummy
authDummy :: YesodAuth m => AuthPlugin m

module Yesod.Auth.Email
authEmail :: YesodAuthEmail m => AuthPlugin m
class (YesodAuth m, PathPiece (AuthEmailId m)) => YesodAuthEmail m where type family AuthEmailId m randomKey _ = do { stdgen <- newStdGen; return $ pack $ fst $ randomString 10 stdgen }
addUnverified :: YesodAuthEmail m => Email -> VerKey -> GHandler Auth m (AuthEmailId m)
sendVerifyEmail :: YesodAuthEmail m => Email -> VerKey -> VerUrl -> GHandler Auth m ()
getVerifyKey :: YesodAuthEmail m => AuthEmailId m -> GHandler Auth m (Maybe VerKey)
setVerifyKey :: YesodAuthEmail m => AuthEmailId m -> VerKey -> GHandler Auth m ()
verifyAccount :: YesodAuthEmail m => AuthEmailId m -> GHandler Auth m (Maybe (AuthId m))
getPassword :: YesodAuthEmail m => AuthId m -> GHandler Auth m (Maybe SaltedPass)
setPassword :: YesodAuthEmail m => AuthId m -> SaltedPass -> GHandler Auth m ()
getEmailCreds :: YesodAuthEmail m => Email -> GHandler Auth m (Maybe (EmailCreds m))
getEmail :: YesodAuthEmail m => AuthEmailId m -> GHandler Auth m (Maybe Email)
randomKey :: YesodAuthEmail m => m -> IO Text

-- | Data stored in a database for each e-mail address.
data EmailCreds m
EmailCreds :: AuthEmailId m -> Maybe (AuthId m) -> VerStatus -> Maybe VerKey -> EmailCreds m
emailCredsId :: EmailCreds m -> AuthEmailId m
emailCredsAuthId :: EmailCreds m -> Maybe (AuthId m)
emailCredsStatus :: EmailCreds m -> VerStatus
emailCredsVerkey :: EmailCreds m -> Maybe VerKey

-- | Salt a password with a randomly generated salt.
saltPass :: Text -> IO Text
loginR :: AuthRoute
registerR :: AuthRoute
setpassR :: AuthRoute
isValidPass :: Text -> SaltedPass -> Bool

module Yesod.Auth.OpenId
authOpenId :: YesodAuth m => IdentifierType -> [(Text, Text)] -> AuthPlugin m
forwardUrl :: AuthRoute

-- | The main identifier provided by the OpenID authentication plugin is
--   the "OP-local identifier". There is also sometimes a "claimed"
--   identifier available.
--   
--   In the <a>credsExtra</a> field of the <a>Creds</a> datatype, you can
--   lookup this key to find the claimed identifier, if available.
--   
--   <pre>
--   let finalID = fromMaybe (credsIdent creds)
--               $ lookup claimedKey (credsExtra creds)
--   </pre>
--   
--   Since 1.0.2
claimedKey :: Text
opLocalKey :: Text

-- | A helper function which will get the claimed identifier, if available,
--   falling back to the OP local identifier.
--   
--   See <a>claimedKey</a>.
--   
--   Since 1.0.2
credsIdentClaimed :: Creds m -> Text
data IdentifierType
Claimed :: IdentifierType
OPLocal :: IdentifierType

module Yesod.Auth.Rpxnow
authRpxnow :: YesodAuth m => String -> String -> AuthPlugin m


-- | A yesod-auth AuthPlugin designed to look users up in Persist where
--   their user id's and a salted SHA1 hash of their password is stored.
--   
--   Example usage:
--   
--   <pre>
--   -- import the function
--   import Auth.HashDB
--   
--   -- make sure you have an auth route
--   mkYesodData "MyApp" [$parseRoutes|
--   / RootR GET
--   /auth AuthR Auth getAuth
--   |]
--   
--   
--   -- make your app an instance of YesodAuth using this plugin
--   instance YesodAuth MyApp where
--      type AuthId MyApp = UserId
--   
--      loginDest _  = RootR
--      logoutDest _ = RootR
--      getAuthId    = getAuthIdHashDB AuthR (Just . UniqueUser)
--      authPlugins  = [authHashDB (Just . UniqueUser)]
--   
--   
--   -- include the migration function in site startup
--   withServer :: (Application -&gt; IO a) -&gt; IO a
--   withServer f = withConnectionPool $ \p -&gt; do
--       runSqlPool (runMigration migrateUsers) p
--       let h = DevSite p
--   </pre>
--   
--   Note that function which converts username to unique identifier must
--   be same.
--   
--   Your app must be an instance of YesodPersist. and the username, salt
--   and hashed-passwords should be added to the database.
--   
--   <pre>
--   echo -n 'MySaltMyPassword' | sha1sum
--   </pre>
--   
--   can be used to get the hash from the commandline.
module Yesod.Auth.HashDB

-- | Interface for data type which holds user info. It's just a collection
--   of getters and setters
class HashDBUser user where setUserHashAndSalt = setSaltAndPasswordHash setSaltAndPasswordHash = setUserHashAndSalt
userPasswordHash :: HashDBUser user => user -> Maybe Text
userPasswordSalt :: HashDBUser user => user -> Maybe Text
setUserHashAndSalt :: HashDBUser user => Text -> Text -> user -> user
setSaltAndPasswordHash :: HashDBUser user => Text -> Text -> user -> user

-- | Unique keys in existence on this entity.

-- | Set password for user. This function should be used for setting
--   passwords. It generates random salt and calculates proper hashes.
setPassword :: (MonadIO m, HashDBUser user) => Text -> user -> m user

-- | Given a user ID and password in plaintext, validate them against the
--   database values.
validateUser :: (YesodPersist yesod, b ~ YesodPersistBackend yesod, PersistMonadBackend (b (GHandler sub yesod)) ~ PersistEntityBackend user, PersistUnique (b (GHandler sub yesod)), PersistEntity user, HashDBUser user) => Unique user -> Text -> GHandler sub yesod Bool

-- | Prompt for username and password, validate that against a database
--   which holds the username and a hash of the password
authHashDB :: (YesodAuth m, YesodPersist m, HashDBUser user, PersistEntity user, b ~ YesodPersistBackend m, PersistMonadBackend (b (GHandler Auth m)) ~ PersistEntityBackend user, PersistUnique (b (GHandler Auth m))) => (Text -> Maybe (Unique user)) -> AuthPlugin m

-- | A drop in for the getAuthId method of your YesodAuth instance which
--   can be used if authHashDB is the only plugin in use.
getAuthIdHashDB :: (YesodAuth master, YesodPersist master, HashDBUser user, PersistEntity user, Key user ~ AuthId master, b ~ YesodPersistBackend master, PersistMonadBackend (b (GHandler sub master)) ~ PersistEntityBackend user, PersistUnique (b (GHandler sub master))) => (AuthRoute -> Route master) -> (Text -> Maybe (Unique user)) -> Creds master -> GHandler sub master (Maybe (AuthId master))
type User = UserGeneric SqlBackend

-- | Generate data base instances for a valid user
data UserGeneric backend
User :: Text -> Text -> Text -> UserGeneric backend
userUsername :: UserGeneric backend -> Text
userPassword :: UserGeneric backend -> Text
userSalt :: UserGeneric backend -> Text
type UserId = KeyBackend SqlBackend User

-- | Parameters: val and datatype of the field
migrateUsers :: (MonadBaseControl IO m, MonadIO m) => Migration (SqlPersist m)
instance HashDBUser (UserGeneric backend)
instance PersistEntity (UserGeneric backend)
instance PersistField (UserGeneric backend)


-- | Use an email address as an identifier via Google's OpenID login
--   system.
--   
--   This backend will not use the OpenID identifier at all. It only uses
--   OpenID as a login system. By using this plugin, you are trusting
--   Google to validate an email address, and requiring users to have a
--   Google account. On the plus side, you get to use email addresses as
--   the identifier, many users have existing Google accounts, the login
--   system has been long tested (as opposed to BrowserID), and it requires
--   no credential managing or setup (as opposed to Email).
module Yesod.Auth.GoogleEmail
authGoogleEmail :: YesodAuth m => AuthPlugin m
forwardUrl :: AuthRoute
