forked from jshiffer/matterbridge
Handle Rocket.Chat attachments (#1395)
This commit is contained in:
parent
10f044c3dd
commit
c147ba1da1
@ -51,6 +51,30 @@ func DownloadFileAuth(url string, auth string) (*[]byte, error) {
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
// DownloadFileAuthRocket downloads the given URL using the specified Rocket user ID and authentication token.
|
||||
func DownloadFileAuthRocket(url, token, userID string) (*[]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
client := &http.Client{
|
||||
Timeout: time.Second * 5,
|
||||
}
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
|
||||
req.Header.Add("X-Auth-Token", token)
|
||||
req.Header.Add("X-User-Id", userID)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
_, err = io.Copy(&buf, resp.Body)
|
||||
data := buf.Bytes()
|
||||
return &data, err
|
||||
}
|
||||
|
||||
// GetSubLines splits messages in newline-delimited lines. If maxLineLength is
|
||||
// specified as non-zero GetSubLines will also clip long lines to the maximum
|
||||
// length and insert a warning marker that the line was clipped.
|
||||
|
@ -1,7 +1,10 @@
|
||||
package brocketchat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/42wim/matterbridge/bridge/helper"
|
||||
"github.com/matterbridge/Rocket.Chat.Go.SDK/models"
|
||||
)
|
||||
|
||||
@ -58,6 +61,7 @@ func (b *Brocketchat) handleStatusEvent(ev models.Message, rmsg *config.Message)
|
||||
|
||||
func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
|
||||
for message := range b.messageChan {
|
||||
message := message
|
||||
// skip messages with same ID, apparently messages get duplicated for an unknown reason
|
||||
if _, ok := b.cache.Get(message.ID); ok {
|
||||
continue
|
||||
@ -76,8 +80,11 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
|
||||
Account: b.Account,
|
||||
UserID: message.User.ID,
|
||||
ID: message.ID,
|
||||
Extra: make(map[string][]interface{}),
|
||||
}
|
||||
|
||||
b.handleAttachments(&message, rmsg)
|
||||
|
||||
// handleStatusEvent returns false if the message should be dropped
|
||||
// in that case it is probably some modification to the channel we do not want to relay
|
||||
if b.handleStatusEvent(m, rmsg) {
|
||||
@ -86,6 +93,38 @@ func (b *Brocketchat) handleRocketClient(messages chan *config.Message) {
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Brocketchat) handleAttachments(message *models.Message, rmsg *config.Message) {
|
||||
if rmsg.Text == "" {
|
||||
for _, attachment := range message.Attachments {
|
||||
if attachment.Title != "" {
|
||||
rmsg.Text = attachment.Title + "\n"
|
||||
}
|
||||
if attachment.Title != "" && attachment.Text != "" {
|
||||
rmsg.Text += "\n"
|
||||
}
|
||||
if attachment.Text != "" {
|
||||
rmsg.Text += attachment.Text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for i := range message.Attachments {
|
||||
if err := b.handleDownloadFile(rmsg, &message.Attachments[i]); err != nil {
|
||||
b.Log.Errorf("Could not download incoming file: %#v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Brocketchat) handleDownloadFile(rmsg *config.Message, file *models.Attachment) error {
|
||||
downloadURL := b.GetString("server") + file.TitleLink
|
||||
data, err := helper.DownloadFileAuthRocket(downloadURL, b.user.Token, b.user.ID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("download %s failed %#v", downloadURL, err)
|
||||
}
|
||||
helper.HandleDownloadData(b.Log, rmsg, file.Title, rmsg.Text, downloadURL, data, b.General)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Brocketchat) handleUploadFile(msg *config.Message) error {
|
||||
for _, f := range msg.Extra["file"] {
|
||||
fi := f.(config.FileInfo)
|
||||
|
Loading…
Reference in New Issue
Block a user