Merge pull request #1067 from chubin/i.png

(Re)enable PNG responses
pull/1003/merge
Igor Chubin 4 weeks ago committed by GitHub
commit 4ece9ffd3c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -110,7 +110,7 @@ def _cache_file(path, query):
digest = hashlib.sha1(("%s %s" % (path, query)).encode("utf-8")).hexdigest() digest = hashlib.sha1(("%s %s" % (path, query)).encode("utf-8")).hexdigest()
digest_number = ord(digest[0].upper()) digest_number = ord(digest[0].upper())
expiry_interval = 60 * (digest_number + 180) expiry_interval = 60 * (digest_number + 300)
timestamp = "%010d" % (int(time.time()) // expiry_interval * expiry_interval) timestamp = "%010d" % (int(time.time()) // expiry_interval * expiry_interval)
filename = os.path.join(PROXY_CACHEDIR, timestamp, path, query) filename = os.path.join(PROXY_CACHEDIR, timestamp, path, query)

@ -30,3 +30,8 @@ services:
command: "WTTRIN_SRV_PORT=9005 ve/bin/python3 bin/srv.py" command: "WTTRIN_SRV_PORT=9005 ve/bin/python3 bin/srv.py"
workdir: "/wttr.in/wttr.in-v2-v2" workdir: "/wttr.in/wttr.in-v2-v2"
port: 9005 port: 9005
- name: "filetype=png"
command: "WTTRIN_SRV_PORT=9006 ve/bin/python3 bin/srv.py"
workdir: "/wttr.in/wttr.in-v2-v2"
port: 9006

@ -62,6 +62,10 @@ type Uplink struct {
// for all other queries. // for all other queries.
Address3 string `yaml:"address3,omitempty"` Address3 string `yaml:"address3,omitempty"`
// Address4 contains address of the uplink server in form IP:PORT
// for PNG queries.
Address4 string `yaml:"address4,omitempty"`
// Timeout for upstream queries. // Timeout for upstream queries.
Timeout int `yaml:"timeout,omitempty"` Timeout int `yaml:"timeout,omitempty"`
@ -152,6 +156,7 @@ func Default() *Config {
Address1: "127.0.0.1:9002", Address1: "127.0.0.1:9002",
Address2: "127.0.0.1:9002", Address2: "127.0.0.1:9002",
Address3: "127.0.0.1:9002", Address3: "127.0.0.1:9002",
Address4: "127.0.0.1:9002",
Timeout: 30, Timeout: 30,
PrefetchInterval: 300, PrefetchInterval: 300,
}, },

@ -9,7 +9,7 @@ import (
"time" "time"
) )
func getAny(req *http.Request, tr1, tr2, tr3 *http.Transport) (*ResponseWithHeader, error) { func getAny(req *http.Request, tr1, tr2, tr3, tr4 *http.Transport) (*ResponseWithHeader, error) {
uri := strings.ReplaceAll(req.URL.RequestURI(), "%", "%25") uri := strings.ReplaceAll(req.URL.RequestURI(), "%", "%25")
u, err := url.Parse(uri) u, err := url.Parse(uri)
@ -28,6 +28,10 @@ func getAny(req *http.Request, tr1, tr2, tr3 *http.Transport) (*ResponseWithHead
// log.Println(req.URL.Query()) // log.Println(req.URL.Query())
// log.Println() // log.Println()
if checkURLForPNG(req) {
return getDefault(req, tr4)
}
return getDefault(req, tr3) return getDefault(req, tr3)
} }
@ -87,3 +91,8 @@ func getUpstream(req *http.Request, transport *http.Transport) (*ResponseWithHea
StatusCode: res.StatusCode, StatusCode: res.StatusCode,
}, nil }, nil
} }
func checkURLForPNG(r *http.Request) bool {
url := r.URL.String()
return strings.Contains(url, ".png") && !strings.Contains(url, "/files/")
}

@ -60,6 +60,7 @@ type RequestProcessor struct {
upstreamTransport1 *http.Transport upstreamTransport1 *http.Transport
upstreamTransport2 *http.Transport upstreamTransport2 *http.Transport
upstreamTransport3 *http.Transport upstreamTransport3 *http.Transport
upstreamTransport4 *http.Transport
config *config.Config config *config.Config
geoIPCache *geoip.Cache geoIPCache *geoip.Cache
geoLocation *geoloc.Cache geoLocation *geoloc.Cache
@ -93,6 +94,11 @@ func NewRequestProcessor(config *config.Config) (*RequestProcessor, error) {
return dialer.DialContext(ctx, network, config.Uplink.Address3) return dialer.DialContext(ctx, network, config.Uplink.Address3)
}, },
} }
transport4 := &http.Transport{
DialContext: func(ctx context.Context, network, _ string) (net.Conn, error) {
return dialer.DialContext(ctx, network, config.Uplink.Address4)
},
}
geoCache, err := geoip.NewCache(config) geoCache, err := geoip.NewCache(config)
if err != nil { if err != nil {
@ -110,6 +116,7 @@ func NewRequestProcessor(config *config.Config) (*RequestProcessor, error) {
upstreamTransport1: transport1, upstreamTransport1: transport1,
upstreamTransport2: transport2, upstreamTransport2: transport2,
upstreamTransport3: transport3, upstreamTransport3: transport3,
upstreamTransport4: transport4,
config: config, config: config,
geoIPCache: geoCache, geoIPCache: geoCache,
geoLocation: geoLocation, geoLocation: geoLocation,
@ -156,7 +163,7 @@ func (rp *RequestProcessor) ProcessRequest(r *http.Request) (*ResponseWithHeader
if dontCache(r) { if dontCache(r) {
rp.stats.Inc("uncached") rp.stats.Inc("uncached")
return getAny(r, rp.upstreamTransport1, rp.upstreamTransport2, rp.upstreamTransport3) return getAny(r, rp.upstreamTransport1, rp.upstreamTransport2, rp.upstreamTransport3, rp.upstreamTransport4)
} }
// processing cached request // processing cached request
@ -247,7 +254,7 @@ func (rp *RequestProcessor) processUncachedRequest(r *http.Request) (*ResponseWi
rp.stats.Inc("geoip") rp.stats.Inc("geoip")
} }
response, err = getAny(r, rp.upstreamTransport1, rp.upstreamTransport2, rp.upstreamTransport3) response, err = getAny(r, rp.upstreamTransport1, rp.upstreamTransport2, rp.upstreamTransport3, rp.upstreamTransport4)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -6,7 +6,6 @@ import (
"io" "io"
stdlog "log" stdlog "log"
"net/http" "net/http"
"strings"
"time" "time"
"github.com/alecthomas/kong" "github.com/alecthomas/kong"
@ -156,12 +155,6 @@ func mainHandler(
log.Println(err) log.Println(err)
} }
if checkURLForPNG(r) {
w.Write([]byte("PNG support temporary disabled"))
return
}
response, err := rp.ProcessRequest(r) response, err := rp.ProcessRequest(r)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
@ -259,8 +252,3 @@ func setLogLevel(logLevel string) error {
return nil return nil
} }
func checkURLForPNG(r *http.Request) bool {
url := r.URL.String()
return strings.Contains(url, ".png") && !strings.Contains(url, "/files/")
}

Loading…
Cancel
Save