Browse Source

Add hacky option to split id into path segments in proxy

master
Tulir Asokan 3 days ago
parent
commit
4c13a2c254
  1. 12
      giphyproxy/main.go

12
giphyproxy/main.go

@ -22,6 +22,7 @@ import (
"fmt" "fmt"
"os" "os"
"regexp" "regexp"
"slices"
"time" "time"
"go.mau.fi/util/exerrors" "go.mau.fi/util/exerrors"
@ -34,6 +35,7 @@ type Config struct {
mediaproxy.BasicConfig `yaml:",inline"` mediaproxy.BasicConfig `yaml:",inline"`
mediaproxy.ServerConfig `yaml:",inline"` mediaproxy.ServerConfig `yaml:",inline"`
Destination string `yaml:"destination"` Destination string `yaml:"destination"`
SplitIdx []int `yaml:"split_idx"`
} }
var configPath = flag.String("config", "config.yaml", "config file path") var configPath = flag.String("config", "config.yaml", "config file path")
@ -41,6 +43,7 @@ var generateServerKey = flag.Bool("generate-key", false, "generate a new server
var giphyIDRegex = regexp.MustCompile(`^[a-zA-Z0-9-_]+$`) var giphyIDRegex = regexp.MustCompile(`^[a-zA-Z0-9-_]+$`)
var destination = "https://i.giphy.com/%s.webp" var destination = "https://i.giphy.com/%s.webp"
var splitIdx []int
func main() { func main() {
flag.Parse() flag.Parse()
@ -54,6 +57,9 @@ func main() {
mp.KeyServer.Version.Name = "mautrix-go + maunium-stickerpicker giphy proxy" mp.KeyServer.Version.Name = "mautrix-go + maunium-stickerpicker giphy proxy"
if cfg.Destination != "" { if cfg.Destination != "" {
destination = cfg.Destination destination = cfg.Destination
splitIdx = cfg.SplitIdx
slices.Sort(splitIdx)
slices.Reverse(splitIdx)
} }
exerrors.PanicIfNotNil(mp.Listen(cfg.ServerConfig)) exerrors.PanicIfNotNil(mp.Listen(cfg.ServerConfig))
} }
@ -70,6 +76,12 @@ func getMedia(_ context.Context, id string, _ map[string]string) (response media
if !giphyIDRegex.MatchString(id) { if !giphyIDRegex.MatchString(id) {
return nil, mediaproxy.ErrInvalidMediaIDSyntax return nil, mediaproxy.ErrInvalidMediaIDSyntax
} }
for _, idx := range splitIdx {
if idx >= len(id) {
return nil, mediaproxy.ErrInvalidMediaIDSyntax
}
id = id[:idx] + "/" + id[idx:]
}
return &mediaproxy.GetMediaResponseURL{ return &mediaproxy.GetMediaResponseURL{
URL: fmt.Sprintf(destination, id), URL: fmt.Sprintf(destination, id),
}, nil }, nil

Loading…
Cancel
Save