aboutsummaryrefslogtreecommitdiff
path: root/federationsender/inthttp/client.go
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-08-20 17:03:07 +0100
committerGitHub <noreply@github.com>2020-08-20 17:03:07 +0100
commit6d6bb7513710db1009c474eff031434916feda1b (patch)
tree62eb40ba6944580a7cf6da1541d7070ad65bd362 /federationsender/inthttp/client.go
parent068a3d3c9f9be3473b68e3a13912182caf1c7117 (diff)
Add FederationClient interface to federationsender (#1284)
* Add FederationClient interface to federationsender - Use a shim struct in HTTP mode to keep the same API as `FederationClient`. - Use `federationsender` instead of `FederationClient` in `keyserver`. * Pointers not values * Review comments * Fix unit tests * Rejig backoff * Unbreak test * Remove debug logs * Review comments and linting
Diffstat (limited to 'federationsender/inthttp/client.go')
-rw-r--r--federationsender/inthttp/client.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/federationsender/inthttp/client.go b/federationsender/inthttp/client.go
index 13c2c45a..79e220c3 100644
--- a/federationsender/inthttp/client.go
+++ b/federationsender/inthttp/client.go
@@ -8,6 +8,7 @@ import (
"github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/dendrite/internal/httputil"
"github.com/matrix-org/gomatrix"
+ "github.com/matrix-org/gomatrixserverlib"
"github.com/opentracing/opentracing-go"
)
@@ -21,6 +22,10 @@ const (
FederationSenderPerformInviteRequestPath = "/federationsender/performInviteRequest"
FederationSenderPerformServersAlivePath = "/federationsender/performServersAlive"
FederationSenderPerformBroadcastEDUPath = "/federationsender/performBroadcastEDU"
+
+ FederationSenderGetUserDevicesPath = "/federationsender/client/getUserDevices"
+ FederationSenderClaimKeysPath = "/federationsender/client/claimKeys"
+ FederationSenderQueryKeysPath = "/federationsender/client/queryKeys"
)
// NewFederationSenderClient creates a FederationSenderInternalAPI implemented by talking to a HTTP POST API.
@@ -133,3 +138,93 @@ func (h *httpFederationSenderInternalAPI) PerformBroadcastEDU(
apiURL := h.federationSenderURL + FederationSenderPerformBroadcastEDUPath
return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
}
+
+type getUserDevices struct {
+ S gomatrixserverlib.ServerName
+ UserID string
+ Res *gomatrixserverlib.RespUserDevices
+ Err *api.FederationClientError
+}
+
+func (h *httpFederationSenderInternalAPI) GetUserDevices(
+ ctx context.Context, s gomatrixserverlib.ServerName, userID string,
+) (gomatrixserverlib.RespUserDevices, error) {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "GetUserDevices")
+ defer span.Finish()
+
+ var result gomatrixserverlib.RespUserDevices
+ request := getUserDevices{
+ S: s,
+ UserID: userID,
+ }
+ var response getUserDevices
+ apiURL := h.federationSenderURL + FederationSenderGetUserDevicesPath
+ err := httputil.PostJSON(ctx, span, h.httpClient, apiURL, &request, &response)
+ if err != nil {
+ return result, err
+ }
+ if response.Err != nil {
+ return result, response.Err
+ }
+ return *response.Res, nil
+}
+
+type claimKeys struct {
+ S gomatrixserverlib.ServerName
+ OneTimeKeys map[string]map[string]string
+ Res *gomatrixserverlib.RespClaimKeys
+ Err *api.FederationClientError
+}
+
+func (h *httpFederationSenderInternalAPI) ClaimKeys(
+ ctx context.Context, s gomatrixserverlib.ServerName, oneTimeKeys map[string]map[string]string,
+) (gomatrixserverlib.RespClaimKeys, error) {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "ClaimKeys")
+ defer span.Finish()
+
+ var result gomatrixserverlib.RespClaimKeys
+ request := claimKeys{
+ S: s,
+ OneTimeKeys: oneTimeKeys,
+ }
+ var response claimKeys
+ apiURL := h.federationSenderURL + FederationSenderClaimKeysPath
+ err := httputil.PostJSON(ctx, span, h.httpClient, apiURL, &request, &response)
+ if err != nil {
+ return result, err
+ }
+ if response.Err != nil {
+ return result, response.Err
+ }
+ return *response.Res, nil
+}
+
+type queryKeys struct {
+ S gomatrixserverlib.ServerName
+ Keys map[string][]string
+ Res *gomatrixserverlib.RespQueryKeys
+ Err *api.FederationClientError
+}
+
+func (h *httpFederationSenderInternalAPI) QueryKeys(
+ ctx context.Context, s gomatrixserverlib.ServerName, keys map[string][]string,
+) (gomatrixserverlib.RespQueryKeys, error) {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "QueryKeys")
+ defer span.Finish()
+
+ var result gomatrixserverlib.RespQueryKeys
+ request := queryKeys{
+ S: s,
+ Keys: keys,
+ }
+ var response queryKeys
+ apiURL := h.federationSenderURL + FederationSenderQueryKeysPath
+ err := httputil.PostJSON(ctx, span, h.httpClient, apiURL, &request, &response)
+ if err != nil {
+ return result, err
+ }
+ if response.Err != nil {
+ return result, response.Err
+ }
+ return *response.Res, nil
+}