projects
/
blog.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
203a4ba
)
Add error messages
author
Luke Lau
<luke_lau@icloud.com>
Fri, 12 Oct 2018 14:10:22 +0000
(15:10 +0100)
committer
Luke Lau
<luke_lau@icloud.com>
Fri, 12 Oct 2018 14:10:22 +0000
(15:10 +0100)
Main.hs
patch
|
blob
|
history
diff --git
a/Main.hs
b/Main.hs
index f3a7472085479ec5555524fd133ac0146fb210eb..b7a6847e97996eccefc7d5964cc3c46d4e4b9e36 100644
(file)
--- a/
Main.hs
+++ b/
Main.hs
@@
-29,6
+29,7
@@
import Network.HTTP.Types
type Sessions = Map.Map T.Text T.Text
type ActionM = ActionT T.Text (S.StateT Sessions IO)
type Sessions = Map.Map T.Text T.Text
type ActionM = ActionT T.Text (S.StateT Sessions IO)
+-- | Checks if the user is logged in
loggedIn :: ActionM Bool
loggedIn = do
mCookie <- getCookie "session"
loggedIn :: ActionM Bool
loggedIn = do
mCookie <- getCookie "session"
@@
-36,6
+37,7
@@
loggedIn = do
Nothing -> return False
Just cookie -> Map.member (T.fromStrict cookie) <$> lift S.get
Nothing -> return False
Just cookie -> Map.member (T.fromStrict cookie) <$> lift S.get
+-- | Returns the current username
currentUser :: ActionM (Maybe T.Text)
currentUser = do
mCookie <- getCookie "session"
currentUser :: ActionM (Maybe T.Text)
currentUser = do
mCookie <- getCookie "session"
@@
-80,19
+82,23
@@
main = do
textarea_ [name_ "body", placeholder_ "# Your markdown here"] ""
br_ []
input_ [type_ "submit", value_ "Post"]
textarea_ [name_ "body", placeholder_ "# Your markdown here"] ""
br_ []
input_ [type_ "submit", value_ "Post"]
- else status unauthorized401
+ else do
+ text "You're not logged in"
+ status unauthorized401
post "/create" $ do
t <- param "title"
b <- param "body"
post "/create" $ do
t <- param "title"
b <- param "body"
- p <- createPost
b t
+ p <- createPost
t b
redirect (linkToPost p)
post "/login" $ do
username <- param "username"
password <- param "password"
if Map.lookup username logins /= Just password
redirect (linkToPost p)
post "/login" $ do
username <- param "username"
password <- param "password"
if Map.lookup username logins /= Just password
- then status unauthorized401
+ then do
+ text "Invalid username and/or password"
+ status unauthorized401
else do
session <- T.pack . show <$> liftIO (randomIO :: IO Int)
lift $ S.modify (Map.insert session username)
else do
session <- T.pack . show <$> liftIO (randomIO :: IO Int)
lift $ S.modify (Map.insert session username)
@@
-172,8
+178,14
@@
linkToPost p = T.pack $ "/posts" </> kebab (T.unpack (title p))
pathToPost :: Post -> FilePath
pathToPost p = "posts" </> kebab (T.unpack (title p))
pathToPost :: Post -> FilePath
pathToPost p = "posts" </> kebab (T.unpack (title p))
-createPost :: T.Text -> T.Text -> ActionM Post
-createPost md title = do
+-- | Creates and saves a new post
+createPost :: T.Text
+ -- ^ The title of the post
+ -> T.Text
+ -- ^ The markdown body
+ -> ActionM Post
+ -- ^ The freshly created post
+createPost title md = do
author <- do
ma <- currentUser
case ma of
author <- do
ma <- currentUser
case ma of