{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DuplicateRecordFields #-} module Model.Login (LoginRequest (..), LoginResponse (..), LoginFlowsResponse (..), LoginFlow (..), PasswordIdentifier (..)) where import Data.Aeson import GHC.Generics import Data.Text (Text) import Util (Normalisable(..)) type UserId = Text ---------------------------------------------------------------------------------------------------- data PasswordIdentifier = PasswordIdentifier { user :: UserId } deriving (Show, Eq, Generic) instance FromJSON PasswordIdentifier data LoginRequest = LoginRequest { identifier :: PasswordIdentifier , password :: Text , type' :: Text , initial_device_display_name :: Maybe Text , refresh_token :: Maybe Bool , device_id :: Maybe Text } deriving (Show, Eq, Generic) instance FromJSON LoginRequest where parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = normaliseVariant } ---------------------------------------------------------------------------------------------------- data LoginResponse = LoginResponse { user_id :: UserId , access_token :: Text , home_server :: Text , device_id :: Text } deriving (Show, Eq, Generic) instance ToJSON LoginResponse ---------------------------------------------------------------------------------------------------- newtype LoginFlowsResponse = LoginFlowsResponse { flows :: [LoginFlow] -- TODO: Enum? } deriving (Show, Eq, Generic) instance ToJSON LoginFlowsResponse newtype LoginFlow = LoginFlow -- TODO: Maybe type LoginFlow = ... easier? { type' :: Text } deriving (Show, Eq, Generic) instance ToJSON LoginFlow where toJSON (LoginFlow t) = object ["type" .= t]