~aleteoryx/webjrnl

624cd10e707f08fcf737f60579a29968d0fe1c88 — Aleteoryx 22 days ago b7b3792
monkey patching
1 files changed, 22 insertions(+), 5 deletions(-)

M jrnl.go
M jrnl.go => jrnl.go +22 -5
@@ 4,6 4,7 @@ import "fmt"
import "log"
import "net/http"
import "os"
import "strings"

var proxied bool = false



@@ 12,21 13,37 @@ func usage() {
	os.Exit(1)
}

type SavedWriter struct {
func fixupLocation(header http.Header, r *http.Request) {
	loc := header.Get("Location")
	if loc != "" && loc[0] == '/' {
		pfx := strings.Repeat("../", strings.Count(r.URL.Path, "/") - 1)
		if pfx == "" {
			pfx = "./"
		}

		header.Set("Location", pfx + loc[1:])
	}

	
}
type responseWriter struct {
	w http.ResponseWriter
	r *http.Request
	statusCode int
}
func (s *SavedWriter) Header() http.Header {
func (s *responseWriter) Header() http.Header {
	return s.w.Header()
}
func (s *SavedWriter) Write(b []byte) (int, error) {
func (s *responseWriter) Write(b []byte) (int, error) {
	if s.statusCode == 0 {
		fixupLocation(s.w.Header(), s.r)
		s.statusCode = 200
	}

	return s.w.Write(b)
}
func (s *SavedWriter) WriteHeader(statusCode int) {
func (s *responseWriter) WriteHeader(statusCode int) {
	fixupLocation(s.w.Header(), s.r)
	s.statusCode = statusCode
	s.w.WriteHeader(statusCode)
}


@@ 40,7 57,7 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
		}
	}

	s := SavedWriter { w, 0 }
	s := responseWriter { w, r, 0 }
	h.inner.ServeHTTP(&s, r)

	log.Printf(