// Sets the status code and the location header of the response. Marks the // request served. func (f *redirect) Response(ctx filters.FilterContext) { r := ctx.Request() w := ctx.ResponseWriter() u := f.copyOfLocation() if u.Scheme == "" { if r.URL.Scheme != "" { u.Scheme = r.URL.Scheme } else { u.Scheme = "https" } } u.User = r.URL.User if u.Host == "" { u.Host = getRequestHost(r) } if u.Path == "" { u.Path = r.URL.Path } if u.RawQuery == "" { u.RawQuery = r.URL.RawQuery } w.Header().Set("Location", u.String()) w.WriteHeader(f.code) ctx.MarkServed() }
// Serves content from the file system and marks the request served. func (f *static) Response(ctx filters.FilterContext) { r := ctx.Request() p := r.URL.Path if len(p) < len(f.webRoot) { return } ctx.MarkServed() http.ServeFile(ctx.ResponseWriter(), ctx.Request(), path.Join(f.root, p[len(f.webRoot):])) }
// Sets the status code and the location header of the response. Marks the // request served. func (f *redirect) Response(ctx filters.FilterContext) { if !f.deprecated { return } u := getLocation(ctx, f.location) w := ctx.ResponseWriter() w.Header().Set("Location", u) w.WriteHeader(f.code) ctx.MarkServed() }