1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-01-28 11:33:40 +02:00

Favicon dummy handler & hello message at the root

This commit is contained in:
DarthSim 2019-08-20 19:26:17 +06:00
parent f0bd65aabf
commit 337bb38a16
3 changed files with 50 additions and 10 deletions

20
landing.go Normal file
View File

@ -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)
}

View File

@ -23,6 +23,7 @@ type route struct {
Method string Method string
Prefix string Prefix string
Handler routeHandler Handler routeHandler
Exact bool
} }
type router struct { type router struct {
@ -30,25 +31,37 @@ type router struct {
PanicHandler panicHandler 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 { func newRouter() *router {
return &router{ return &router{
Routes: make([]*route, 0), 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 = append(
r.Routes, 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) { func (r *router) GET(prefix string, handler routeHandler, exact bool) {
r.Add(http.MethodGet, prefix, handler) r.Add(http.MethodGet, prefix, handler, exact)
} }
func (r *router) OPTIONS(prefix string, handler routeHandler) { func (r *router) OPTIONS(prefix string, handler routeHandler, exact bool) {
r.Add(http.MethodOptions, prefix, handler) r.Add(http.MethodOptions, prefix, handler, exact)
} }
func (r *router) ServeHTTP(rw http.ResponseWriter, req *http.Request) { 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) logRequest(reqID, req)
for _, rr := range r.Routes { 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) rr.Handler(reqID, rw, req)
return return
} }

View File

@ -21,9 +21,11 @@ func buildRouter() *router {
r.PanicHandler = handlePanic r.PanicHandler = handlePanic
r.GET("/health", handleHealth) r.GET("/", handleLanding, true)
r.GET("/", withCORS(withSecret(handleProcessing))) r.GET("/health", handleHealth, true)
r.OPTIONS("/", withCORS(handleOptions)) r.GET("/favicon.ico", handleFavicon, true)
r.GET("/", withCORS(withSecret(handleProcessing)), false)
r.OPTIONS("/", withCORS(handleOptions), false)
return r return r
} }
@ -130,3 +132,8 @@ func handleOptions(reqID string, rw http.ResponseWriter, r *http.Request) {
logResponse(reqID, 200, "Respond with options") logResponse(reqID, 200, "Respond with options")
rw.WriteHeader(200) rw.WriteHeader(200)
} }
func handleFavicon(reqID string, rw http.ResponseWriter, r *http.Request) {
// TODO: Add a real favicon maybe?
rw.WriteHeader(200)
}