Add Matrix username spoofing (#1875)
* Matrix username spoofing * Add config sample
This commit is contained in:
		@@ -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:]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user