From b4158266546fcce5d9fb5ac2b7bf67a461ca48ab Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 4 Sep 2020 01:39:01 +0100 Subject: [PATCH 01/14] WIP: MSC2444 /peek support in the federation client --- federationclient.go | 13 +++++++++++++ federationtypes.go | 26 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/federationclient.go b/federationclient.go index 37af04c5..8e1d62dd 100644 --- a/federationclient.go +++ b/federationclient.go @@ -309,6 +309,19 @@ func (ac *FederationClient) LookupMissingEvents( return } +// Peek starts a peek on a remote server +func (ac *FederationClient) Peek( + ctx context.Context, s ServerName, roomID, peekID string, roomVersion RoomVersion, +) (res RespPeek, err error) { + res.roomVersion = roomVersion + path := federationPathPrefixV1 + "/peek/" + + url.PathEscape(roomID) + + url.PathEscape(peekID) + req := NewFederationRequest("GET", s, path) + err = ac.doRequest(ctx, req, &res) + return +} + // LookupRoomAlias looks up a room alias hosted on the remote server. // The domain part of the roomAlias must match the name of the server it is // being looked up on. diff --git a/federationtypes.go b/federationtypes.go index 5fe2c8cf..92c893a2 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -136,6 +136,18 @@ type RespState struct { AuthEvents []Event `json:"auth_chain"` } +// A RespPeek is the content of a response to GET /_matrix/federation/v1/peek/{roomID} +type RespPeek struct { + // The room version that dictates the format of the state events. + roomVersion RoomVersion + // How often should we renew the peek? + RenewalInterval int `json:"renewal_interval"` + // A list of events giving the state of the room at the point of the request + StateEvents []Event `json:"pdus"` + // A list of events needed to authenticate the state events. + AuthEvents []Event `json:"auth_chain"` +} + // MissingEvents represents a request for missing events. // https://matrix.org/docs/spec/server_server/r0.1.3#post-matrix-federation-v1-get-missing-events-roomid type MissingEvents struct { @@ -521,6 +533,20 @@ func (r *RespSendJoin) UnmarshalJSON(data []byte) error { return nil } +// ToRespState returns a new RespState with the same data from the given RespPeek +func (r RespPeek) ToRespState() RespState { + if len(r.StateEvents) == 0 { + r.StateEvents = []Event{} + } + if len(r.AuthEvents) == 0 { + r.AuthEvents = []Event{} + } + return RespState{ + StateEvents: r.StateEvents, + AuthEvents: r.AuthEvents, + } +} + type respSendJoinFields struct { StateEvents []Event `json:"state"` AuthEvents []Event `json:"auth_chain"` From 9ab328af34a097b519f2dbc58b9a9ee7e833b9af Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 11 Sep 2020 19:52:27 +0100 Subject: [PATCH 02/14] fix comment --- federationtypes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federationtypes.go b/federationtypes.go index 92c893a2..ef0dca37 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -136,7 +136,7 @@ type RespState struct { AuthEvents []Event `json:"auth_chain"` } -// A RespPeek is the content of a response to GET /_matrix/federation/v1/peek/{roomID} +// A RespPeek is the content of a response to GET /_matrix/federation/v1/peek/{roomID}/{peekID} type RespPeek struct { // The room version that dictates the format of the state events. roomVersion RoomVersion From 27af00a3523b79cc8044b558a8098e26af31282a Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 11 Sep 2020 22:32:55 +0100 Subject: [PATCH 03/14] add ?ver= support to /peek and fix build --- federationclient.go | 16 ++++++++++++---- federationtypes.go | 4 ++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/federationclient.go b/federationclient.go index 8e1d62dd..112d755a 100644 --- a/federationclient.go +++ b/federationclient.go @@ -95,7 +95,7 @@ func (ac *FederationClient) MakeJoin( if len(roomVersions) > 0 { var vqs []string for _, v := range roomVersions { - vqs = append(vqs, fmt.Sprintf("ver=%s", v)) + vqs = append(vqs, url.QueryEscape(fmt.Sprintf("ver=%s", v))) } versionQueryString = "?" + strings.Join(vqs, "&") } @@ -311,12 +311,20 @@ func (ac *FederationClient) LookupMissingEvents( // Peek starts a peek on a remote server func (ac *FederationClient) Peek( - ctx context.Context, s ServerName, roomID, peekID string, roomVersion RoomVersion, + ctx context.Context, s ServerName, roomID, peekID string, + roomVersions []RoomVersion, ) (res RespPeek, err error) { - res.roomVersion = roomVersion + versionQueryString := "" + if len(roomVersions) > 0 { + var vqs []string + for _, v := range roomVersions { + vqs = append(vqs, url.QueryEscape(fmt.Sprintf("ver=%s", v))) + } + versionQueryString = "?" + strings.Join(vqs, "&") + } path := federationPathPrefixV1 + "/peek/" + url.PathEscape(roomID) + - url.PathEscape(peekID) + url.PathEscape(peekID) + versionQueryString req := NewFederationRequest("GET", s, path) err = ac.doRequest(ctx, req, &res) return diff --git a/federationtypes.go b/federationtypes.go index 18b9e9e0..f818c13e 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -139,14 +139,14 @@ type RespState struct { // A RespPeek is the content of a response to GET /_matrix/federation/v1/peek/{roomID}/{peekID} type RespPeek struct { - // The room version that dictates the format of the state events. - roomVersion RoomVersion // How often should we renew the peek? RenewalInterval int `json:"renewal_interval"` // A list of events giving the state of the room at the point of the request StateEvents []Event `json:"pdus"` // A list of events needed to authenticate the state events. AuthEvents []Event `json:"auth_chain"` + // The room version that we're trying to peek. + RoomVersion RoomVersion `json:"room_version"` } // MissingEvents represents a request for missing events. From 669243ae1a5432f515be4146f5b4c9a4ce42f18f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 12 Sep 2020 01:33:51 +0100 Subject: [PATCH 04/14] rename RespPeek field to match MSC --- federationtypes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federationtypes.go b/federationtypes.go index f818c13e..c4a5d5c2 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -142,7 +142,7 @@ type RespPeek struct { // How often should we renew the peek? RenewalInterval int `json:"renewal_interval"` // A list of events giving the state of the room at the point of the request - StateEvents []Event `json:"pdus"` + StateEvents []Event `json:"state"` // A list of events needed to authenticate the state events. AuthEvents []Event `json:"auth_chain"` // The room version that we're trying to peek. From d2a637e04c855de1b6ec5ac50d3bb9c7745cb646 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 12 Sep 2020 01:33:57 +0100 Subject: [PATCH 05/14] use PUT for /peek --- federationclient.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/federationclient.go b/federationclient.go index 112d755a..d450b9c1 100644 --- a/federationclient.go +++ b/federationclient.go @@ -325,7 +325,11 @@ func (ac *FederationClient) Peek( path := federationPathPrefixV1 + "/peek/" + url.PathEscape(roomID) + url.PathEscape(peekID) + versionQueryString - req := NewFederationRequest("GET", s, path) + req := NewFederationRequest("PUT", s, path) + var empty struct{} + if err = req.SetContent(empty); err != nil { + return + } err = ac.doRequest(ctx, req, &res) return } From f7acdef7b8ff29f63a7b834569e24f76c258c3e3 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 12 Sep 2020 23:53:29 +0100 Subject: [PATCH 06/14] track renewal intervals as int64s --- federationtypes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federationtypes.go b/federationtypes.go index c4a5d5c2..9773c888 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -140,7 +140,7 @@ type RespState struct { // A RespPeek is the content of a response to GET /_matrix/federation/v1/peek/{roomID}/{peekID} type RespPeek struct { // How often should we renew the peek? - RenewalInterval int `json:"renewal_interval"` + RenewalInterval int64 `json:"renewal_interval"` // A list of events giving the state of the room at the point of the request StateEvents []Event `json:"state"` // A list of events needed to authenticate the state events. From dd48e0b6268d122cef25b65fdac8968de4ed50f2 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 13 Sep 2020 00:47:33 +0100 Subject: [PATCH 07/14] fix escaping snafu --- federationclient.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/federationclient.go b/federationclient.go index d450b9c1..b55f3b3c 100644 --- a/federationclient.go +++ b/federationclient.go @@ -95,7 +95,8 @@ func (ac *FederationClient) MakeJoin( if len(roomVersions) > 0 { var vqs []string for _, v := range roomVersions { - vqs = append(vqs, url.QueryEscape(fmt.Sprintf("ver=%s", v))) + escapedV := url.QueryEscape(fmt.Sprintf("%s", v)) + vqs = append(vqs, fmt.Sprintf("ver=%s", escapedV)) } versionQueryString = "?" + strings.Join(vqs, "&") } @@ -318,12 +319,13 @@ func (ac *FederationClient) Peek( if len(roomVersions) > 0 { var vqs []string for _, v := range roomVersions { - vqs = append(vqs, url.QueryEscape(fmt.Sprintf("ver=%s", v))) + escapedV := url.QueryEscape(fmt.Sprintf("%s", v)) + vqs = append(vqs, fmt.Sprintf("ver=%s", escapedV)) } versionQueryString = "?" + strings.Join(vqs, "&") } path := federationPathPrefixV1 + "/peek/" + - url.PathEscape(roomID) + + url.PathEscape(roomID) + "/" + url.PathEscape(peekID) + versionQueryString req := NewFederationRequest("PUT", s, path) var empty struct{} From 4d0b50fb4051388d2555523ad7201f66565ab89c Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 13 Sep 2020 03:27:37 +0100 Subject: [PATCH 08/14] correctly marshal RespPeek --- client.go | 6 +++++ federationtypes.go | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/client.go b/client.go index d3975e18..9b5984d9 100644 --- a/client.go +++ b/client.go @@ -331,6 +331,10 @@ func (fc *Client) DoRequestAndParseResponse( return err } + // body, err := ioutil.ReadAll(response.Body) + // util.GetLogger(ctx).Warnf("fed request %#v returned %d: %s", req, response.StatusCode, body) + // response.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + if response.StatusCode/100 != 2 { // not 2xx // Adapted from https://github.com/matrix-org/gomatrix/blob/master/client.go var contents []byte @@ -364,6 +368,8 @@ func (fc *Client) DoRequestAndParseResponse( return err } + // util.GetLogger(ctx).Warnf("fed request decoded as %#v", result) + return nil } diff --git a/federationtypes.go b/federationtypes.go index 9773c888..5dc8bcf1 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -216,6 +216,13 @@ type respStateFields struct { AuthEvents []Event `json:"auth_chain"` } +type respPeekFields struct { + RenewalInterval int64 `json:"renewal_interval"` + StateEvents []Event `json:"pdus"` + AuthEvents []Event `json:"auth_chain"` + RoomVersion RoomVersion `json:"room_version"` +} + // RespUserDevices contains a response to /_matrix/federation/v1/user/devices/{userID} // https://matrix.org/docs/spec/server_server/latest#get-matrix-federation-v1-user-devices-userid type RespUserDevices struct { @@ -268,6 +275,60 @@ func (r *RespMissingEvents) UnmarshalJSON(data []byte) error { return nil } +// MarshalJSON implements json.Marshaller +func (r RespPeek) MarshalJSON() ([]byte, error) { + if len(r.StateEvents) == 0 { + r.StateEvents = []Event{} + } + if len(r.AuthEvents) == 0 { + r.AuthEvents = []Event{} + } + return json.Marshal(respPeekFields{ + RoomVersion: r.RoomVersion, + StateEvents: r.StateEvents, + AuthEvents: r.AuthEvents, + RenewalInterval: r.RenewalInterval, + }) +} + +// UnmarshalJSON implements json.Unmarshaller +func (r *RespPeek) UnmarshalJSON(data []byte) error { + r.AuthEvents = []Event{} + r.StateEvents = []Event{} + // XXX: it feels broken that we have RespPeek, respPeekFields and intermediate + // all looking pretty similar. What am I doing wrong? + var intermediate struct { + RoomVersion RoomVersion `json:"room_version"` + StateEvents []json.RawMessage `json:"state"` + AuthEvents []json.RawMessage `json:"auth_chain"` + RenewalInterval int64 `json:"renewal_interval"` + } + if err := json.Unmarshal(data, &intermediate); err != nil { + return fmt.Errorf("RespPeek UnmarshalJSON(intermediate): %w", err) + } + r.RoomVersion = intermediate.RoomVersion + r.RenewalInterval = intermediate.RenewalInterval + if _, err := r.RoomVersion.EventFormat(); err != nil { + return fmt.Errorf("RespPeek UnmarshalJSON(roomversion): %w", err) + } + for _, raw := range intermediate.AuthEvents { + event, err := NewEventFromUntrustedJSON([]byte(raw), r.RoomVersion) + if err != nil { + return fmt.Errorf("RespPeek UnmarshalJSON(AuthEvent): %w", err) + } + r.AuthEvents = append(r.AuthEvents, event) + } + for _, raw := range intermediate.StateEvents { + event, err := NewEventFromUntrustedJSON([]byte(raw), r.RoomVersion) + if err != nil { + return fmt.Errorf("RespPeek UnmarshalJSON(StateEvent): %w", err) + } + r.StateEvents = append(r.StateEvents, event) + } + return nil +} + + // MarshalJSON implements json.Marshaller func (r RespState) MarshalJSON() ([]byte, error) { if len(r.StateEvents) == 0 { @@ -549,6 +610,7 @@ func (r RespPeek) ToRespState() RespState { r.AuthEvents = []Event{} } return RespState{ + roomVersion: r.RoomVersion, StateEvents: r.StateEvents, AuthEvents: r.AuthEvents, } From da50c339a8f5a0bef45b156a749f81a0a65b2557 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Mon, 21 Sep 2020 01:27:59 +0100 Subject: [PATCH 09/14] fix marshalling thinko --- federationtypes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federationtypes.go b/federationtypes.go index 5dc8bcf1..116be1a4 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -218,7 +218,7 @@ type respStateFields struct { type respPeekFields struct { RenewalInterval int64 `json:"renewal_interval"` - StateEvents []Event `json:"pdus"` + StateEvents []Event `json:"state"` AuthEvents []Event `json:"auth_chain"` RoomVersion RoomVersion `json:"room_version"` } From 7ebb111b4d038ee31bcbecb09b8177e1b7643516 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 23 Sep 2020 00:07:07 +0100 Subject: [PATCH 10/14] add LatestEvent to SS /peek --- federationtypes.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/federationtypes.go b/federationtypes.go index 116be1a4..6e5e938d 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -147,6 +147,9 @@ type RespPeek struct { AuthEvents []Event `json:"auth_chain"` // The room version that we're trying to peek. RoomVersion RoomVersion `json:"room_version"` + // The ID of the event whose state snapshot this is - i.e. the + // most recent forward extremity in the room. + LatestEvent Event `json:"latest_event"` } // MissingEvents represents a request for missing events. @@ -216,11 +219,14 @@ type respStateFields struct { AuthEvents []Event `json:"auth_chain"` } +// XXX: this duplicates RespPeek above and needs to be kept in sync with it +// (and it's unclear why we've ended up with both) type respPeekFields struct { RenewalInterval int64 `json:"renewal_interval"` StateEvents []Event `json:"state"` AuthEvents []Event `json:"auth_chain"` RoomVersion RoomVersion `json:"room_version"` + LatestEvent Event `json:"latest_event"` } // RespUserDevices contains a response to /_matrix/federation/v1/user/devices/{userID} @@ -288,6 +294,7 @@ func (r RespPeek) MarshalJSON() ([]byte, error) { StateEvents: r.StateEvents, AuthEvents: r.AuthEvents, RenewalInterval: r.RenewalInterval, + LatestEvent: r.LatestEvent, }) } @@ -302,6 +309,7 @@ func (r *RespPeek) UnmarshalJSON(data []byte) error { StateEvents []json.RawMessage `json:"state"` AuthEvents []json.RawMessage `json:"auth_chain"` RenewalInterval int64 `json:"renewal_interval"` + LatestEvent json.RawMessage `json:"latest_event"` } if err := json.Unmarshal(data, &intermediate); err != nil { return fmt.Errorf("RespPeek UnmarshalJSON(intermediate): %w", err) @@ -325,6 +333,11 @@ func (r *RespPeek) UnmarshalJSON(data []byte) error { } r.StateEvents = append(r.StateEvents, event) } + latestEvent, err := NewEventFromUntrustedJSON([]byte(intermediate.LatestEvent), r.RoomVersion) + if err != nil { + return fmt.Errorf("RespPeek UnmarshalJSON(StateEvent): %w", err) + } + r.LatestEvent = latestEvent return nil } From db936c64f7397bd12febb9307fffb7539c30e185 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 27 Sep 2020 21:12:25 +0100 Subject: [PATCH 11/14] go fmt --- federationtypes.go | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/federationtypes.go b/federationtypes.go index e2a4559e..2e3aa6cd 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -222,11 +222,11 @@ type respStateFields struct { // XXX: this duplicates RespPeek above and needs to be kept in sync with it // (and it's unclear why we've ended up with both) type respPeekFields struct { - RenewalInterval int64 `json:"renewal_interval"` - StateEvents []Event `json:"state"` - AuthEvents []Event `json:"auth_chain"` - RoomVersion RoomVersion `json:"room_version"` - LatestEvent Event `json:"latest_event"` + RenewalInterval int64 `json:"renewal_interval"` + StateEvents []Event `json:"state"` + AuthEvents []Event `json:"auth_chain"` + RoomVersion RoomVersion `json:"room_version"` + LatestEvent Event `json:"latest_event"` } // RespUserDevices contains a response to /_matrix/federation/v1/user/devices/{userID} @@ -290,11 +290,11 @@ func (r RespPeek) MarshalJSON() ([]byte, error) { r.AuthEvents = []Event{} } return json.Marshal(respPeekFields{ - RoomVersion: r.RoomVersion, - StateEvents: r.StateEvents, - AuthEvents: r.AuthEvents, + RoomVersion: r.RoomVersion, + StateEvents: r.StateEvents, + AuthEvents: r.AuthEvents, RenewalInterval: r.RenewalInterval, - LatestEvent: r.LatestEvent, + LatestEvent: r.LatestEvent, }) } @@ -305,11 +305,11 @@ func (r *RespPeek) UnmarshalJSON(data []byte) error { // XXX: it feels broken that we have RespPeek, respPeekFields and intermediate // all looking pretty similar. What am I doing wrong? var intermediate struct { - RoomVersion RoomVersion `json:"room_version"` - StateEvents []json.RawMessage `json:"state"` - AuthEvents []json.RawMessage `json:"auth_chain"` - RenewalInterval int64 `json:"renewal_interval"` - LatestEvent json.RawMessage `json:"latest_event"` + RoomVersion RoomVersion `json:"room_version"` + StateEvents []json.RawMessage `json:"state"` + AuthEvents []json.RawMessage `json:"auth_chain"` + RenewalInterval int64 `json:"renewal_interval"` + LatestEvent json.RawMessage `json:"latest_event"` } if err := json.Unmarshal(data, &intermediate); err != nil { return fmt.Errorf("RespPeek UnmarshalJSON(intermediate): %w", err) @@ -341,7 +341,6 @@ func (r *RespPeek) UnmarshalJSON(data []byte) error { return nil } - // MarshalJSON implements json.Marshaller func (r RespState) MarshalJSON() ([]byte, error) { if len(r.StateEvents) == 0 { @@ -630,7 +629,7 @@ func (r RespPeek) ToRespState() RespState { return RespState{ roomVersion: r.RoomVersion, StateEvents: r.StateEvents, - AuthEvents: r.AuthEvents, + AuthEvents: r.AuthEvents, } } From 8d29daf6d625dcc6208593740701c06e1f302ad5 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sun, 27 Sep 2020 21:22:33 +0100 Subject: [PATCH 12/14] placate go-simple --- federationclient.go | 6 ++---- federationtypes.go | 8 +------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/federationclient.go b/federationclient.go index b55f3b3c..68194af4 100644 --- a/federationclient.go +++ b/federationclient.go @@ -95,8 +95,7 @@ func (ac *FederationClient) MakeJoin( if len(roomVersions) > 0 { var vqs []string for _, v := range roomVersions { - escapedV := url.QueryEscape(fmt.Sprintf("%s", v)) - vqs = append(vqs, fmt.Sprintf("ver=%s", escapedV)) + vqs = append(vqs, fmt.Sprintf("ver=%s", url.QueryEscape(string(v)))) } versionQueryString = "?" + strings.Join(vqs, "&") } @@ -319,8 +318,7 @@ func (ac *FederationClient) Peek( if len(roomVersions) > 0 { var vqs []string for _, v := range roomVersions { - escapedV := url.QueryEscape(fmt.Sprintf("%s", v)) - vqs = append(vqs, fmt.Sprintf("ver=%s", escapedV)) + vqs = append(vqs, fmt.Sprintf("ver=%s", url.QueryEscape(string(v)))) } versionQueryString = "?" + strings.Join(vqs, "&") } diff --git a/federationtypes.go b/federationtypes.go index 2e3aa6cd..d7b13f0e 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -289,13 +289,7 @@ func (r RespPeek) MarshalJSON() ([]byte, error) { if len(r.AuthEvents) == 0 { r.AuthEvents = []Event{} } - return json.Marshal(respPeekFields{ - RoomVersion: r.RoomVersion, - StateEvents: r.StateEvents, - AuthEvents: r.AuthEvents, - RenewalInterval: r.RenewalInterval, - LatestEvent: r.LatestEvent, - }) + return json.Marshal(respPeekFields(r)) } // UnmarshalJSON implements json.Unmarshaller From 4aeb93f33c98a82904157709199128f4129646b6 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 20 Oct 2020 17:21:21 +0100 Subject: [PATCH 13/14] Remove dead code --- client.go | 4 ---- federationtypes.go | 14 +------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/client.go b/client.go index 9067d161..7f3f2a2b 100644 --- a/client.go +++ b/client.go @@ -356,10 +356,6 @@ func (fc *Client) DoRequestAndParseResponse( return err } - // body, err := ioutil.ReadAll(response.Body) - // util.GetLogger(ctx).Warnf("fed request %#v returned %d: %s", req, response.StatusCode, body) - // response.Body = ioutil.NopCloser(bytes.NewBuffer(body)) - if response.StatusCode/100 != 2 { // not 2xx // Adapted from https://github.com/matrix-org/gomatrix/blob/master/client.go var contents []byte diff --git a/federationtypes.go b/federationtypes.go index d7b13f0e..c5f72e17 100644 --- a/federationtypes.go +++ b/federationtypes.go @@ -219,16 +219,6 @@ type respStateFields struct { AuthEvents []Event `json:"auth_chain"` } -// XXX: this duplicates RespPeek above and needs to be kept in sync with it -// (and it's unclear why we've ended up with both) -type respPeekFields struct { - RenewalInterval int64 `json:"renewal_interval"` - StateEvents []Event `json:"state"` - AuthEvents []Event `json:"auth_chain"` - RoomVersion RoomVersion `json:"room_version"` - LatestEvent Event `json:"latest_event"` -} - // RespUserDevices contains a response to /_matrix/federation/v1/user/devices/{userID} // https://matrix.org/docs/spec/server_server/latest#get-matrix-federation-v1-user-devices-userid type RespUserDevices struct { @@ -289,15 +279,13 @@ func (r RespPeek) MarshalJSON() ([]byte, error) { if len(r.AuthEvents) == 0 { r.AuthEvents = []Event{} } - return json.Marshal(respPeekFields(r)) + return json.Marshal(r) } // UnmarshalJSON implements json.Unmarshaller func (r *RespPeek) UnmarshalJSON(data []byte) error { r.AuthEvents = []Event{} r.StateEvents = []Event{} - // XXX: it feels broken that we have RespPeek, respPeekFields and intermediate - // all looking pretty similar. What am I doing wrong? var intermediate struct { RoomVersion RoomVersion `json:"room_version"` StateEvents []json.RawMessage `json:"state"` From 5275922fde2aef4f93a4dae4c14b7c2068a970fb Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 20 Oct 2020 17:22:12 +0100 Subject: [PATCH 14/14] Remove some more dead code --- client.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/client.go b/client.go index 7f3f2a2b..d5b5d3a0 100644 --- a/client.go +++ b/client.go @@ -389,8 +389,6 @@ func (fc *Client) DoRequestAndParseResponse( return err } - // util.GetLogger(ctx).Warnf("fed request decoded as %#v", result) - return nil }