Skip to content

Commit

Permalink
examples: use ctx.ResponseWriter().Naive().(http.Pusher) instead
Browse files Browse the repository at this point in the history
Former-commit-id: 7802f4eadf2b1c0a0d2a42ed5ebac3e5c77f88cc
  • Loading branch information
kataras committed Jul 24, 2020
1 parent a4efb22 commit 2f8b29c
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 82 deletions.
2 changes: 1 addition & 1 deletion _examples/response-writer/http2push/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func pushHandler(ctx iris.Context) {
// parent request.
target := "/main.js"

if pusher, ok := ctx.ResponseWriter().(http.Pusher); ok {
if pusher, ok := ctx.ResponseWriter().Naive().(http.Pusher); ok {
err := pusher.Push(target, nil)
if err != nil {
if err == iris.ErrPushNotSupported {
Expand Down
5 changes: 4 additions & 1 deletion _examples/view/template_jet_0/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,11 @@ func main() {
}

app.Get("/", func(ctx iris.Context) {
ctx.View("todos/index.jet", todos) // <--
err := ctx.View("todos/index.jet", todos) // <--
// Note that the `ctx.View` already logs the error if logger level is allowing it and returns the error.
if err != nil {
ctx.StopWithText(iris.StatusInternalServerError, "Templates not rendered!")
}
})

app.Get("/todo", func(ctx iris.Context) {
Expand Down
24 changes: 0 additions & 24 deletions context/compress.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,6 @@ type CompressResponseWriter struct {
CompressWriter
ResponseWriter

http.Pusher
http.Hijacker
http.CloseNotifier

Disabled bool
Encoding string
Level int
Expand Down Expand Up @@ -234,26 +230,6 @@ func AcquireCompressResponseWriter(w ResponseWriter, r *http.Request, level int)
v.CompressWriter = encWriter

AddCompressHeaders(w.Header(), encoding)

pusher, ok := w.(http.Pusher)
if !ok {
pusher = nil // make sure interface value is nil.
}

hijacker, ok := w.(http.Hijacker)
if !ok {
hijacker = nil
}

closeNotifier, ok := w.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}

v.Pusher = pusher
v.Hijacker = hijacker
v.CloseNotifier = closeNotifier

return v, nil
}

Expand Down
19 changes: 1 addition & 18 deletions context/response_recorder.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ func releaseResponseRecorder(w *ResponseRecorder) {
type ResponseRecorder struct {
ResponseWriter

http.Hijacker
http.CloseNotifier

// keep track of the body in order to be
// resetable and useful inside custom transactions
chunks []byte
Expand All @@ -55,20 +52,6 @@ func (w *ResponseRecorder) Naive() http.ResponseWriter {
// prepares itself, the response recorder, to record and send response to the client.
func (w *ResponseRecorder) BeginRecord(underline ResponseWriter) {
w.ResponseWriter = underline

hijacker, ok := underline.(http.Hijacker)
if !ok {
hijacker = nil
}

closeNotifier, ok := underline.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}

w.Hijacker = hijacker
w.CloseNotifier = closeNotifier

w.headers = underline.Header()
w.ResetBody()
}
Expand Down Expand Up @@ -282,7 +265,7 @@ var ErrPushNotSupported = errors.New("push feature is not supported by this Resp
func (w *ResponseRecorder) Push(target string, opts *http.PushOptions) (err error) {
w.FlushResponse()

if pusher, ok := w.ResponseWriter.(http.Pusher); ok {
if pusher, ok := w.ResponseWriter.Naive().(http.Pusher); ok {
err = pusher.Push(target, opts)
if err != nil && err.Error() == http.ErrNotSupported.ErrorString {
return ErrPushNotSupported
Expand Down
27 changes: 0 additions & 27 deletions context/response_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,6 @@ func releaseResponseWriter(w ResponseWriter) {
// it writes directly to the underline http.ResponseWriter
type responseWriter struct {
http.ResponseWriter
http.Pusher
http.Hijacker // Note:
// The http.CloseNotifier interface is deprecated. New code should use Request.Context instead.
http.CloseNotifier

statusCode int // the saved status code which will be used from the cache service
// statusCodeSent bool // reply header has been (logically) written | no needed any more as we have a variable to catch total len of written bytes
Expand Down Expand Up @@ -176,29 +172,6 @@ func (w *responseWriter) BeginResponse(underline http.ResponseWriter) {
// that this responseWriter should write on.
func (w *responseWriter) SetWriter(underline http.ResponseWriter) {
w.ResponseWriter = underline

pusher, ok := underline.(http.Pusher)
if !ok {
pusher = nil // make sure interface value is nil.
}

hijacker, ok := underline.(http.Hijacker)
if !ok {
hijacker = nil
}

// This interface is obselete by Go authors
// and we only capture it
// for compatible reasons. End-developers SHOULD replace
// the use of CloseNotifier with the: Request.Context().Done() channel.
closeNotifier, ok := underline.(http.CloseNotifier)
if !ok {
closeNotifier = nil
}

w.Pusher = pusher
w.Hijacker = hijacker
w.CloseNotifier = closeNotifier
}

// EndResponse is the last function which is called right before the server sent the final response.
Expand Down
23 changes: 12 additions & 11 deletions core/router/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,18 +302,18 @@ func FileServer(fs http.FileSystem, options DirOptions) context.Handler {

if indexFound && !options.Attachments.Enable {
if indexAssets, ok := options.PushTargets[name]; ok {
if pusher, ok := ctx.ResponseWriter().(http.Pusher); ok {
if pusher, ok := ctx.ResponseWriter().Naive().(http.Pusher); ok {
var pushOpts *http.PushOptions
if encoding != "" {
pushOpts = &http.PushOptions{Header: r.Header}
}

for _, indexAsset := range indexAssets {
if indexAsset[0] != '/' {
// it's relative path.
indexAsset = path.Join(r.RequestURI, indexAsset)
}

var pushOpts *http.PushOptions
if encoding != "" {
pushOpts = &http.PushOptions{Header: r.Header}
}

if err = pusher.Push(indexAsset, pushOpts); err != nil {
break
}
Expand All @@ -322,7 +322,12 @@ func FileServer(fs http.FileSystem, options DirOptions) context.Handler {
}

if regex, ok := options.PushTargetsRegexp[r.URL.Path]; ok {
if pusher, ok := ctx.ResponseWriter().(http.Pusher); ok {
if pusher, ok := ctx.ResponseWriter().Naive().(http.Pusher); ok {
var pushOpts *http.PushOptions
if encoding != "" {
pushOpts = &http.PushOptions{Header: r.Header}
}

prefixURL := strings.TrimSuffix(r.RequestURI, name)
names, err := findNames(fs, name)
if err == nil {
Expand All @@ -335,10 +340,6 @@ func FileServer(fs http.FileSystem, options DirOptions) context.Handler {
// match using relative path (without the first '/' slash)
// to keep consistency between the `PushTargets` behavior
if regex.MatchString(indexAsset) {
var pushOpts *http.PushOptions
if encoding != "" {
pushOpts = &http.PushOptions{Header: r.Header}
}

// println("Regex Matched: " + indexAsset)
if err = pusher.Push(path.Join(prefixURL, indexAsset), pushOpts); err != nil {
Expand Down

0 comments on commit 2f8b29c

Please sign in to comment.