Skip to content

Commit a560d8b

Browse files
committed
Use PasswordResetStore instead of CodeStore
- PasswordResetStore is a higher-level effect than CodeStore and it is interpreted in terms of CodeStore
1 parent a0d4b61 commit a560d8b

File tree

9 files changed

+29
-120
lines changed

9 files changed

+29
-120
lines changed

services/brig/brig.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ library
6060
Brig.Data.Instances
6161
Brig.Data.LoginCode
6262
Brig.Data.MLS.KeyPackage
63-
Brig.Data.PasswordReset
6463
Brig.Data.Properties
6564
Brig.Data.Types
6665
Brig.Data.User

services/brig/src/Brig/API.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ where
2323
import Brig.API.Handler (Handler)
2424
import qualified Brig.API.Internal as Internal
2525
import qualified Brig.API.Public as Public
26-
import Brig.Sem.BrigTime (BrigTime)
2726
import Brig.Sem.CodeStore
27+
import Brig.Sem.PasswordResetStore (PasswordResetStore)
2828
import qualified Data.Swagger.Build.Api as Doc
2929
import Network.Wai.Routing (Routes)
3030
import Polysemy
3131

3232
sitemap ::
33-
Members '[CodeStore, BrigTime] r =>
33+
Members '[CodeStore, PasswordResetStore] r =>
3434
Routes Doc.ApiBuilder (Handler r) ()
3535
sitemap = do
3636
Public.sitemap

services/brig/src/Brig/API/Internal.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ import qualified Brig.Data.User as Data
4242
import qualified Brig.IO.Intra as Intra
4343
import Brig.Options hiding (internalEvents, sesQueue)
4444
import qualified Brig.Provider.API as Provider
45-
import Brig.Sem.BrigTime (BrigTime)
4645
import Brig.Sem.CodeStore (CodeStore)
46+
import Brig.Sem.PasswordResetStore (PasswordResetStore)
4747
import qualified Brig.Team.API as Team
4848
import Brig.Team.DB (lookupInvitationByEmail)
4949
import Brig.Types
@@ -160,7 +160,7 @@ swaggerDocsAPI = swaggerSchemaUIServer BrigIRoutes.swaggerDoc
160160
-- Sitemap (wai-route)
161161

162162
sitemap ::
163-
Members '[CodeStore, BrigTime] r =>
163+
Members '[CodeStore, PasswordResetStore] r =>
164164
Routes a (Handler r) ()
165165
sitemap = do
166166
get "/i/status" (continue $ const $ return empty) true
@@ -462,14 +462,14 @@ instance ToJSON GetActivationCodeResp where
462462
toJSON (GetActivationCodeResp (k, c)) = object ["key" .= k, "code" .= c]
463463

464464
getPasswordResetCodeH ::
465-
Members '[CodeStore, BrigTime] r =>
465+
Members '[CodeStore, PasswordResetStore] r =>
466466
JSON ::: Either Email Phone ->
467467
(Handler r) Response
468468
getPasswordResetCodeH (_ ::: emailOrPhone) = do
469469
maybe (throwStd invalidPwResetKey) (pure . json) =<< lift (getPasswordResetCode emailOrPhone)
470470

471471
getPasswordResetCode ::
472-
Members '[CodeStore, BrigTime] r =>
472+
Members '[CodeStore, PasswordResetStore] r =>
473473
Either Email Phone ->
474474
(AppT r) (Maybe GetPasswordResetCodeResp)
475475
getPasswordResetCode emailOrPhone =

services/brig/src/Brig/API/Public.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ import qualified Brig.Docs.Swagger
4646
import qualified Brig.IO.Intra as Intra
4747
import Brig.Options hiding (internalEvents, sesQueue)
4848
import qualified Brig.Provider.API as Provider
49-
import Brig.Sem.BrigTime (BrigTime)
5049
import Brig.Sem.CodeStore (CodeStore)
50+
import Brig.Sem.PasswordResetStore (PasswordResetStore)
5151
import qualified Brig.Team.API as Team
5252
import qualified Brig.Team.Email as Team
5353
import Brig.Types.Activation (ActivationPair)
@@ -261,7 +261,7 @@ servantSitemap = userAPI :<|> selfAPI :<|> accountAPI :<|> clientAPI :<|> prekey
261261
-- - MemberLeave event to members for all conversations the user was in (via galley)
262262

263263
sitemap ::
264-
Members '[CodeStore, BrigTime] r =>
264+
Members '[CodeStore, PasswordResetStore] r =>
265265
Routes Doc.ApiBuilder (Handler r) ()
266266
sitemap = do
267267
-- User Handle API ----------------------------------------------------
@@ -425,7 +425,7 @@ sitemap = do
425425

