mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-26 00:03:09 -06:00
Fix complexity
This commit is contained in:
parent
50ba0cce78
commit
a5ba01eb76
|
|
@ -123,6 +123,35 @@ func (s *OutputRoomEventConsumer) filterRoomserverEvents(
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// appserviceHasMembershipInRoom returns a boolean depending on whether a given
|
||||||
|
// appservice has membership at the time a given event was created.
|
||||||
|
func (s *OutputRoomEventConsumer) appserviceHasMembershipForEvent(ctx context.Context, event *gomatrixserverlib.HeaderedEvent, appservice config.ApplicationService) bool {
|
||||||
|
// Check if any of the members in the room match the appservice
|
||||||
|
membershipReq := api.QueryStateAfterEventsRequest{
|
||||||
|
PrevEventIDs: []string{event.EventID()},
|
||||||
|
RoomID: event.RoomID(),
|
||||||
|
}
|
||||||
|
var membershipRes api.QueryStateAfterEventsResponse
|
||||||
|
|
||||||
|
// XXX: This could potentially race if the state for the event is not known yet
|
||||||
|
// e.g. the event came over federation but we do not have the full state persisted.
|
||||||
|
if err := s.rsAPI.QueryStateAfterEvents(ctx, &membershipReq, &membershipRes); err == nil {
|
||||||
|
for _, ev := range membershipRes.StateEvents {
|
||||||
|
if ev.Type() == gomatrixserverlib.MRoomMember {
|
||||||
|
var membership, _ = ev.Membership()
|
||||||
|
if membership == gomatrixserverlib.Join && appservice.IsInterestedInUserID(*ev.StateKey()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"room_id": event.RoomID(),
|
||||||
|
}).WithError(err).Errorf("Unable to get membership for room")
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// appserviceIsInterestedInEvent returns a boolean depending on whether a given
|
// appserviceIsInterestedInEvent returns a boolean depending on whether a given
|
||||||
// event falls within one of a given application service's namespaces.
|
// event falls within one of a given application service's namespaces.
|
||||||
//
|
//
|
||||||
|
|
@ -162,27 +191,5 @@ func (s *OutputRoomEventConsumer) appserviceIsInterestedInEvent(ctx context.Cont
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if any of the members in the room match the appservice
|
// Check if any of the members in the room match the appservice
|
||||||
membershipReq := api.QueryStateAfterEventsRequest{
|
return s.appserviceHasMembershipForEvent(ctx, event, appservice)
|
||||||
PrevEventIDs: []string{event.EventID()},
|
|
||||||
RoomID: event.RoomID(),
|
|
||||||
}
|
|
||||||
var membershipRes api.QueryStateAfterEventsResponse
|
|
||||||
|
|
||||||
// XXX: This could potentially race if the state for the event is not known yet
|
|
||||||
// e.g. the event came over federation but we do not have the full state persisted.
|
|
||||||
if err := s.rsAPI.QueryStateAfterEvents(ctx, &membershipReq, &membershipRes); err == nil {
|
|
||||||
for _, ev := range membershipRes.StateEvents {
|
|
||||||
if ev.Type() == gomatrixserverlib.MRoomMember {
|
|
||||||
var membership, _ = ev.Membership()
|
|
||||||
if membership == gomatrixserverlib.Join && appservice.IsInterestedInUserID(*ev.StateKey()) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.WithFields(log.Fields{
|
|
||||||
"room_id": event.RoomID(),
|
|
||||||
}).WithError(err).Errorf("Unable to get membership for room")
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue