Skip to content
Permalink
Browse files

Favicon dummy handler & hello message at the root

  • Loading branch information...
DarthSim committed Aug 20, 2019
1 parent f0bd65a commit 337bb38a168e17426ebc7bc00fa88844c2c64a38
Showing with 50 additions and 10 deletions.
  1. +20 −0 landing.go
  2. +20 −7 router.go
  3. +10 −3 server.go
@@ -0,0 +1,20 @@
package main

import "net/http"

var landingTmpl = []byte(`
<!doctype html>
<html>
<head><title>Hey, I'm imgproxy!</title></head>
<body>
<h1>Hey, I'm imgproxy!</h1>
<p style="font-size:1.2em">You can get me here: <a href="https://github.com/imgproxy/imgproxy" target="_blank">https://github.com/imgproxy/imgproxy</a></p>
</body>
</html>
`)

func handleLanding(reqID string, rw http.ResponseWriter, r *http.Request) {
rw.Header().Set("Content-Tyle", "text/html")
rw.WriteHeader(200)
rw.Write(landingTmpl)
}
@@ -23,32 +23,45 @@ type route struct {
Method string
Prefix string
Handler routeHandler
Exact bool
}

type router struct {
Routes []*route
PanicHandler panicHandler
}

func (r *route) IsMatch(req *http.Request) bool {
if r.Method != req.Method {
return false
}

if r.Exact {
return req.URL.Path == r.Prefix
}

return strings.HasPrefix(req.URL.Path, r.Prefix)
}

func newRouter() *router {
return &router{
Routes: make([]*route, 0),
}
}

func (r *router) Add(method, prefix string, handler routeHandler) {
func (r *router) Add(method, prefix string, handler routeHandler, exact bool) {
r.Routes = append(
r.Routes,
&route{Method: method, Prefix: prefix, Handler: handler},
&route{Method: method, Prefix: prefix, Handler: handler, Exact: exact},
)
}

func (r *router) GET(prefix string, handler routeHandler) {
r.Add(http.MethodGet, prefix, handler)
func (r *router) GET(prefix string, handler routeHandler, exact bool) {
r.Add(http.MethodGet, prefix, handler, exact)
}

func (r *router) OPTIONS(prefix string, handler routeHandler) {
r.Add(http.MethodOptions, prefix, handler)
func (r *router) OPTIONS(prefix string, handler routeHandler, exact bool) {
r.Add(http.MethodOptions, prefix, handler, exact)
}

func (r *router) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
@@ -74,7 +87,7 @@ func (r *router) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
logRequest(reqID, req)

for _, rr := range r.Routes {
if rr.Method == req.Method && strings.HasPrefix(req.URL.Path, rr.Prefix) {
if rr.IsMatch(req) {
rr.Handler(reqID, rw, req)
return
}
@@ -21,9 +21,11 @@ func buildRouter() *router {

r.PanicHandler = handlePanic

r.GET("/health", handleHealth)
r.GET("/", withCORS(withSecret(handleProcessing)))
r.OPTIONS("/", withCORS(handleOptions))
r.GET("/", handleLanding, true)
r.GET("/health", handleHealth, true)
r.GET("/favicon.ico", handleFavicon, true)
r.GET("/", withCORS(withSecret(handleProcessing)), false)
r.OPTIONS("/", withCORS(handleOptions), false)

return r
}
@@ -130,3 +132,8 @@ func handleOptions(reqID string, rw http.ResponseWriter, r *http.Request) {
logResponse(reqID, 200, "Respond with options")
rw.WriteHeader(200)
}

func handleFavicon(reqID string, rw http.ResponseWriter, r *http.Request) {
// TODO: Add a real favicon maybe?
rw.WriteHeader(200)
}

0 comments on commit 337bb38

Please sign in to comment.
You can’t perform that action at this time.