426426
apiDocs ::
427427
forall r.
428-
Members '[CodeStore, BrigTime] r =>
428+
Members '[CodeStore, PasswordResetStore] r =>
429429
Routes Doc.ApiBuilder (Handler r) ()
430430
apiDocs =
431431
get
@@ -803,14 +803,14 @@ changeHandle u conn (Public.HandleUpdate h) = lift . exceptTToMaybe $ do
803803
API.changeHandle u (Just conn) handle API.ForbidSCIMUpdates
804804

805805
beginPasswordResetH ::
806-
Members '[CodeStore, BrigTime] r =>
806+
Members '[PasswordResetStore] r =>
807807
JSON ::: JsonRequest Public.NewPasswordReset ->
808808
(Handler r) Response
809809
beginPasswordResetH (_ ::: req) =
810810
setStatus status201 empty <$ (beginPasswordReset =<< parseJsonBody req)
811811

812812
beginPasswordReset ::
813-
Members '[CodeStore, BrigTime] r =>
813+
Members '[PasswordResetStore] r =>
814814
Public.NewPasswordReset ->
815815
(Handler r) ()
816816
beginPasswordReset (Public.NewPasswordReset target) = do
@@ -822,7 +822,7 @@ beginPasswordReset (Public.NewPasswordReset target) = do
822822
Right phone -> wrapClient $ sendPasswordResetSms phone pair loc
823823

824824
completePasswordResetH ::
825-
Members '[CodeStore, BrigTime] r =>
825+
Members '[CodeStore, PasswordResetStore] r =>
826826
JSON ::: JsonRequest Public.CompletePasswordReset ->
827827
(Handler r) Response
828828
completePasswordResetH (_ ::: req) = do
@@ -1065,7 +1065,7 @@ instance ToJSON DeprecatedMatchingResult where
10651065
]
10661066

10671067
deprecatedCompletePasswordResetH ::
1068-
Members '[CodeStore, BrigTime] r =>
1068+
Members '[CodeStore, PasswordResetStore] r =>
10691069
JSON ::: Public.PasswordResetKey ::: JsonRequest Public.PasswordReset ->
10701070
(Handler r) Response
10711071
deprecatedCompletePasswordResetH (_ ::: k ::: req) = do

services/brig/src/Brig/API/User.hs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ import qualified Brig.Data.Activation as Data
101101
import qualified Brig.Data.Blacklist as Blacklist
102102
import qualified Brig.Data.Client as Data
103103
import qualified Brig.Data.Connection as Data
104-
import qualified Brig.Data.PasswordReset as Data
105104
import qualified Brig.Data.Properties as Data
106105
import Brig.Data.User
107106
import qualified Brig.Data.User as Data
@@ -115,9 +114,10 @@ import qualified Brig.InternalEvent.Types as Internal
115114
import Brig.Options hiding (Timeout, internalEvents)
116115
import Brig.Password
117116
import qualified Brig.Queue as Queue
118-
import Brig.Sem.BrigTime (BrigTime)
119117
import Brig.Sem.CodeStore (CodeStore)
120118
import qualified Brig.Sem.CodeStore as E
119+
import Brig.Sem.PasswordResetStore (PasswordResetStore)
120+
import qualified Brig.Sem.PasswordResetStore as E
121121
import qualified Brig.Team.DB as Team
122122
import Brig.Types
123123
import Brig.Types.Code (Timeout (..))
@@ -972,7 +972,7 @@ changePassword uid cp = do
972972
lift $ wrapClient (Data.updatePassword uid newpw) >> wrapClient (revokeAllCookies uid)
973973

974974
beginPasswordReset ::
975-
Members '[CodeStore, BrigTime] r =>
975+
Members '[PasswordResetStore] r =>
976976
Either Email Phone ->
977977
ExceptT PasswordResetError (AppT r) (UserId, PasswordResetPair)
978978
beginPasswordReset target = do
@@ -982,20 +982,20 @@ beginPasswordReset target = do
982982
status <- lift . wrapClient $ Data.lookupStatus user
983983
unless (status == Just Active) $
984984
throwE InvalidPasswordResetKey
985-
code <- lift . liftSem $ Data.lookupPasswordResetCode user
985+
code <- lift . liftSem $ E.lookupPasswordResetCode user
986986
when (isJust code) $
987987
throwE (PasswordResetInProgress Nothing)
988-
(user,) <$> lift (liftSem $ Data.createPasswordResetCode user target)
988+
(user,) <$> lift (liftSem $ E.createPasswordResetCode user target)
989989

