darkmist icon

1_singlehost.go

darkmist | PRO | 07/20/17 07:00:18 PM UTC | 0 ⭐ | 198 👁️ | Never ⏰ | []
Go |

790 B

|

None

|

0 👍

/

0 👎

// Go middleware samples for my blog post. http://justinas.org/writing-http-middleware-in-go/
 
package main
 
import (
    "net/http"
)
 
type SingleHost struct {
    handler     http.Handler
    allowedHost string
}
 
func NewSingleHost(handler http.Handler, allowedHost string) *SingleHost {
    return &SingleHost{handler: handler, allowedHost: allowedHost}
}
 
func (s *SingleHost) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    host := r.Host
    if host == s.allowedHost {
        s.handler.ServeHTTP(w, r)
    } else {
        w.WriteHeader(403)
    }
}
 
func myHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Success!"))
}
 
func main() {
    single := NewSingleHost(http.HandlerFunc(myHandler), "example.com")
 
    println("Listening on port 8080")
    http.ListenAndServe(":8080", single)
}

Comments