Merge branch 'main' into neilalexander/restrictedmakesendjoin

This commit is contained in:
Neil Alexander 2022-05-24 10:12:57 +01:00
commit 174f44f274
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 39 additions and 21 deletions

View file

@ -83,29 +83,38 @@ func (s *OutputRoomEventConsumer) onMessage(ctx context.Context, msg *nats.Msg)
return true return true
} }
if output.Type != api.OutputTypeNewRoomEvent || output.NewRoomEvent == nil { log.WithFields(log.Fields{
return true "type": output.Type,
} }).Debug("Got a message in OutputRoomEventConsumer")
newEventID := output.NewRoomEvent.Event.EventID() events := []*gomatrixserverlib.HeaderedEvent{}
events := make([]*gomatrixserverlib.HeaderedEvent, 0, len(output.NewRoomEvent.AddsStateEventIDs)) if output.Type == api.OutputTypeNewRoomEvent && output.NewRoomEvent != nil {
events = append(events, output.NewRoomEvent.Event) newEventID := output.NewRoomEvent.Event.EventID()
if len(output.NewRoomEvent.AddsStateEventIDs) > 0 { events = append(events, output.NewRoomEvent.Event)
eventsReq := &api.QueryEventsByIDRequest{ if len(output.NewRoomEvent.AddsStateEventIDs) > 0 {
EventIDs: make([]string, 0, len(output.NewRoomEvent.AddsStateEventIDs)), eventsReq := &api.QueryEventsByIDRequest{
} EventIDs: make([]string, 0, len(output.NewRoomEvent.AddsStateEventIDs)),
eventsRes := &api.QueryEventsByIDResponse{} }
for _, eventID := range output.NewRoomEvent.AddsStateEventIDs { eventsRes := &api.QueryEventsByIDResponse{}
if eventID != newEventID { for _, eventID := range output.NewRoomEvent.AddsStateEventIDs {
eventsReq.EventIDs = append(eventsReq.EventIDs, eventID) if eventID != newEventID {
eventsReq.EventIDs = append(eventsReq.EventIDs, eventID)
}
}
if len(eventsReq.EventIDs) > 0 {
if err := s.rsAPI.QueryEventsByID(s.ctx, eventsReq, eventsRes); err != nil {
return false
}
events = append(events, eventsRes.Events...)
} }
} }
if len(eventsReq.EventIDs) > 0 { } else if output.Type == api.OutputTypeNewInviteEvent && output.NewInviteEvent != nil {
if err := s.rsAPI.QueryEventsByID(s.ctx, eventsReq, eventsRes); err != nil { events = append(events, output.NewInviteEvent.Event)
return false } else {
} log.WithFields(log.Fields{
events = append(events, eventsRes.Events...) "type": output.Type,
} }).Debug("appservice OutputRoomEventConsumer ignoring event", string(msg.Data))
return true
} }
// Send event to any relevant application services // Send event to any relevant application services

View file

@ -245,7 +245,9 @@ func createRoom(
case presetTrustedPrivateChat: case presetTrustedPrivateChat:
joinRuleContent.JoinRule = gomatrixserverlib.Invite joinRuleContent.JoinRule = gomatrixserverlib.Invite
historyVisibilityContent.HistoryVisibility = historyVisibilityShared historyVisibilityContent.HistoryVisibility = historyVisibilityShared
// TODO If trusted_private_chat, all invitees are given the same power level as the room creator. for _, invitee := range r.Invite {
powerLevelContent.Users[invitee] = 100
}
case presetPublicChat: case presetPublicChat:
joinRuleContent.JoinRule = gomatrixserverlib.Public joinRuleContent.JoinRule = gomatrixserverlib.Public
historyVisibilityContent.HistoryVisibility = historyVisibilityShared historyVisibilityContent.HistoryVisibility = historyVisibilityShared

View file

@ -104,6 +104,13 @@ func SendEvent(
return *resErr return *resErr
} }
// If we're sending a membership update, make sure to strip the authorised
// via key if it is present, otherwise other servers won't be able to auth
// the event if the room is set to the "restricted" join rule.
if eventType == gomatrixserverlib.MRoomMember {
delete(r, "join_authorised_by_users_server")
}
evTime, err := httputil.ParseTSParam(req) evTime, err := httputil.ParseTSParam(req)
if err != nil { if err != nil {
return util.JSONResponse{ return util.JSONResponse{