aboutsummaryrefslogtreecommitdiff
path: root/src/server/Model/SignIn.hs
diff options
context:
space:
mode:
authorJoris Guyonvarch2015-07-19 16:07:15 +0200
committerJoris Guyonvarch2015-07-19 16:07:15 +0200
commit0d589e12a0c32936303de46b1e462dd19648170d (patch)
tree95527317fae74ed620ad1b118abbbe2ccf616d19 /src/server/Model/SignIn.hs
parente4eefaa5b418780e6fb63e929f826b927bbeac68 (diff)
Login with a token validation
Diffstat (limited to 'src/server/Model/SignIn.hs')
-rw-r--r--src/server/Model/SignIn.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/server/Model/SignIn.hs b/src/server/Model/SignIn.hs
new file mode 100644
index 0000000..c447416
--- /dev/null
+++ b/src/server/Model/SignIn.hs
@@ -0,0 +1,34 @@
+module Model.SignIn
+ ( createSignInToken
+ , getSignInToken
+ , signInTokenIsUsed
+ ) where
+
+import Data.Text (Text)
+import Data.Time.Clock (getCurrentTime)
+
+import Control.Monad.IO.Class (liftIO)
+
+import Database.Persist
+
+import Model.Database
+import Model.UUID (generateUUID)
+
+createSignInToken :: Text -> Persist Text
+createSignInToken email = do
+ now <- liftIO getCurrentTime
+ token <- liftIO generateUUID
+ _ <- insert $ SignIn token now email False
+ return token
+
+getSignInToken :: Text -> Persist (Maybe (Entity SignIn))
+getSignInToken token =
+ selectFirst
+ [ SignInToken ==. token
+ , SignInIsUsed ==. False
+ ]
+ []
+
+signInTokenIsUsed :: SignInId -> Persist ()
+signInTokenIsUsed tokenId =
+ update tokenId [SignInIsUsed =. True]