990990
completePasswordReset ::
991-
Members '[CodeStore, BrigTime] r =>
991+
Members '[CodeStore, PasswordResetStore] r =>
992992
PasswordResetIdentity ->
993993
PasswordResetCode ->
994994
PlainTextPassword ->
995995
ExceptT PasswordResetError (AppT r) ()
996996
completePasswordReset ident code pw = do
997997
key <- mkPasswordResetKey ident
998-
muid :: Maybe UserId <- lift . liftSem $ Data.verifyPasswordResetCode (key, code)
998+
muid :: Maybe UserId <- lift . liftSem $ E.verifyPasswordResetCode (key, code)
999999
case muid of
10001000
Nothing -> throwE InvalidPasswordResetCode
10011001
Just uid -> do
@@ -1194,7 +1194,7 @@ lookupActivationCode emailOrPhone = do
11941194
return $ (k,) <$> c
11951195

11961196
lookupPasswordResetCode ::
1197-
Members '[CodeStore, BrigTime] r =>
1197+
Members '[CodeStore, PasswordResetStore] r =>
11981198
Either Email Phone ->
11991199
(AppT r) (Maybe PasswordResetPair)
12001200
lookupPasswordResetCode emailOrPhone = do
@@ -1204,7 +1204,7 @@ lookupPasswordResetCode emailOrPhone = do
12041204
Nothing -> return Nothing
12051205
Just u -> do
12061206
k <- E.mkPasswordResetKey u
1207-
c <- Data.lookupPasswordResetCode u
1207+
c <- E.lookupPasswordResetCode u
12081208
return $ (k,) <$> c
12091209

12101210
deleteUserNoVerify ::

services/brig/src/Brig/App.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ import Brig.Sem.BrigTime (BrigTime)
100100
import Brig.Sem.BrigTime.IO
101101
import Brig.Sem.CodeStore (CodeStore)
102102
import Brig.Sem.CodeStore.Cassandra
103+
import Brig.Sem.PasswordResetStore (PasswordResetStore)
104+
import Brig.Sem.PasswordResetStore.CodeStore
103105
import Brig.Team.Template
104106
import Brig.Template (Localised, TemplateBranding, forLocale, genTemplateBranding)
105107
import Brig.Types (Locale (..), TurnURI)
@@ -582,7 +584,8 @@ newtype HttpClientIO a = HttpClientIO
582584
)
583585

584586
type BrigCanonicalEffects =
585-
'[ BrigTime,
587+
'[ PasswordResetStore,
588+
BrigTime,
586589
CodeStore,
587590
Embed Cas.Client, -- FUTUREWORK: remove this effect once MonadClient
588591
-- constraints are removed from application code
@@ -630,6 +633,7 @@ runAppT e (AppT ma) =
630633
. interpretClientToIO (_casClient e)
631634
. codeStoreToCassandra @Cas.Client
632635
. brigTimeToIO @IO (_currentTime e)
636+
. passwordResetStoreToCodeStore
633637
$ runReaderT ma e
634638

635639
runAppResourceT ::

services/brig/src/Brig/Data/Activation.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ module Brig.Data.Activation
3232
where
3333

3434
import Brig.App (Env)
35-
import Brig.Data.PasswordReset
3635
import Brig.Data.User
3736
import Brig.Data.UserKey
3837
import Brig.Options
@@ -127,7 +126,7 @@ activateKey k c u = verifyCode k c >>= pickUser >>= activate
127126
return . Just $ foldKey (EmailActivated uid) (PhoneActivated uid) key
128127
-- if the key is the same, we only want to update our profile
129128
| otherwise = do
130-
lift (runM (codeStoreToCassandra @m @'[Embed m] (mkPasswordResetKey uid >>= E.codeDelete)))
129+
lift (runM (codeStoreToCassandra @m @'[Embed m] (E.mkPasswordResetKey uid >>= E.codeDelete)))
131130
claim key uid
132131
lift $ foldKey (updateEmailAndDeleteEmailUnvalidated uid) (updatePhone uid) key
133132
for_ oldKey $ lift . deleteKey

services/brig/src/Brig/Data/PasswordReset.hs

Lines changed: 0 additions & 93 deletions
This file was deleted.

services/brig/test/integration/API/User/Util.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ module API.User.Util where
2222
import Bilge hiding (accept, timeout)
2323
import Bilge.Assert
2424
import qualified Brig.Code as Code
25-
import Brig.Data.PasswordReset
2625
import Brig.Options (Opts)
26+
import Brig.Sem.CodeStore
2727
import Brig.Sem.CodeStore.Cassandra
2828
import Brig.Types
2929
import Brig.Types.Team.LegalHold (LegalHoldClientRequest (..))

0 commit comments

Comments
 (0)