module API.BrigInternal where
import API.BrigCommon
import API.Common
import qualified Data.Aeson as Aeson
import Data.Aeson.Types (Pair)
import Data.Function
import Data.Maybe
import Testlib.Prelude
data CreateUser = CreateUser
{ CreateUser -> Maybe String
email :: Maybe String,
CreateUser -> Maybe String
password :: Maybe String,
CreateUser -> Maybe String
name :: Maybe String,
CreateUser -> Bool
team :: Bool,
CreateUser -> Bool
activate :: Bool,
CreateUser -> Maybe [String]
supportedProtocols :: Maybe [String]
}
instance Default CreateUser where
def :: CreateUser
def =
CreateUser
{ $sel:email:CreateUser :: Maybe String
email = Maybe String
forall a. Maybe a
Nothing,
$sel:password:CreateUser :: Maybe String
password = Maybe String
forall a. Maybe a
Nothing,
$sel:name:CreateUser :: Maybe String
name = Maybe String
forall a. Maybe a
Nothing,
$sel:team:CreateUser :: Bool
team = Bool
False,
$sel:activate:CreateUser :: Bool
activate = Bool
True,
$sel:supportedProtocols:CreateUser :: Maybe [String]
supportedProtocols = Maybe [String]
forall a. Maybe a
Nothing
}
createUser :: (HasCallStack, MakesValue domain) => domain -> CreateUser -> App Response
createUser :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> CreateUser -> App Response
createUser domain
domain CreateUser
cu = do
String
re <- App String
randomEmail
let Maybe String
email :: Maybe String = Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard CreateUser
cu.activate Maybe () -> String -> Maybe String
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
re CreateUser
cu.email
let password :: String
password = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
defPassword CreateUser
cu.password
name :: String
name = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"default" (CreateUser
cu.name Maybe String -> Maybe String -> Maybe String
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe String
email)
Request
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
"/i/users"
String -> Request -> App Response
submit String
"POST" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$
Request
req
Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject
( [String
"email" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
e | String
e <- Maybe String -> [String]
forall a. Maybe a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Maybe String
email]
[Pair] -> [Pair] -> [Pair]
forall a. Semigroup a => a -> a -> a
<> [ String
"name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
name,
String
"password" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
password,
String
"icon" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"default"
]
[Pair] -> [Pair] -> [Pair]
forall a. Semigroup a => a -> a -> a
<> [String
"supported_protocols" String -> [String] -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [String]
prots | [String]
prots <- Maybe [String] -> [[String]]
forall a. Maybe a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList CreateUser
cu.supportedProtocols]
[Pair] -> [Pair] -> [Pair]
forall a. Semigroup a => a -> a -> a
<> [ String
"team"
String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [Pair] -> Value
object
[ String
"name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"integration test team",
String
"icon" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"default"
]
| CreateUser
cu.team
]
)
getUsersId :: (HasCallStack, MakesValue domain) => domain -> [String] -> App Response
getUsersId :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> [String] -> App Response
getUsersId domain
domain [String]
ids = do
Request
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
"/i/users"
String -> Request -> App Response
submit String
"GET" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [(String, String)] -> Request -> Request
addQueryParams [(String
"ids", String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"," [String]
ids)]
data FedConn = FedConn
{ FedConn -> String
domain :: String,
FedConn -> String
searchStrategy :: String,
FedConn -> Maybe [String]
restriction :: Maybe [String]
}
deriving (FedConn -> FedConn -> Bool
(FedConn -> FedConn -> Bool)
-> (FedConn -> FedConn -> Bool) -> Eq FedConn
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FedConn -> FedConn -> Bool
== :: FedConn -> FedConn -> Bool
$c/= :: FedConn -> FedConn -> Bool
/= :: FedConn -> FedConn -> Bool
Eq, Eq FedConn
Eq FedConn =>
(FedConn -> FedConn -> Ordering)
-> (FedConn -> FedConn -> Bool)
-> (FedConn -> FedConn -> Bool)
-> (FedConn -> FedConn -> Bool)
-> (FedConn -> FedConn -> Bool)
-> (FedConn -> FedConn -> FedConn)
-> (FedConn -> FedConn -> FedConn)
-> Ord FedConn
FedConn -> FedConn -> Bool
FedConn -> FedConn -> Ordering
FedConn -> FedConn -> FedConn
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: FedConn -> FedConn -> Ordering
compare :: FedConn -> FedConn -> Ordering
$c< :: FedConn -> FedConn -> Bool
< :: FedConn -> FedConn -> Bool
$c<= :: FedConn -> FedConn -> Bool
<= :: FedConn -> FedConn -> Bool
$c> :: FedConn -> FedConn -> Bool
> :: FedConn -> FedConn -> Bool
$c>= :: FedConn -> FedConn -> Bool
>= :: FedConn -> FedConn -> Bool
$cmax :: FedConn -> FedConn -> FedConn
max :: FedConn -> FedConn -> FedConn
$cmin :: FedConn -> FedConn -> FedConn
min :: FedConn -> FedConn -> FedConn
Ord, Int -> FedConn -> ShowS
[FedConn] -> ShowS
FedConn -> String
(Int -> FedConn -> ShowS)
-> (FedConn -> String) -> ([FedConn] -> ShowS) -> Show FedConn
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FedConn -> ShowS
showsPrec :: Int -> FedConn -> ShowS
$cshow :: FedConn -> String
show :: FedConn -> String
$cshowList :: [FedConn] -> ShowS
showList :: [FedConn] -> ShowS
Show)
instance ToJSON FedConn where
toJSON :: FedConn -> Value
toJSON (FedConn String
d String
s Maybe [String]
r) =
[Pair] -> Value
Aeson.object
[ String
"domain" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
d,
String
"search_policy" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
s,
String
"restriction"
String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Value -> ([String] -> Value) -> Maybe [String] -> Value
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
([Pair] -> Value
Aeson.object [String
"tag" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"allow_all", String
"value" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Value
Aeson.Null])
( \[String]
teams ->
[Pair] -> Value
Aeson.object [String
"tag" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
"restrict_by_team", String
"value" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [String] -> Value
forall a. ToJSON a => a -> Value
Aeson.toJSON [String]
teams]
)
Maybe [String]
r
]
instance MakesValue FedConn where
make :: HasCallStack => FedConn -> App Value
make = Value -> App Value
forall a. a -> App a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Value -> App Value) -> (FedConn -> Value) -> FedConn -> App Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FedConn -> Value
forall a. ToJSON a => a -> Value
toJSON
createFedConn :: (HasCallStack, MakesValue dom, MakesValue fedConn) => dom -> fedConn -> App Response
createFedConn :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
createFedConn dom
dom fedConn
fedConn = do
App Response -> (Response -> App Response) -> App Response
forall a.
HasCallStack =>
App Response -> (Response -> App a) -> App a
bindResponse (dom -> fedConn -> App Response
forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
createFedConn' dom
dom fedConn
fedConn) ((Response -> App Response) -> App Response)
-> (Response -> App Response) -> App Response
forall a b. (a -> b) -> a -> b
$ \Response
res -> do
Response
res.status Int -> (Int, Int) -> App ()
forall a. (MakesValue a, HasCallStack) => a -> (Int, Int) -> App ()
`shouldMatchRange` (Int
200, Int
299)
Response -> App Response
forall a. a -> App a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Response
res
createFedConn' :: (HasCallStack, MakesValue dom, MakesValue fedConn) => dom -> fedConn -> App Response
createFedConn' :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
createFedConn' dom
dom fedConn
fedConn = do
Request
req <- dom -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest dom
dom Service
Brig Versioned
Unversioned String
"/i/federation/remotes"
Value
conn <- fedConn -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make fedConn
fedConn
String -> Request -> App Response
submit String
"POST" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& Value -> Request -> Request
forall a. ToJSON a => a -> Request -> Request
addJSON Value
conn
readFedConns :: (HasCallStack, MakesValue dom) => dom -> App Response
readFedConns :: forall dom. (HasCallStack, MakesValue dom) => dom -> App Response
readFedConns dom
dom = do
App Response -> (Response -> App Response) -> App Response
forall a.
HasCallStack =>
App Response -> (Response -> App a) -> App a
bindResponse (dom -> App Response
forall dom. (HasCallStack, MakesValue dom) => dom -> App Response
readFedConns' dom
dom) ((Response -> App Response) -> App Response)
-> (Response -> App Response) -> App Response
forall a b. (a -> b) -> a -> b
$ \Response
res -> do
Response
res.status Int -> (Int, Int) -> App ()
forall a. (MakesValue a, HasCallStack) => a -> (Int, Int) -> App ()
`shouldMatchRange` (Int
200, Int
299)
Response -> App Response
forall a. a -> App a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Response
res
readFedConns' :: (HasCallStack, MakesValue dom) => dom -> App Response
readFedConns' :: forall dom. (HasCallStack, MakesValue dom) => dom -> App Response
readFedConns' dom
dom = do
Request
req <- dom -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest dom
dom Service
Brig Versioned
Unversioned String
"/i/federation/remotes"
String -> Request -> App Response
submit String
"GET" Request
req
updateFedConn :: (HasCallStack, MakesValue owndom, MakesValue fedConn) => owndom -> String -> fedConn -> App Response
updateFedConn :: forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
updateFedConn owndom
owndom String
dom fedConn
fedConn = do
App Response -> (Response -> App Response) -> App Response
forall a.
HasCallStack =>
App Response -> (Response -> App a) -> App a
bindResponse (owndom -> String -> fedConn -> App Response
forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
updateFedConn' owndom
owndom String
dom fedConn
fedConn) ((Response -> App Response) -> App Response)
-> (Response -> App Response) -> App Response
forall a b. (a -> b) -> a -> b
$ \Response
res -> do
Response
res.status Int -> (Int, Int) -> App ()
forall a. (MakesValue a, HasCallStack) => a -> (Int, Int) -> App ()
`shouldMatchRange` (Int
200, Int
299)
Response -> App Response
forall a. a -> App a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Response
res
updateFedConn' :: (HasCallStack, MakesValue owndom, MakesValue fedConn) => owndom -> String -> fedConn -> App Response
updateFedConn' :: forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
updateFedConn' owndom
owndom String
dom fedConn
fedConn = do
Request
req <- owndom -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest owndom
owndom Service
Brig Versioned
Unversioned (String
"/i/federation/remotes/" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
dom)
Value
conn <- fedConn -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make fedConn
fedConn
String -> Request -> App Response
submit String
"PUT" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Value -> Request -> Request
forall a. ToJSON a => a -> Request -> Request
addJSON Value
conn Request
req
registerOAuthClient :: (HasCallStack, MakesValue user, MakesValue name, MakesValue url) => user -> name -> url -> App Response
registerOAuthClient :: forall user name url.
(HasCallStack, MakesValue user, MakesValue name, MakesValue url) =>
user -> name -> url -> App Response
registerOAuthClient user
user name
name url
url = do
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned String
"i/oauth/clients"
String
applicationName <- name -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString name
name
String
redirectUrl <- url -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString url
url
String -> Request -> App Response
submit String
"POST" (Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [String
"application_name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
applicationName, String
"redirect_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
redirectUrl])
getOAuthClient :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> App Response
getOAuthClient :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
getOAuthClient user
user cid
cid = do
String
clientId <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId cid
cid
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"i/oauth/clients/" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
clientId
String -> Request -> App Response
submit String
"GET" Request
req
updateOAuthClient :: (HasCallStack, MakesValue user, MakesValue cid, MakesValue name, MakesValue url) => user -> cid -> name -> url -> App Response
updateOAuthClient :: forall user cid name url.
(HasCallStack, MakesValue user, MakesValue cid, MakesValue name,
MakesValue url) =>
user -> cid -> name -> url -> App Response
updateOAuthClient user
user cid
cid name
name url
url = do
String
clientId <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId cid
cid
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"i/oauth/clients/" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
clientId
String
applicationName <- name -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString name
name
String
redirectUrl <- url -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString url
url
String -> Request -> App Response
submit String
"PUT" (Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [String
"application_name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
applicationName, String
"redirect_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
redirectUrl])
deleteOAuthClient :: (HasCallStack, MakesValue user, MakesValue cid) => user -> cid -> App Response
deleteOAuthClient :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
deleteOAuthClient user
user cid
cid = do
String
clientId <- cid -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId cid
cid
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"i/oauth/clients/" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
clientId
String -> Request -> App Response
submit String
"DELETE" Request
req
getInvitationCode :: (HasCallStack, MakesValue user, MakesValue inv) => user -> inv -> App Response
getInvitationCode :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
getInvitationCode user
user inv
inv = do
String
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
user -> String -> inv -> App Response
forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
getInvitationCodeForTeam user
user String
tid inv
inv
getInvitationCodeForTeam :: (HasCallStack, MakesValue domain, MakesValue inv) => domain -> String -> inv -> App Response
getInvitationCodeForTeam :: forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
getInvitationCodeForTeam domain
domain String
tid inv
inv = do
String
invId <- inv
inv inv -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"id" 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
Request
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
"i/teams/invitation-code?team=" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
tid String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"&invitation_id=" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
invId
String -> Request -> App Response
submit String
"GET" Request
req
refreshIndex :: (HasCallStack, MakesValue domain) => domain -> App ()
refreshIndex :: forall domain.
(HasCallStack, MakesValue domain) =>
domain -> App ()
refreshIndex domain
domain = do
Request
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
"i/index/refresh"
Response
res <- String -> Request -> App Response
submit String
"POST" Request
req
Response
res.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
addFederationRemoteTeam :: (HasCallStack, MakesValue domain, MakesValue remoteDomain, MakesValue team) => domain -> remoteDomain -> team -> App ()
addFederationRemoteTeam :: forall domain remoteDomain team.
(HasCallStack, MakesValue domain, MakesValue remoteDomain,
MakesValue team) =>
domain -> remoteDomain -> team -> App ()
addFederationRemoteTeam domain
domain remoteDomain
remoteDomain team
team = do
App ByteString -> App ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (App ByteString -> App ()) -> App ByteString -> App ()
forall a b. (a -> b) -> a -> b
$ domain -> remoteDomain -> team -> App Response
forall user name url.
(HasCallStack, MakesValue user, MakesValue name, MakesValue url) =>
user -> name -> url -> App Response
addFederationRemoteTeam' domain
domain remoteDomain
remoteDomain team
team App Response -> (Response -> App ByteString) -> App ByteString
forall a b. App a -> (a -> App b) -> App b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= HasCallStack => Int -> Response -> App ByteString
Int -> Response -> App ByteString
getBody Int
200
addFederationRemoteTeam' :: (HasCallStack, MakesValue domain, MakesValue remoteDomain, MakesValue team) => domain -> remoteDomain -> team -> App Response
addFederationRemoteTeam' :: forall user name url.
(HasCallStack, MakesValue user, MakesValue name, MakesValue url) =>
user -> name -> url -> App Response
addFederationRemoteTeam' domain
domain remoteDomain
remoteDomain team
team = do
String
d <- remoteDomain -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString remoteDomain
remoteDomain
Value
t <- team -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make team
team
Request
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] -> String
joinHttpPath [String
"i", String
"federation", String
"remotes", String
d, String
"teams"]
String -> Request -> App Response
submit String
"POST" (Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [String
"team_id" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Value
t])
getFederationRemoteTeams :: (HasCallStack, MakesValue domain, MakesValue remoteDomain) => domain -> remoteDomain -> App Response
getFederationRemoteTeams :: forall dom fedConn.
(HasCallStack, MakesValue dom, MakesValue fedConn) =>
dom -> fedConn -> App Response
getFederationRemoteTeams domain
domain remoteDomain
remoteDomain = do
String
d <- remoteDomain -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString remoteDomain
remoteDomain
Request
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] -> String
joinHttpPath [String
"i", String
"federation", String
"remotes", String
d, String
"teams"]
String -> Request -> App Response
submit String
"GET" Request
req
deleteFederationRemoteTeam :: (HasCallStack, MakesValue domain, MakesValue remoteDomain, MakesValue team) => domain -> remoteDomain -> team -> App ()
deleteFederationRemoteTeam :: forall domain remoteDomain team.
(HasCallStack, MakesValue domain, MakesValue remoteDomain,
MakesValue team) =>
domain -> remoteDomain -> team -> App ()
deleteFederationRemoteTeam domain
domain remoteDomain
remoteDomain team
team = do
String
d <- remoteDomain -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString remoteDomain
remoteDomain
String
t <- team -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
asString team
team
Request
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] -> String
joinHttpPath [String
"i", String
"federation", String
"remotes", String
d, String
"teams", String
t]
Response
res <- String -> Request -> App Response
submit String
"DELETE" Request
req
Response
res.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
getConnStatusForUsers :: (HasCallStack, MakesValue users) => users -> Domain -> App Response
getConnStatusForUsers :: forall users.
(HasCallStack, MakesValue users) =>
users -> Domain -> App Response
getConnStatusForUsers users
users Domain
domain = do
[Value]
usersList <-
users -> App [Value]
forall a. (HasCallStack, MakesValue a) => a -> App [Value]
asList users
users App [Value] -> ([Value] -> App [Value]) -> App [Value]
forall a b. App a -> (a -> App b) -> App b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \[Value]
us -> do
[Value]
dom <- [Value]
us [Value] -> (Value -> App Value) -> App [Value]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
`for` (Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"qualified_id.domain")
[Value]
dom [Value] -> (Value -> App ()) -> App ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
`for_` (Value -> App Value -> App ()
forall a b.
(MakesValue a, MakesValue b, HasCallStack) =>
a -> b -> App ()
`shouldMatch` Domain -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make Domain
domain)
[Value]
us [Value] -> (Value -> App Value) -> App [Value]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
`for` (Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"id")
Value
usersJSON <- [Value] -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make [Value]
usersList
HasCallStack => [Pair] -> Domain -> App Response
[Pair] -> Domain -> App Response
getConnStatusInternal [String
"from" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Value
usersJSON] Domain
domain
getConnStatusInternal :: (HasCallStack) => [Pair] -> Domain -> App Response
getConnStatusInternal :: HasCallStack => [Pair] -> Domain -> App Response
getConnStatusInternal [Pair]
body Domain
dom = do
Request
req <- Domain -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest Domain
dom Service
Brig Versioned
Unversioned do
[String] -> String
joinHttpPath [String
"i", String
"users", String
"connections-status", String
"v2"]
String -> Request -> App Response
submit String
"POST" do
Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [Pair]
body
getProviderActivationCodeInternal ::
(HasCallStack, MakesValue dom) =>
dom ->
String ->
App Response
getProviderActivationCodeInternal :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getProviderActivationCodeInternal dom
dom String
email = do
Value
d <- dom -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make dom
dom
Request
req <-
Value -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest Value
d Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$
[String] -> String
joinHttpPath [String
"i", String
"provider", String
"activation-code"]
String -> Request -> App Response
submit String
"GET" ([(String, String)] -> Request -> Request
addQueryParams [(String
"email", String
email)] Request
req)
addClient ::
(HasCallStack, MakesValue user) =>
user ->
AddClient ->
App Response
addClient :: forall user.
(HasCallStack, MakesValue user) =>
user -> AddClient -> App Response
addClient user
user AddClient
args = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ String
"/i/clients/" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
uid
[Pair]
val <- AddClient -> App [Pair]
mkAddClientValue AddClient
args
String -> Request -> App Response
submit String
"POST" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [Pair]
val
getClientsFull :: (HasCallStack, MakesValue users, MakesValue uid) => uid -> users -> App Response
getClientsFull :: forall users uid.
(HasCallStack, MakesValue users, MakesValue uid) =>
uid -> users -> App Response
getClientsFull uid
user users
users = do
Value
val <- users -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make users
users
uid -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest uid
user Service
Brig Versioned
Unversioned do [String] -> String
joinHttpPath [String
"i", String
"clients", String
"full"]
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
"POST"
(Request -> App Response)
-> (Request -> Request) -> Request -> App Response
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Pair] -> Request -> Request
addJSONObject [String
"users" String -> Value -> Pair
forall a. ToJSON a => String -> a -> Pair
.= Value
val]
getEJPDInfo :: (HasCallStack, MakesValue dom) => dom -> [String] -> String -> App Response
getEJPDInfo :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> [String] -> String -> App Response
getEJPDInfo dom
dom [String]
handles String
mode = do
Request
req <- dom -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
rawBaseRequest dom
dom Service
Brig Versioned
Unversioned String
"/i/ejpd-request"
let query :: [(String, String)]
query = case String
mode of
String
"" -> []
String
"include_contacts" -> [(String
"include_contacts", String
"true")]
String
bad -> String -> [(String, String)]
forall a. HasCallStack => String -> a
error (String -> [(String, String)]) -> String -> [(String, String)]
forall a b. (a -> b) -> a -> b
$ ShowS
forall a. Show a => a -> String
show String
bad
String -> Request -> App Response
submit String
"POST" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [String
"EJPDRequest" String -> [String] -> Pair
forall a. ToJSON a => String -> a -> Pair
.= [String]
handles] Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [(String, String)] -> Request -> Request
addQueryParams [(String, String)]
query
getVerificationCode :: (HasCallStack, MakesValue user) => user -> String -> App Response
getVerificationCode :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getVerificationCode user
user String
action = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
String
domain <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objDomain user
user
Request
req <- String -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest String
domain Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"i", String
"users", String
uid, String
"verification-code", String
action]
String -> Request -> App Response
submit String
"GET" Request
req
getFeatureForUser :: (HasCallStack, MakesValue user) => user -> String -> App Response
getFeatureForUser :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getFeatureForUser user
user String
featureName = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"i", String
"users", String
uid, String
"features", String
featureName]
String -> Request -> App Response
submit String
"GET" Request
req
putFeatureForUser ::
(HasCallStack, MakesValue user, MakesValue config) =>
user ->
String ->
config ->
App Response
putFeatureForUser :: forall owndom fedConn.
(HasCallStack, MakesValue owndom, MakesValue fedConn) =>
owndom -> String -> fedConn -> App Response
putFeatureForUser user
user String
featureName config
config = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"i", String
"users", String
uid, String
"features", String
featureName]
Value
configValue <- config -> App Value
forall a. (MakesValue a, HasCallStack) => a -> App Value
make config
config
String -> Request -> App Response
submit String
"PUT" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& Value -> Request -> Request
forall a. ToJSON a => a -> Request -> Request
addJSON Value
configValue
deleteFeatureForUser :: (HasCallStack, MakesValue user) => user -> String -> App Response
deleteFeatureForUser :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
deleteFeatureForUser user
user String
featureName = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned (String -> App Request) -> String -> App Request
forall a b. (a -> b) -> a -> b
$ [String] -> String
joinHttpPath [String
"i", String
"users", String
uid, String
"features", String
featureName]
String -> Request -> App Response
submit String
"DELETE" Request
req
createOAuthClient :: (HasCallStack, MakesValue user) => user -> String -> String -> App Response
createOAuthClient :: forall user.
(HasCallStack, MakesValue user) =>
user -> String -> String -> App Response
createOAuthClient user
user String
name String
url = do
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned String
"i/oauth/clients"
String -> Request -> App Response
submit String
"POST" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject [String
"application_name" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
name, String
"redirect_url" String -> String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= String
url]
getInvitationByEmail :: (HasCallStack, MakesValue domain) => domain -> String -> App Response
getInvitationByEmail :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getInvitationByEmail domain
domain String
email = do
Request
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
"i/teams/invitations/by-email"
String -> Request -> App Response
submit String
"GET" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [(String, String)] -> Request -> Request
addQueryParams [(String
"email", String
email)]
getActivationCode :: (HasCallStack, MakesValue domain) => domain -> String -> App Response
getActivationCode :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getActivationCode domain
domain String
email = do
Request
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
"i/users/activation-code"
String -> Request -> App Response
submit String
"GET" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [(String, String)] -> Request -> Request
addQueryParams [(String
"email", String
email)]
getPasswordResetCode :: (HasCallStack, MakesValue domain) => domain -> String -> App Response
getPasswordResetCode :: forall dom.
(HasCallStack, MakesValue dom) =>
dom -> String -> App Response
getPasswordResetCode domain
domain String
email = do
Request
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
"i/users/password-reset-code"
String -> Request -> App Response
submit String
"GET" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$ Request
req Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [(String, String)] -> Request -> Request
addQueryParams [(String
"email", String
email)]
data PutSSOId = PutSSOId
{ PutSSOId -> Maybe String
scimExternalId :: Maybe String,
PutSSOId -> Maybe String
subject :: Maybe String,
PutSSOId -> Maybe String
tenant :: Maybe String
}
instance Default PutSSOId where
def :: PutSSOId
def =
PutSSOId
{ $sel:scimExternalId:PutSSOId :: Maybe String
scimExternalId = Maybe String
forall a. Maybe a
Nothing,
$sel:subject:PutSSOId :: Maybe String
subject = Maybe String
forall a. Maybe a
Nothing,
$sel:tenant:PutSSOId :: Maybe String
tenant = Maybe String
forall a. Maybe a
Nothing
}
putSSOId :: (HasCallStack, MakesValue user) => user -> PutSSOId -> App Response
putSSOId :: forall user.
(HasCallStack, MakesValue user) =>
user -> PutSSOId -> App Response
putSSOId user
user PutSSOId
args = do
String
uid <- user -> App String
forall a. (HasCallStack, MakesValue a) => a -> App String
objId user
user
Request
req <- user -> Service -> Versioned -> String -> App Request
forall user.
(HasCallStack, MakesValue user) =>
user -> Service -> Versioned -> String -> App Request
baseRequest user
user Service
Brig Versioned
Unversioned ([String] -> String
joinHttpPath [String
"i", String
"users", String
uid, String
"sso-id"])
String -> Request -> App Response
submit String
"PUT" (Request -> App Response) -> Request -> App Response
forall a b. (a -> b) -> a -> b
$
Request
req
Request -> (Request -> Request) -> Request
forall a b. a -> (a -> b) -> b
& [Pair] -> Request -> Request
addJSONObject
[ String
"scim_external_id" String -> Maybe String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= PutSSOId
args.scimExternalId,
String
"subject" String -> Maybe String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= PutSSOId
args.subject,
String
"tenant" String -> Maybe String -> Pair
forall a. ToJSON a => String -> a -> Pair
.= PutSSOId
args.tenant
]