authentication works
This commit is contained in:
parent
c10806fffc
commit
8a81217624
6 changed files with 64 additions and 6 deletions
|
@ -14,10 +14,12 @@ import qualified Database.Persist
|
||||||
import Database.Persist.Sql (SqlPersistT)
|
import Database.Persist.Sql (SqlPersistT)
|
||||||
import Settings.StaticFiles
|
import Settings.StaticFiles
|
||||||
import Settings (widgetFile, Extra (..))
|
import Settings (widgetFile, Extra (..))
|
||||||
-- import Model
|
import Model
|
||||||
import Text.Jasmine (minifym)
|
import Text.Jasmine (minifym)
|
||||||
import Text.Hamlet (hamletFile)
|
import Text.Hamlet (hamletFile)
|
||||||
import Yesod.Core.Types (Logger)
|
import Yesod.Core.Types (Logger)
|
||||||
|
-- costom imports
|
||||||
|
import Data.Maybe
|
||||||
|
|
||||||
-- | The site argument for your application. This can be a good place to
|
-- | The site argument for your application. This can be a good place to
|
||||||
-- keep settings and values requiring initialization before your application
|
-- keep settings and values requiring initialization before your application
|
||||||
|
@ -63,6 +65,7 @@ instance Yesod App where
|
||||||
defaultLayout widget = do
|
defaultLayout widget = do
|
||||||
master <- getYesod
|
master <- getYesod
|
||||||
mmsg <- getMessage
|
mmsg <- getMessage
|
||||||
|
msu <- lookupSession "username"
|
||||||
|
|
||||||
-- We break up the default layout into two components:
|
-- We break up the default layout into two components:
|
||||||
-- default-layout is the contents of the body tag, and
|
-- default-layout is the contents of the body tag, and
|
||||||
|
|
|
@ -2,8 +2,45 @@ module Handler.Login where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
|
|
||||||
|
data Credentials = Credentials
|
||||||
|
{ credentialsName :: Text
|
||||||
|
, credentialsPasswd :: Text
|
||||||
|
}
|
||||||
|
deriving Show
|
||||||
|
|
||||||
getLoginR :: Handler Html
|
getLoginR :: Handler Html
|
||||||
getLoginR = error "Not yet implemented: getLoginR"
|
getLoginR = do
|
||||||
|
(loginWidget, enctype) <- generateFormPost loginForm
|
||||||
|
defaultLayout $ do
|
||||||
|
$(widgetFile "login")
|
||||||
|
|
||||||
postLoginR :: Handler Html
|
postLoginR :: Handler Html
|
||||||
postLoginR = error "Not yet implemented: postLoginR"
|
postLoginR = do
|
||||||
|
((result, loginWidget), enctype) <- runFormPost loginForm
|
||||||
|
case result of
|
||||||
|
FormSuccess cred -> do
|
||||||
|
tuser <- runDB $ selectFirst [UserName ==. credentialsName cred] []
|
||||||
|
case tuser of
|
||||||
|
Just user -> do
|
||||||
|
case credentialsPasswd cred == userPassword (entityVal user) of
|
||||||
|
True -> do
|
||||||
|
setSession "username" $ userName (entityVal user)
|
||||||
|
setMessage $ [shamlet|<pre>Successfully logged in|]
|
||||||
|
redirect $ HomeR
|
||||||
|
False -> do
|
||||||
|
setMessage $ [shamlet|<pre>Login error|]
|
||||||
|
redirect $ LoginR
|
||||||
|
Nothing -> do
|
||||||
|
setMessage $ [shamlet|<pre>User does not exist|]
|
||||||
|
redirect $ LoginR
|
||||||
|
|
||||||
|
loginForm :: Form Credentials
|
||||||
|
loginForm = renderDivs $ Credentials
|
||||||
|
<$> areq textField "Username" Nothing
|
||||||
|
<*> areq passwordField "Password" Nothing
|
||||||
|
|
||||||
|
getLogoutR :: Handler Html
|
||||||
|
getLogoutR = do
|
||||||
|
deleteSession "username"
|
||||||
|
setMessage $ [shamlet|<pre>Succesfully logged out|]
|
||||||
|
redirect $ HomeR
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
/ HomeR GET POST
|
/ HomeR GET POST
|
||||||
/signup SignupR GET POST
|
/signup SignupR GET POST
|
||||||
/login LoginR GET POST
|
/login LoginR GET POST
|
||||||
|
/logout LogoutR GET
|
||||||
/activate/#String ActivateR GET
|
/activate/#String ActivateR GET
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
|
<nav>
|
||||||
|
<div id="top-nav">
|
||||||
|
<ul id="user-nav">
|
||||||
|
$maybe user <- msu
|
||||||
|
Logged in as #{fromJust msu}
|
||||||
|
<li>
|
||||||
|
<a href=@{LogoutR}>Logout
|
||||||
|
$nothing
|
||||||
|
<li>
|
||||||
|
<a href=@{LoginR}>Login
|
||||||
|
<li>
|
||||||
|
<a href=@{SignupR}>Signup
|
||||||
|
|
||||||
|
|
||||||
$maybe msg <- mmsg
|
$maybe msg <- mmsg
|
||||||
<div #message>#{msg}
|
<div #message>#{msg}
|
||||||
^{widget}
|
^{widget}
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
<a href=@{LoginR}>Login
|
|
||||||
<a href=@{SignupR}>Signup
|
|
||||||
|
|
||||||
$if null recentMedia
|
$if null recentMedia
|
||||||
<p>This gallery is still empty.
|
<p>This gallery is still empty.
|
||||||
$else
|
$else
|
||||||
|
|
6
templates/login.hamlet
Normal file
6
templates/login.hamlet
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<h3>Login
|
||||||
|
|
||||||
|
<form method=post enctype=#{enctype}>
|
||||||
|
^{loginWidget}
|
||||||
|
<div>
|
||||||
|
<input type=submit value="Login">
|
Loading…
Reference in a new issue