- main
- manifest
- deps
- main
- Install
- Run
package main
import (
"context"
"fmt"
"io"
"net/url"
"strings"
"github.com/fastly/compute-sdk-go/fsthttp"
)
const BackendName = "origin_0"
func main() {
fsthttp.ServeFunc(func(ctx context.Context, w fsthttp.ResponseWriter, r *fsthttp.Request) {
qs := r.URL.Query()
keep := []string{"query", "page", "foo"}
qs = FilterExcept(qs, keep)
qs.Set("query", strings.ToLower(qs.Get("query")))
r.URL.RawQuery = qs.Encode()
r.Header.Del("user-agent")
r.Header.Del("cookie")
LangAccept := []string{"en", "de", "fr", "nl"}
LangDefault := "de"
LangNorm := NormAccept(r.Header.Get("accept-language"), LangAccept, LangDefault)
r.Header.Set("accept-language", LangNorm)
resp, err := r.Send(ctx, BackendName)
if err != nil {
w.WriteHeader(fsthttp.StatusBadGateway)
fmt.Fprintln(w, err.Error())
return
}
w.Header().Reset(resp.Header)
w.WriteHeader(resp.StatusCode)
io.Copy(w, resp.Body)
})
}
func FilterExcept(q url.Values, f []string) url.Values {
new := make(url.Values)
for _, val := range f {
for key, element := range q {
if key == val {
new[key] = element
}
}
}
return new
}
func NormAccept(input string, accept []string, def string) string {
f := 0
var result string
for _, val := range accept {
if strings.Contains(input, val) {
f = 1
result = val
break
}
}
if f == 1 {
return result
} else {
return def
}
}