Skip to content

Commit 65a25bb

Browse files
author
Jon Kristensen
committed
Add 0.0.0.8
1 parent d1abed3 commit 65a25bb

File tree

4 files changed

+35
-53
lines changed

4 files changed

+35
-53
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright © 2015-2016 Nejla AB. All rights reserved.
22

3-
FROM haskell:7.10.2
4-
MAINTAINER LambdatradeAB
3+
FROM haskell:7.10
4+
MAINTAINER NejlaAB
55

66
EXPOSE 3000
77

auth-service.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ executable auth-service
4747
, persistent-postgresql >= 2.2
4848
, persistent-template >= 2.1
4949
, random >= 1.1
50+
, servant >= 0.6
5051
, servant-server >= 0.4.4
5152
, text
5253
, time >= 1.5

src/Api.hs

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
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

79
module Api where
810

911
import Backend
1012
import Control.Monad.Trans
11-
import Control.Monad.Trans.Either
13+
import Control.Monad.Except
1214
import 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
1715
import Database.Persist.Sql
1816
import Network.Wai
1917
import 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

4644
type LogoutAPI = "logout"
4745
:> Capture "token" B64Token
4846
:> Post '[JSON] ()
4947

5048
serveLogout :: 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

5654
type CheckTokenAPI = "check-token"
5755
:> Capture "token" B64Token
5856
:> Capture "instance" InstanceID
5957
:> Get '[JSON] (Headers '[Header "X-User" UserID] ReturnUser)
6058

6159
serveCheckToken :: 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

7674
type PublicCheckTokenAPI = "check-token"
7775
:> Capture "token" B64Token
7876
:> Get '[JSON] ()
7977

8078
servePublicCheckToken :: 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"
9694
serveGetUserInstancesAPI :: 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

102101
type GetUserInfoAPI = "user-info-by-token"
103102
:> Capture "token" B64Token
@@ -106,28 +105,19 @@ type GetUserInfoAPI = "user-info-by-token"
106105
serveGetUserInfoAPI :: 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-
124114
apiPrx :: Proxy ( LoginAPI
125115
:<|> CheckTokenAPI
126116
:<|> PublicCheckTokenAPI
127117
:<|> LogoutAPI
128118
:<|> GetUserInstancesAPI
129119
:<|> GetUserInfoAPI
130-
:<|> UserMirrorAPI)
120+
)
131121
apiPrx = Proxy
132122

133123
serveAPI :: 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

src/Types.hs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,10 @@ import Data.UUID (UUID)
2626
import qualified Data.UUID as UUID
2727
import Database.Persist.Sql
2828
import Servant
29+
import Web.HttpApiData
2930

3031
import AuthServiceTypes
3132

32-
33-
deriving instance FromText B64Token
34-
35-
instance FromText UUID where
36-
fromText = UUID.fromText
37-
38-
deriving instance FromText InstanceID
39-
deriving instance FromText UserID
40-
4133
--------------------------------------------------------------------------------
4234
-- Error -----------------------------------------------------------------------
4335
--------------------------------------------------------------------------------

0 commit comments

Comments
 (0)