summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-07-21 00:43:11 -0400
committerLLLL Colonq <llll@colonq>2026-07-31 19:05:12 -0400
commit04162a97a5b25e60dcf2dfbb651654003eb8a96d (patch)
tree824700615f9b97e7b6215381f9d0594e12acb1c1
parent335f7f302456bd8fcbac27a6c08666635371c208 (diff)
web: Claimable badge codes
-rw-r--r--fig-web/fig-web.cabal1
-rw-r--r--fig-web/src/Fig/Web/Module/Claim.hs22
2 files changed, 23 insertions, 0 deletions
diff --git a/fig-web/fig-web.cabal b/fig-web/fig-web.cabal
index 1e814ec..e565459 100644
--- a/fig-web/fig-web.cabal
+++ b/fig-web/fig-web.cabal
@@ -78,6 +78,7 @@ library
Fig.Web.Module.TCG
Fig.Web.Module.Debt
Fig.Web.Module.ShindigsSorting
+ Fig.Web.Module.Claim
executable fig-web
import: defaults
diff --git a/fig-web/src/Fig/Web/Module/Claim.hs b/fig-web/src/Fig/Web/Module/Claim.hs
new file mode 100644
index 0000000..507c622
--- /dev/null
+++ b/fig-web/src/Fig/Web/Module/Claim.hs
@@ -0,0 +1,22 @@
+module Fig.Web.Module.ShindigsSorting
+ ( secure
+ ) where
+
+import Fig.Prelude
+
+import Fig.Web.Utils
+import Fig.Web.Types
+import Fig.Web.Auth
+import qualified Fig.Utils.DB as DB
+
+secure :: SecureModule
+secure a = do
+ onPost "/api/claim/:code" $ authed a \creds -> do
+ code <- pathParam "code"
+ DB.run a.db (DB.hget code "claim:codes") >>= \case
+ Nothing -> log $ "user " <> creds.user <> " tried invalid badge claim code: " <> decodeUtf8 code
+ Just badge -> do
+ log $ "user " <> creds.user <> " redeemed valid badge claim code: " <> decodeUtf8 code
+ let bstid = encodeUtf8 creds.twitchId
+ DB.run a.db do
+ DB.sadd ("user:badges:" <> bstid) [badge]