Fix displayname not being html-escaped in relay mode templates

This commit is contained in:
Tulir Asokan 2021-11-05 20:08:49 +02:00
parent 911fdd37f0
commit 64db9c9c9b
2 changed files with 11 additions and 7 deletions

View file

@ -283,8 +283,8 @@ func (rc *RelaybotConfig) UnmarshalYAML(unmarshal func(interface{}) error) error
} }
type Sender struct { type Sender struct {
UserID id.UserID UserID string
*event.MemberEventContent event.MemberEventContent
} }
type formatData struct { type formatData struct {
@ -293,11 +293,15 @@ type formatData struct {
Content *event.MessageEventContent Content *event.MessageEventContent
} }
func (rc *RelaybotConfig) FormatMessage(content *event.MessageEventContent, sender id.UserID, member *event.MemberEventContent) (string, error) { func (rc *RelaybotConfig) FormatMessage(content *event.MessageEventContent, sender id.UserID, member event.MemberEventContent) (string, error) {
if len(member.Displayname) == 0 {
member.Displayname = sender.String()
}
member.Displayname = template.HTMLEscapeString(member.Displayname)
var output strings.Builder var output strings.Builder
err := rc.messageTemplates.ExecuteTemplate(&output, string(content.MsgType), formatData{ err := rc.messageTemplates.ExecuteTemplate(&output, string(content.MsgType), formatData{
Sender: Sender{ Sender: Sender{
UserID: sender, UserID: template.HTMLEscapeString(sender.String()),
MemberEventContent: member, MemberEventContent: member,
}, },
Content: content, Content: content,

View file

@ -1847,15 +1847,15 @@ type MediaUpload struct {
func (portal *Portal) addRelaybotFormat(sender *User, content *event.MessageEventContent) bool { func (portal *Portal) addRelaybotFormat(sender *User, content *event.MessageEventContent) bool {
member := portal.MainIntent().Member(portal.MXID, sender.MXID) member := portal.MainIntent().Member(portal.MXID, sender.MXID)
if len(member.Displayname) == 0 { if member == nil {
member.Displayname = string(sender.MXID) member = &event.MemberEventContent{}
} }
if content.Format != event.FormatHTML { if content.Format != event.FormatHTML {
content.FormattedBody = strings.Replace(html.EscapeString(content.Body), "\n", "<br/>", -1) content.FormattedBody = strings.Replace(html.EscapeString(content.Body), "\n", "<br/>", -1)
content.Format = event.FormatHTML content.Format = event.FormatHTML
} }
data, err := portal.bridge.Config.Bridge.Relay.FormatMessage(content, sender.MXID, member) data, err := portal.bridge.Config.Bridge.Relay.FormatMessage(content, sender.MXID, *member)
if err != nil { if err != nil {
portal.log.Errorln("Failed to apply relaybot format:", err) portal.log.Errorln("Failed to apply relaybot format:", err)
} }