aboutsummaryrefslogtreecommitdiff
path: root/src/Model/Login.hs
diff options
context:
space:
mode:
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]