aboutsummaryrefslogtreecommitdiff
path: root/src/Model/Login.hs
diff options
context:
space:
mode:
authoradambrangenberg <adabran06@gmail.com>2025-12-24 03:40:10 +0100
committeradambrangenberg <adabran06@gmail.com>2025-12-24 03:40:10 +0100
commita0886694f73fc382d78da79ab8bfb27475757bab (patch)
tree652ba9b603a1acaf4dfca188f7bb2c29c6bccfd0 /src/Model/Login.hs
parent2b48a574e8b9fed03a5c1969af4bb1e338f1be26 (diff)
Implemented basic auth, refactor
Diffstat (limited to 'src/Model/Login.hs')
-rw-r--r--src/Model/Login.hs58
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]