module API.Brig where
import API.BrigCommon
import API.Common
import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Base64 as Base64
import Data.Foldable
import Data.Function
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Vector as V
import GHC.Stack
import Testlib.Prelude
data AddUser = AddUser
{ AddUser -> Maybe String
name :: Maybe String,
AddUser -> Maybe String
email :: Maybe String,
AddUser -> Maybe String
teamCode :: Maybe String,
AddUser -> Maybe String
password :: Maybe String,
AddUser -> Maybe String
newTeamName :: Maybe String
}
instance Default AddUser where
def :: AddUser
def = Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> AddUser
AddUser Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
data NewProvider = NewProvider
{ NewProvider -> String
newProviderName :: String,
NewProvider -> String
newProviderDesc :: String,
NewProvider -> Maybe String
newProviderPassword :: Maybe String,
NewProvider -> String
newProviderUrl :: String
}
instance Default NewProvider where
def :: NewProvider
def =
String -> String -> Maybe String -> String -> NewProvider
NewProvider
String
"New Provider"
String
"Just a provider"
Maybe String
forall a. Maybe a
Nothing
String
"https://example.com"
data NewService = NewService
{ NewService -> String
newServiceName :: String,
NewService -> String
newServiceSummary :: String,
NewService -> String
newServiceDescr :: String,
NewService -> String
newServiceUrl :: String,
NewService -> ByteString
newServiceKey :: ByteString,
NewService -> Maybe String
newServiceToken :: Maybe String,
NewService -> [String]
newServiceAssets :: [String],
NewService -> [String]
newServiceTags :: [String]
}
instance Default NewService where
def :: NewService
def =
String
-> String
-> String
-> String
-> ByteString
-> Maybe String
-> [String]
-> [String]
-> NewService
NewService
String
"New Service"
String
"Just a service"
String
"Just a service description"
String
"https://example.com"
( Text -> ByteString
T.encodeUtf8 (Text -> ByteString)
-> ([String] -> Text) -> [String] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> Text
T.unlines ([Text] -> Text) -> ([String] -> [Text]) -> [String] -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> Text
T.pack ([String] -> ByteString) -> [String] -> ByteString
forall a b. (a -> b) -> a -> b
$
[ String
"-----BEGIN PUBLIC KEY-----",
String
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu+Kg/PHHU3atXrUbKnw0",
String
"G06FliXcNt3lMwl2os5twEDcPPFw/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPH",
String
"WvUBdiLfGrZqJO223DB6D8K2Su/odmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKV",
String
"VPOaOzgtAB21XKRiQ4ermqgi3/njr03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiS",
String
"bUKr/BeArYRcjzr/h5m1In6fG/if9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg8",
String
"7X883H+LA/d6X5CTiPv1VMxXdBUiGPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7la",
String
"nQIDAQAB",
String
"-----END PUBLIC KEY-----"
]
)
(String -> Maybe String
forall a. a -> Maybe a
Just String
"secret-token")
[]
[String
"music", String
"quiz", String
"weather"]
instance ToJSON NewService where
toJSON :: NewService -> Value
toJSON NewService {String
[String]
Maybe String
ByteString
newServiceName :: NewService -> String
newServiceSummary :: NewService -> String
newServiceDescr :: NewService -> String
newServiceUrl :: NewService -> String
newServiceKey :: NewService -> ByteString
newServiceToken :: NewService -> Maybe String
newServiceAssets :: NewService -> [String]
newServiceTags :: NewService -> [String]
newServiceName :: String
newServiceSummary :: String
newServiceDescr :: String
newServiceUrl :: String
newServiceKey :: ByteString
newServiceToken :: Maybe String
newServiceAssets :: [String]
newServiceTags :: [String]
..} =
[Pair] -> Value
Aeson.object
[ String
"name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
newServiceName,
String
"summary" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
newServiceSummary,
String
"description" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
newServiceDescr,
String
"base_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
newServiceUrl,
String
"public_key" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= (Text -> String
T.unpack (Text -> String) -> (ByteString -> Text) -> ByteString -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
T.decodeUtf8) ByteString
newServiceKey,
String
"auth_token" String -> Maybe String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Maybe String
newServiceToken,
String
"assets" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Array -> Value
Aeson.Array ([Value] -> Array
forall a. [a] -> Vector a
V.fromList (Text -> Value
Aeson.String (Text -> Value) -> (String -> Text) -> String -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Value) -> [String] -> [Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
newServiceAssets)),
String
"tags" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Array -> Value
Aeson.Array ([Value] -> Array
forall a. [a] -> Vector a
V.fromList (Text -> Value
Aeson.String (Text -> Value) -> (String -> Text) -> String -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Value) -> [String] -> [Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
newServiceTags))
]
addUser :: (HasCallStack, MakesValue dom) => dom -> AddUser -> App Response
addUser :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> AddUser -> App Response
addUser dom
dom AddUser
opts = do
req <- dom -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest dom
dom Service
Brig Versioned
Versioned String
"register"
name <- maybe randomName pure opts.name
submit "POST" $
req
& addClientIP
& addJSONObject
( [ "name" .= name,
"email" .= opts.email,
"team_code" .= opts.teamCode,
"password" .= fromMaybe defPassword opts.password
]
<> ["team" .= object ["name" .= n, "icon" .= "default"] | n <- toList opts.newTeamName]
)
getUser ::
(HasCallStack, MakesValue user, MakesValue target) =>
user ->
target ->
App Response
getUser :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
getUser user
user target
target = do
(domain, uid) <- target -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid target
target
req <-
baseRequest user Brig Versioned $
joinHttpPath ["users", domain, uid]
submit "GET" req
getClient ::
(HasCallStack, MakesValue user, MakesValue client) =>
user ->
client ->
App Response
getClient :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
getClient user
u client
cli = do
c <- client -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make client
cli App Value -> (App Value -> App String) -> App String
forall a b. a -> (a -> b) -> b
& App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString
req <-
baseRequest u Brig Versioned $
joinHttpPath ["clients", c]
submit "GET" req
getSelfClients ::
(HasCallStack, MakesValue user) =>
user ->
App Response
getSelfClients :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getSelfClients user
u =
user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
u Service
Brig Versioned
Versioned ([String] -> String
joinHttpPath [String
"clients"])
App Request -> (Request -> App Response) -> App Response
forall a b. App a -> (a -> App b) -> App b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Request -> App Response
submit String
"GET"
deleteUser :: (HasCallStack, MakesValue user) => user -> App Response
deleteUser :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
deleteUser user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/self"
submit "DELETE" $
req & addJSONObject ["password" .= defPassword]
addClient ::
(HasCallStack, MakesValue user) =>
user ->
AddClient ->
App Response
addClient :: forall user.
(HasCallStack, MakesValue user) =>
user -> AddClient -> App Response
addClient user
user AddClient
args = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"/clients"
val <- mkAddClientValue args
submit "POST" $ req & addJSONObject val
data UpdateClient = UpdateClient
{ UpdateClient -> [Value]
prekeys :: [Value],
UpdateClient -> Maybe Value
lastPrekey :: Maybe Value,
UpdateClient -> Maybe String
label :: Maybe String,
UpdateClient -> Maybe [String]
capabilities :: Maybe [String],
UpdateClient -> Maybe Value
mlsPublicKeys :: Maybe Value
}
instance Default UpdateClient where
def :: UpdateClient
def =
UpdateClient
{ prekeys :: [Value]
prekeys = [],
lastPrekey :: Maybe Value
lastPrekey = Maybe Value
forall a. Maybe a
Nothing,
label :: Maybe String
label = Maybe String
forall a. Maybe a
Nothing,
capabilities :: Maybe [String]
capabilities = Maybe [String]
forall a. Maybe a
Nothing,
mlsPublicKeys :: Maybe Value
mlsPublicKeys = Maybe Value
forall a. Maybe a
Nothing
}
updateClient ::
(HasCallStack) =>
ClientIdentity ->
UpdateClient ->
App Response
updateClient :: HasCallStack => ClientIdentity -> UpdateClient -> App Response
updateClient ClientIdentity
cid UpdateClient
args = do
req <- ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"/clients/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client
submit "PUT" $
req
& addJSONObject
( ["prekeys" .= args.prekeys]
<> ["lastkey" .= k | k <- toList args.lastPrekey]
<> ["label" .= l | l <- toList args.label]
<> ["capabilities" .= c | c <- toList args.capabilities]
<> ["mls_public_keys" .= k | k <- toList args.mlsPublicKeys]
)
deleteClient ::
(HasCallStack, MakesValue user, MakesValue client) =>
user ->
client ->
App Response
deleteClient :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
deleteClient user
user client
client = do
cid <- client -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId client
client
req <- baseRequest user Brig Versioned $ "/clients/" <> cid
submit "DELETE" $
req
& addJSONObject
[ "password" .= defPassword
]
getClientsQualified ::
( HasCallStack,
MakesValue user,
MakesValue domain,
MakesValue otherUser
) =>
user ->
domain ->
otherUser ->
App Response
getClientsQualified :: forall user domain otherUser.
(HasCallStack, MakesValue user, MakesValue domain,
MakesValue otherUser) =>
user -> domain -> otherUser -> App Response
getClientsQualified user
user domain
domain otherUser
otherUser = do
ouid <- otherUser -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId otherUser
otherUser
d <- objDomain domain
req <-
baseRequest user Brig Versioned $
"/users/"
<> d
<> "/"
<> ouid
<> "/clients"
submit "GET" req
listUsersClients :: (HasCallStack, MakesValue user, MakesValue qualifiedUserIds) => user -> [qualifiedUserIds] -> App Response
listUsersClients :: forall user qualifiedUserIds.
(HasCallStack, MakesValue user, MakesValue qualifiedUserIds) =>
user -> [qualifiedUserIds] -> App Response
listUsersClients user
usr [qualifiedUserIds]
qualifiedUserIds = do
qUsers <- (qualifiedUserIds -> App Value)
-> [qualifiedUserIds] -> App [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM qualifiedUserIds -> App Value
forall a. (HasCallStack, MakesValue a) => a -> App Value
objQidObject [qualifiedUserIds]
qualifiedUserIds
req <- baseRequest usr Brig Versioned $ joinHttpPath ["users", "list-clients"]
submit "POST" (req & addJSONObject ["qualified_users" .= qUsers])
listUsers :: (HasCallStack, MakesValue user, MakesValue qualifiedUserIds) => user -> [qualifiedUserIds] -> App Response
listUsers :: forall user qualifiedUserIds.
(HasCallStack, MakesValue user, MakesValue qualifiedUserIds) =>
user -> [qualifiedUserIds] -> App Response
listUsers user
usr [qualifiedUserIds]
qualifiedUserIds = do
qUsers <- (qualifiedUserIds -> App Value)
-> [qualifiedUserIds] -> App [Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM qualifiedUserIds -> App Value
forall a. (HasCallStack, MakesValue a) => a -> App Value
objQidObject [qualifiedUserIds]
qualifiedUserIds
req <- baseRequest usr Brig Versioned $ joinHttpPath ["list-users"]
submit "POST" (req & addJSONObject ["qualified_ids" .= qUsers])
searchContacts ::
( MakesValue user,
MakesValue searchTerm,
MakesValue domain
) =>
user ->
searchTerm ->
domain ->
App Response
searchContacts :: forall user searchTerm domain.
(MakesValue user, MakesValue searchTerm, MakesValue domain) =>
user -> searchTerm -> domain -> App Response
searchContacts user
user searchTerm
searchTerm domain
domain = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/search/contacts"
q <- asString searchTerm
d <- objDomain domain
submit "GET" (req & addQueryParams [("q", q), ("domain", d)])
searchTeam :: (HasCallStack, MakesValue user) => user -> [(String, String)] -> App Response
searchTeam :: forall user.
(HasCallStack, MakesValue user) =>
user -> [(String, String)] -> App Response
searchTeam user
user [(String, String)]
params = do
tid <- user
user user -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"team" App Value -> (App Value -> App String) -> App String
forall a b. a -> (a -> b) -> b
& App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString
req <- baseRequest user Brig Versioned $ joinHttpPath ["teams", tid, "search"]
submit "GET" (req & addQueryParams params)
searchTeamWithSearchTerm :: (HasCallStack, MakesValue user) => user -> String -> App Response
searchTeamWithSearchTerm :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
searchTeamWithSearchTerm user
user String
q = user -> [(String, String)] -> App Response
forall user.
(HasCallStack, MakesValue user) =>
user -> [(String, String)] -> App Response
searchTeam user
user [(String
"q", String
q)]
searchTeamAll :: (HasCallStack, MakesValue user) => user -> App Response
searchTeamAll :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
searchTeamAll user
user = user -> [(String, String)] -> App Response
forall user.
(HasCallStack, MakesValue user) =>
user -> [(String, String)] -> App Response
searchTeam user
user [(String
"q", String
""), (String
"size", String
"100"), (String
"sortby", String
"created_at"), (String
"sortorder", String
"desc")]
setUserSearchable :: (MakesValue user) => user -> String -> Bool -> App Response
setUserSearchable :: forall user.
MakesValue user =>
user -> String -> Bool -> App Response
setUserSearchable user
self String
uid Bool
searchable = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
self Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"users", String
uid, String
"searchable"]
submit "POST" $ addJSONObject ["set_searchable" .= searchable] req
getAPIVersion :: (HasCallStack, MakesValue domain) => domain -> App Response
getAPIVersion :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getAPIVersion domain
domain = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"/api-version"
submit "GET" req
postConnection ::
( HasCallStack,
MakesValue userFrom,
MakesValue userTo
) =>
userFrom ->
userTo ->
App Response
postConnection :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
postConnection userFrom
userFrom userTo
userTo = do
(userToDomain, userToId) <- userTo -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid userTo
userTo
req <-
baseRequest userFrom Brig Versioned $
joinHttpPath ["/connections", userToDomain, userToId]
submit "POST" req
getConnection ::
( HasCallStack,
MakesValue userFrom,
MakesValue userTo
) =>
userFrom ->
userTo ->
App Response
getConnection :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
getConnection userFrom
userFrom userTo
userTo = do
(userToDomain, userToId) <- userTo -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid userTo
userTo
req <-
baseRequest userFrom Brig Versioned $
joinHttpPath ["/connections", userToDomain, userToId]
submit "GET" req
putConnection ::
( HasCallStack,
MakesValue userFrom,
MakesValue userTo,
MakesValue status
) =>
userFrom ->
userTo ->
status ->
App Response
putConnection :: forall user domain otherUser.
(HasCallStack, MakesValue user, MakesValue domain,
MakesValue otherUser) =>
user -> domain -> otherUser -> App Response
putConnection userFrom
userFrom userTo
userTo status
status = do
(userToDomain, userToId) <- userTo -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid userTo
userTo
req <-
baseRequest userFrom Brig Versioned $
joinHttpPath ["/connections", userToDomain, userToId]
statusS <- asString status
submit "PUT" (req & addJSONObject ["status" .= statusS])
getConnections :: (HasCallStack, MakesValue user) => user -> App Response
getConnections :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getConnections user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/list-connections"
submit "POST" (req & addJSONObject ["size" .= Aeson.Number 500])
uploadKeyPackages :: ClientIdentity -> [ByteString] -> App Response
uploadKeyPackages :: ClientIdentity -> [ByteString] -> App Response
uploadKeyPackages ClientIdentity
cid [ByteString]
kps = do
req <-
ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
String
"/mls/key-packages/self/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client
submit
"POST"
(req & addJSONObject ["key_packages" .= map (T.decodeUtf8 . Base64.encode) kps])
claimKeyPackagesWithParams :: (MakesValue u, MakesValue v) => Ciphersuite -> u -> v -> [(String, String)] -> App Response
claimKeyPackagesWithParams :: forall u v.
(MakesValue u, MakesValue v) =>
Ciphersuite -> u -> v -> [(String, String)] -> App Response
claimKeyPackagesWithParams Ciphersuite
suite u
u v
v [(String, String)]
params = do
(targetDom, targetUid) <- v -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid v
v
req <-
baseRequest u Brig Versioned $
"/mls/key-packages/claim/" <> targetDom <> "/" <> targetUid
submit "POST" $
req
& addQueryParams ([("ciphersuite", suite.code)] <> params)
claimKeyPackages :: (HasCallStack, MakesValue u, MakesValue v) => Ciphersuite -> u -> v -> App Response
claimKeyPackages :: forall u v.
(HasCallStack, MakesValue u, MakesValue v) =>
Ciphersuite -> u -> v -> App Response
claimKeyPackages Ciphersuite
suite u
u v
v = Ciphersuite -> u -> v -> [(String, String)] -> App Response
forall u v.
(MakesValue u, MakesValue v) =>
Ciphersuite -> u -> v -> [(String, String)] -> App Response
claimKeyPackagesWithParams Ciphersuite
suite u
u v
v []
countKeyPackages :: Ciphersuite -> ClientIdentity -> App Response
countKeyPackages :: Ciphersuite -> ClientIdentity -> App Response
countKeyPackages Ciphersuite
suite ClientIdentity
cid = do
req <- ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig Versioned
Versioned (String
"/mls/key-packages/self/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/count")
submit "GET" $
req
& addQueryParams [("ciphersuite", suite.code)]
deleteKeyPackages :: Ciphersuite -> ClientIdentity -> [String] -> App Response
deleteKeyPackages :: Ciphersuite -> ClientIdentity -> [String] -> App Response
deleteKeyPackages Ciphersuite
suite ClientIdentity
cid [String]
kps = do
req <- ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig Versioned
Versioned (String
"/mls/key-packages/self/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client)
submit "DELETE" $
req
& addQueryParams [("ciphersuite", suite.code)]
& addJSONObject ["key_packages" .= kps]
replaceKeyPackages :: ClientIdentity -> [Ciphersuite] -> [ByteString] -> App Response
replaceKeyPackages :: ClientIdentity -> [Ciphersuite] -> [ByteString] -> App Response
replaceKeyPackages ClientIdentity
cid [Ciphersuite]
suites [ByteString]
kps = do
req <-
ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
String
"/mls/key-packages/self/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client
submit "PUT" $
req
& addQueryParams [("ciphersuites", intercalate "," (map (.code) suites))]
& addJSONObject ["key_packages" .= map (T.decodeUtf8 . Base64.encode) kps]
replaceKeyPackagesV7 :: ClientIdentity -> Maybe [Ciphersuite] -> [ByteString] -> App Response
replaceKeyPackagesV7 :: ClientIdentity
-> Maybe [Ciphersuite] -> [ByteString] -> App Response
replaceKeyPackagesV7 ClientIdentity
cid Maybe [Ciphersuite]
mSuites [ByteString]
kps = do
req <-
ClientIdentity -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest ClientIdentity
cid Service
Brig (Int -> Versioned
ExplicitVersion Int
7) (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
String
"/mls/key-packages/self/" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ClientIdentity
cid.client
submit "PUT" $
req
& maybe id (\[Ciphersuite]
suites -> [(String, String)] -> Request -> Request
addQueryParams [(String
"ciphersuites", String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"," ((Ciphersuite -> String) -> [Ciphersuite] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (.code) [Ciphersuite]
suites))]) mSuites
& addJSONObject ["key_packages" .= map (T.decodeUtf8 . Base64.encode) kps]
getSelf :: (HasCallStack, MakesValue user) => user -> App Response
getSelf :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getSelf = Versioned -> user -> App Response
forall user.
(HasCallStack, MakesValue user) =>
Versioned -> user -> App Response
getSelfWithVersion Versioned
Versioned
getSelfWithVersion :: (HasCallStack, MakesValue user) => Versioned -> user -> App Response
getSelfWithVersion :: forall user.
(HasCallStack, MakesValue user) =>
Versioned -> user -> App Response
getSelfWithVersion Versioned
v user
user = user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
v String
"/self" App Request -> (Request -> App Response) -> App Response
forall a b. App a -> (a -> App b) -> App b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Request -> App Response
submit String
"GET"
getSelf' :: (HasCallStack) => String -> String -> App Response
getSelf' :: HasCallStack => String -> String -> App Response
getSelf' String
domain String
uid = Versioned -> Value -> App Response
forall user.
(HasCallStack, MakesValue user) =>
Versioned -> user -> App Response
getSelfWithVersion Versioned
Versioned (Value -> App Response) -> Value -> App Response
forall a b. (a -> b) -> a -> b
$ [Pair] -> Value
object [String
"domain" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
domain, String
"id" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
uid]
data PutSelf = PutSelf
{ PutSelf -> Maybe Int
accent :: Maybe Int,
PutSelf -> Maybe [Value]
assets :: Maybe [Value],
PutSelf -> Maybe String
name :: Maybe String,
PutSelf -> Maybe [String]
picture :: Maybe [String]
}
instance Default PutSelf where
def :: PutSelf
def = Maybe Int
-> Maybe [Value] -> Maybe String -> Maybe [String] -> PutSelf
PutSelf Maybe Int
forall a. Maybe a
Nothing Maybe [Value]
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe [String]
forall a. Maybe a
Nothing
putSelf :: (HasCallStack, MakesValue caller) => caller -> PutSelf -> App Response
putSelf :: forall caller.
(HasCallStack, MakesValue caller) =>
caller -> PutSelf -> App Response
putSelf caller
caller PutSelf
body = do
req <- caller -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest caller
caller Service
Brig Versioned
Versioned String
"/self"
submit "PUT" $
req
& addJSONObject
[ "accent_id" .= body.accent,
"assets" .= body.assets,
"name" .= body.name,
"picture" .= body.picture
]
putSelfLocale :: (HasCallStack, MakesValue caller) => caller -> String -> App Response
putSelfLocale :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
putSelfLocale caller
caller String
locale = do
req <- caller -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest caller
caller Service
Brig Versioned
Versioned String
"/self/locale"
submit "PUT" $ req & addJSONObject ["locale" .= locale]
putUserEmail :: (HasCallStack, MakesValue caller, MakesValue target) => caller -> target -> String -> App Response
putUserEmail :: forall caller target.
(HasCallStack, MakesValue caller, MakesValue target) =>
caller -> target -> String -> App Response
putUserEmail caller
caller target
target String
emailAddress = do
uid <- App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString (App Value -> App String) -> App Value -> App String
forall a b. (a -> b) -> a -> b
$ target
target target -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"id"
req <- baseRequest caller Brig Versioned $ joinHttpPath ["users", uid, "email"]
submit "PUT" $ req & addJSONObject ["email" .= emailAddress]
deleteSelfEmail :: (HasCallStack, MakesValue caller) => caller -> App Response
deleteSelfEmail :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
deleteSelfEmail caller
caller = do
req <- caller -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest caller
caller Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"self", String
"email"]
submit "DELETE" req
putHandle :: (HasCallStack, MakesValue user) => user -> String -> App Response
putHandle :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
putHandle user
user String
handle = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/self/handle"
submit "PUT" $
req & addJSONObject ["handle" .= handle]
putPassword :: (MakesValue user) => user -> String -> String -> App Response
putPassword :: forall user.
MakesValue user =>
user -> String -> String -> App Response
putPassword user
user String
oldPassword String
newPassword = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/self/password"
submit "PUT" $
req
& addJSONObject
[ "old_password" .= oldPassword,
"new_password" .= newPassword
]
getUserSupportedProtocols ::
(HasCallStack, MakesValue user, MakesValue target) =>
user ->
target ->
App Response
getUserSupportedProtocols :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
getUserSupportedProtocols user
user target
target = do
(domain, uid) <- target -> App (String, String)
forall a. (HasCallStack, MakesValue a) => a -> App (String, String)
objQid target
target
req <-
baseRequest user Brig Versioned $
joinHttpPath ["users", domain, uid, "supported-protocols"]
submit "GET" req
putUserSupportedProtocols ::
(HasCallStack, MakesValue user) =>
user ->
[String] ->
App Response
putUserSupportedProtocols :: forall user.
(HasCallStack, MakesValue user) =>
user -> [String] -> App Response
putUserSupportedProtocols user
user [String]
ps = do
req <-
user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"self", String
"supported-protocols"]
submit "PUT" (req & addJSONObject ["supported_protocols" .= ps])
data PostInvitation = PostInvitation
{ PostInvitation -> Maybe String
email :: Maybe String,
PostInvitation -> Maybe String
role :: Maybe String
}
instance Default PostInvitation where
def :: PostInvitation
def = Maybe String -> Maybe String -> PostInvitation
PostInvitation Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
postInvitation ::
(HasCallStack, MakesValue user) =>
user ->
PostInvitation ->
App Response
postInvitation :: forall user.
(HasCallStack, MakesValue user) =>
user -> PostInvitation -> App Response
postInvitation user
user PostInvitation
inv = do
tid <- user
user user -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"team" App Value -> (App Value -> App String) -> App String
forall a b. a -> (a -> b) -> b
& App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString
req <-
baseRequest user Brig Versioned $
joinHttpPath ["teams", tid, "invitations"]
email <- maybe randomEmail pure inv.email
submit "POST" $
req & addJSONObject (["email" .= email] <> ["role" .= r | r <- toList inv.role])
getApiVersions :: (HasCallStack) => App Response
getApiVersions :: HasCallStack => App Response
getApiVersions = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api-version"]
submit "GET" req
getSwaggerPublicTOC :: (HasCallStack) => App Response
getSwaggerPublicTOC :: HasCallStack => App Response
getSwaggerPublicTOC = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api", String
"swagger-ui"]
submit "GET" req
getSwaggerPublicAllUI :: (HasCallStack) => Int -> App Response
getSwaggerPublicAllUI :: HasCallStack => Int -> App Response
getSwaggerPublicAllUI Int
version = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Brig (Int -> Versioned
ExplicitVersion Int
version) (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api", String
"swagger-ui"]
submit "GET" req
getSwaggerPublicAllJson :: (HasCallStack) => Int -> App Response
getSwaggerPublicAllJson :: HasCallStack => Int -> App Response
getSwaggerPublicAllJson Int
version = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Brig (Int -> Versioned
ExplicitVersion Int
version) (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api", String
"swagger.json"]
submit "GET" req
getSwaggerInternalUI :: (HasCallStack) => String -> App Response
getSwaggerInternalUI :: HasCallStack => String -> App Response
getSwaggerInternalUI String
service = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api-internal", String
"swagger-ui", String
service]
submit "GET" req
getSwaggerInternalJson :: (HasCallStack) => String -> App Response
getSwaggerInternalJson :: HasCallStack => String -> App Response
getSwaggerInternalJson String
service = do
req <-
Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Domain
OwnDomain Service
Nginz Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"api-internal", String
"swagger-ui", String
service String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"-swagger.json"]
submit "GET" req
newProvider ::
( HasCallStack,
MakesValue provider,
MakesValue user
) =>
user ->
provider ->
App Value
newProvider :: forall provider user.
(HasCallStack, MakesValue provider, MakesValue user) =>
user -> provider -> App Value
newProvider user
user provider
provider = do
p <- provider -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make provider
provider
req <-
baseRequest user Brig Versioned $
joinHttpPath ["provider", "register"]
submit "POST" (req & addJSON p & addClientIP) `bindResponse` \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
201
Response
resp.json
getProvider ::
(HasCallStack, MakesValue domain) =>
domain ->
String ->
App Response
getProvider :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
getProvider domain
domain String
pid = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"provider"]
submit "GET" $
req
& zType "provider"
& zProvider pid
activateProvider ::
( HasCallStack,
MakesValue dom
) =>
dom ->
String ->
String ->
App ()
activateProvider :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App ()
activateProvider dom
dom String
key String
code = do
d <- dom -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make dom
dom
req <-
rawBaseRequest d Brig Versioned $
joinHttpPath ["provider", "activate"]
let ps = [(String
"key", String
key), (String
"code", String
code)]
submit "GET" (addQueryParams ps req) `bindResponse` \Response
resp -> do
Response
resp.status Int -> [Value] -> App ()
forall a b.
(MakesValue a, MakesValue b, HasCallStack) =>
a -> b -> App ()
`shouldMatchOneOf` [Scientific -> Value
Number Scientific
200, Scientific -> Value
Number Scientific
204]
activateUserV5 :: (HasCallStack, MakesValue dom, MakesValue bdy) => dom -> bdy -> App Response
activateUserV5 :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
activateUserV5 dom
dom bdy
bdy = do
b <- bdy -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make bdy
bdy
req <- rawBaseRequest dom Brig (ExplicitVersion 5) $ joinHttpPath ["activate", "send"]
submit "POST" $ (addJSON b req)
loginProvider ::
( HasCallStack,
MakesValue dom
) =>
dom ->
String ->
String ->
App Response
loginProvider :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
loginProvider dom
dom String
email String
pass = do
d <- dom -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString dom
dom
req <-
rawBaseRequest d Brig Versioned $
joinHttpPath ["provider", "login"]
submit "POST" (addJSONObject ["email" .= email, "password" .= pass] req)
requestProviderPasswordResetCode ::
(HasCallStack, MakesValue domain) =>
domain ->
String ->
App Response
requestProviderPasswordResetCode :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
requestProviderPasswordResetCode domain
domain String
email = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"provider", String
"password-reset"]
submit "POST" $ req & addJSONObject ["email" .= email]
completeProviderPasswordReset ::
(HasCallStack, MakesValue domain) =>
domain ->
Value ->
String ->
App Response
completeProviderPasswordReset :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> Value -> String -> App Response
completeProviderPasswordReset domain
domain Value
resetCode String
newPassword = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"provider", String
"password-reset", String
"complete"]
body <- make (setField "password" newPassword resetCode)
submit "POST" $ req & addJSON body
requestProviderEmailUpdateCode ::
(HasCallStack, MakesValue domain) =>
domain ->
String ->
String ->
App Response
requestProviderEmailUpdateCode :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
requestProviderEmailUpdateCode domain
domain String
pid String
newEmail = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"provider", String
"email"]
submit "PUT" $
req
& zType "provider"
& zProvider pid
& addJSONObject ["email" .= newEmail]
newService ::
( HasCallStack,
MakesValue dom
) =>
dom ->
String ->
NewService ->
App Value
newService :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> NewService -> App Value
newService dom
dom String
providerId NewService
service = do
s <- NewService -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make NewService
service
domain <- asString dom
req <-
rawBaseRequest domain Brig Versioned $
joinHttpPath ["provider", "services"]
let addHdrs =
String -> String -> Request -> Request
addHeader String
"Z-Type" String
"provider"
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Request -> Request
addHeader String
"Z-Provider" String
providerId
submit "POST" (addJSON s . addHdrs $ req) `bindResponse` \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
201
Response
resp.json
getService :: (HasCallStack, MakesValue domain) => domain -> String -> String -> App Response
getService :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
getService domain
domain String
pid String
sid = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"provider", String
"services", String
sid]
submit "GET" $
req
& addHeader "Z-Type" "provider"
& addHeader "Z-Provider" pid
updateService ::
( HasCallStack,
MakesValue dom,
MakesValue serviceId
) =>
dom ->
String ->
serviceId ->
Maybe String ->
Maybe String ->
App Response
updateService :: forall dom serviceId.
(HasCallStack, MakesValue dom, MakesValue serviceId) =>
dom
-> String
-> serviceId
-> Maybe String
-> Maybe String
-> App Response
updateService dom
dom String
providerId serviceId
serviceId Maybe String
mAcceptHeader Maybe String
newName = do
sId <- serviceId -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString serviceId
serviceId
domain <- asString dom
req <-
rawBaseRequest domain Brig Versioned $
joinHttpPath ["provider", "services", sId]
let addHdrs =
String -> Request -> Request
zType String
"provider"
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Request -> Request
zProvider String
providerId
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Request -> Request)
-> (String -> Request -> Request)
-> Maybe String
-> Request
-> Request
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Request -> Request
forall a. a -> a
id (String -> String -> Request -> Request
addHeader String
"Accept") Maybe String
mAcceptHeader
submit "PUT"
. addHdrs
. addJSONObject ["name" .= n | n <- maybeToList newName]
$ req
updateServiceConn ::
( HasCallStack,
MakesValue domain,
MakesValue conn
) =>
domain ->
String ->
String ->
conn ->
App Response
updateServiceConn :: forall domain conn.
(HasCallStack, MakesValue domain, MakesValue conn) =>
domain -> String -> String -> conn -> App Response
updateServiceConn domain
domain String
providerId String
serviceId conn
connectionUpdate = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned do
[String] -> String
joinHttpPath [String
"provider", String
"services", String
serviceId, String
"connection"]
upd <- make connectionUpdate
submit "PUT"
. zType "provider"
. zProvider providerId
. addJSON upd
$ req
getUsersPrekeysClient :: (HasCallStack, MakesValue caller, MakesValue targetUser) => caller -> targetUser -> String -> App Response
getUsersPrekeysClient :: forall caller target.
(HasCallStack, MakesValue caller, MakesValue target) =>
caller -> target -> String -> App Response
getUsersPrekeysClient caller
caller targetUser
targetUser String
targetClient = do
dom <- App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString (App Value -> App String) -> App Value -> App String
forall a b. (a -> b) -> a -> b
$ targetUser
targetUser targetUser -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"domain"
uid <- asString $ targetUser %. "id"
req <- baseRequest caller Brig Versioned $ joinHttpPath ["users", dom, uid, "prekeys", targetClient]
submit "GET" req
getUsersPrekeyBundle :: (HasCallStack, MakesValue caller, MakesValue targetUser) => caller -> targetUser -> App Response
getUsersPrekeyBundle :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
getUsersPrekeyBundle caller
caller targetUser
targetUser = do
dom <- App Value -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString (App Value -> App String) -> App Value -> App String
forall a b. (a -> b) -> a -> b
$ targetUser
targetUser targetUser -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"domain"
uid <- asString $ targetUser %. "id"
req <- baseRequest caller Brig Versioned $ joinHttpPath ["users", dom, uid, "prekeys"]
submit "GET" req
getMultiUserPrekeyBundle :: (HasCallStack, MakesValue caller, ToJSON userClients) => caller -> userClients -> App Response
getMultiUserPrekeyBundle :: forall caller userClients.
(HasCallStack, MakesValue caller, ToJSON userClients) =>
caller -> userClients -> App Response
getMultiUserPrekeyBundle caller
caller userClients
userClients = do
req <- caller -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest caller
caller Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"users", String
"list-prekeys"]
submit "POST" (addJSON userClients req)
renewToken :: (HasCallStack, MakesValue uid) => uid -> String -> App Response
renewToken :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
renewToken uid
caller String
cookie = do
req <- uid -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest uid
caller Service
Brig Versioned
Versioned String
"access"
submit "POST" (addHeader "Cookie" ("zuid=" <> cookie) req)
getCallsConfigV2 :: (HasCallStack, MakesValue user) => user -> App Response
getCallsConfigV2 :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getCallsConfigV2 user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"calls", String
"config", String
"v2"]
submit "GET" req
addBot :: (HasCallStack, MakesValue user) => user -> String -> String -> String -> App Response
addBot :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> String -> App Response
addBot user
user String
providerId String
serviceId String
convId = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"bot", String
"conversations", String
convId]
submit "POST" $
req
& zType "access"
& addJSONObject ["provider" .= providerId, "service" .= serviceId]
setProperty :: (MakesValue user, ToJSON val) => user -> String -> val -> App Response
setProperty :: forall user val.
(MakesValue user, ToJSON val) =>
user -> String -> val -> App Response
setProperty user
user String
propName val
val = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties", String
propName]
submit "PUT" $ req & addJSON val
getProperty :: (MakesValue user) => user -> String -> App Response
getProperty :: forall user. MakesValue user => user -> String -> App Response
getProperty user
user String
propName = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties", String
propName]
submit "GET" req
deleteProperty :: (MakesValue user) => user -> String -> App Response
deleteProperty :: forall user. MakesValue user => user -> String -> App Response
deleteProperty user
user String
propName = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties", String
propName]
submit "DELETE" req
getAllPropertyNames :: (MakesValue user) => user -> App Response
getAllPropertyNames :: forall user. MakesValue user => user -> App Response
getAllPropertyNames user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties"]
submit "GET" req
getAllPropertyValues :: (MakesValue user) => user -> App Response
getAllPropertyValues :: forall user. MakesValue user => user -> App Response
getAllPropertyValues user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties-values"]
submit "GET" req
clearProperties :: (MakesValue user) => user -> App Response
clearProperties :: forall user. MakesValue user => user -> App Response
clearProperties user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"properties"]
submit "DELETE" req
generateOAuthAuthorizationCode :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> [String] -> String -> App Response
generateOAuthAuthorizationCode :: forall user cid.
(HasCallStack, MakesValue user, MakesValue cid) =>
user -> cid -> [String] -> String -> App Response
generateOAuthAuthorizationCode user
user cid
cid [String]
scopes String
redirectUrl = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig Versioned "/oauth/authorization/codes"
submit "POST" $
req
& addJSONObject
[ "client_id" .= cidStr,
"scope" .= unwords scopes,
"redirect_uri" .= redirectUrl,
"code_challenge" .= "G7CWLBqYDT8doT_oEIN3un_QwZWYKHmOqG91nwNzITc",
"code_challenge_method" .= "S256",
"response_type" .= "code",
"state" .= "abc"
]
createOAuthAccessToken :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> String -> String -> App Response
createOAuthAccessToken :: forall user cid.
(HasCallStack, MakesValue user, MakesValue cid) =>
user -> cid -> String -> String -> App Response
createOAuthAccessToken user
user cid
cid String
code String
redirectUrl = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig Versioned "/oauth/token"
submit "POST" $
req
& addUrlEncodedForm
[ ("grant_type", "authorization_code"),
("client_id", cidStr),
("code_verifier", "nE3k3zykOmYki~kriKzAmeFiGT7cWugcuToFwo1YPgrZ1cFvaQqLa.dXY9MnDj3umAmG-8lSNIYIl31Cs_.fV5r2psa4WWZcB.Nlc3A-t3p67NDZaOJjIiH~8PvUH_hR"),
("code", code),
("redirect_uri", redirectUrl)
]
createOAuthAccessTokenWithRefreshToken :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> String -> App Response
createOAuthAccessTokenWithRefreshToken :: forall caller target.
(HasCallStack, MakesValue caller, MakesValue target) =>
caller -> target -> String -> App Response
createOAuthAccessTokenWithRefreshToken user
user cid
cid String
token = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig Versioned "/oauth/token"
submit "POST" $
req
& addUrlEncodedForm
[ ("grant_type", "refresh_token"),
("client_id", cidStr),
("refresh_token", token)
]
getOAuthApplications :: (HasCallStack, MakesValue user) => user -> App Response
getOAuthApplications :: forall user.
(HasCallStack, MakesValue user) =>
user -> App Response
getOAuthApplications user
user = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"/oauth/applications"
submit "GET" req
deleteOAuthSession :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> String -> String -> App Response
deleteOAuthSession :: forall user cid.
(HasCallStack, MakesValue user, MakesValue cid) =>
user -> cid -> String -> String -> App Response
deleteOAuthSession user
user cid
cid String
password String
tokenId = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig Versioned $ joinHttpPath ["oauth", "applications", cidStr, "sessions", tokenId]
submit "DELETE" $ req & addJSONObject ["password" .= password]
revokeApplicationAccessV6 :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> App Response
revokeApplicationAccessV6 :: forall user target.
(HasCallStack, MakesValue user, MakesValue target) =>
user -> target -> App Response
revokeApplicationAccessV6 user
user cid
cid = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig (ExplicitVersion 6) $ joinHttpPath ["oauth", "applications", cidStr]
submit "DELETE" req
revokeApplicationAccess :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> String -> App Response
revokeApplicationAccess :: forall caller target.
(HasCallStack, MakesValue caller, MakesValue target) =>
caller -> target -> String -> App Response
revokeApplicationAccess user
user cid
cid String
password = do
cidStr <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString cid
cid
req <- baseRequest user Brig Versioned $ joinHttpPath ["oauth", "applications", cidStr, "sessions"]
submit "DELETE" $ req & addJSONObject ["password" .= password]
registerUser :: (HasCallStack, MakesValue domain) => domain -> String -> String -> App Response
registerUser :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
registerUser domain
domain String
email String
inviteeCode = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned String
"register"
submit "POST" $
req
& addClientIP
& addJSONObject
[ "name" .= "Alice",
"email" .= email,
"password" .= defPassword,
"team_code" .= inviteeCode
]
activate :: (HasCallStack, MakesValue domain) => domain -> String -> String -> App Response
activate :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
activate domain
domain String
key String
code = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"activate"]
submit "GET" $
req
& addQueryParams [("key", key), ("code", code)]
activateSend :: (HasCallStack, MakesValue domain) => domain -> String -> Maybe String -> App Response
activateSend :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> String -> Maybe String -> App Response
activateSend domain
domain String
email Maybe String
locale = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"activate", String
"send"]
submit "POST" $ req & addJSONObject (["email" .= email] <> maybeToList (((.=) "locale") <$> locale))
acceptTeamInvitation :: (HasCallStack, MakesValue user) => user -> String -> Maybe String -> App Response
acceptTeamInvitation :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> String -> Maybe String -> App Response
acceptTeamInvitation user
user String
code Maybe String
mPw = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
"invitations", String
"accept"]
submit "POST" $ req & addJSONObject (["code" .= code] <> maybeToList (((.=) "password") <$> mPw))
listInvitations :: (HasCallStack, MakesValue user) => user -> String -> App Response
listInvitations :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
listInvitations user
user String
tid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"invitations"]
submit "GET" req
getInvitationByCode :: (HasCallStack, MakesValue user) => user -> String -> App Response
getInvitationByCode :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
getInvitationByCode user
user String
code = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
"invitations", String
"info"]
submit "GET" (req & addQueryParams [("code", code)])
passwordReset :: (HasCallStack, MakesValue domain) => domain -> String -> App Response
passwordReset :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
passwordReset domain
domain String
email = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned String
"password-reset"
submit "POST" $ req & addJSONObject ["email" .= email]
completePasswordReset :: (HasCallStack, MakesValue domain) => domain -> String -> String -> String -> App Response
completePasswordReset :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> String -> App Response
completePasswordReset domain
domain String
key String
code String
pw = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"password-reset", String
"complete"]
submit "POST" $ req & addJSONObject ["key" .= key, "code" .= code, "password" .= pw]
login :: (HasCallStack, MakesValue domain) => domain -> String -> String -> App Response
login :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
login domain
domain String
email String
password = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned String
"login"
submit "POST" $ req & addJSONObject ["email" .= email, "password" .= password] & addQueryParams [("persist", "true")]
loginWithSessionCookie :: (HasCallStack, MakesValue domain) => domain -> String -> String -> App Response
loginWithSessionCookie :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
loginWithSessionCookie domain
domain String
email String
password = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned String
"login"
submit "POST" $ req & addJSONObject ["email" .= email, "password" .= password]
updateEmail :: (HasCallStack, MakesValue user) => user -> String -> String -> String -> App Response
updateEmail :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> String -> App Response
updateEmail user
user String
email String
cookie String
token = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"access", String
"self", String
"email"]
submit "PUT" $ req & addJSONObject ["email" .= email] & setCookie cookie & addHeader "Authorization" ("Bearer " <> token)
upgradePersonalToTeam :: (HasCallStack, MakesValue user) => user -> String -> App Response
upgradePersonalToTeam :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
upgradePersonalToTeam user
user String
name = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"upgrade-personal-to-team"]
submit "POST" $ req & addJSONObject ["name" .= name, "icon" .= "default"]
postServiceWhitelist ::
( HasCallStack,
MakesValue user,
MakesValue tid,
MakesValue update
) =>
user ->
tid ->
update ->
App Response
postServiceWhitelist :: forall user domain otherUser.
(HasCallStack, MakesValue user, MakesValue domain,
MakesValue otherUser) =>
user -> domain -> otherUser -> App Response
postServiceWhitelist user
user tid
tid update
update = do
tidStr <- tid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString tid
tid
updateJson <- make update
req <-
baseRequest user Brig Versioned $
joinHttpPath
[ "teams",
tidStr,
"services",
"whitelist"
]
submit "POST" (addJSON updateJson req)
getDomainVerificationChallenge :: (HasCallStack, MakesValue domain) => domain -> String -> App Response
getDomainVerificationChallenge :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
getDomainVerificationChallenge domain
domain String
emailDomain = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"domain-verification", String
emailDomain, String
"challenges"]
submit "POST" req
verifyDomain :: (HasCallStack, MakesValue domain) => domain -> String -> String -> String -> App Response
verifyDomain :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> String -> App Response
verifyDomain domain
domain String
emailDomain String
challengeId String
challengeToken = do
req <-
domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath
[ String
"domain-verification",
String
emailDomain,
String
"challenges",
String
challengeId
]
submit "POST" $ req & addJSONObject ["challenge_token" .= challengeToken]
verifyDomainForTeam :: (HasCallStack, MakesValue user) => user -> String -> String -> String -> App Response
verifyDomainForTeam :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> String -> App Response
verifyDomainForTeam user
user String
emailDomain String
challengeId String
challengeToken = do
req <-
user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath
[ String
"domain-verification",
String
emailDomain,
String
"team",
String
"challenges",
String
challengeId
]
submit "POST" $ req & addJSONObject ["challenge_token" .= challengeToken]
authorizeTeam :: (HasCallStack, MakesValue user) => user -> String -> String -> App Response
authorizeTeam :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
authorizeTeam user
user String
emailDomain String
ownershipToken = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"domain-verification", String
emailDomain, String
"authorize-team"]
submit "POST" $ req & addJSONObject ["domain_ownership_token" .= ownershipToken]
updateDomainRedirect :: (HasCallStack, MakesValue domain) => domain -> Versioned -> String -> Maybe String -> Value -> App Response
updateDomainRedirect :: forall domain.
(HasCallStack, MakesValue domain) =>
domain
-> Versioned -> String -> Maybe String -> Value -> App Response
updateDomainRedirect domain
domain Versioned
apiVersion String
emailDomain Maybe String
mAuthToken Value
config = do
req <-
domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
apiVersion (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"domain-verification", String
emailDomain, String
"backend"]
let req' = case Maybe String
mAuthToken of
Just String
authToken -> String -> String -> Request -> Request
addHeader String
"Authorization" (String
"Bearer " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
authToken) Request
req
Maybe String
Nothing -> Request
req
submit "POST" $ req' & addJSON config
mkDomainRedirectBackend :: Versioned -> String -> String -> Value
mkDomainRedirectBackend :: Versioned -> String -> String -> Value
mkDomainRedirectBackend (ExplicitVersion Int
v) String
configUrl String
_webappUrl
| Int
v Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
8 =
[Pair] -> Value
object [String
"domain_redirect" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"backend", String
"backend_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
configUrl]
mkDomainRedirectBackend Versioned
_v String
configUrl String
webappUrl =
[Pair] -> Value
object
[ String
"domain_redirect" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"backend",
String
"backend" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [Pair] -> Value
object [String
"config_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
configUrl, String
"webapp_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
webappUrl]
]
updateTeamInvite :: (HasCallStack, MakesValue user, MakesValue payload) => user -> String -> payload -> App Response
updateTeamInvite :: forall user payload.
(HasCallStack, MakesValue user, MakesValue payload) =>
user -> String -> payload -> App Response
updateTeamInvite user
user String
emailDomain payload
payload = do
req <-
user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"domain-verification", String
emailDomain, String
"team"]
p <- make payload
submit "POST" $ req & addJSON p
getDomainRegistrationFromEmail :: (HasCallStack, MakesValue domain) => domain -> Versioned -> String -> App Response
getDomainRegistrationFromEmail :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> Versioned -> String -> App Response
getDomainRegistrationFromEmail domain
domain Versioned
version String
email = do
req <- domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest domain
domain Service
Brig Versioned
version (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"get-domain-registration"]
submit "POST" $ req & addJSONObject ["email" .= email]
getRegisteredDomainsByTeam :: (HasCallStack, MakesValue user) => user -> String -> App Response
getRegisteredDomainsByTeam :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> App Response
getRegisteredDomainsByTeam user
user String
tid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"registered-domains"]
submit "GET" req
deleteRegisteredTeamDomain :: (HasCallStack, MakesValue user) => user -> String -> String -> App Response
deleteRegisteredTeamDomain :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> String -> App Response
deleteRegisteredTeamDomain user
user String
tid String
registeredDomain = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"registered-domains", String
registeredDomain]
submit "DELETE" req
listTeamServiceProfilesByPrefix :: (MakesValue user) => user -> String -> Maybe String -> Bool -> Int -> App Response
listTeamServiceProfilesByPrefix :: forall user.
MakesValue user =>
user -> String -> Maybe String -> Bool -> Int -> App Response
listTeamServiceProfilesByPrefix user
user String
tid Maybe String
mPrefix Bool
filterDisabled Int
size = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"services", String
"whitelisted"]
submit "GET" $
req
& addQueryParams
( catMaybes
[ ("prefix",) <$> mPrefix,
if filterDisabled then Nothing else Just ("filter_disabled", "false"),
Just ("size", show size)
]
)
createUserGroup :: (MakesValue user, MakesValue newUserGroup) => user -> newUserGroup -> App Response
createUserGroup :: forall user newUserGroup.
(MakesValue user, MakesValue newUserGroup) =>
user -> newUserGroup -> App Response
createUserGroup user
user newUserGroup
newUserGroup = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups"]
body <- make newUserGroup
submit "POST" $ req & addJSON body
getUserGroup :: (MakesValue user) => user -> String -> App Response
getUserGroup :: forall user. MakesValue user => user -> String -> App Response
getUserGroup user
user String
gid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid]
submit "GET" req
getUserGroupWithChannels :: (MakesValue user) => user -> String -> App Response
getUserGroupWithChannels :: forall user. MakesValue user => user -> String -> App Response
getUserGroupWithChannels user
user String
gid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid]
submit "GET" $ req & addQueryParams [("include_channels", "true")]
updateUserGroupChannels :: (MakesValue user) => user -> String -> [String] -> App Response
updateUserGroupChannels :: forall user.
MakesValue user =>
user -> String -> [String] -> App Response
updateUserGroupChannels user
user String
gid [String]
convIds = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid, String
"channels"]
submit "PUT" $ req & addJSONObject ["channels" .= convIds]
data GetUserGroupsArgs = GetUserGroupsArgs
{ GetUserGroupsArgs -> Maybe String
q :: Maybe String,
GetUserGroupsArgs -> Maybe String
sortByKeys :: Maybe String,
GetUserGroupsArgs -> Maybe String
sortOrder :: Maybe String,
GetUserGroupsArgs -> Maybe Int
pSize :: Maybe Int,
GetUserGroupsArgs -> Maybe String
lastName :: Maybe String,
GetUserGroupsArgs -> Maybe String
lastCreatedAt :: Maybe String,
GetUserGroupsArgs -> Maybe String
lastId :: Maybe String,
GetUserGroupsArgs -> Bool
includeMemberCount :: Bool,
GetUserGroupsArgs -> Bool
includeChannels :: Bool
}
instance Default GetUserGroupsArgs where
def :: GetUserGroupsArgs
def =
GetUserGroupsArgs
{ q :: Maybe String
q = Maybe String
forall a. Maybe a
Nothing,
sortByKeys :: Maybe String
sortByKeys = Maybe String
forall a. Maybe a
Nothing,
sortOrder :: Maybe String
sortOrder = Maybe String
forall a. Maybe a
Nothing,
pSize :: Maybe Int
pSize = Maybe Int
forall a. Maybe a
Nothing,
lastName :: Maybe String
lastName = Maybe String
forall a. Maybe a
Nothing,
lastCreatedAt :: Maybe String
lastCreatedAt = Maybe String
forall a. Maybe a
Nothing,
lastId :: Maybe String
lastId = Maybe String
forall a. Maybe a
Nothing,
includeMemberCount :: Bool
includeMemberCount = Bool
False,
includeChannels :: Bool
includeChannels = Bool
False
}
getUserGroups :: (MakesValue user) => user -> GetUserGroupsArgs -> App Response
getUserGroups :: forall user.
MakesValue user =>
user -> GetUserGroupsArgs -> App Response
getUserGroups user
user GetUserGroupsArgs {Bool
Maybe Int
Maybe String
q :: GetUserGroupsArgs -> Maybe String
sortByKeys :: GetUserGroupsArgs -> Maybe String
sortOrder :: GetUserGroupsArgs -> Maybe String
pSize :: GetUserGroupsArgs -> Maybe Int
lastName :: GetUserGroupsArgs -> Maybe String
lastCreatedAt :: GetUserGroupsArgs -> Maybe String
lastId :: GetUserGroupsArgs -> Maybe String
includeMemberCount :: GetUserGroupsArgs -> Bool
includeChannels :: GetUserGroupsArgs -> Bool
q :: Maybe String
sortByKeys :: Maybe String
sortOrder :: Maybe String
pSize :: Maybe Int
lastName :: Maybe String
lastCreatedAt :: Maybe String
lastId :: Maybe String
includeMemberCount :: Bool
includeChannels :: Bool
..} = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned String
"user-groups"
submit "GET" $
req
& addQueryParams
( catMaybes
[ ("q",) <$> q,
("sort_by",) <$> sortByKeys,
("sort_order",) <$> sortOrder,
(("page_size",) . show) <$> pSize,
("last_seen_name",) <$> lastName,
("last_seen_created_at",) <$> lastCreatedAt,
("last_seen_id",) <$> lastId,
(if includeMemberCount then Just ("include_member_count", "true") else Nothing),
(if includeChannels then Just ("include_channels", "true") else Nothing)
]
)
updateUserGroup :: (MakesValue user, MakesValue userGroupUpdate) => user -> String -> userGroupUpdate -> App Response
updateUserGroup :: forall user userGroupUpdate.
(MakesValue user, MakesValue userGroupUpdate) =>
user -> String -> userGroupUpdate -> App Response
updateUserGroup user
user String
gid userGroupUpdate
userGroupUpdate = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid]
body <- make userGroupUpdate
submit "PUT" $ req & addJSON body
deleteUserGroup :: (MakesValue user) => user -> String -> App Response
deleteUserGroup :: forall user. MakesValue user => user -> String -> App Response
deleteUserGroup user
user String
gid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid]
submit "DELETE" req
addUserToGroup :: (MakesValue user) => user -> String -> String -> App Response
addUserToGroup :: forall user.
MakesValue user =>
user -> String -> String -> App Response
addUserToGroup user
user String
gid String
uid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid, String
"users", String
uid]
submit "POST" req
addUsersToGroup :: (MakesValue user) => user -> String -> [String] -> App Response
addUsersToGroup :: forall user.
MakesValue user =>
user -> String -> [String] -> App Response
addUsersToGroup user
user String
gid [String]
uids = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid, String
"users"]
submit "POST" $
req
& addJSONObject
[ "members" .= uids
]
updateUserGroupUsers :: (MakesValue user) => user -> String -> [String] -> App Response
updateUserGroupUsers :: forall user.
MakesValue user =>
user -> String -> [String] -> App Response
updateUserGroupUsers user
user String
gid [String]
uids = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid, String
"users"]
submit "PUT" $
req
& addJSONObject
[ "members" .= uids
]
removeUserFromGroup :: (MakesValue user) => user -> String -> String -> App Response
removeUserFromGroup :: forall user.
MakesValue user =>
user -> String -> String -> App Response
removeUserFromGroup user
user String
gid String
uid = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"user-groups", String
gid, String
"users", String
uid]
submit "DELETE" req
addTeamCollaborator :: (MakesValue owner, MakesValue collaborator, HasCallStack) => owner -> String -> collaborator -> [String] -> App Response
addTeamCollaborator :: forall owner collaborator.
(MakesValue owner, MakesValue collaborator, HasCallStack) =>
owner -> String -> collaborator -> [String] -> App Response
addTeamCollaborator owner
owner String
tid collaborator
collaborator [String]
permissions = do
req <- owner -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest owner
owner Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"collaborators"]
(_, collabId) <- objQid collaborator
submit "POST" $
req
& addJSONObject
[ "user" .= collabId,
"permissions" .= permissions
]
getAllTeamCollaborators :: (MakesValue owner) => owner -> String -> App Response
getAllTeamCollaborators :: forall user. MakesValue user => user -> String -> App Response
getAllTeamCollaborators owner
owner String
tid = do
req <- owner -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest owner
owner Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"collaborators"]
submit "GET" req
data NewApp = NewApp
{ NewApp -> String
name :: String,
NewApp -> Maybe [Value]
pict :: Maybe [Value],
NewApp -> Maybe [Value]
assets :: Maybe [Value],
NewApp -> Maybe Int
accentId :: Maybe Int,
NewApp -> Value
meta :: Value,
NewApp -> String
category :: String,
NewApp -> String
description :: String
}
instance Default NewApp where
def :: NewApp
def =
NewApp
{ name :: String
name = String
"",
pict :: Maybe [Value]
pict = Maybe [Value]
forall a. Maybe a
Nothing,
assets :: Maybe [Value]
assets = Maybe [Value]
forall a. Maybe a
Nothing,
accentId :: Maybe Int
accentId = Maybe Int
forall a. Maybe a
Nothing,
meta :: Value
meta = [Pair] -> Value
object [],
category :: String
category = String
"other",
description :: String
description = String
""
}
createApp :: (MakesValue creator) => creator -> String -> NewApp -> App Response
createApp :: forall creator.
MakesValue creator =>
creator -> String -> NewApp -> App Response
createApp creator
creator String
tid NewApp
new = do
req <- creator -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest creator
creator Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"apps"]
submit "POST" $
req
& addJSONObject
[ "app"
.= object
[ "name" .= new.name,
"picture" .= new.pict,
"assets" .= new.assets,
"accent_id" .= new.accentId,
"metadata" .= new.meta,
"category" .= new.category,
"description" .= new.description
],
"password" .= defPassword
]
getApp :: (MakesValue self) => self -> String -> String -> App Response
getApp :: forall user.
MakesValue user =>
user -> String -> String -> App Response
getApp self
self String
tid String
uid = do
req <- self -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest self
self Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"apps", String
uid]
submit "GET" req
refreshAppCookie :: (MakesValue u) => u -> String -> String -> App Response
refreshAppCookie :: forall user.
MakesValue user =>
user -> String -> String -> App Response
refreshAppCookie u
u String
tid String
appId = do
req <- u -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest u
u Service
Brig Versioned
Versioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"teams", String
tid, String
"apps", String
appId, String
"cookies"]
submit "POST" req
checkHandle :: (MakesValue user) => user -> String -> App Response
checkHandle :: forall user. MakesValue user => user -> String -> App Response
checkHandle user
self String
handle = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
self Service
Brig Versioned
Versioned ([String] -> String
joinHttpPath [String
"handles", String
handle])
submit "HEAD" req
checkHandles :: (MakesValue user) => user -> [String] -> App Response
checkHandles :: forall user. MakesValue user => user -> [String] -> App Response
checkHandles user
self [String]
handles = do
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
self Service
Brig Versioned
Versioned ([String] -> String
joinHttpPath [String
"handles"]) App Request -> (Request -> Request) -> App Request
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> [Pair] -> Request -> Request
addJSONObject [String
"handles" String -> [String] -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [String]
handles]
submit "POST" req