mirror of
https://github.com/mautrix/discord.git
synced 2025-03-14 14:15:37 +00:00
config: add support for using a proxy
This commit is contained in:
parent
b330c5836e
commit
8b61dc5352
6 changed files with 25 additions and 6 deletions
|
@ -29,7 +29,7 @@ import (
|
||||||
"go.mau.fi/mautrix-discord/database"
|
"go.mau.fi/mautrix-discord/database"
|
||||||
)
|
)
|
||||||
|
|
||||||
func downloadDiscordAttachment(url string, maxSize int64) ([]byte, error) {
|
func downloadDiscordAttachment(cli *http.Client, url string, maxSize int64) ([]byte, error) {
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -38,7 +38,7 @@ func downloadDiscordAttachment(url string, maxSize int64) ([]byte, error) {
|
||||||
req.Header.Set(key, value)
|
req.Header.Set(key, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := http.DefaultClient.Do(req)
|
resp, err := cli.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ func downloadDiscordAttachment(url string, maxSize int64) ([]byte, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func uploadDiscordAttachment(url string, data []byte) error {
|
func uploadDiscordAttachment(cli *http.Client, url string, data []byte) error {
|
||||||
req, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data))
|
req, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -80,7 +80,7 @@ func uploadDiscordAttachment(url string, data []byte) error {
|
||||||
req.Header.Del("X-Discord-Timezone")
|
req.Header.Del("X-Discord-Timezone")
|
||||||
req.Header.Del("X-Super-Properties")
|
req.Header.Del("X-Super-Properties")
|
||||||
|
|
||||||
resp, err := http.DefaultClient.Do(req)
|
resp, err := cli.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -301,7 +301,7 @@ func (br *DiscordBridge) copyAttachmentToMatrix(intent *appservice.IntentAPI, ur
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var data []byte
|
var data []byte
|
||||||
data, onceErr = downloadDiscordAttachment(url, br.MediaConfig.UploadSize)
|
data, onceErr = downloadDiscordAttachment(http.DefaultClient, url, br.MediaConfig.UploadSize)
|
||||||
if onceErr != nil {
|
if onceErr != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ type BridgeConfig struct {
|
||||||
EnableWebhookAvatars bool `yaml:"enable_webhook_avatars"`
|
EnableWebhookAvatars bool `yaml:"enable_webhook_avatars"`
|
||||||
UseDiscordCDNUpload bool `yaml:"use_discord_cdn_upload"`
|
UseDiscordCDNUpload bool `yaml:"use_discord_cdn_upload"`
|
||||||
|
|
||||||
|
Proxy string `yaml:"proxy"`
|
||||||
|
|
||||||
CacheMedia string `yaml:"cache_media"`
|
CacheMedia string `yaml:"cache_media"`
|
||||||
DirectMedia DirectMedia `yaml:"direct_media"`
|
DirectMedia DirectMedia `yaml:"direct_media"`
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ func DoUpgrade(helper *up.Helper) {
|
||||||
helper.Copy(up.Bool, "bridge", "prefix_webhook_messages")
|
helper.Copy(up.Bool, "bridge", "prefix_webhook_messages")
|
||||||
helper.Copy(up.Bool, "bridge", "enable_webhook_avatars")
|
helper.Copy(up.Bool, "bridge", "enable_webhook_avatars")
|
||||||
helper.Copy(up.Bool, "bridge", "use_discord_cdn_upload")
|
helper.Copy(up.Bool, "bridge", "use_discord_cdn_upload")
|
||||||
|
helper.Copy(up.Str|up.Null, "bridge", "proxy")
|
||||||
helper.Copy(up.Str, "bridge", "cache_media")
|
helper.Copy(up.Str, "bridge", "cache_media")
|
||||||
helper.Copy(up.Bool, "bridge", "direct_media", "enabled")
|
helper.Copy(up.Bool, "bridge", "direct_media", "enabled")
|
||||||
helper.Copy(up.Str, "bridge", "direct_media", "server_name")
|
helper.Copy(up.Str, "bridge", "direct_media", "server_name")
|
||||||
|
|
|
@ -168,6 +168,8 @@ bridge:
|
||||||
# like the official client does? The other option is sending the media in the message send request as a form part
|
# like the official client does? The other option is sending the media in the message send request as a form part
|
||||||
# (which is always used by bots and webhooks).
|
# (which is always used by bots and webhooks).
|
||||||
use_discord_cdn_upload: true
|
use_discord_cdn_upload: true
|
||||||
|
# Proxy for Discord connections
|
||||||
|
proxy:
|
||||||
# Should mxc uris copied from Discord be cached?
|
# Should mxc uris copied from Discord be cached?
|
||||||
# This can be `never` to never cache, `unencrypted` to only cache unencrypted mxc uris, or `always` to cache everything.
|
# This can be `never` to never cache, `unencrypted` to only cache unencrypted mxc uris, or `always` to cache everything.
|
||||||
# If you have a media repo that generates non-unique mxc uris, you should set this to never.
|
# If you have a media repo that generates non-unique mxc uris, you should set this to never.
|
||||||
|
|
|
@ -1647,7 +1647,7 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
|
||||||
}
|
}
|
||||||
prepared := prep.Attachments[0]
|
prepared := prep.Attachments[0]
|
||||||
att.UploadedFilename = prepared.UploadFilename
|
att.UploadedFilename = prepared.UploadFilename
|
||||||
err = uploadDiscordAttachment(prepared.UploadURL, data)
|
err = uploadDiscordAttachment(sender.Session.Client, prepared.UploadURL, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
go portal.sendMessageMetrics(evt, err, "Error reuploading media in")
|
go portal.sendMessageMetrics(evt, err, "Error reuploading media in")
|
||||||
return
|
return
|
||||||
|
|
14
user.go
14
user.go
|
@ -2,10 +2,12 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
"sort"
|
"sort"
|
||||||
|
@ -547,6 +549,18 @@ func (user *User) Connect() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if user.bridge.Config.Bridge.Proxy != "" {
|
||||||
|
u, _ := url.Parse(user.bridge.Config.Bridge.Proxy)
|
||||||
|
tlsConf := &tls.Config{
|
||||||
|
InsecureSkipVerify: os.Getenv("DISCORD_SKIP_TLS_VERIFICATION") == "true",
|
||||||
|
}
|
||||||
|
session.Client.Transport = &http.Transport{
|
||||||
|
Proxy: http.ProxyURL(u),
|
||||||
|
TLSClientConfig: tlsConf,
|
||||||
|
}
|
||||||
|
session.Dialer.Proxy = http.ProxyURL(u)
|
||||||
|
session.Dialer.TLSClientConfig = tlsConf
|
||||||
|
}
|
||||||
// TODO move to config
|
// TODO move to config
|
||||||
if os.Getenv("DISCORD_DEBUG") == "1" {
|
if os.Getenv("DISCORD_DEBUG") == "1" {
|
||||||
session.LogLevel = discordgo.LogDebug
|
session.LogLevel = discordgo.LogDebug
|
||||||
|
|
Loading…
Add table
Reference in a new issue