diff --git a/libs/types-common/src/Data/Misc.hs b/libs/types-common/src/Data/Misc.hs index 63f949f4b2d..80fa176a464 100644 --- a/libs/types-common/src/Data/Misc.hs +++ b/libs/types-common/src/Data/Misc.hs @@ -76,6 +76,7 @@ module Data.Misc fromPlainTextPassword, plainTextPassword8Unsafe, plainTextPassword6Unsafe, + toPlainTextPassword8, -- * Typesafe FUTUREWORKS FutureWork (..), @@ -531,6 +532,9 @@ plainTextPassword8Unsafe = PlainTextPassword' . unsafeRange fromPlainTextPassword :: PlainTextPassword' t -> Text fromPlainTextPassword = fromRange . fromPlainTextPassword' +toPlainTextPassword8 :: PlainTextPassword6 -> Maybe PlainTextPassword8 +toPlainTextPassword8 = fmap PlainTextPassword' . checked . fromPlainTextPassword + newtype PlainTextPassword' (minLen :: Nat) = PlainTextPassword' {fromPlainTextPassword' :: Range minLen (1024 :: Nat) Text} deriving stock (Eq, Generic) diff --git a/libs/wire-subsystems/src/Wire/AuthenticationSubsystem/Interpreter.hs b/libs/wire-subsystems/src/Wire/AuthenticationSubsystem/Interpreter.hs index 0bf6b57f0cf..70c5516b5ac 100644 --- a/libs/wire-subsystems/src/Wire/AuthenticationSubsystem/Interpreter.hs +++ b/libs/wire-subsystems/src/Wire/AuthenticationSubsystem/Interpreter.hs @@ -22,6 +22,7 @@ module Wire.AuthenticationSubsystem.Interpreter ) where +import Control.Lens import Data.ByteString.Conversion import Data.Code qualified as Code import Data.Default @@ -400,7 +401,10 @@ verifyUserPasswordImpl uid plaintext = do password <- UserStore.lookupHashedPassword uid >>= maybe (throw AuthenticationSubsystemBadCredentials) pure - verifyPasswordWithStatus (RateLimitUser uid) plaintext password + verifiedPassword <- verifyPasswordWithStatus (RateLimitUser uid) plaintext password + case toPlainTextPassword8 plaintext of + Just {} -> pure $ verifiedPassword & _2 .~ PasswordStatusNeedsUpdate + Nothing -> pure verifiedPassword verifyUserPasswordErrorImpl :: ( Member (Error AuthenticationSubsystemError) r,