{-# LANGUAGE CPP , OverloadedStrings , RecordWildCards , QuasiQuotes , TemplateHaskell , TypeFamilies , TypeOperators , MultiParamTypeClasses , FunctionalDependencies , FlexibleContexts , FlexibleInstances , AllowAmbiguousTypes , UndecidableInstances , GeneralizedNewtypeDeriving , ScopedTypeVariables , TypeFamilyDependencies #-} module Yesod.Auth.HmacKeccak where import Yesod.Auth.Import import qualified Data.Text as T import qualified Data.Char as C import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Char8 as BC import Data.Maybe (fromJust) import qualified Database.Persist as P import System.Random import System.IO.Unsafe (unsafePerformIO) import Numeric (readHex, showHex) import Yesod.Auth import Yesod.Auth.Message import Yesod.Persist hiding (get, replace, insertkey, Entity, entityVal) import Yesod.Static import Text.Julius (jsFile) import Paths_yesod_auth_hmac_keccak as Paths import Yesod.Auth.JsPath type Username = Text -- js_auth_js :: String -- js_auth_js = -- unsafePerformIO $ readFile =<< getDataFileName "static/js/auth.js" hmacPlugin :: YesodHmacKeccak db master => AuthPlugin master hmacPlugin = AuthPlugin "authHmacKeccak" dispatch loginWidget where dispatch "POST" ["login"] = postLoginR' >>= sendResponse dispatch "GET" ["newaccount"] = getNewAccountR' >>= sendResponse dispatch "POST" ["newaccount"] = postNewAccountR' >>= sendResponse dispatch "GET" ["resetpasswd"] = getReactivateR' >>= sendResponse dispatch "POST" ["resetpasswd"] = postReactivateR' >>= sendResponse dispatch "GET" ["verify", k] = getVerifyR' (encodeUtf8 k) >>= sendResponse dispatch "POST" ["verify", k] = postVerifyR' (encodeUtf8 k) >>= sendResponse dispatch _ _ = notFound newAccountR :: AuthRoute newAccountR = PluginR "authHmacKeccak" ["newaccount"] verifyR :: ByteString -> AuthRoute verifyR k = PluginR "authHmacKeccak" ["verify", (decodeUtf8 k)] resetPasswordR :: AuthRoute resetPasswordR = PluginR "authHmacKeccak" ["resetpasswd"] loginR :: AuthRoute loginR = PluginR "authHmacKeccak" ["login"] -- Login procedure. loginWidget :: YesodHmacKeccak db master => (Route Auth -> Route master) -> WidgetT master IO () loginWidget tm = do render <- getUrlRenderParams toWidgetHead $ $(jsFile jsPath) render [whamlet|