commit 8973389c274a69941948f85672e9105263adb654
Author: Wim <wim@42.be>
Date: Fri Nov 24 22:36:19 2017 +0000
diff --git a/bridge/config/config.go b/bridge/config/config.go
index afb9f1a..8a13b48 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -366 +367 @@ type FileInfo struct {
Name string
Data *[]byte
Comment string
+ URL string
}
type ChannelInfo struct {
@@ -4817 +4919 @@ type ChannelInfo struct {
}
type Protocol struct {
- AuthCode string // steam
- BindAddress string // mattermost, slack // DEPRECATED
- Buffer int // api
- Charset string // irc
- EditSuffix string // mattermost, slack, discord, telegram, gitter
- EditDisable bool // mattermost, slack, discord, telegram, gitter
- IconURL string // mattermost, slack
- IgnoreNicks string // all protocols
- IgnoreMessages string // all protocols
- Jid string // xmpp
- Login string // mattermost, matrix
+ AuthCode string // steam
+ BindAddress string // mattermost, slack // DEPRECATED
+ Buffer int // api
+ Charset string // irc
+ EditSuffix string // mattermost, slack, discord, telegram, gitter
+ EditDisable bool // mattermost, slack, discord, telegram, gitter
+ IconURL string // mattermost, slack
+ IgnoreNicks string // all protocols
+ IgnoreMessages string // all protocols
+ Jid string // xmpp
+ Login string // mattermost, matrix
+ MediaServerDownload string
+ MediaServerUpload string
MessageQueue int // IRC, size of message queue for flood control
MessageDelay int // IRC, time in millisecond to wait between messages
MessageLength int // IRC, max length of a message allowed
diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go
index 78981f0..f1ed5bd 100644
--- a/bridge/irc/irc.go
+++ b/bridge/irc/irc.go
@@ -1786 +17821 @@ func (b *Birc) Send(msg config.Message) (string, error) {
msg.Text = buf.String()
}
+ if msg.Extra != nil {
+ if len(msg.Extra["file"]) > 0 {
+ for _, f := range msg.Extra["file"] {
+ fi := f.(config.FileInfo)
+ if fi.URL != "" {
+ msg.Text = fi.URL
+ b.Local <- config.Message{Text: msg.Text, Username: msg.Username, Channel: msg.Channel, Event: msg.Event}
+ } else {
+ b.Local <- config.Message{Text: msg.Text, Username: msg.Username, Channel: msg.Channel, Event: msg.Event}
+ }
+ }
+ }
+ return "", nil
+ }
+
for _, text := range strings.Split(msg.Text, "\n") {
if len(text) > b.Config.MessageLength {
text = text[:b.Config.MessageLength] + " <message clipped>"
diff --git a/gateway/gateway.go b/gateway/gateway.go
index e5d74ff..8b1223f 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -113 +116 @@
package gateway
import (
+ "bytes"
"fmt"
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
log "github.com/Sirupsen/logrus"
// "github.com/davecgh/go-spew/spew"
+ "crypto/sha1"
"github.com/hashicorp/golang-lru"
"github.com/peterhellberg/emojilib"
+ "net/http"
"regexp"
"strings"
"time"
@@ -3186 +32134 @@ func (gw *Gateway) modifyMessage(msg *config.Message) {
msg.Gateway = gw.Name
}
+func (gw *Gateway) handleFiles(msg *config.Message) {
+ if msg.Extra == nil || gw.Config.General.MediaServerUpload == "" {
+ return
+ }
+ if len(msg.Extra["file"]) > 0 {
+ client := &http.Client{
+ Timeout: time.Second * 5,
+ }
+ for i, f := range msg.Extra["file"] {
+ fi := f.(config.FileInfo)
+ sha1sum := fmt.Sprintf("%x", sha1.Sum(*fi.Data))
+ reader := bytes.NewReader(*fi.Data)
+ url := gw.Config.General.MediaServerUpload + "/" + sha1sum + "/" + fi.Name
+ durl := gw.Config.General.MediaServerDownload + "/" + sha1sum + "/" + fi.Name
+ extra := msg.Extra["file"][i].(config.FileInfo)
+ extra.URL = durl
+ msg.Extra["file"][i] = extra
+ req, _ := http.NewRequest("PUT", url, reader)
+ req.Header.Set("Content-Type", "binary/octet-stream")
+ _, err := client.Do(req)
+ if err != nil {
+ log.Errorf("mediaserver upload failed: %#v", err)
+ }
+ log.Debugf("mediaserver download URL = %s", durl)
+ }
+ }
+}
+
func getChannelID(msg config.Message) string {
return msg.Channel + msg.Account
}
diff --git a/gateway/router.go b/gateway/router.go
index 28f8133..192fa9a 100644
--- a/gateway/router.go
+++ b/gateway/router.go
@@ -996 +997 @@ func (r *Router) handleReceive() {
if !gw.ignoreMessage(&msg) {
msg.Timestamp = time.Now()
gw.modifyMessage(&msg)
+ gw.handleFiles(&msg)
for _, br := range gw.Bridges {
msgIDs = append(msgIDs, gw.handleMessage(msg, br)...)
}