loginPage :: RouteT Sitemap (ClientSessionT SessionData (ServerPartT (ReaderT EnvironmentArgs IO))) Response
loginPage =
do
environmentArgs <- ask
homeURL <- showURL Home
loginURL <- showURL Login
loginCSSURL <- showURL $ CSS (CSSFilename "login.css")
topBannerCSSURL <- fmap CSSUrl (showURL $ CSS (CSSFilename "topBanner.css"))
formHTML <- lift $ reform (form loginURL) "loginPage" (displayMessage homeURL) Nothing loginForm
sessionData <- mapRouteT getSessionData askRouteT
ok $ toResponse $
H.html $ do
H.head $ do
H.title "Eureka Login"
H.link H.! A.href (fromString . Data.Text.unpack $ loginCSSURL) H.! A.rel "stylesheet" H.! A.type_ "text/css"
H.body $ do
loginBanner (eEnvironmentName environmentArgs) (eEnvironmentVersion environmentArgs) (fmap _username (Just sessionData)) topBannerCSSURL
formHTML
bottomBanner
H.p $ toMarkup $ _count sessionData
where
displayMessage :: Text -> LoginData -> ClientSessionT SessionData (ServerPartT (ReaderT EnvironmentArgs IO)) H.Html
displayMessage homeURL loginData = passwordMatchedResponse loginData
where passwordMatchedResponse :: LoginData -> ClientSessionT SessionData (ServerPartT (ReaderT EnvironmentArgs IO)) H.Html
passwordMatchedResponse (LoginData _ (Password "")) = loginFailed
passwordMatchedResponse (LoginData (Username "") _) = loginFailed
passwordMatchedResponse loginData =
do existingSession <- getSession
putSession $ SessionData (lUsername loginData) 34
seeOther homeURL "Loading home page"
-- return $ appTemplate "Form validation result" [] $ renderLoginData loginData
getSessionData :: ClientSessionT SessionData (ServerPartT (ReaderT EnvironmentArgs IO)) a -> ClientSessionT SessionData (ServerPartT (ReaderT EnvironmentArgs IO)) SessionData
getSessionData _ = getSession