diff --git a/main.go b/main.go index cb72d3d..a754e62 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "log" "math/rand" "net/http" + "strings" "time" "golang.org/x/time/rate" @@ -36,22 +37,30 @@ func main() { for len(link) == 0 { link = string(links[rand.Intn(len(links))]) } - if proxy { - resp, err := http.Get(link) - if err != nil { - http.Error(w, err.Error(), http.StatusBadGateway) - } - for k, v := range resp.Header { - for _, v2 := range v { - w.Header().Add(k, v2) - } - } - w.WriteHeader(resp.StatusCode) - io.Copy(w, resp.Body) - } else { - http.Redirect(w, r, link, http.StatusTemporaryRedirect) + if strings.HasPrefix(link, "http") { + serveHTTP(w, r, proxy, link) + } else if strings.HasPrefix(link, "literal://") { + w.Write([]byte(strings.TrimPrefix(link, "literal://") + "\n")) } })); err != nil { panic(err) } } + +func serveHTTP(w http.ResponseWriter, r *http.Request, proxy bool, link string) { + if proxy { + resp, err := http.Get(link) + if err != nil { + http.Error(w, err.Error(), http.StatusBadGateway) + } + for k, v := range resp.Header { + for _, v2 := range v { + w.Header().Add(k, v2) + } + } + w.WriteHeader(resp.StatusCode) + io.Copy(w, resp.Body) + } else { + http.Redirect(w, r, link, http.StatusTemporaryRedirect) + } +} diff --git a/testdata/literal b/testdata/literal new file mode 100644 index 0000000..23048c2 --- /dev/null +++ b/testdata/literal @@ -0,0 +1,2 @@ +literal://hello world +literal://foo bar