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

View file

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