11-- Copyright © 2015-2016 Nejla AB. All rights reserved.
2+ -- All rights reserved
23
4+ {-# LANGUAGE DataKinds #-}
5+ {-# LANGUAGE FlexibleContexts #-}
36{-# LANGUAGE OverloadedStrings #-}
47{-# LANGUAGE TypeOperators #-}
5- {-# LANGUAGE DataKinds #-}
68
79module Api where
810
911import Backend
1012import Control.Monad.Trans
11- import Control.Monad.Trans.Either
13+ import Control.Monad.Except
1214import Data.Monoid
13- import Data.Text (Text )
14- import qualified Data.Text as Text
15- import Data.Traversable
16- import qualified Data.Traversable as Traversable
1715import Database.Persist.Sql
1816import Network.Wai
1917import Servant
@@ -35,57 +33,57 @@ serveLogin pool conf loginReq = loginHandler
3533 case mbReturnLogin of
3634 Right rl -> return (addHeader (returnLoginToken rl) rl)
3735 Left LoginErrorOTPRequired ->
38- left ServantErr { errHTTPCode = 499
39- , errReasonPhrase = " OTP required"
40- , errBody =
41- " {\" error\" :\" One time password required\" }"
42- , errHeaders = []
43- }
44- Left _e -> left err403
36+ throwError ServantErr { errHTTPCode = 499
37+ , errReasonPhrase = " OTP required"
38+ , errBody =
39+ " {\" error\" :\" One time password required\" }"
40+ , errHeaders = []
41+ }
42+ Left _e -> throwError err403
4543
4644type LogoutAPI = " logout"
4745 :> Capture " token" B64Token
4846 :> Post '[JSON ] ()
4947
5048serveLogout :: ConnectionPool -> Config -> Server LogoutAPI
51- serveLogout pool conf token = logoutHandler
49+ serveLogout pool conf tok = logoutHandler
5250 where
5351 logoutHandler = do
54- lift . runAPI pool conf $ logOut token
52+ lift . runAPI pool conf $ logOut tok
5553
5654type CheckTokenAPI = " check-token"
5755 :> Capture " token" B64Token
5856 :> Capture " instance" InstanceID
5957 :> Get '[JSON ] (Headers '[Header " X-User" UserID ] ReturnUser )
6058
6159serveCheckToken :: ConnectionPool -> Config -> Server CheckTokenAPI
62- serveCheckToken pool conf token inst = checkTokenHandler
60+ serveCheckToken pool conf tok inst = checkTokenHandler
6361 where
6462 checkTokenHandler = do
6563 res <- lift . runAPI pool conf $ do
66- logDebug $ " Checking token " <> showText token
64+ logDebug $ " Checking token " <> showText tok
6765 <> " for instance " <> showText inst
68- mbUser <- checkToken token
69- forM mbUser $ \ user -> do
70- checkInstance inst user
71- return user
66+ mbUser <- checkToken tok
67+ forM mbUser $ \ usr -> do
68+ _ <- checkInstance inst usr
69+ return usr
7270 case res of
73- Nothing -> left err403
71+ Nothing -> throwError err403
7472 Just usr -> return $ (addHeader usr $ ReturnUser usr)
7573
7674type PublicCheckTokenAPI = " check-token"
7775 :> Capture " token" B64Token
7876 :> Get '[JSON ] ()
7977
8078servePublicCheckToken :: ConnectionPool -> Config -> Server PublicCheckTokenAPI
81- servePublicCheckToken pool conf token = checkTokenHandler
79+ servePublicCheckToken pool conf tok = checkTokenHandler
8280 where
8381 checkTokenHandler = do
8482 res <- lift . runAPI pool conf $ do
85- logDebug $ " Checking token " <> showText token
86- checkToken token
83+ logDebug $ " Checking token " <> showText tok
84+ checkToken tok
8785 case res of
88- Nothing -> left err403
86+ Nothing -> throwError err403
8987 Just _usr -> return ()
9088
9189
@@ -96,8 +94,9 @@ type GetUserInstancesAPI = "user-instances"
9694serveGetUserInstancesAPI :: ConnectionPool
9795 -> Config
9896 -> Server GetUserInstancesAPI
99- serveGetUserInstancesAPI pool conf user =
100- lift . runAPI pool conf $ getUserInstances user
97+ serveGetUserInstancesAPI pool conf usr =
98+ lift . runAPI pool conf $ getUserInstances usr
99+
101100
102101type GetUserInfoAPI = " user-info-by-token"
103102 :> Capture " token" B64Token
@@ -106,28 +105,19 @@ type GetUserInfoAPI = "user-info-by-token"
106105serveGetUserInfoAPI :: ConnectionPool
107106 -> Config
108107 -> Server GetUserInfoAPI
109- serveGetUserInfoAPI pool conf token = do
110- mbRUI <- lift . runAPI pool conf $ getUserInfo token
108+ serveGetUserInfoAPI pool conf tok = do
109+ mbRUI <- lift . runAPI pool conf $ getUserInfo tok
111110 case mbRUI of
112- Nothing -> left err403
111+ Nothing -> throwError err403
113112 Just rui -> return rui
114113
115- type UserMirrorAPI = " showUser"
116- :> Header " X-User" Text
117- :> Get '[JSON ] Text
118-
119- serveUserMirror mbUser = do
120- case mbUser of
121- Nothing -> return " None"
122- Just user -> return user
123-
124114apiPrx :: Proxy ( LoginAPI
125115 :<|> CheckTokenAPI
126116 :<|> PublicCheckTokenAPI
127117 :<|> LogoutAPI
128118 :<|> GetUserInstancesAPI
129119 :<|> GetUserInfoAPI
130- :<|> UserMirrorAPI )
120+ )
131121apiPrx = Proxy
132122
133123serveAPI :: ConnectionPool -> Config -> Application
@@ -137,4 +127,3 @@ serveAPI pool conf = serve apiPrx $ serveLogin pool conf
137127 :<|> serveLogout pool conf
138128 :<|> serveGetUserInstancesAPI pool conf
139129 :<|> serveGetUserInfoAPI pool conf
140- :<|> serveUserMirror
0 commit comments