Add Matrix username spoofing (#1875)

* Matrix username spoofing

* Add config sample
This commit is contained in:
Lucki 2022-09-06 00:46:52 +02:00 committed by GitHub
parent fda05f2262
commit 0c83946983
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 12 deletions

View File

@ -51,7 +51,7 @@ func interface2Struct(in interface{}, out interface{}) error {
return json.Unmarshal(jsonObj, out) return json.Unmarshal(jsonObj, out)
} }
// getDisplayName retrieves the displayName for mxid, querying the homserver if the mxid is not in the cache. // getDisplayName retrieves the displayName for mxid, querying the homeserver if the mxid is not in the cache.
func (b *Bmatrix) getDisplayName(mxid string) string { func (b *Bmatrix) getDisplayName(mxid string) string {
if b.GetBool("UseUserName") { if b.GetBool("UseUserName") {
return mxid[1:] return mxid[1:]

View File

@ -148,12 +148,37 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
username := newMatrixUsername(msg.Username) username := newMatrixUsername(msg.Username)
body := username.plain + msg.Text
formattedBody := username.formatted + helper.ParseMarkdown(msg.Text)
if b.GetBool("SpoofUsername") {
// https://spec.matrix.org/v1.3/client-server-api/#mroommember
type stateMember struct {
AvatarURL string `json:"avatar_url,omitempty"`
DisplayName string `json:"displayname"`
Membership string `json:"membership"`
}
// TODO: reset username afterwards with DisplayName: null ?
m := stateMember{
AvatarURL: "",
DisplayName: username.plain,
Membership: "join",
}
_, err := b.mc.SendStateEvent(channel, "m.room.member", b.UserID, m)
if err == nil {
body = msg.Text
formattedBody = helper.ParseMarkdown(msg.Text)
}
}
// Make a action /me of the message // Make a action /me of the message
if msg.Event == config.EventUserAction { if msg.Event == config.EventUserAction {
m := matrix.TextMessage{ m := matrix.TextMessage{
MsgType: "m.emote", MsgType: "m.emote",
Body: username.plain + msg.Text, Body: body,
FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text), FormattedBody: formattedBody,
Format: "org.matrix.custom.html", Format: "org.matrix.custom.html",
} }
@ -224,10 +249,10 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
if msg.ID != "" { if msg.ID != "" {
rmsg := EditedMessage{ rmsg := EditedMessage{
TextMessage: matrix.TextMessage{ TextMessage: matrix.TextMessage{
Body: username.plain + msg.Text, Body: body,
MsgType: "m.text", MsgType: "m.text",
Format: "org.matrix.custom.html", Format: "org.matrix.custom.html",
FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text), FormattedBody: formattedBody,
}, },
} }
@ -266,8 +291,8 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
if msg.Event == config.EventJoinLeave { if msg.Event == config.EventJoinLeave {
m := matrix.TextMessage{ m := matrix.TextMessage{
MsgType: "m.notice", MsgType: "m.notice",
Body: username.plain + msg.Text, Body: body,
FormattedBody: username.formatted + msg.Text, FormattedBody: formattedBody,
Format: "org.matrix.custom.html", Format: "org.matrix.custom.html",
} }
@ -297,8 +322,8 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
m := ReplyMessage{ m := ReplyMessage{
TextMessage: matrix.TextMessage{ TextMessage: matrix.TextMessage{
MsgType: "m.text", MsgType: "m.text",
Body: username.plain + msg.Text, Body: body,
FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text), FormattedBody: formattedBody,
Format: "org.matrix.custom.html", Format: "org.matrix.custom.html",
}, },
} }
@ -338,7 +363,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
) )
err = b.retry(func() error { err = b.retry(func() error {
resp, err = b.mc.SendText(channel, username.plain+msg.Text) resp, err = b.mc.SendText(channel, body)
return err return err
}) })
@ -356,8 +381,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
) )
err = b.retry(func() error { err = b.retry(func() error {
resp, err = b.mc.SendFormattedText(channel, username.plain+msg.Text, resp, err = b.mc.SendFormattedText(channel, body, formattedBody)
username.formatted+helper.ParseMarkdown(msg.Text))
return err return err
}) })

View File

@ -1390,6 +1390,11 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
#OPTIONAL (default false) #OPTIONAL (default false)
ShowJoinPart=false ShowJoinPart=false
#Rename the bot in the current room to the username of the message
#This will make an additional API request per message and will probably count towards rate limits
#OPTIONAL (default false)
SpoofUsername=false
#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285 #StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285
#It will strip other characters from the nick #It will strip other characters from the nick
#OPTIONAL (default false) #OPTIONAL (default false)