yu-auth-0.1.0.0: src/Yu/Auth.hs
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-|
Module: Yu.Auth
Description: The methods for authentication
Copyright: (C) Qinka 2017
License: GPL3
Maintainer: me@qinka.pro
Stability: experimental
Portability: unknown
The methods about authentication for Yu (using Yesod)
-}
module Yu.Auth
( -- * check whether it is authorized
checkAuth
, -- * Type Class to limit
Auth(..)
, -- * reexport module
module Yu.Auth.Core
) where
import Control.Monad.IO.Class
import Yesod.Core
import Yu.Auth.Core
import Yu.Import.ByteString (ByteString)
import qualified Yu.Import.ByteString as B
-- | The class to limit the an application with it hash algorithm
-- and the password of the site.
class HashAlgorithm a => Auth site a | site -> a where
-- | to get the HASH
tokenHash :: MonadIO m => site -> m a
-- | to get the password
tokenItem :: MonadIO m => site -> m ByteString
-- | check auth
checkAuth :: Auth site hash
=> HandlerT site IO AuthResult -- ^ return result
checkAuth = do -- Handler _ IO
site <- getYesod
item <- tokenItem site
hash <- tokenHash site
token <- lookupHeader "token"
liftIO $ print $ generateHash hash item
liftIO $ print token
case verifyHash hash item <$> token of
-- success
Just True -> return Authorized
-- failure
_ -> return $ Unauthorized "Who are you! The thing did not answer."