diff options
| author | adambrangenberg <adabran06@gmail.com> | 2025-12-24 03:40:10 +0100 |
|---|---|---|
| committer | adambrangenberg <adabran06@gmail.com> | 2025-12-24 03:40:10 +0100 |
| commit | a0886694f73fc382d78da79ab8bfb27475757bab (patch) | |
| tree | 652ba9b603a1acaf4dfca188f7bb2c29c6bccfd0 /src/Model/Login.hs | |
| parent | 2b48a574e8b9fed03a5c1969af4bb1e338f1be26 (diff) | |
Implemented basic auth, refactor
Diffstat (limited to 'src/Model/Login.hs')
| -rw-r--r-- | src/Model/Login.hs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/Model/Login.hs b/src/Model/Login.hs new file mode 100644 index 0000000..0fbb2fa --- /dev/null +++ b/src/Model/Login.hs @@ -0,0 +1,58 @@ +{-# 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 + } + 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] |