This commit is contained in:
Neil Alexander 2020-08-11 16:30:56 +01:00
parent 8a62fb06eb
commit c57dd004b8
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
2 changed files with 12 additions and 4 deletions

View file

@ -56,13 +56,16 @@ type serverACL struct {
func (s *ServerACLs) OnServerACLUpdate(state *gomatrixserverlib.Event) {
acls := &serverACL{}
if err := json.Unmarshal(state.Content(), &acls.ServerACL); err != nil {
logrus.WithError(err).Errorf("Failed to unmarshal state content for server ACLs")
return
}
for _, orig := range acls.Allowed {
escaped := regexp.QuoteMeta(orig)
escaped = strings.Replace(escaped, "\\?", "(.)", -1)
escaped = strings.Replace(escaped, "\\*", "(.*)", -1)
if expr, err := regexp.Compile(escaped); err == nil {
if expr, err := regexp.Compile(escaped); err != nil {
logrus.WithError(err).Errorf("Failed to compile allowed regex")
} else {
acls.allowedRegexes = append(acls.allowedRegexes, expr)
}
}
@ -70,7 +73,9 @@ func (s *ServerACLs) OnServerACLUpdate(state *gomatrixserverlib.Event) {
escaped := regexp.QuoteMeta(orig)
escaped = strings.Replace(escaped, "\\?", "(.)", -1)
escaped = strings.Replace(escaped, "\\*", "(.*)", -1)
if expr, err := regexp.Compile(escaped); err == nil {
if expr, err := regexp.Compile(escaped); err != nil {
logrus.WithError(err).Errorf("Failed to compile denied regex")
} else {
acls.deniedRegexes = append(acls.deniedRegexes, expr)
}
}
@ -78,7 +83,7 @@ func (s *ServerACLs) OnServerACLUpdate(state *gomatrixserverlib.Event) {
"allow_ip_literals": acls.AllowIPLiterals,
"num_allowed": len(acls.allowedRegexes),
"num_denied": len(acls.deniedRegexes),
}).Infof("Updating server ACLs for %q", state.RoomID())
}).Debugf("Updating server ACLs for %q", state.RoomID())
s.aclsMutex.Lock()
defer s.aclsMutex.Unlock()
s.acls[state.RoomID()] = acls

View file

@ -79,6 +79,10 @@ func (c *OutputRoomEventConsumer) onNewRoomEvent(
) error {
ev := msg.Event
if ev.Type() == "m.room.server_acl" {
defer c.acls.OnServerACLUpdate(&ev.Event)
}
addsStateEvents := msg.AddsState()
ev, err := c.updateStateEvent(ev)
@ -91,7 +95,6 @@ func (c *OutputRoomEventConsumer) onNewRoomEvent(
if err != nil {
return err
}
c.acls.OnServerACLUpdate(&addsStateEvents[i].Event)
}
err = c.db.StoreStateEvents(