mirror of
https://github.com/matrix-org/dendrite.git
synced 2024-11-23 06:41:56 -06:00
Cleanup
This commit is contained in:
parent
131d8ea319
commit
578e173428
|
@ -48,7 +48,7 @@ type messagesReq struct {
|
||||||
filter *gomatrixserverlib.RoomEventFilter
|
filter *gomatrixserverlib.RoomEventFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
type MessageResp struct {
|
type messagesResp struct {
|
||||||
Start string `json:"start"`
|
Start string `json:"start"`
|
||||||
StartStream string `json:"start_stream,omitempty"` // NOTSPEC: used by Cerulean, so clients can hit /messages then immediately /sync with a latest sync token
|
StartStream string `json:"start_stream,omitempty"` // NOTSPEC: used by Cerulean, so clients can hit /messages then immediately /sync with a latest sync token
|
||||||
End string `json:"end"`
|
End string `json:"end"`
|
||||||
|
@ -201,25 +201,11 @@ func OnIncomingMessagesRequest(
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply history_visibility filter
|
|
||||||
clientEventsNew := []gomatrixserverlib.ClientEvent{}
|
|
||||||
var stateForEvents internal.Visibility
|
|
||||||
stateForEvents, err = internal.GetStateForEvents(req.Context(), db, clientEvents, device.UserID)
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).Error("internal.GetStateForEvents failed")
|
|
||||||
return jsonerror.InternalServerError()
|
|
||||||
}
|
|
||||||
for _, ev := range clientEvents {
|
|
||||||
if stateForEvents.Allowed(ev.EventID) {
|
|
||||||
clientEventsNew = append(clientEventsNew, ev)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// at least fetch the membership events for the users returned in chunk if LazyLoadMembers is set
|
// at least fetch the membership events for the users returned in chunk if LazyLoadMembers is set
|
||||||
state := []gomatrixserverlib.ClientEvent{}
|
state := []gomatrixserverlib.ClientEvent{}
|
||||||
if filter.LazyLoadMembers {
|
if filter.LazyLoadMembers {
|
||||||
membershipToUser := make(map[string]*gomatrixserverlib.HeaderedEvent)
|
membershipToUser := make(map[string]*gomatrixserverlib.HeaderedEvent)
|
||||||
for _, evt := range clientEventsNew {
|
for _, evt := range clientEvents {
|
||||||
// Don't add membership events the client should already know about
|
// Don't add membership events the client should already know about
|
||||||
if _, cached := lazyLoadCache.IsLazyLoadedUserCached(device, roomID, evt.Sender); cached {
|
if _, cached := lazyLoadCache.IsLazyLoadedUserCached(device, roomID, evt.Sender); cached {
|
||||||
continue
|
continue
|
||||||
|
@ -239,8 +225,6 @@ func OnIncomingMessagesRequest(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("Events after filtering: %d vs %d", len(clientEvents), len(clientEventsNew))
|
|
||||||
|
|
||||||
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
||||||
"from": from.String(),
|
"from": from.String(),
|
||||||
"to": to.String(),
|
"to": to.String(),
|
||||||
|
@ -250,8 +234,8 @@ func OnIncomingMessagesRequest(
|
||||||
"return_end": end.String(),
|
"return_end": end.String(),
|
||||||
}).Info("Responding")
|
}).Info("Responding")
|
||||||
|
|
||||||
res := MessageResp{
|
res := messagesResp{
|
||||||
Chunk: clientEventsNew,
|
Chunk: clientEvents,
|
||||||
Start: start.String(),
|
Start: start.String(),
|
||||||
End: end.String(),
|
End: end.String(),
|
||||||
State: state,
|
State: state,
|
||||||
|
@ -267,6 +251,23 @@ func OnIncomingMessagesRequest(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *messagesReq) applyHistoryVisibilityFilter(
|
||||||
|
clientEvents []gomatrixserverlib.ClientEvent,
|
||||||
|
userID string,
|
||||||
|
) ([]gomatrixserverlib.ClientEvent, error) {
|
||||||
|
clientEventsFiltered := []gomatrixserverlib.ClientEvent{}
|
||||||
|
stateForEvents, err := internal.GetStateForEvents(r.ctx, r.db, clientEvents, userID)
|
||||||
|
if err != nil {
|
||||||
|
return clientEventsFiltered, err
|
||||||
|
}
|
||||||
|
for _, ev := range clientEvents {
|
||||||
|
if stateForEvents.Allowed(ev.EventID) {
|
||||||
|
clientEventsFiltered = append(clientEventsFiltered, ev)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return clientEventsFiltered, nil
|
||||||
|
}
|
||||||
|
|
||||||
func checkIsRoomForgotten(ctx context.Context, roomID, userID string, rsAPI api.SyncRoomserverAPI) (forgotten bool, exists bool, err error) {
|
func checkIsRoomForgotten(ctx context.Context, roomID, userID string, rsAPI api.SyncRoomserverAPI) (forgotten bool, exists bool, err error) {
|
||||||
req := api.QueryMembershipForUserRequest{
|
req := api.QueryMembershipForUserRequest{
|
||||||
RoomID: roomID,
|
RoomID: roomID,
|
||||||
|
@ -324,6 +325,9 @@ func (r *messagesReq) retrieveEvents() (
|
||||||
// reliable way to define it), it would be easier and less troublesome to
|
// reliable way to define it), it would be easier and less troublesome to
|
||||||
// only have to change it in one place, i.e. the database.
|
// only have to change it in one place, i.e. the database.
|
||||||
start, end, err = r.getStartEnd(events)
|
start, end, err = r.getStartEnd(events)
|
||||||
|
if err != nil {
|
||||||
|
return []gomatrixserverlib.ClientEvent{}, *r.from, *r.to, err
|
||||||
|
}
|
||||||
|
|
||||||
// Sort the events to ensure we send them in the right order.
|
// Sort the events to ensure we send them in the right order.
|
||||||
if r.backwardOrdering {
|
if r.backwardOrdering {
|
||||||
|
@ -341,8 +345,9 @@ func (r *messagesReq) retrieveEvents() (
|
||||||
return []gomatrixserverlib.ClientEvent{}, *r.from, *r.to, nil
|
return []gomatrixserverlib.ClientEvent{}, *r.from, *r.to, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert all of the events into client events.
|
// Convert all events into client events and filter them.
|
||||||
clientEvents = gomatrixserverlib.HeaderedToClientEvents(events, gomatrixserverlib.FormatAll)
|
clientEvents, err = r.applyHistoryVisibilityFilter(gomatrixserverlib.HeaderedToClientEvents(events, gomatrixserverlib.FormatAll), r.device.UserID)
|
||||||
|
|
||||||
return clientEvents, start, end, err
|
return clientEvents, start, end, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue