dendrite/common/redaction.go
Cnly ac775bb79d Add more sanity checks
Signed-off-by: Alex Chen <minecnly@gmail.com>
2019-07-31 17:13:10 +08:00

41 lines
990 B
Go

package common
import "github.com/matrix-org/gomatrixserverlib"
func ValidateRedaction(
redacted, redaction *gomatrixserverlib.Event,
) (badEvents, needPowerLevelCheck bool, err error) {
// Don't allow redaction of events in different rooms
if redaction.RoomID() != redacted.RoomID() {
return true, false, nil
}
// Don't allow an event to redact itself
if redaction.Redacts() == redaction.EventID() {
return true, false, nil
}
// Don't allow two events to redact each other
if redacted.Redacts() == redaction.EventID() {
return true, false, nil
}
var expectedDomain, redactorDomain gomatrixserverlib.ServerName
if _, expectedDomain, err = gomatrixserverlib.SplitID(
'@', redacted.Sender(),
); err != nil {
return false, false, err
}
if _, redactorDomain, err = gomatrixserverlib.SplitID(
'@', redaction.Sender(),
); err != nil {
return false, false, err
}
if expectedDomain != redactorDomain {
return false, true, err
}
return false, false, nil
}