aboutsummaryrefslogtreecommitdiff
path: root/federationapi
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-03-01 17:06:47 +0100
committerGitHub <noreply@github.com>2023-03-01 17:06:47 +0100
commit6c20f8f742a7e03710fae81df6ef98bac31da2b1 (patch)
tree202e962951dc41c949a71c7f5c1deb6d1da78843 /federationapi
parent1aa70b0f56825a4a5f92c38cabb1fe841cec6e18 (diff)
Refactor `StoreEvent`, add `MaybeRedactEvent`, create an `EventDatabase` (#2989)
This PR changes the following: - `StoreEvent` now only stores an event (and possibly prev event), instead of also doing redactions - Adds a `MaybeRedactEvent` (pulled out from `StoreEvent`), which should be called after storing events - a few other things
Diffstat (limited to 'federationapi')
-rw-r--r--federationapi/consumers/roomserver.go3
-rw-r--r--federationapi/routing/eventauth.go2
-rw-r--r--federationapi/routing/events.go25
-rw-r--r--federationapi/routing/state.go2
4 files changed, 14 insertions, 18 deletions
diff --git a/federationapi/consumers/roomserver.go b/federationapi/consumers/roomserver.go
index 82a4db3f..378b96ba 100644
--- a/federationapi/consumers/roomserver.go
+++ b/federationapi/consumers/roomserver.go
@@ -173,6 +173,7 @@ func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent, rew
// Finally, work out if there are any more events missing.
if len(missingEventIDs) > 0 {
eventsReq := &api.QueryEventsByIDRequest{
+ RoomID: ore.Event.RoomID(),
EventIDs: missingEventIDs,
}
eventsRes := &api.QueryEventsByIDResponse{}
@@ -483,7 +484,7 @@ func (s *OutputRoomEventConsumer) lookupStateEvents(
// At this point the missing events are neither the event itself nor are
// they present in our local database. Our only option is to fetch them
// from the roomserver using the query API.
- eventReq := api.QueryEventsByIDRequest{EventIDs: missing}
+ eventReq := api.QueryEventsByIDRequest{EventIDs: missing, RoomID: event.RoomID()}
var eventResp api.QueryEventsByIDResponse
if err := s.rsAPI.QueryEventsByID(s.ctx, &eventReq, &eventResp); err != nil {
return nil, err
diff --git a/federationapi/routing/eventauth.go b/federationapi/routing/eventauth.go
index 868785a9..2f1f3baf 100644
--- a/federationapi/routing/eventauth.go
+++ b/federationapi/routing/eventauth.go
@@ -36,7 +36,7 @@ func GetEventAuth(
return *err
}
- event, resErr := fetchEvent(ctx, rsAPI, eventID)
+ event, resErr := fetchEvent(ctx, rsAPI, roomID, eventID)
if resErr != nil {
return *resErr
}
diff --git a/federationapi/routing/events.go b/federationapi/routing/events.go
index 6168912b..b4129241 100644
--- a/federationapi/routing/events.go
+++ b/federationapi/routing/events.go
@@ -20,10 +20,11 @@ import (
"net/http"
"time"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
- "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
+
+ "github.com/matrix-org/dendrite/clientapi/jsonerror"
+ "github.com/matrix-org/dendrite/roomserver/api"
)
// GetEvent returns the requested event
@@ -38,7 +39,9 @@ func GetEvent(
if err != nil {
return *err
}
- event, err := fetchEvent(ctx, rsAPI, eventID)
+ // /_matrix/federation/v1/event/{eventId} doesn't have a roomID, we use an empty string,
+ // which results in `QueryEventsByID` to first get the event and use that to determine the roomID.
+ event, err := fetchEvent(ctx, rsAPI, "", eventID)
if err != nil {
return *err
}
@@ -60,21 +63,13 @@ func allowedToSeeEvent(
rsAPI api.FederationRoomserverAPI,
eventID string,
) *util.JSONResponse {
- var authResponse api.QueryServerAllowedToSeeEventResponse
- err := rsAPI.QueryServerAllowedToSeeEvent(
- ctx,
- &api.QueryServerAllowedToSeeEventRequest{
- EventID: eventID,
- ServerName: origin,
- },
- &authResponse,
- )
+ allowed, err := rsAPI.QueryServerAllowedToSeeEvent(ctx, origin, eventID)
if err != nil {
resErr := util.ErrorResponse(err)
return &resErr
}
- if !authResponse.AllowedToSeeEvent {
+ if !allowed {
resErr := util.MessageResponse(http.StatusForbidden, "server not allowed to see event")
return &resErr
}
@@ -83,11 +78,11 @@ func allowedToSeeEvent(
}
// fetchEvent fetches the event without auth checks. Returns an error if the event cannot be found.
-func fetchEvent(ctx context.Context, rsAPI api.FederationRoomserverAPI, eventID string) (*gomatrixserverlib.Event, *util.JSONResponse) {
+func fetchEvent(ctx context.Context, rsAPI api.FederationRoomserverAPI, roomID, eventID string) (*gomatrixserverlib.Event, *util.JSONResponse) {
var eventsResponse api.QueryEventsByIDResponse
err := rsAPI.QueryEventsByID(
ctx,
- &api.QueryEventsByIDRequest{EventIDs: []string{eventID}},
+ &api.QueryEventsByIDRequest{EventIDs: []string{eventID}, RoomID: roomID},
&eventsResponse,
)
if err != nil {
diff --git a/federationapi/routing/state.go b/federationapi/routing/state.go
index 1d08d0a8..1120cf26 100644
--- a/federationapi/routing/state.go
+++ b/federationapi/routing/state.go
@@ -107,7 +107,7 @@ func getState(
return nil, nil, err
}
- event, resErr := fetchEvent(ctx, rsAPI, eventID)
+ event, resErr := fetchEvent(ctx, rsAPI, roomID, eventID)
if resErr != nil {
return nil, nil, resErr
}