about summary refs log tree commit diff
path: root/src/Types.hs
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-08-02T15·07+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-08-02T15·07+0100
commit25334080b9bcdf238f75069feb92fba65896da5e (patch)
treef3410227de97c10936a260e9e7a6bbe6ac43231d /src/Types.hs
parentfe609bbe5804be229a7e5c0d276654fb3e45179b (diff)
Support POST /invite
Allow Admin accounts to invite users to the application.
Diffstat (limited to 'src/Types.hs')
-rw-r--r--src/Types.hs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/Types.hs b/src/Types.hs
index 54f3ec64ea0d..7fe3f2b15d39 100644
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -469,3 +469,30 @@ instance FromJSON UnfreezeAccountRequest where
   parseJSON = withObject "UnfreezeAccountRequest" $ \x -> do
     unfreezeAccountRequestUsername <- x .: "username"
     pure UnfreezeAccountRequest{..}
+
+data InviteUserRequest = InviteUserRequest
+  { inviteUserRequestEmail :: Email
+  , inviteUserRequestRole :: Role
+  } deriving (Eq, Show)
+
+instance FromJSON InviteUserRequest where
+  parseJSON = withObject "InviteUserRequest" $ \x -> do
+    inviteUserRequestEmail <- x .: "email"
+    inviteUserRequestRole <- x .: "role"
+    pure InviteUserRequest{..}
+
+newtype InvitationSecret = InvitationSecret UUID.UUID
+  deriving (Eq, Show)
+
+instance ToField InvitationSecret where
+  toField (InvitationSecret secretUUID) =
+    secretUUID |> UUID.toText |> SQLText
+
+instance FromField InvitationSecret where
+  fromField field =
+    case fieldData field of
+      (SQLText x) ->
+        case UUID.fromText x of
+          Nothing -> returnError ConversionFailed field ("Could not convert text to UUID: " ++ show x)
+          Just x -> Ok $ InvitationSecret x
+      _ -> returnError ConversionFailed field "Field data is not SQLText, which is what we expect"