aboutsummaryrefslogtreecommitdiff
path: root/src/server/Controller/Index.hs
diff options
context:
space:
mode:
authorJoris2017-09-24 22:14:48 +0200
committerJoris2017-11-07 09:33:01 +0100
commit898e7ed11ab0958fcdaf65b99b33f7b04787630a (patch)
tree8b5ab951c36d7d27550a7c4eaad16bbd2cd0edb1 /src/server/Controller/Index.hs
parent14bdbc8c937f5d0b35c61350dba28cb41c3737cd (diff)
downloadbudget-898e7ed11ab0958fcdaf65b99b33f7b04787630a.tar.gz
budget-898e7ed11ab0958fcdaf65b99b33f7b04787630a.tar.bz2
budget-898e7ed11ab0958fcdaf65b99b33f7b04787630a.zip
Bootstrap with GHCJS and reflex:
- setup login and logout, - first draft of payment view.
Diffstat (limited to 'src/server/Controller/Index.hs')
-rw-r--r--src/server/Controller/Index.hs30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/server/Controller/Index.hs b/src/server/Controller/Index.hs
index 9fb2aa0..8473c5c 100644
--- a/src/server/Controller/Index.hs
+++ b/src/server/Controller/Index.hs
@@ -7,15 +7,17 @@ import Control.Monad.IO.Class (liftIO)
import Data.Text (Text)
import Data.Time.Clock (getCurrentTime, diffUTCTime)
import Network.HTTP.Types.Status (ok200)
+import Prelude hiding (error)
import Web.Scotty hiding (get)
+import qualified Common.Message as Message
+import Common.Message.Key (Key)
+import qualified Common.Message.Key as Key
+import Common.Model (InitResult(..), User(..))
+
import Conf (Conf(..))
import Model.Init (getInit)
-import Model.Json.Init (InitResult(..))
-import Model.Message.Key
-import Model.User (User)
import qualified LoginSession
-import qualified Model.Json.Conf as M
import qualified Model.Query as Query
import qualified Model.SignIn as SignIn
import qualified Model.User as User
@@ -29,17 +31,17 @@ get conf mbToken = do
userOrError <- validateSignIn conf token
case userOrError of
Left errorKey ->
- return . InitError $ errorKey
+ return . InitEmpty . Left . Message.get $ errorKey
Right user ->
- liftIO . Query.run . fmap InitSuccess . getInit $ user
+ liftIO . Query.run . fmap InitSuccess $ getInit user conf
Nothing -> do
mbLoggedUser <- getLoggedUser
case mbLoggedUser of
Nothing ->
- return InitEmpty
+ return . InitEmpty . Right $ Nothing
Just user ->
- liftIO . Query.run . fmap InitSuccess . getInit $ user
- html $ page (M.Conf { M.currency = currency conf }) initResult
+ liftIO . Query.run . fmap InitSuccess $ getInit user conf
+ html $ page initResult
validateSignIn :: Conf -> Text -> ActionM (Either Key User)
validateSignIn conf textToken = do
@@ -52,23 +54,23 @@ validateSignIn conf textToken = do
now <- liftIO getCurrentTime
case mbSignIn of
Nothing ->
- return . Left $ SignInInvalid
+ return . Left $ Key.SignIn_LinkInvalid
Just signIn ->
if SignIn.isUsed signIn
then
- return . Left $ SignInUsed
+ return . Left $ Key.SignIn_LinkUsed
else
let diffTime = now `diffUTCTime` (SignIn.creation signIn)
in if diffTime > signInExpiration conf
then
- return . Left $ SignInExpired
+ return . Left $ Key.SignIn_LinkExpired
else do
LoginSession.put conf (SignIn.token signIn)
mbUser <- liftIO . Query.run $ do
SignIn.signInTokenToUsed . SignIn.id $ signIn
- User.getUser . SignIn.email $ signIn
+ User.get . SignIn.email $ signIn
return $ case mbUser of
- Nothing -> Left UnauthorizedSignIn
+ Nothing -> Left Key.Secure_Unauthorized
Just user -> Right user
getLoggedUser :: ActionM (Maybe User)