aboutsummaryrefslogtreecommitdiff
path: root/src/Main.hs
diff options
context:
space:
mode:
authorLia Lenckowski <lialenck@protonmail.com>2023-07-30 17:33:19 +0200
committerLia Lenckowski <lialenck@protonmail.com>2023-07-30 17:33:19 +0200
commit780ec2ff85736836f1d5d5ead3eb8fc5b145654c (patch)
tree0ee596819bc54e56f522f65dcf90433b0959f522 /src/Main.hs
parent61293ea8970bb89cde53dff14362f4aa3858ebe9 (diff)
downloadfastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar
fastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar.bz2
fastbangs-780ec2ff85736836f1d5d5ead3eb8fc5b145654c.tar.zst
bang accept/reject api
Diffstat (limited to 'src/Main.hs')
-rw-r--r--src/Main.hs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/Main.hs b/src/Main.hs
index 8a82da3..0733c61 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -10,7 +10,7 @@ module Main (main) where
import Control.Monad.Logger (runStdoutLoggingT)
import Control.Monad.Trans.Resource (runResourceT)
-import Control.Monad (unless)
+import Control.Monad (when, unless)
import Data.Aeson
import Database.Persist.Sqlite
import Data.Char (isAlphaNum)
@@ -65,6 +65,8 @@ mkYesod "Search" [parseRoutes|
/bangs.json BangsR GET
/search.xml OpenSearchR GET
/submitBang SubmitR POST
+/acceptBang AcceptR POST
+/rejectBang RejectR POST
/pendingBangs PendingR GET
|]
@@ -131,6 +133,24 @@ getOpenSearchR = do
. toContent
<$> makeOpenSearch url
+postVerdictR :: Bool -> Handler ()
+postVerdictR b = do
+ ensureAuth
+
+ (PendingBang n u dp mayEm) <- requireCheckJsonBody
+ -- NOTE: known race condition: the bang bang may be deleted from the database
+ -- before the updated bangs are written to disk, leading to the loss of
+ -- a pending bang on very specific crash timing.
+ st <- bangState <$> getYesod
+ when b $ liftIO $ addBang n u dp st
+ --sendEmail mayEm $ "your bang was " <> bool b "rejected" "accepted" -- TODO
+ runDB $ deleteBy $ UniqueBang n
+ return ()
+
+postAcceptR, postRejectR :: Handler ()
+postAcceptR = postVerdictR True
+postRejectR = postVerdictR False
+
getPendingR :: Handler Value
getPendingR = do
ensureAuth