Skip to content

Commit 452c4de

Browse files
isovectorfisx
andauthored
Spar Polysemy: Split VerdictFormatStore from AReqIdStore (#1925)
* Split out VerdictFormatStore effect Also did some related cleanup around orphan instances * make format * changelog * Cleanup imports Co-authored-by: Matthias Fischmann <[email protected]>
1 parent 8ecea4d commit 452c4de

File tree

12 files changed

+71
-34
lines changed

12 files changed

+71
-34
lines changed

changelog.d/5-internal/split-eff2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Separate VerdictFormatStore effect from AReqIdStore effect

services/spar/spar.cabal

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ cabal-version: 1.12
44
--
55
-- see: https://github.com/sol/hpack
66
--
7-
-- hash: 6007f4f8ec59cf0a438cd7831dc87bda6d60acd7865f6c251bd6f2da5617b381
7+
-- hash: f787f064cceffbeeef6ac5c1ca7475e519a51afc3fdd173bf7a7a86a9016b238
88

99
name: spar
1010
version: 0.1
@@ -74,6 +74,8 @@ library
7474
Spar.Sem.ScimTokenStore.Cassandra
7575
Spar.Sem.ScimUserTimesStore
7676
Spar.Sem.ScimUserTimesStore.Cassandra
77+
Spar.Sem.VerdictFormatStore
78+
Spar.Sem.VerdictFormatStore.Cassandra
7779
other-modules:
7880
Paths_spar
7981
hs-source-dirs:

services/spar/src/Spar/API.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ import qualified Spar.Intra.BrigApp as Brig
6767
import Spar.Orphans ()
6868
import Spar.Scim
6969
import Spar.Sem.AReqIDStore (AReqIDStore)
70-
import qualified Spar.Sem.AReqIDStore as AReqIDStore
7170
import Spar.Sem.AssIDStore (AssIDStore)
7271
import Spar.Sem.BindCookieStore (BindCookieStore)
7372
import qualified Spar.Sem.BindCookieStore as BindCookieStore
@@ -96,6 +95,8 @@ import Spar.Sem.ScimExternalIdStore (ScimExternalIdStore)
9695
import Spar.Sem.ScimTokenStore (ScimTokenStore)
9796
import qualified Spar.Sem.ScimTokenStore as ScimTokenStore
9897
import Spar.Sem.ScimUserTimesStore (ScimUserTimesStore)
98+
import Spar.Sem.VerdictFormatStore (VerdictFormatStore)
99+
import qualified Spar.Sem.VerdictFormatStore as VerdictFormatStore
99100
import System.Logger (Msg)
100101
import qualified URI.ByteString as URI
101102
import Wire.API.Cookie
@@ -116,6 +117,7 @@ api ::
116117
BindCookieStore,
117118
AssIDStore,
118119
AReqIDStore,
120+
VerdictFormatStore,
119121
ScimExternalIdStore,
120122
ScimUserTimesStore,
121123
ScimTokenStore,
@@ -153,6 +155,7 @@ apiSSO ::
153155
BrigAccess,
154156
BindCookieStore,
155157
AssIDStore,
158+
VerdictFormatStore,
156159
AReqIDStore,
157160
ScimTokenStore,
158161
DefaultSsoCode,
@@ -241,6 +244,7 @@ authreq ::
241244
Logger String,
242245
BindCookieStore,
243246
AssIDStore,
247+
VerdictFormatStore,
244248
AReqIDStore,
245249
SAML2,
246250
SamlProtocolSettings,
@@ -266,7 +270,7 @@ authreq authreqttl _ zusr msucc merr idpid = do
266270
WireIdPAPIV1 -> Nothing
267271
WireIdPAPIV2 -> Just $ idp ^. SAML.idpExtraInfo . wiTeam
268272
SAML2.authReq authreqttl (SamlProtocolSettings.spIssuer mbtid) idpid
269-
AReqIDStore.storeVerdictFormat authreqttl reqid vformat
273+
VerdictFormatStore.store authreqttl reqid vformat
270274
cky <- initializeBindCookie zusr authreqttl
271275
Logger.log SAML.Debug $ "setting bind cookie: " <> show cky
272276
pure $ addHeader cky form
@@ -324,6 +328,7 @@ authresp ::
324328
BrigAccess,
325329
BindCookieStore,
326330
AssIDStore,
331+
VerdictFormatStore,
327332
AReqIDStore,
328333
ScimTokenStore,
329334
IdPEffect.IdP,

services/spar/src/Spar/App.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ import Spar.Error hiding (sparToServerErrorWithLogging)
8181
import qualified Spar.Intra.BrigApp as Intra
8282
import Spar.Orphans ()
8383
import Spar.Sem.AReqIDStore (AReqIDStore)
84-
import qualified Spar.Sem.AReqIDStore as AReqIDStore
8584
import Spar.Sem.BindCookieStore (BindCookieStore)
8685
import qualified Spar.Sem.BindCookieStore as BindCookieStore
8786
import Spar.Sem.BrigAccess (BrigAccess)
@@ -102,6 +101,8 @@ import Spar.Sem.ScimExternalIdStore (ScimExternalIdStore)
102101
import qualified Spar.Sem.ScimExternalIdStore as ScimExternalIdStore
103102
import Spar.Sem.ScimTokenStore (ScimTokenStore)
104103
import qualified Spar.Sem.ScimTokenStore as ScimTokenStore
104+
import Spar.Sem.VerdictFormatStore (VerdictFormatStore)
105+
import qualified Spar.Sem.VerdictFormatStore as VerdictFormatStore
105106
import qualified System.Logger as TinyLog
106107
import URI.ByteString as URI
107108
import Web.Cookie (SetCookie, renderSetCookie)
@@ -375,6 +376,7 @@ verdictHandler ::
375376
BrigAccess,
376377
BindCookieStore,
377378
AReqIDStore,
379+
VerdictFormatStore,
378380
ScimTokenStore,
379381
IdPEffect.IdP,
380382
Error SparError,
@@ -393,7 +395,7 @@ verdictHandler cky mbteam aresp verdict = do
393395
-- the InResponseTo attribute MUST match the request's ID.
394396
Logger.log SAML.Debug $ "entering verdictHandler: " <> show (fromBindCookie <$> cky, aresp, verdict)
395397
reqid <- either (throwSparSem . SparNoRequestRefInResponse . cs) pure $ SAML.rspInResponseTo aresp
396-
format :: Maybe VerdictFormat <- AReqIDStore.getVerdictFormat reqid
398+
format :: Maybe VerdictFormat <- VerdictFormatStore.get reqid
397399
resp <- case format of
398400
Just (VerdictFormatWeb) ->
399401
verdictHandlerResult cky mbteam verdict >>= verdictHandlerWeb

services/spar/src/Spar/CanonicalInterpreter.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ import Spar.Sem.ScimTokenStore (ScimTokenStore)
4848
import Spar.Sem.ScimTokenStore.Cassandra (scimTokenStoreToCassandra)
4949
import Spar.Sem.ScimUserTimesStore (ScimUserTimesStore)
5050
import Spar.Sem.ScimUserTimesStore.Cassandra (scimUserTimesStoreToCassandra)
51+
import Spar.Sem.VerdictFormatStore (VerdictFormatStore)
52+
import Spar.Sem.VerdictFormatStore.Cassandra (verdictFormatStoreToCassandra)
5153
import qualified System.Logger as TinyLog
5254
import Wire.API.User.Saml
5355

@@ -57,6 +59,7 @@ type CanonicalEffs =
5759
BindCookieStore,
5860
AssIDStore,
5961
AReqIDStore,
62+
VerdictFormatStore,
6063
ScimExternalIdStore,
6164
ScimUserTimesStore,
6265
ScimTokenStore,
@@ -104,6 +107,7 @@ runSparToIO ctx action =
104107
. scimTokenStoreToCassandra
105108
. scimUserTimesStoreToCassandra
106109
. scimExternalIdStoreToCassandra
110+
. verdictFormatStoreToCassandra
107111
. aReqIDStoreToCassandra
108112
. assIDStoreToCassandra
109113
. bindCookieStoreToCassandra
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
module Spar.Sem.AReqIDStore where
22

3-
import Data.Time (NominalDiffTime)
43
import Imports
54
import Polysemy
65
import qualified SAML2.WebSSO.Types as SAML
7-
import Wire.API.User.Saml (AReqId, VerdictFormat)
6+
import Wire.API.User.Saml (AReqId)
87

98
data AReqIDStore m a where
109
Store :: AReqId -> SAML.Time -> AReqIDStore m ()
1110
UnStore :: AReqId -> AReqIDStore m ()
1211
IsAlive :: AReqId -> AReqIDStore m Bool
13-
StoreVerdictFormat :: NominalDiffTime -> AReqId -> VerdictFormat -> AReqIDStore m ()
14-
GetVerdictFormat :: AReqId -> AReqIDStore m (Maybe VerdictFormat)
1512

1613
makeSem ''AReqIDStore
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
{-# OPTIONS_GHC -Wno-orphans #-}
2-
31
module Spar.Sem.AReqIDStore.Cassandra where
42

53
import Cassandra
@@ -8,31 +6,29 @@ import Imports hiding (MonadReader (..), Reader)
86
import Polysemy
97
import Polysemy.Error
108
import Polysemy.Input (Input, input)
11-
import SAML2.WebSSO (HasNow, fromTime, getNow)
9+
import SAML2.WebSSO (fromTime)
1210
import qualified SAML2.WebSSO as SAML
1311
import qualified Spar.Data as Data
1412
import Spar.Error
1513
import Spar.Sem.AReqIDStore
14+
import Spar.Sem.Now (Now)
15+
import qualified Spar.Sem.Now as Now
1616
import Wire.API.User.Saml (Opts, TTLError)
1717

18-
instance Member (Embed IO) r => HasNow (Sem r)
19-
2018
aReqIDStoreToCassandra ::
2119
forall m r a.
22-
(MonadClient m, Members '[Embed m, Error TTLError, Embed IO, Input Opts] r) =>
20+
(MonadClient m, Members '[Embed m, Now, Error TTLError, Embed IO, Input Opts] r) =>
2321
Sem (AReqIDStore ': r) a ->
2422
Sem r a
2523
aReqIDStoreToCassandra = interpret $ \case
2624
Store itla t -> do
27-
denv <- Data.mkEnv <$> input <*> (fromTime <$> getNow)
25+
denv <- Data.mkEnv <$> input <*> (fromTime <$> Now.get)
2826
a <- embed @m $ runExceptT $ runReaderT (Data.storeAReqID itla t) denv
2927
case a of
3028
Left err -> throw err
3129
Right () -> pure ()
3230
UnStore itla -> embed @m $ Data.unStoreAReqID itla
3331
IsAlive itla -> embed @m $ Data.isAliveAReqID itla
34-
StoreVerdictFormat ndt itla vf -> embed @m $ Data.storeVerdictFormat ndt itla vf
35-
GetVerdictFormat itla -> embed @m $ Data.getVerdictFormat itla
3632

3733
ttlErrorToSparError :: Member (Error SparError) r => Sem (Error TTLError ': r) a -> Sem r a
3834
ttlErrorToSparError = mapError (SAML.CustomError . SparCassandraTTLError)

services/spar/src/Spar/Sem/AssIDStore/Cassandra.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@ import Imports hiding (MonadReader (..), Reader)
66
import Polysemy
77
import Polysemy.Error
88
import Polysemy.Input
9-
import SAML2.WebSSO (fromTime, getNow)
9+
import SAML2.WebSSO (fromTime)
1010
import qualified Spar.Data as Data
11-
import Spar.Sem.AReqIDStore.Cassandra ()
1211
import Spar.Sem.AssIDStore
12+
import Spar.Sem.Now (Now)
13+
import qualified Spar.Sem.Now as Now
1314
import Wire.API.User.Saml (Opts, TTLError)
1415

1516
assIDStoreToCassandra ::
1617
forall m r a.
17-
(MonadClient m, Members '[Embed m, Error TTLError, Embed IO, Input Opts] r) =>
18+
(MonadClient m, Members '[Embed m, Now, Error TTLError, Embed IO, Input Opts] r) =>
1819
Sem (AssIDStore ': r) a ->
1920
Sem r a
2021
assIDStoreToCassandra =
2122
interpret $ \case
2223
Store itla t -> do
23-
denv <- Data.mkEnv <$> input <*> (fromTime <$> getNow)
24+
denv <- Data.mkEnv <$> input <*> (fromTime <$> Now.get)
2425
a <- embed @m $ runExceptT $ runReaderT (Data.storeAssID itla t) denv
2526
case a of
2627
Left err -> throw err

services/spar/src/Spar/Sem/BindCookieStore/Cassandra.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
{-# OPTIONS_GHC -Wno-orphans #-}
21
{-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-}
32

43
module Spar.Sem.BindCookieStore.Cassandra where
@@ -9,20 +8,21 @@ import Imports hiding (MonadReader (..), Reader)
98
import Polysemy
109
import Polysemy.Error
1110
import Polysemy.Input
12-
import SAML2.WebSSO (fromTime, getNow)
11+
import SAML2.WebSSO (fromTime)
1312
import qualified Spar.Data as Data
14-
import Spar.Sem.AReqIDStore.Cassandra ()
1513
import Spar.Sem.BindCookieStore
14+
import Spar.Sem.Now (Now)
15+
import qualified Spar.Sem.Now as Now
1616
import Wire.API.User.Saml (Opts, TTLError)
1717

1818
bindCookieStoreToCassandra ::
1919
forall m r a.
20-
(MonadClient m, Members '[Embed m, Error TTLError, Embed IO, Input Opts] r) =>
20+
(MonadClient m, Members '[Embed m, Now, Error TTLError, Embed IO, Input Opts] r) =>
2121
Sem (BindCookieStore ': r) a ->
2222
Sem r a
2323
bindCookieStoreToCassandra = interpret $ \case
2424
Insert sbc uid ndt -> do
25-
denv <- Data.mkEnv <$> input <*> (fromTime <$> getNow)
25+
denv <- Data.mkEnv <$> input <*> (fromTime <$> Now.get)
2626
a <- embed @m $ runExceptT $ runReaderT (Data.insertBindCookie sbc uid ndt) denv
2727
case a of
2828
Left err -> throw err
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Spar.Sem.VerdictFormatStore where
2+
3+
import Data.Time (NominalDiffTime)
4+
import Imports
5+
import Polysemy
6+
import Wire.API.User.Saml (AReqId, VerdictFormat)
7+
8+
data VerdictFormatStore m a where
9+
Store :: NominalDiffTime -> AReqId -> VerdictFormat -> VerdictFormatStore m ()
10+
Get :: AReqId -> VerdictFormatStore m (Maybe VerdictFormat)
11+
12+
makeSem ''VerdictFormatStore

0 commit comments

Comments
 (0)