diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go index c2305bd5..ce032542 100644 --- a/bridge/matrix/matrix.go +++ b/bridge/matrix/matrix.go @@ -14,7 +14,7 @@ import ( "github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/helper" - matrix "github.com/matterbridge/gomatrix" + matrix "github.com/matrix-org/gomatrix" ) type Bmatrix struct { @@ -49,9 +49,10 @@ func (b *Bmatrix) Connect() error { return err } resp, err := b.mc.Login(&matrix.ReqLogin{ - Type: "m.login.password", - User: b.GetString("Login"), - Password: b.GetString("Password"), + Type: "m.login.password", + User: b.GetString("Login"), + Password: b.GetString("Password"), + Identifier: matrix.NewUserIdentifier(b.GetString("Login")), }) if err != nil { return err @@ -166,7 +167,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) { } // Post normal message with HTML support (eg riot.im) - resp, err := b.mc.SendHTML(channel, plainUsername+msg.Text, username+helper.ParseMarkdown(msg.Text)) + resp, err := b.mc.SendFormattedText(channel, plainUsername+msg.Text, username+helper.ParseMarkdown(msg.Text)) if err != nil { return "", err } @@ -370,13 +371,29 @@ func (b *Bmatrix) handleUploadFile(msg *config.Message, channel string, fi *conf } case strings.Contains(mtype, "application"): b.Log.Debugf("sendFile %s", res.ContentURI) - _, err = b.mc.SendFile(channel, fi.Name, res.ContentURI, mtype, uint(len(*fi.Data))) + _, err = b.mc.SendMessageEvent(channel, "m.room.message", matrix.FileMessage{ + MsgType: "m.file", + Body: fi.Name, + URL: res.ContentURI, + Info: matrix.FileInfo{ + Mimetype: mtype, + Size: uint(len(*fi.Data)), + }, + }) if err != nil { b.Log.Errorf("sendFile failed: %#v", err) } case strings.Contains(mtype, "audio"): b.Log.Debugf("sendAudio %s", res.ContentURI) - _, err = b.mc.SendAudio(channel, fi.Name, res.ContentURI, mtype, uint(len(*fi.Data))) + _, err = b.mc.SendMessageEvent(channel, "m.room.message", matrix.AudioMessage{ + MsgType: "m.audio", + Body: fi.Name, + URL: res.ContentURI, + Info: matrix.AudioInfo{ + Mimetype: mtype, + Size: uint(len(*fi.Data)), + }, + }) if err != nil { b.Log.Errorf("sendAudio failed: %#v", err) } @@ -402,12 +419,18 @@ func (b *Bmatrix) containsAttachment(content map[string]interface{}) bool { // getAvatarURL returns the avatar URL of the specified sender func (b *Bmatrix) getAvatarURL(sender string) string { - mxcURL, err := b.mc.GetSenderAvatarURL(sender) + urlPath := b.mc.BuildURL("profile", sender, "avatar_url") + + s := struct { + AvatarURL string `json:"avatar_url"` + }{} + + err := b.mc.MakeRequest("GET", urlPath, nil, &s) if err != nil { b.Log.Errorf("getAvatarURL failed: %s", err) return "" } - url := strings.ReplaceAll(mxcURL, "mxc://", b.GetString("Server")+"/_matrix/media/r0/thumbnail/") + url := strings.ReplaceAll(s.AvatarURL, "mxc://", b.GetString("Server")+"/_matrix/media/r0/thumbnail/") if url != "" { url += "?width=37&height=37&method=crop" } diff --git a/go.mod b/go.mod index af556d13..bfc4a3ba 100644 --- a/go.mod +++ b/go.mod @@ -20,11 +20,11 @@ require ( github.com/keybase/go-keybase-chat-bot v0.0.0-20200505163032-5cacf52379da github.com/labstack/echo/v4 v4.1.16 github.com/lrstanley/girc v0.0.0-20190801035559-4fc93959e1a7 + github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048 github.com/matterbridge/discordgo v0.21.2-0.20200718144317-01fe5db6c78d github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050 - github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6 github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913 github.com/matterbridge/logrus-prefixed-formatter v0.5.3-0.20200523233437-d971309a77ba github.com/mattermost/mattermost-server/v5 v5.25.2 diff --git a/go.sum b/go.sum index 389094b9..3e236608 100644 --- a/go.sum +++ b/go.sum @@ -344,6 +344,8 @@ github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd h1:xVrqJK3xHREMNjwjljkAUaadalWc0rRbmVuQatzmgwg= +github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s= github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048 h1:B9HaistmV+MD8/33BXmZe1zPIn+RImAFVXNNSOrwU2E= github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048/go.mod h1:c6MxwqHD+0HvtAJjsHMIdPCiAwGiQwPRPTp69ACMg8A= github.com/matterbridge/discordgo v0.21.2-0.20200718144317-01fe5db6c78d h1:NBckP4nw7qVspbt7cOZYsrOrEbq7tATdMjSjc1hW63A= @@ -352,8 +354,6 @@ github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible/go.mod h1:igE6rUAn3jai2wCdsjFHfhUoekjrFthoEjFObKKwSb4= github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050 h1:kWkP1lXpkvtoNL08jkP3XQH/zvDOEXJpdCJd/DlIvMw= github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q= -github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6 h1:Kl65VJv38HjYFnnwH+MP6Z8hcJT5UHuSpHVU5vW1HH0= -github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g= github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913 h1:5UGr9fLsvAvhjP6i5XJmd0ZIwYVR2gZCzU1lJZ7wfLY= github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA= github.com/matterbridge/logrus-prefixed-formatter v0.5.3-0.20200523233437-d971309a77ba h1:XleOY4IjAEIcxAh+IFwT5JT5Ze3RHiYz6m+4ZfZ0rc0= diff --git a/vendor/github.com/matterbridge/gomatrix/.gitignore b/vendor/github.com/matrix-org/gomatrix/.gitignore similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/.gitignore rename to vendor/github.com/matrix-org/gomatrix/.gitignore diff --git a/vendor/github.com/matrix-org/gomatrix/.golangci.yml b/vendor/github.com/matrix-org/gomatrix/.golangci.yml new file mode 100644 index 00000000..15eb6ef7 --- /dev/null +++ b/vendor/github.com/matrix-org/gomatrix/.golangci.yml @@ -0,0 +1,21 @@ +run: + timeout: 5m + linters: + enable: + - vet + - vetshadow + - typecheck + - deadcode + - gocyclo + - golint + - varcheck + - structcheck + - maligned + - ineffassign + - misspell + - unparam + - goimports + - goconst + - unconvert + - errcheck + - interfacer diff --git a/vendor/github.com/matrix-org/gomatrix/.travis.yml b/vendor/github.com/matrix-org/gomatrix/.travis.yml new file mode 100644 index 00000000..46997ab6 --- /dev/null +++ b/vendor/github.com/matrix-org/gomatrix/.travis.yml @@ -0,0 +1,7 @@ +language: go +go: + - 1.13.10 +install: + - go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.24.0 + - go build +script: ./hooks/pre-commit diff --git a/vendor/github.com/matterbridge/gomatrix/LICENSE b/vendor/github.com/matrix-org/gomatrix/LICENSE similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/LICENSE rename to vendor/github.com/matrix-org/gomatrix/LICENSE diff --git a/vendor/github.com/matterbridge/gomatrix/README.md b/vendor/github.com/matrix-org/gomatrix/README.md similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/README.md rename to vendor/github.com/matrix-org/gomatrix/README.md diff --git a/vendor/github.com/matterbridge/gomatrix/client.go b/vendor/github.com/matrix-org/gomatrix/client.go similarity index 91% rename from vendor/github.com/matterbridge/gomatrix/client.go rename to vendor/github.com/matrix-org/gomatrix/client.go index 6dda4bc4..fd77fce0 100644 --- a/vendor/github.com/matterbridge/gomatrix/client.go +++ b/vendor/github.com/matrix-org/gomatrix/client.go @@ -55,10 +55,7 @@ func (e HTTPError) Error() string { // BuildURL builds a URL with the Client's homserver/prefix/access_token set already. func (cli *Client) BuildURL(urlPath ...string) string { - ps := []string{cli.Prefix} - for _, p := range urlPath { - ps = append(ps, p) - } + ps := append([]string{cli.Prefix}, urlPath...) return cli.BuildBaseURL(ps...) } @@ -357,7 +354,7 @@ func (cli *Client) Login(req *ReqLogin) (resp *RespLogin, err error) { return } -// Logout the current user. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout +// Logout the current user. See http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout // This does not clear the credentials from the client instance. See ClearCredentials() instead. func (cli *Client) Logout() (resp *RespLogout, err error) { urlPath := cli.BuildURL("logout") @@ -365,6 +362,14 @@ func (cli *Client) Logout() (resp *RespLogout, err error) { return } +// LogoutAll logs the current user out on all devices. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all +// This does not clear the credentials from the client instance. See ClearCredentails() instead. +func (cli *Client) LogoutAll() (resp *RespLogoutAll, err error) { + urlPath := cli.BuildURL("logout/all") + err = cli.MakeRequest("POST", urlPath, nil, &resp) + return +} + // Versions returns the list of supported Matrix versions on this homeserver. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions func (cli *Client) Versions() (resp *RespVersions, err error) { urlPath := cli.BuildBaseURL("_matrix", "client", "versions") @@ -475,21 +480,6 @@ func (cli *Client) GetAvatarURL() (string, error) { return s.AvatarURL, nil } -// GetAvatarURL gets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url -func (cli *Client) GetSenderAvatarURL(sender string) (string, error) { - urlPath := cli.BuildURL("profile", sender, "avatar_url") - s := struct { - AvatarURL string `json:"avatar_url"` - }{} - - err := cli.MakeRequest("GET", urlPath, nil, &s) - if err != nil { - return "", err - } - - return s.AvatarURL, nil -} - // SetAvatarURL sets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url func (cli *Client) SetAvatarURL(url string) error { urlPath := cli.BuildURL("profile", cli.UserID, "avatar_url") @@ -504,6 +494,29 @@ func (cli *Client) SetAvatarURL(url string) error { return nil } +// GetStatus returns the status of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status +func (cli *Client) GetStatus(mxid string) (resp *RespUserStatus, err error) { + urlPath := cli.BuildURL("presence", mxid, "status") + err = cli.MakeRequest("GET", urlPath, nil, &resp) + return +} + +// GetOwnStatus returns the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status +func (cli *Client) GetOwnStatus() (resp *RespUserStatus, err error) { + return cli.GetStatus(cli.UserID) +} + +// SetStatus sets the user's status. See https://matrix.org/docs/spec/client_server/r0.6.0#put-matrix-client-r0-presence-userid-status +func (cli *Client) SetStatus(presence, status string) (err error) { + urlPath := cli.BuildURL("presence", cli.UserID, "status") + s := struct { + Presence string `json:"presence"` + StatusMsg string `json:"status_msg"` + }{presence, status} + err = cli.MakeRequest("PUT", urlPath, &s, nil) + return +} + // SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid // contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal. func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) { @@ -525,12 +538,14 @@ func (cli *Client) SendStateEvent(roomID, eventType, stateKey string, contentJSO // See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error) { return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.text", text, "", ""}) + TextMessage{MsgType: "m.text", Body: text}) } -func (cli *Client) SendHTML(roomID, textclear, text string) (*RespSendEvent, error) { +// SendFormattedText sends an m.room.message event into the given room with a msgtype of m.text, supports a subset of HTML for formatting. +// See https://matrix.org/docs/spec/client_server/r0.6.0#m-text +func (cli *Client) SendFormattedText(roomID, text, formattedText string) (*RespSendEvent, error) { return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.text", textclear, "org.matrix.custom.html", text}) + TextMessage{MsgType: "m.text", Body: text, FormattedBody: formattedText, Format: "org.matrix.custom.html"}) } // SendImage sends an m.room.message event into the given room with a msgtype of m.image @@ -555,46 +570,11 @@ func (cli *Client) SendVideo(roomID, body, url string) (*RespSendEvent, error) { }) } -// SendAudio sends an m.room.message event into the given room with a msgtype of m.audio -// See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio -func (cli *Client) SendAudio(roomID, body, url, mimetype string, size uint) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - AudioMessage{ - MsgType: "m.audio", - Body: body, - URL: url, - Info: AudioInfo{ - Size: size, - Mimetype: mimetype, - }, - }) -} - -// SendFile sends an m.room.message event into the given room with a msgtype of m.file -// See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-file -func (cli *Client) SendFile(roomID, body, url, mimetype string, size uint) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - FileMessage{ - MsgType: "m.file", - Body: body, - URL: url, - Info: FileInfo{ - Size: size, - Mimetype: mimetype, - }, - }) -} - // SendNotice sends an m.room.message event into the given room with a msgtype of m.notice // See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-notice func (cli *Client) SendNotice(roomID, text string) (*RespSendEvent, error) { return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.notice", text, "", ""}) -} - -func (cli *Client) SendNoticeHTML(roomID, textclear, text string) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.notice", textclear, "org.matrix.custom.html", text}) + TextMessage{MsgType: "m.notice", Body: text}) } // RedactEvent redacts the given event. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid @@ -605,6 +585,12 @@ func (cli *Client) RedactEvent(roomID, eventID string, req *ReqRedact) (resp *Re return } +// MarkRead marks eventID in roomID as read, signifying the event, and all before it have been read. See https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid +func (cli *Client) MarkRead(roomID, eventID string) error { + urlPath := cli.BuildURL("rooms", roomID, "receipt", "m.read", eventID) + return cli.MakeRequest("POST", urlPath, nil, nil) +} + // CreateRoom creates a new Matrix room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom // resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{ // Preset: "public_chat", diff --git a/vendor/github.com/matterbridge/gomatrix/events.go b/vendor/github.com/matrix-org/gomatrix/events.go similarity index 77% rename from vendor/github.com/matterbridge/gomatrix/events.go rename to vendor/github.com/matrix-org/gomatrix/events.go index 2ebbedca..cbc70a82 100644 --- a/vendor/github.com/matterbridge/gomatrix/events.go +++ b/vendor/github.com/matrix-org/gomatrix/events.go @@ -45,8 +45,8 @@ func (event *Event) MessageType() (msgtype string, ok bool) { type TextMessage struct { MsgType string `json:"msgtype"` Body string `json:"body"` - Format string `json:"format,omitempty"` - FormattedBody string `json:"formatted_body,omitempty"` + FormattedBody string `json:"formatted_body"` + Format string `json:"format"` } // ThumbnailInfo contains info about an thumbnail image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image @@ -78,21 +78,6 @@ type VideoInfo struct { Size uint `json:"size,omitempty"` } -// AudioInfo contains info about a file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio -type AudioInfo struct { - Mimetype string `json:"mimetype,omitempty"` - Size uint `json:"size,omitempty"` - Duration uint `json:"duration,omitempty"` -} - -// FileInfo contains info about a file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file -type FileInfo struct { - Mimetype string `json:"mimetype,omitempty"` - ThumbnailInfo ImageInfo `json:"thumbnail_info"` - ThumbnailURL string `json:"thumbnail_url,omitempty"` - Size uint `json:"size,omitempty"` -} - // VideoMessage is an m.video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video type VideoMessage struct { MsgType string `json:"msgtype"` @@ -109,22 +94,6 @@ type ImageMessage struct { Info ImageInfo `json:"info"` } -// AudioMessage is an m.audio event -type AudioMessage struct { - MsgType string `json:"msgtype"` - Body string `json:"body"` - URL string `json:"url"` - Info AudioInfo `json:"info"` -} - -// FileMessage is a m.file event -type FileMessage struct { - MsgType string `json:"msgtype"` - Body string `json:"body"` - URL string `json:"url"` - Info FileInfo `json:"info"` -} - // An HTMLMessage is the contents of a Matrix HTML formated message event. type HTMLMessage struct { Body string `json:"body"` @@ -133,6 +102,47 @@ type HTMLMessage struct { FormattedBody string `json:"formatted_body"` } +// FileInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file +type FileInfo struct { + Mimetype string `json:"mimetype,omitempty"` + Size uint `json:"size,omitempty"` //filesize in bytes +} + +// FileMessage is an m.file event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-file +type FileMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + URL string `json:"url"` + Filename string `json:"filename"` + Info FileInfo `json:"info,omitempty"` + ThumbnailURL string `json:"thumbnail_url,omitempty"` + ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` +} + +// LocationMessage is an m.location event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-location +type LocationMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + GeoURI string `json:"geo_uri"` + ThumbnailURL string `json:"thumbnail_url,omitempty"` + ThumbnailInfo ImageInfo `json:"thumbnail_info,omitempty"` +} + +// AudioInfo contains info about an file - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio +type AudioInfo struct { + Mimetype string `json:"mimetype,omitempty"` + Size uint `json:"size,omitempty"` //filesize in bytes + Duration uint `json:"duration,omitempty"` //audio duration in ms +} + +// AudioMessage is an m.audio event - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-audio +type AudioMessage struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + URL string `json:"url"` + Info AudioInfo `json:"info,omitempty"` +} + var htmlRegex = regexp.MustCompile("<[^<]+?>") // GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition diff --git a/vendor/github.com/matterbridge/gomatrix/filter.go b/vendor/github.com/matrix-org/gomatrix/filter.go similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/filter.go rename to vendor/github.com/matrix-org/gomatrix/filter.go diff --git a/vendor/github.com/matrix-org/gomatrix/go.mod b/vendor/github.com/matrix-org/gomatrix/go.mod new file mode 100644 index 00000000..18e69bf1 --- /dev/null +++ b/vendor/github.com/matrix-org/gomatrix/go.mod @@ -0,0 +1,3 @@ +module github.com/matrix-org/gomatrix + +go 1.12 diff --git a/vendor/github.com/matrix-org/gomatrix/identifier.go b/vendor/github.com/matrix-org/gomatrix/identifier.go new file mode 100644 index 00000000..4a61d080 --- /dev/null +++ b/vendor/github.com/matrix-org/gomatrix/identifier.go @@ -0,0 +1,69 @@ +package gomatrix + +// Identifier is the interface for https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types +type Identifier interface { + // Returns the identifier type + // https://matrix.org/docs/spec/client_server/r0.6.0#identifier-types + Type() string +} + +// UserIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#matrix-user-id +type UserIdentifier struct { + IDType string `json:"type"` // Set by NewUserIdentifer + User string `json:"user"` +} + +// Type implements the Identifier interface +func (i UserIdentifier) Type() string { + return "m.id.user" +} + +// NewUserIdentifier creates a new UserIdentifier with IDType set to "m.id.user" +func NewUserIdentifier(user string) UserIdentifier { + return UserIdentifier{ + IDType: "m.id.user", + User: user, + } +} + +// ThirdpartyIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#third-party-id +type ThirdpartyIdentifier struct { + IDType string `json:"type"` // Set by NewThirdpartyIdentifier + Medium string `json:"medium"` + Address string `json:"address"` +} + +// Type implements the Identifier interface +func (i ThirdpartyIdentifier) Type() string { + return "m.id.thirdparty" +} + +// NewThirdpartyIdentifier creates a new UserIdentifier with IDType set to "m.id.user" +func NewThirdpartyIdentifier(medium, address string) ThirdpartyIdentifier { + return ThirdpartyIdentifier{ + IDType: "m.id.thirdparty", + Medium: medium, + Address: address, + } +} + +// PhoneIdentifier is the Identifier for https://matrix.org/docs/spec/client_server/r0.6.0#phone-number +type PhoneIdentifier struct { + IDType string `json:"type"` // Set by NewPhoneIdentifier + Country string `json:"country"` + Phone string `json:"phone"` +} + +// Type implements the Identifier interface +func (i PhoneIdentifier) Type() string { + return "m.id.phone" +} + +// NewPhoneIdentifier creates a new UserIdentifier with IDType set to "m.id.user" +func NewPhoneIdentifier(country, phone string) PhoneIdentifier { + return PhoneIdentifier{ + IDType: "m.id.phone", + Country: country, + Phone: phone, + } +} diff --git a/vendor/github.com/matterbridge/gomatrix/requests.go b/vendor/github.com/matrix-org/gomatrix/requests.go similarity index 83% rename from vendor/github.com/matterbridge/gomatrix/requests.go rename to vendor/github.com/matrix-org/gomatrix/requests.go index af99a226..31c426d4 100644 --- a/vendor/github.com/matterbridge/gomatrix/requests.go +++ b/vendor/github.com/matrix-org/gomatrix/requests.go @@ -10,16 +10,17 @@ type ReqRegister struct { Auth interface{} `json:"auth,omitempty"` } -// ReqLogin is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login +// ReqLogin is the JSON request for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login type ReqLogin struct { - Type string `json:"type"` - Password string `json:"password,omitempty"` - Medium string `json:"medium,omitempty"` - User string `json:"user,omitempty"` - Address string `json:"address,omitempty"` - Token string `json:"token,omitempty"` - DeviceID string `json:"device_id,omitempty"` - InitialDeviceDisplayName string `json:"initial_device_display_name,omitempty"` + Type string `json:"type"` + Identifier Identifier `json:"identifier,omitempty"` + Password string `json:"password,omitempty"` + Medium string `json:"medium,omitempty"` + User string `json:"user,omitempty"` + Address string `json:"address,omitempty"` + Token string `json:"token,omitempty"` + DeviceID string `json:"device_id,omitempty"` + InitialDeviceDisplayName string `json:"initial_device_display_name,omitempty"` } // ReqCreateRoom is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom diff --git a/vendor/github.com/matterbridge/gomatrix/responses.go b/vendor/github.com/matrix-org/gomatrix/responses.go similarity index 82% rename from vendor/github.com/matterbridge/gomatrix/responses.go rename to vendor/github.com/matrix-org/gomatrix/responses.go index effb6096..f488e69e 100644 --- a/vendor/github.com/matterbridge/gomatrix/responses.go +++ b/vendor/github.com/matrix-org/gomatrix/responses.go @@ -113,6 +113,14 @@ type RespUserDisplayName struct { DisplayName string `json:"displayname"` } +// RespUserStatus is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-presence-userid-status +type RespUserStatus struct { + Presence string `json:"presence"` + StatusMsg string `json:"status_msg"` + LastActiveAgo int `json:"last_active_ago"` + CurrentlyActive bool `json:"currently_active"` +} + // RespRegister is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register type RespRegister struct { AccessToken string `json:"access_token"` @@ -122,17 +130,31 @@ type RespRegister struct { UserID string `json:"user_id"` } -// RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login +// RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-login type RespLogin struct { - AccessToken string `json:"access_token"` - DeviceID string `json:"device_id"` - HomeServer string `json:"home_server"` - UserID string `json:"user_id"` + AccessToken string `json:"access_token"` + DeviceID string `json:"device_id"` + HomeServer string `json:"home_server"` + UserID string `json:"user_id"` + WellKnown DiscoveryInformation `json:"well_known"` } -// RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout +// DiscoveryInformation is the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#get-well-known-matrix-client and a part of the JSON Response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-login +type DiscoveryInformation struct { + Homeserver struct { + BaseURL string `json:"base_url"` + } `json:"m.homeserver"` + IdentityServer struct { + BaseURL string `json:"base_url"` + } `json:"m.identitiy_server"` +} + +// RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.6.0.html#post-matrix-client-r0-logout type RespLogout struct{} +// RespLogoutAll is the JSON response for https://matrix.org/docs/spec/client_server/r0.6.0#post-matrix-client-r0-logout-all +type RespLogoutAll struct{} + // RespCreateRoom is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom type RespCreateRoom struct { RoomID string `json:"room_id"` @@ -167,6 +189,9 @@ type RespSync struct { Limited bool `json:"limited"` PrevBatch string `json:"prev_batch"` } `json:"timeline"` + Ephemeral struct { + Events []Event `json:"events"` + } `json:"ephemeral"` } `json:"join"` Invite map[string]struct { State struct { diff --git a/vendor/github.com/matterbridge/gomatrix/room.go b/vendor/github.com/matrix-org/gomatrix/room.go similarity index 96% rename from vendor/github.com/matterbridge/gomatrix/room.go rename to vendor/github.com/matrix-org/gomatrix/room.go index d1d22868..364deab2 100644 --- a/vendor/github.com/matterbridge/gomatrix/room.go +++ b/vendor/github.com/matrix-org/gomatrix/room.go @@ -31,8 +31,8 @@ func (room Room) UpdateState(event *Event) { // GetStateEvent returns the state event for the given type/state_key combo, or nil. func (room Room) GetStateEvent(eventType string, stateKey string) *Event { - stateEventMap, _ := room.State[eventType] - event, _ := stateEventMap[stateKey] + stateEventMap := room.State[eventType] + event := stateEventMap[stateKey] return event } diff --git a/vendor/github.com/matterbridge/gomatrix/store.go b/vendor/github.com/matrix-org/gomatrix/store.go similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/store.go rename to vendor/github.com/matrix-org/gomatrix/store.go diff --git a/vendor/github.com/matterbridge/gomatrix/sync.go b/vendor/github.com/matrix-org/gomatrix/sync.go similarity index 98% rename from vendor/github.com/matterbridge/gomatrix/sync.go rename to vendor/github.com/matrix-org/gomatrix/sync.go index c4bea48c..ac326c3a 100644 --- a/vendor/github.com/matterbridge/gomatrix/sync.go +++ b/vendor/github.com/matrix-org/gomatrix/sync.go @@ -64,6 +64,10 @@ func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error) event.RoomID = roomID s.notifyListeners(&event) } + for _, event := range roomData.Ephemeral.Events { + event.RoomID = roomID + s.notifyListeners(&event) + } } for roomID, roomData := range res.Rooms.Invite { room := s.getOrCreateRoom(roomID) diff --git a/vendor/github.com/matterbridge/gomatrix/tags.go b/vendor/github.com/matrix-org/gomatrix/tags.go similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/tags.go rename to vendor/github.com/matrix-org/gomatrix/tags.go diff --git a/vendor/github.com/matterbridge/gomatrix/userids.go b/vendor/github.com/matrix-org/gomatrix/userids.go similarity index 100% rename from vendor/github.com/matterbridge/gomatrix/userids.go rename to vendor/github.com/matrix-org/gomatrix/userids.go diff --git a/vendor/github.com/matterbridge/gomatrix/.travis.yml b/vendor/github.com/matterbridge/gomatrix/.travis.yml deleted file mode 100644 index 13585d41..00000000 --- a/vendor/github.com/matterbridge/gomatrix/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go -go: - - 1.10.x -install: - - go get github.com/golang/lint/golint - - go get github.com/fzipp/gocyclo - - go get github.com/client9/misspell/... - - go get github.com/gordonklaus/ineffassign -script: ./hooks/pre-commit diff --git a/vendor/modules.txt b/vendor/modules.txt index f52c5255..cd3e7000 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -101,6 +101,8 @@ github.com/labstack/gommon/random github.com/lrstanley/girc # github.com/magiconair/properties v1.8.1 github.com/magiconair/properties +# github.com/matrix-org/gomatrix v0.0.0-20200827122206-7dd5e2a05bcd +github.com/matrix-org/gomatrix # github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048 github.com/matterbridge/Rocket.Chat.Go.SDK/models github.com/matterbridge/Rocket.Chat.Go.SDK/realtime @@ -111,8 +113,6 @@ github.com/matterbridge/discordgo github.com/matterbridge/emoji # github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050 github.com/matterbridge/go-xmpp -# github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6 -github.com/matterbridge/gomatrix # github.com/matterbridge/gozulipbot v0.0.0-20200820220548-be5824faa913 github.com/matterbridge/gozulipbot # github.com/matterbridge/logrus-prefixed-formatter v0.5.3-0.20200523233437-d971309a77ba