module Wire.GalleyAPIAccess.Rpc where
import Bilge hiding (head, options, requestId)
import Data.Aeson hiding (json)
import Data.ByteString.Conversion
import Data.ByteString.Lazy qualified as BL
import Data.Coerce (coerce)
import Data.Currency qualified as Currency
import Data.Id
import Data.Json.Util (UTCTimeMillis)
import Data.Qualified
import Imports
import Network.HTTP.Client qualified as HTTP
import Network.HTTP.Types qualified as HTTP
import Network.HTTP.Types.Method
import Network.HTTP.Types.Status
import Network.Wai.Utilities.Error qualified as Wai
import Polysemy
import Polysemy.Error
import Polysemy.Input
import Polysemy.TinyLog
import Servant.API (toHeader)
import System.Logger.Message
import Util.Options
import Wire.API.Conversation hiding (Member)
import Wire.API.Routes.Internal.Brig.EJPD (EJPDConvInfo)
import Wire.API.Routes.Internal.Galley.TeamsIntra qualified as Team
import Wire.API.Routes.Version
import Wire.API.Team
import Wire.API.Team.Conversation qualified as Conv
import Wire.API.Team.Feature
import Wire.API.Team.LegalHold
import Wire.API.Team.Member as Member
import Wire.API.Team.Role
import Wire.API.Team.SearchVisibility
import Wire.GalleyAPIAccess (GalleyAPIAccess (..), MLSOneToOneEstablished (..), ShowOrHideInvitationUrl (..))
import Wire.ParseException
import Wire.Rpc
interpretGalleyAPIAccessToRpc ::
( Member (Error ParseException) r,
Member Rpc r,
Member TinyLog r
) =>
Set Version ->
Endpoint ->
Sem (GalleyAPIAccess ': r) a ->
Sem r a
interpretGalleyAPIAccessToRpc :: forall (r :: EffectRow) a.
(Member (Error ParseException) r, Member Rpc r,
Member TinyLog r) =>
Set Version -> Endpoint -> Sem (GalleyAPIAccess : r) a -> Sem r a
interpretGalleyAPIAccessToRpc Set Version
disabledVersions Endpoint
galleyEndpoint =
let v :: Version
v = Version -> Maybe Version -> Version
forall a. a -> Maybe a -> a
fromMaybe ([Char] -> Version
forall a. HasCallStack => [Char] -> a
error [Char]
"service can't run with undefined API version") (Maybe Version -> Version) -> Maybe Version -> Version
forall a b. (a -> b) -> a -> b
$ Set Version -> Maybe Version
maxAvailableVersion Set Version
disabledVersions
in (forall (rInitial :: EffectRow) x.
GalleyAPIAccess (Sem rInitial) x -> Sem r x)
-> Sem (GalleyAPIAccess : r) a -> Sem r a
forall (e :: (* -> *) -> * -> *) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret ((forall (rInitial :: EffectRow) x.
GalleyAPIAccess (Sem rInitial) x -> Sem r x)
-> Sem (GalleyAPIAccess : r) a -> Sem r a)
-> (forall (rInitial :: EffectRow) x.
GalleyAPIAccess (Sem rInitial) x -> Sem r x)
-> Sem (GalleyAPIAccess : r) a
-> Sem r a
forall a b. (a -> b) -> a -> b
$
Endpoint -> Sem (Input Endpoint : r) x -> Sem r x
forall i (r :: EffectRow) a. i -> Sem (Input i : r) a -> Sem r a
runInputConst Endpoint
galleyEndpoint (Sem (Input Endpoint : r) x -> Sem r x)
-> (GalleyAPIAccess (Sem rInitial) x -> Sem (Input Endpoint : r) x)
-> GalleyAPIAccess (Sem rInitial) x
-> Sem r x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
CreateSelfConv UserId
id' -> Version -> UserId -> Sem (Input Endpoint : r) ()
forall (r :: EffectRow).
(Member Rpc r, Member TinyLog r, Member (Input Endpoint) r) =>
Version -> UserId -> Sem r ()
createSelfConv Version
v UserId
id'
GetConv UserId
id' Local ConvId
id'' -> Version
-> UserId
-> Local ConvId
-> Sem (Input Endpoint : r) (Maybe Conversation)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
Version -> UserId -> Local ConvId -> Sem r (Maybe Conversation)
getConv Version
v UserId
id' Local ConvId
id''
GetTeamConv UserId
id' TeamId
id'' ConvId
id'2 -> Version
-> UserId
-> TeamId
-> ConvId
-> Sem (Input Endpoint : r) (Maybe TeamConversation)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
Version
-> UserId -> TeamId -> ConvId -> Sem r (Maybe TeamConversation)
getTeamConv Version
v UserId
id' TeamId
id'' ConvId
id'2
NewClient UserId
id' ClientId
ci -> UserId -> ClientId -> Sem (Input Endpoint : r) ()
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> ClientId -> Sem r ()
newClient UserId
id' ClientId
ci
CheckUserCanJoinTeam TeamId
id' -> TeamId -> Sem (Input Endpoint : r) (Maybe Error)
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (Maybe Error)
checkUserCanJoinTeam TeamId
id'
AddTeamMember UserId
id' TeamId
id'' Maybe (UserId, UTCTimeMillis)
a Role
b -> UserId
-> TeamId
-> Maybe (UserId, UTCTimeMillis)
-> Role
-> Sem (Input Endpoint : r) Bool
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId
-> TeamId -> Maybe (UserId, UTCTimeMillis) -> Role -> Sem r Bool
addTeamMember UserId
id' TeamId
id'' Maybe (UserId, UTCTimeMillis)
a Role
b
CreateTeam UserId
id' NewTeam
bnt TeamId
id'' -> UserId -> NewTeam -> TeamId -> Sem (Input Endpoint : r) ()
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> NewTeam -> TeamId -> Sem r ()
createTeam UserId
id' NewTeam
bnt TeamId
id''
GetTeamMember UserId
id' TeamId
id'' -> UserId -> TeamId -> Sem (Input Endpoint : r) (Maybe TeamMember)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> TeamId -> Sem r (Maybe TeamMember)
getTeamMember UserId
id' TeamId
id''
GetTeamMembers TeamId
id' -> TeamId -> Sem (Input Endpoint : r) (TeamMemberList' 'Required)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (TeamMemberList' 'Required)
getTeamMembers TeamId
id'
GetTeamId UserId
id' -> UserId -> Sem (Input Endpoint : r) (Maybe TeamId)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> Sem r (Maybe TeamId)
getTeamId UserId
id'
GetTeam TeamId
id' -> TeamId -> Sem (Input Endpoint : r) TeamData
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamData
getTeam TeamId
id'
GetTeamName TeamId
id' -> TeamId -> Sem (Input Endpoint : r) TeamName
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamName
getTeamName TeamId
id'
GetTeamLegalHoldStatus TeamId
id' -> TeamId
-> Sem (Input Endpoint : r) (LockableFeature LegalholdConfig)
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (LockableFeature LegalholdConfig)
getTeamLegalHoldStatus TeamId
id'
GetTeamSearchVisibility TeamId
id' -> TeamId -> Sem (Input Endpoint : r) TeamSearchVisibility
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamSearchVisibility
getTeamSearchVisibility TeamId
id'
GetFeatureConfigForTeam TeamId
tid -> TeamId -> Sem (Input Endpoint : r) (LockableFeature feature)
forall feature (r :: EffectRow).
(IsFeatureConfig feature, Typeable feature, Member TinyLog r,
Member Rpc r, Member (Error ParseException) r) =>
TeamId -> Sem (Input Endpoint : r) (LockableFeature feature)
getFeatureConfigForTeam TeamId
tid
GetUserLegalholdStatus Local UserId
id' TeamId
tid -> Local UserId
-> TeamId -> Sem (Input Endpoint : r) UserLegalHoldStatusResponse
forall (r :: EffectRow).
(Member TinyLog r, Member (Error ParseException) r,
Member Rpc r) =>
Local UserId
-> TeamId -> Sem (Input Endpoint : r) UserLegalHoldStatusResponse
getUserLegalholdStatus Local UserId
id' TeamId
tid
ChangeTeamStatus TeamId
id' TeamStatus
ts Maybe Alpha
m_al -> TeamId -> TeamStatus -> Maybe Alpha -> Sem (Input Endpoint : r) ()
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> TeamStatus -> Maybe Alpha -> Sem r ()
changeTeamStatus TeamId
id' TeamStatus
ts Maybe Alpha
m_al
MemberIsTeamOwner TeamId
id' UserId
id'' -> TeamId -> UserId -> Sem (Input Endpoint : r) Bool
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
TeamId -> UserId -> Sem r Bool
memberIsTeamOwner TeamId
id' UserId
id''
GetAllTeamFeaturesForUser Maybe UserId
m_id' -> Maybe UserId
-> Sem (Input Endpoint : r) (NP LockableFeature Features)
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
Maybe UserId -> Sem r (NP LockableFeature Features)
getAllTeamFeaturesForUser Maybe UserId
m_id'
GetVerificationCodeEnabled TeamId
id' -> TeamId -> Sem (Input Endpoint : r) Bool
forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r Bool
getVerificationCodeEnabled TeamId
id'
GetExposeInvitationURLsToTeamAdmin TeamId
id' -> TeamId -> Sem (Input Endpoint : r) ShowOrHideInvitationUrl
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r,
Member (Error ParseException) r, Member TinyLog r) =>
TeamId -> Sem r ShowOrHideInvitationUrl
getTeamExposeInvitationURLsToTeamAdmin TeamId
id'
IsMLSOne2OneEstablished Local UserId
lusr Qualified UserId
qother -> Local UserId
-> Qualified UserId
-> Sem (Input Endpoint : r) MLSOneToOneEstablished
forall (r :: EffectRow).
(Member (Error ParseException) r, Member (Input Endpoint) r,
Member Rpc r, Member TinyLog r) =>
Local UserId -> Qualified UserId -> Sem r MLSOneToOneEstablished
checkMLSOne2OneEstablished Local UserId
lusr Qualified UserId
qother
UnblockConversation Local UserId
lusr Maybe ConnId
mconn Qualified ConvId
qcnv -> Version
-> Local UserId
-> Maybe ConnId
-> Qualified ConvId
-> Sem (Input Endpoint : r) Conversation
forall (r :: EffectRow).
(Member (Error ParseException) r, Member (Input Endpoint) r,
Member Rpc r, Member TinyLog r) =>
Version
-> Local UserId
-> Maybe ConnId
-> Qualified ConvId
-> Sem r Conversation
unblockConversation Version
v Local UserId
lusr Maybe ConnId
mconn Qualified ConvId
qcnv
GetEJPDConvInfo UserId
uid -> UserId -> Sem (Input Endpoint : r) [EJPDConvInfo]
forall (r :: EffectRow).
(Member TinyLog r, Member (Error ParseException) r,
Member (Input Endpoint) r, Member Rpc r) =>
UserId -> Sem r [EJPDConvInfo]
getEJPDConvInfo UserId
uid
getUserLegalholdStatus ::
( Member TinyLog r,
Member (Error ParseException) r,
Member Rpc r
) =>
Local UserId ->
TeamId ->
Sem (Input Endpoint : r) UserLegalHoldStatusResponse
getUserLegalholdStatus :: forall (r :: EffectRow).
(Member TinyLog r, Member (Error ParseException) r,
Member Rpc r) =>
Local UserId
-> TeamId -> Sem (Input Endpoint : r) UserLegalHoldStatusResponse
getUserLegalholdStatus Local UserId
luid TeamId
tid = do
(Msg -> Msg) -> Sem (Input Endpoint : r) ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem (Input Endpoint : r) ())
-> (Msg -> Msg) -> Sem (Input Endpoint : r) ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"get legalhold user status")
Text
-> Response (Maybe ByteString)
-> Sem (Input Endpoint : r) UserLegalHoldStatusResponse
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" (Response (Maybe ByteString)
-> Sem (Input Endpoint : r) UserLegalHoldStatusResponse)
-> Sem (Input Endpoint : r) (Response (Maybe ByteString))
-> Sem (Input Endpoint : r) UserLegalHoldStatusResponse
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Request -> Request)
-> Sem (Input Endpoint : r) (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest do
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"legalhold", UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' (Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
luid)]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser (Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
luid)
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
galleyRequest :: (Member Rpc r, Member (Input Endpoint) r) => (Request -> Request) -> Sem r (Response (Maybe LByteString))
galleyRequest :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req = do
Endpoint
ep <- Sem r Endpoint
forall i (r :: EffectRow). Member (Input i) r => Sem r i
input
ServiceName
-> Endpoint
-> (Request -> Request)
-> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
Member Rpc r =>
ServiceName
-> Endpoint
-> (Request -> Request)
-> Sem r (Response (Maybe ByteString))
rpcWithRetries ServiceName
"galley" Endpoint
ep Request -> Request
req
createSelfConv ::
( Member Rpc r,
Member TinyLog r,
Member (Input Endpoint) r
) =>
Version ->
UserId ->
Sem r ()
createSelfConv :: forall (r :: EffectRow).
(Member Rpc r, Member TinyLog r, Member (Input Endpoint) r) =>
Version -> UserId -> Sem r ()
createSelfConv Version
v UserId
u = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Creating self conversation")
Sem r (Response (Maybe ByteString)) -> Sem r ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem r (Response (Maybe ByteString)) -> Sem r ())
-> Sem r (Response (Maybe ByteString)) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest ((Request -> Request) -> Sem r (Response (Maybe ByteString)))
-> (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall a b. (a -> b) -> a -> b
$
StdMethod -> Request -> Request
method StdMethod
POST
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [Version -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toHeader Version
v, ByteString
"conversations", ByteString
"self"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
u
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getConv ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
Version ->
UserId ->
Local ConvId ->
Sem r (Maybe Conversation)
getConv :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
Version -> UserId -> Local ConvId -> Sem r (Maybe Conversation)
getConv Version
v UserId
usr Local ConvId
lcnv = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"domain" (Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (Local ConvId -> Domain
forall (t :: QTag) a. QualifiedWithTag t a -> Domain
tDomain Local ConvId
lcnv))
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"conv" (ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString (Local ConvId -> ConvId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local ConvId
lcnv))
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Getting conversation")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> Conversation -> Maybe Conversation
forall a. a -> Maybe a
Just (Conversation -> Maybe Conversation)
-> Sem r Conversation -> Sem r (Maybe Conversation)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Response (Maybe ByteString) -> Sem r Conversation
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" Response (Maybe ByteString)
rs
Int
_ -> Maybe Conversation -> Sem r (Maybe Conversation)
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Conversation
forall a. Maybe a
Nothing
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths
[ Version -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toHeader Version
v,
ByteString
"conversations",
Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' (Local ConvId -> Domain
forall (t :: QTag) a. QualifiedWithTag t a -> Domain
tDomain Local ConvId
lcnv),
ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' (Local ConvId -> ConvId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local ConvId
lcnv)
]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
usr
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Status] -> Request -> Request
expect [Status
status200, Status
status404]
getTeamConv ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
Version ->
UserId ->
TeamId ->
ConvId ->
Sem r (Maybe Conv.TeamConversation)
getTeamConv :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
Version
-> UserId -> TeamId -> ConvId -> Sem r (Maybe TeamConversation)
getTeamConv Version
v UserId
usr TeamId
tid ConvId
cnv = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"conv" (ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString ConvId
cnv)
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Getting team conversation")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> TeamConversation -> Maybe TeamConversation
forall a. a -> Maybe a
Just (TeamConversation -> Maybe TeamConversation)
-> Sem r TeamConversation -> Sem r (Maybe TeamConversation)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Response (Maybe ByteString) -> Sem r TeamConversation
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" Response (Maybe ByteString)
rs
Int
_ -> Maybe TeamConversation -> Sem r (Maybe TeamConversation)
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe TeamConversation
forall a. Maybe a
Nothing
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths
[ Version -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toHeader Version
v,
ByteString
"teams",
TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid,
ByteString
"conversations",
ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' ConvId
cnv
]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
usr
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Status] -> Request -> Request
expect [Status
status200, Status
status404]
newClient ::
( Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
UserId ->
ClientId ->
Sem r ()
newClient :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> ClientId -> Sem r ()
newClient UserId
u ClientId
c = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"user" (UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString UserId
u)
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"client" (ClientId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString ClientId
c)
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"new client")
Sem r (Response (Maybe ByteString)) -> Sem r ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem r (Response (Maybe ByteString)) -> Sem r ())
-> ((Request -> Request) -> Sem r (Response (Maybe ByteString)))
-> (Request -> Request)
-> Sem r ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest ((Request -> Request) -> Sem r ())
-> (Request -> Request) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
StdMethod -> Request -> Request
method StdMethod
POST
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"clients", ClientId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' ClientId
c]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
u
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
checkUserCanJoinTeam ::
( Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r (Maybe Wai.Error)
checkUserCanJoinTeam :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (Maybe Error)
checkUserCanJoinTeam TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Check if can add member to team")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
Maybe Error -> Sem r (Maybe Error)
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Error -> Sem r (Maybe Error))
-> Maybe Error -> Sem r (Maybe Error)
forall a b. (a -> b) -> a -> b
$ case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> Maybe Error
forall a. Maybe a
Nothing
Int
_ -> case Response (Maybe ByteString) -> Maybe Error
forall a.
(HasCallStack, Typeable a, FromJSON a) =>
Response (Maybe ByteString) -> Maybe a
responseJsonMaybe Response (Maybe ByteString)
rs of
Just (Error
e :: Wai.Error) -> Error -> Maybe Error
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Error
e
Maybe Error
Nothing -> [Char] -> Maybe Error
forall a. HasCallStack => [Char] -> a
error ([Char]
"Invalid response from galley: " [Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> Response (Maybe ByteString) -> [Char]
forall a. Show a => a -> [Char]
show Response (Maybe ByteString)
rs)
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"members", ByteString
"check"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HeaderName -> ByteString -> Request -> Request
header HeaderName
"Content-Type" ByteString
"application/json"
addTeamMember ::
( Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
UserId ->
TeamId ->
Maybe (UserId, UTCTimeMillis) ->
Role ->
Sem r Bool
addTeamMember :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId
-> TeamId -> Maybe (UserId, UTCTimeMillis) -> Role -> Sem r Bool
addTeamMember UserId
u TeamId
tid Maybe (UserId, UTCTimeMillis)
minvmeta Role
role = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Adding member to team")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
Bool -> Sem r Bool
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> Sem r Bool) -> Bool -> Sem r Bool
forall a b. (a -> b) -> a -> b
$ case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> Bool
True
Int
_ -> Bool
False
where
prm :: Permissions
prm = Role -> Permissions
Member.rolePermissions Role
role
bdy :: NewTeamMember
bdy = UserId
-> PermissionType 'Required
-> Maybe (UserId, UTCTimeMillis)
-> NewTeamMember
Member.mkNewTeamMember UserId
u Permissions
PermissionType 'Required
prm Maybe (UserId, UTCTimeMillis)
minvmeta
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
POST
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"members"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HeaderName -> ByteString -> Request -> Request
header HeaderName
"Content-Type" ByteString
"application/json"
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
u
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Status] -> Request -> Request
expect [Status
status200, Status
status403]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Request -> Request
lbytes (NewTeamMember -> ByteString
forall a. ToJSON a => a -> ByteString
encode NewTeamMember
bdy)
createTeam ::
( Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
UserId ->
NewTeam ->
TeamId ->
Sem r ()
createTeam :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> NewTeam -> TeamId -> Sem r ()
createTeam UserId
u NewTeam
t TeamId
teamid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Creating Team")
Sem r (Response (Maybe ByteString)) -> Sem r ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem r (Response (Maybe ByteString)) -> Sem r ())
-> Sem r (Response (Maybe ByteString)) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest ((Request -> Request) -> Sem r (Response (Maybe ByteString)))
-> (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall a b. (a -> b) -> a -> b
$ TeamId -> Request -> Request
req TeamId
teamid
where
req :: TeamId -> Request -> Request
req TeamId
tid =
StdMethod -> Request -> Request
method StdMethod
PUT
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HeaderName -> ByteString -> Request -> Request
header HeaderName
"Content-Type" ByteString
"application/json"
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
u
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Request -> Request
lbytes (NewTeam -> ByteString
forall a. ToJSON a => a -> ByteString
encode NewTeam
t)
getTeamMember ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
UserId ->
TeamId ->
Sem r (Maybe TeamMember)
getTeamMember :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> TeamId -> Sem r (Maybe TeamMember)
getTeamMember UserId
u TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get team member")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> TeamMember -> Maybe TeamMember
forall a. a -> Maybe a
Just (TeamMember -> Maybe TeamMember)
-> Sem r TeamMember -> Sem r (Maybe TeamMember)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Response (Maybe ByteString) -> Sem r TeamMember
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" Response (Maybe ByteString)
rs
Int
_ -> Maybe TeamMember -> Sem r (Maybe TeamMember)
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe TeamMember
forall a. Maybe a
Nothing
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"members", UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' UserId
u]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser UserId
u
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Status] -> Request -> Request
expect [Status
status200, Status
status404]
getTeamMembers ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r TeamMemberList
getTeamMembers :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (TeamMemberList' 'Required)
getTeamMembers TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get team members")
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString)
-> Sem r (TeamMemberList' 'Required))
-> Sem r (TeamMemberList' 'Required)
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text
-> Response (Maybe ByteString) -> Sem r (TeamMemberList' 'Required)
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"members"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
memberIsTeamOwner ::
(Member Rpc r, Member (Input Endpoint) r) =>
TeamId ->
UserId ->
Sem r Bool
memberIsTeamOwner :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
TeamId -> UserId -> Sem r Bool
memberIsTeamOwner TeamId
tid UserId
uid = do
Response (Maybe ByteString)
r <-
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest ((Request -> Request) -> Sem r (Response (Maybe ByteString)))
-> (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall a b. (a -> b) -> a -> b
$
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"is-team-owner", UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' UserId
uid]
Bool -> Sem r Bool
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> Sem r Bool) -> Bool -> Sem r Bool
forall a b. (a -> b) -> a -> b
$ Response (Maybe ByteString) -> Status
forall body. Response body -> Status
responseStatus Response (Maybe ByteString)
r Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
/= Status
status403
getTeamId ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
UserId ->
Sem r (Maybe TeamId)
getTeamId :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
UserId -> Sem r (Maybe TeamId)
getTeamId UserId
u = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get team from user")
Response (Maybe ByteString)
rs <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
case Response (Maybe ByteString) -> Int
forall a. Response a -> Int
Bilge.statusCode Response (Maybe ByteString)
rs of
Int
200 -> TeamId -> Maybe TeamId
forall a. a -> Maybe a
Just (TeamId -> Maybe TeamId) -> Sem r TeamId -> Sem r (Maybe TeamId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Response (Maybe ByteString) -> Sem r TeamId
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" Response (Maybe ByteString)
rs
Int
_ -> Maybe TeamId -> Sem r (Maybe TeamId)
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe TeamId
forall a. Maybe a
Nothing
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"users", UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' UserId
u, ByteString
"team"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Status] -> Request -> Request
expect [Status
status200, Status
status404]
getTeam ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r Team.TeamData
getTeam :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamData
getTeam TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get team info")
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString) -> Sem r TeamData)
-> Sem r TeamData
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Response (Maybe ByteString) -> Sem r TeamData
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getTeamName ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r Team.TeamName
getTeamName :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamName
getTeamName TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get team info")
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString) -> Sem r TeamName)
-> Sem r TeamName
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Response (Maybe ByteString) -> Sem r TeamName
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"name"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getTeamLegalHoldStatus ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r (LockableFeature LegalholdConfig)
getTeamLegalHoldStatus :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r (LockableFeature LegalholdConfig)
getTeamLegalHoldStatus TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get legalhold settings")
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString)
-> Sem r (LockableFeature LegalholdConfig))
-> Sem r (LockableFeature LegalholdConfig)
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text
-> Response (Maybe ByteString)
-> Sem r (LockableFeature LegalholdConfig)
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"features", forall cfg. IsFeatureConfig cfg => ByteString
featureNameBS @LegalholdConfig]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getTeamSearchVisibility ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r TeamSearchVisibility
getTeamSearchVisibility :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r TeamSearchVisibility
getTeamSearchVisibility TeamId
tid =
forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @TeamSearchVisibilityView @TeamSearchVisibility (TeamSearchVisibilityView -> TeamSearchVisibility)
-> Sem r TeamSearchVisibilityView -> Sem r TeamSearchVisibility
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get search visibility settings")
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString) -> Sem r TeamSearchVisibilityView)
-> Sem r TeamSearchVisibilityView
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text
-> Response (Maybe ByteString) -> Sem r TeamSearchVisibilityView
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"search-visibility"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getFeatureConfigForTeam ::
forall feature r.
( IsFeatureConfig feature,
Typeable feature,
Member TinyLog r,
Member Rpc r,
Member (Error ParseException) r
) =>
TeamId ->
Sem (Input Endpoint : r) (LockableFeature feature)
getFeatureConfigForTeam :: forall feature (r :: EffectRow).
(IsFeatureConfig feature, Typeable feature, Member TinyLog r,
Member Rpc r, Member (Error ParseException) r) =>
TeamId -> Sem (Input Endpoint : r) (LockableFeature feature)
getFeatureConfigForTeam TeamId
tid = do
(Msg -> Msg) -> Sem (Input Endpoint : r) ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem (Input Endpoint : r) ())
-> (Msg -> Msg) -> Sem (Input Endpoint : r) ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get feature config for team")
(Request -> Request)
-> Sem (Input Endpoint : r) (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req Sem (Input Endpoint : r) (Response (Maybe ByteString))
-> (Response (Maybe ByteString)
-> Sem (Input Endpoint : r) (LockableFeature feature))
-> Sem (Input Endpoint : r) (LockableFeature feature)
forall a b.
Sem (Input Endpoint : r) a
-> (a -> Sem (Input Endpoint : r) b) -> Sem (Input Endpoint : r) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text
-> Response (Maybe ByteString)
-> Sem (Input Endpoint : r) (LockableFeature feature)
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley"
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"features", forall cfg. IsFeatureConfig cfg => ByteString
featureNameBS @feature]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getVerificationCodeEnabled ::
( Member (Error ParseException) r,
Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Sem r Bool
getVerificationCodeEnabled :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member Rpc r,
Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> Sem r Bool
getVerificationCodeEnabled TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get snd factor password challenge settings")
Response (Maybe ByteString)
response <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
FeatureStatus
status <- (.status) (LockableFeature SndFactorPasswordChallengeConfig -> FeatureStatus)
-> Sem r (LockableFeature SndFactorPasswordChallengeConfig)
-> Sem r FeatureStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow @(LockableFeature SndFactorPasswordChallengeConfig) Text
"galley" Response (Maybe ByteString)
response
case FeatureStatus
status of
FeatureStatus
FeatureStatusEnabled -> Bool -> Sem r Bool
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
FeatureStatus
FeatureStatusDisabled -> Bool -> Sem r Bool
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"features", forall cfg. IsFeatureConfig cfg => ByteString
featureNameBS @SndFactorPasswordChallengeConfig]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
decodeBodyOrThrow :: forall a r. (Typeable a, FromJSON a, Member (Error ParseException) r) => Text -> Response (Maybe BL.ByteString) -> Sem r a
decodeBodyOrThrow :: forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
ctx Response (Maybe ByteString)
r = ([Char] -> Sem r a) -> (a -> Sem r a) -> Either [Char] a -> Sem r a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (ParseException -> Sem r a
forall e (r :: EffectRow) a. Member (Error e) r => e -> Sem r a
throw (ParseException -> Sem r a)
-> ([Char] -> ParseException) -> [Char] -> Sem r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Char] -> ParseException
ParseException Text
ctx) a -> Sem r a
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Response (Maybe ByteString) -> Either [Char] a
forall a.
(HasCallStack, Typeable a, FromJSON a) =>
Response (Maybe ByteString) -> Either [Char] a
responseJsonEither Response (Maybe ByteString)
r)
getAllTeamFeaturesForUser ::
(Member Rpc r, Member (Input Endpoint) r) =>
Maybe UserId ->
Sem r AllTeamFeatures
getAllTeamFeaturesForUser :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
Maybe UserId -> Sem r (NP LockableFeature Features)
getAllTeamFeaturesForUser Maybe UserId
mbUserId =
Response (Maybe ByteString) -> NP LockableFeature Features
forall a.
(HasCallStack, Typeable a, FromJSON a) =>
Response (Maybe ByteString) -> a
responseJsonUnsafe
(Response (Maybe ByteString) -> NP LockableFeature Features)
-> Sem r (Response (Maybe ByteString))
-> Sem r (NP LockableFeature Features)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest
( StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"feature-configs"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Request -> Request)
-> (UserId -> Request -> Request)
-> Maybe UserId
-> Request
-> Request
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Request -> Request
forall a. a -> a
id (ByteString -> ByteString -> Request -> Request
queryItem ByteString
"user_id" (ByteString -> Request -> Request)
-> (UserId -> ByteString) -> UserId -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString') Maybe UserId
mbUserId
)
changeTeamStatus ::
( Member Rpc r,
Member (Input Endpoint) r,
Member TinyLog r
) =>
TeamId ->
Team.TeamStatus ->
Maybe Currency.Alpha ->
Sem r ()
changeTeamStatus :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r, Member TinyLog r) =>
TeamId -> TeamStatus -> Maybe Alpha -> Sem r ()
changeTeamStatus TeamId
tid TeamStatus
s Maybe Alpha
cur = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Change Team status")
Sem r (Response (Maybe ByteString)) -> Sem r ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem r (Response (Maybe ByteString)) -> Sem r ())
-> Sem r (Response (Maybe ByteString)) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
PUT
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"status"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HeaderName -> ByteString -> Request -> Request
header HeaderName
"Content-Type" ByteString
"application/json"
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Request -> Request
lbytes (TeamStatusUpdate -> ByteString
forall a. ToJSON a => a -> ByteString
encode (TeamStatusUpdate -> ByteString) -> TeamStatusUpdate -> ByteString
forall a b. (a -> b) -> a -> b
$ TeamStatus -> Maybe Alpha -> TeamStatusUpdate
Team.TeamStatusUpdate TeamStatus
s Maybe Alpha
cur)
getTeamExposeInvitationURLsToTeamAdmin ::
( Member Rpc r,
Member (Input Endpoint) r,
Member (Error ParseException) r,
Member TinyLog r
) =>
TeamId ->
Sem r ShowOrHideInvitationUrl
getTeamExposeInvitationURLsToTeamAdmin :: forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r,
Member (Error ParseException) r, Member TinyLog r) =>
TeamId -> Sem r ShowOrHideInvitationUrl
getTeamExposeInvitationURLsToTeamAdmin TeamId
tid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get expose invitation URLs to team admin settings")
Response (Maybe ByteString)
response <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
FeatureStatus
status <- (.status) (LockableFeature ExposeInvitationURLsToTeamAdminConfig
-> FeatureStatus)
-> Sem r (LockableFeature ExposeInvitationURLsToTeamAdminConfig)
-> Sem r FeatureStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow @(LockableFeature ExposeInvitationURLsToTeamAdminConfig) Text
"galley" Response (Maybe ByteString)
response
case FeatureStatus
status of
FeatureStatus
FeatureStatusEnabled -> ShowOrHideInvitationUrl -> Sem r ShowOrHideInvitationUrl
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ShowOrHideInvitationUrl
ShowInvitationUrl
FeatureStatus
FeatureStatusDisabled -> ShowOrHideInvitationUrl -> Sem r ShowOrHideInvitationUrl
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ShowOrHideInvitationUrl
HideInvitationUrl
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"teams", TeamId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' TeamId
tid, ByteString
"features", forall cfg. IsFeatureConfig cfg => ByteString
featureNameBS @ExposeInvitationURLsToTeamAdminConfig]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
checkMLSOne2OneEstablished ::
( Member (Error ParseException) r,
Member (Input Endpoint) r,
Member Rpc r,
Member TinyLog r
) =>
Local UserId ->
Qualified UserId ->
Sem r MLSOneToOneEstablished
checkMLSOne2OneEstablished :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member (Input Endpoint) r,
Member Rpc r, Member TinyLog r) =>
Local UserId -> Qualified UserId -> Sem r MLSOneToOneEstablished
checkMLSOne2OneEstablished Local UserId
self (Qualified UserId
other Domain
otherDomain) = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Msg -> Msg
remote ByteString
"galley" (Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Get the MLS one-to-one conversation")
Response (Maybe ByteString)
responseSelf <- (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
req
case Status -> Int
HTTP.statusCode (Response (Maybe ByteString) -> Status
forall body. Response body -> Status
HTTP.responseStatus Response (Maybe ByteString)
responseSelf) of
Int
200 -> do
Bool
established <- forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow @Bool Text
"galley" Response (Maybe ByteString)
responseSelf
MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished)
-> MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished
forall a b. (a -> b) -> a -> b
$ if Bool
established then MLSOneToOneEstablished
Established else MLSOneToOneEstablished
NotEstablished
Int
403 -> MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MLSOneToOneEstablished
NotAMember
Int
400 -> MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MLSOneToOneEstablished
NotEstablished
Int
_ -> MLSOneToOneEstablished -> Sem r MLSOneToOneEstablished
forall a. a -> Sem r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure MLSOneToOneEstablished
NotEstablished
where
req :: Request -> Request
req =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths
[ ByteString
"i",
ByteString
"conversations",
ByteString
"mls-one2one",
Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' Domain
otherDomain,
UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' UserId
other,
ByteString
"established"
]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser (Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
self)
unblockConversation ::
( Member (Error ParseException) r,
Member (Input Endpoint) r,
Member Rpc r,
Member TinyLog r
) =>
Version ->
Local UserId ->
Maybe ConnId ->
Qualified ConvId ->
Sem r Conversation
unblockConversation :: forall (r :: EffectRow).
(Member (Error ParseException) r, Member (Input Endpoint) r,
Member Rpc r, Member TinyLog r) =>
Version
-> Local UserId
-> Maybe ConnId
-> Qualified ConvId
-> Sem r Conversation
unblockConversation Version
v Local UserId
lusr Maybe ConnId
mconn (Qualified ConvId
cnv Domain
cdom) = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"conv" (ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString ConvId
cnv)
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"domain" (Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString Domain
cdom)
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"Unblocking conversation")
Sem r (Response (Maybe ByteString)) -> Sem r ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Sem r (Response (Maybe ByteString)) -> Sem r ())
-> Sem r (Response (Maybe ByteString)) -> Sem r ()
forall a b. (a -> b) -> a -> b
$ (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
putReq
(Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
getReq Sem r (Response (Maybe ByteString))
-> (Response (Maybe ByteString) -> Sem r Conversation)
-> Sem r Conversation
forall a b. Sem r a -> (a -> Sem r b) -> Sem r b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow @Conversation Text
"galley"
where
putReq :: Request -> Request
putReq =
StdMethod -> Request -> Request
method StdMethod
PUT
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"conversations", Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' Domain
cdom, ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' ConvId
cnv, ByteString
"unblock"]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser (Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
lusr)
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Request -> Request)
-> (ConnId -> Request -> Request)
-> Maybe ConnId
-> Request
-> Request
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Request -> Request
forall a. a -> a
id (HeaderName -> ByteString -> Request -> Request
header HeaderName
"Z-Connection" (ByteString -> Request -> Request)
-> (ConnId -> ByteString) -> ConnId -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConnId -> ByteString
fromConnId) Maybe ConnId
mconn
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
getReq :: Request -> Request
getReq =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [Version -> ByteString
forall a. ToHttpApiData a => a -> ByteString
toHeader Version
v, ByteString
"conversations", Domain -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' Domain
cdom, ConvId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' ConvId
cnv]
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UserId -> Request -> Request
zUser (Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
lusr)
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Request
expect2xx
remote :: ByteString -> Msg -> Msg
remote :: ByteString -> Msg -> Msg
remote = ByteString -> ByteString -> Msg -> Msg
forall a. ToBytes a => ByteString -> a -> Msg -> Msg
field ByteString
"remote"
getEJPDConvInfo ::
forall r.
( Member TinyLog r,
Member (Error ParseException) r,
Member (Input Endpoint) r,
Member Rpc r
) =>
UserId ->
Sem r [EJPDConvInfo]
getEJPDConvInfo :: forall (r :: EffectRow).
(Member TinyLog r, Member (Error ParseException) r,
Member (Input Endpoint) r, Member Rpc r) =>
UserId -> Sem r [EJPDConvInfo]
getEJPDConvInfo UserId
uid = do
(Msg -> Msg) -> Sem r ()
forall msg (r :: EffectRow).
Member (Logger msg) r =>
msg -> Sem r ()
debug ((Msg -> Msg) -> Sem r ()) -> (Msg -> Msg) -> Sem r ()
forall a b. (a -> b) -> a -> b
$
ByteString -> Msg -> Msg
remote ByteString
"galley"
(Msg -> Msg) -> (Msg -> Msg) -> Msg -> Msg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Msg -> Msg
forall a. ToBytes a => a -> Msg -> Msg
msg (ByteString -> Builder
val ByteString
"get conversation info for ejpd")
Text -> Response (Maybe ByteString) -> Sem r [EJPDConvInfo]
forall a (r :: EffectRow).
(Typeable a, FromJSON a, Member (Error ParseException) r) =>
Text -> Response (Maybe ByteString) -> Sem r a
decodeBodyOrThrow Text
"galley" (Response (Maybe ByteString) -> Sem r [EJPDConvInfo])
-> Sem r (Response (Maybe ByteString)) -> Sem r [EJPDConvInfo]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Request -> Request) -> Sem r (Response (Maybe ByteString))
forall (r :: EffectRow).
(Member Rpc r, Member (Input Endpoint) r) =>
(Request -> Request) -> Sem r (Response (Maybe ByteString))
galleyRequest Request -> Request
getReq
where
getReq :: Request -> Request
getReq =
StdMethod -> Request -> Request
method StdMethod
GET
(Request -> Request) -> (Request -> Request) -> Request -> Request
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> Request -> Request
paths [ByteString
"i", ByteString
"user", UserId -> ByteString
forall a. ToByteString a => a -> ByteString
toByteString' UserId
uid, ByteString
"all-conversations"]