module Wire.UserSubsystem.Error where

import Imports
import Network.HTTP.Types (status404)
import Network.Wai.Utilities qualified as Wai
import Wire.API.Error
import Wire.API.Error.Brig qualified as E
import Wire.Error

-- | All errors that are thrown by the user subsystem are subsumed under this sum type.
data UserSubsystemError
  = -- | user is managed by scim or e2ei is enabled
    --   FUTUREWORK(mangoiv): the name should probably resemble that
    UserSubsystemDisplayNameManagedByScim
  | UserSubsystemHandleManagedByScim
  | UserSubsystemLocaleManagedByScim
  | UserSubsystemNoIdentity
  | UserSubsystemHandleExists
  | UserSubsystemInvalidHandle
  | UserSubsystemProfileNotFound
  | UserSubsystemInsufficientTeamPermissions
  | UserSubsystemCannotJoinMultipleTeams
  | UserSubsystemTooManyTeamMembers
  | UserSubsystemMissingIdentity
  | UserSubsystemInvalidActivationCodeWrongUser
  | UserSubsystemInvalidActivationCodeWrongCode
  | UserSubsystemInvalidInvitationCode
  | UserSubsystemInvitationNotFound
  | UserSubsystemUserNotAllowedToJoinTeam Wai.Error
  | UserSubsystemMLSServicesNotAllowed
  deriving (UserSubsystemError -> UserSubsystemError -> Bool
(UserSubsystemError -> UserSubsystemError -> Bool)
-> (UserSubsystemError -> UserSubsystemError -> Bool)
-> Eq UserSubsystemError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserSubsystemError -> UserSubsystemError -> Bool
== :: UserSubsystemError -> UserSubsystemError -> Bool
$c/= :: UserSubsystemError -> UserSubsystemError -> Bool
/= :: UserSubsystemError -> UserSubsystemError -> Bool
Eq, Int -> UserSubsystemError -> ShowS
[UserSubsystemError] -> ShowS
UserSubsystemError -> String
(Int -> UserSubsystemError -> ShowS)
-> (UserSubsystemError -> String)
-> ([UserSubsystemError] -> ShowS)
-> Show UserSubsystemError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserSubsystemError -> ShowS
showsPrec :: Int -> UserSubsystemError -> ShowS
$cshow :: UserSubsystemError -> String
show :: UserSubsystemError -> String
$cshowList :: [UserSubsystemError] -> ShowS
showList :: [UserSubsystemError] -> ShowS
Show)

userSubsystemErrorToHttpError :: UserSubsystemError -> HttpError
userSubsystemErrorToHttpError :: UserSubsystemError -> HttpError
userSubsystemErrorToHttpError =
  Error -> HttpError
StdError (Error -> HttpError)
-> (UserSubsystemError -> Error) -> UserSubsystemError -> HttpError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
    UserSubsystemError
UserSubsystemProfileNotFound -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.UserNotFound
    UserSubsystemError
UserSubsystemDisplayNameManagedByScim -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.NameManagedByScim
    UserSubsystemError
UserSubsystemLocaleManagedByScim -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.LocaleManagedByScim
    UserSubsystemError
UserSubsystemNoIdentity -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.NoIdentity
    UserSubsystemError
UserSubsystemHandleExists -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.HandleExists
    UserSubsystemError
UserSubsystemInvalidHandle -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.InvalidHandle
    UserSubsystemError
UserSubsystemHandleManagedByScim -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.HandleManagedByScim
    UserSubsystemError
UserSubsystemInsufficientTeamPermissions -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.InsufficientTeamPermissions
    UserSubsystemError
UserSubsystemCannotJoinMultipleTeams -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.CannotJoinMultipleTeams
    UserSubsystemError
UserSubsystemTooManyTeamMembers -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.TooManyTeamMembers
    UserSubsystemError
UserSubsystemMissingIdentity -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.MissingIdentity
    UserSubsystemError
UserSubsystemInvalidActivationCodeWrongUser -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.InvalidActivationCodeWrongUser
    UserSubsystemError
UserSubsystemInvalidActivationCodeWrongCode -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.InvalidActivationCodeWrongCode
    UserSubsystemError
UserSubsystemInvalidInvitationCode -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.InvalidInvitationCode
    UserSubsystemError
UserSubsystemInvitationNotFound -> Status -> LText -> LText -> Error
Wai.mkError Status
status404 LText
"not-found" LText
"Something went wrong, while looking up the invitation"
    UserSubsystemUserNotAllowedToJoinTeam Error
e -> Error
e
    UserSubsystemError
UserSubsystemMLSServicesNotAllowed -> forall {k} (e :: k). KnownError (MapError e) => Error
forall (e :: BrigError). KnownError (MapError e) => Error
errorToWai @E.MLSServicesNotAllowed

instance Exception UserSubsystemError