a more stupid way of doing middle chaining, but at least it is clearer.

This commit is contained in:
fiatjaf
2024-09-26 09:56:42 -03:00
parent 60116e36fe
commit ed270747af
3 changed files with 18 additions and 12 deletions

View File

@@ -8,7 +8,7 @@ import (
"time"
)
func agentBlock(next http.Handler) http.Handler {
func agentBlock(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ua := r.Header.Get("User-Agent")
for _, bua := range []string{"Amazonbot", "semrush", "Bytespider", "AhrefsBot"} {
@@ -22,7 +22,7 @@ func agentBlock(next http.Handler) http.Handler {
})
}
func cloudflareBlock(next http.Handler) http.Handler {
func cloudflareBlock(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ip := net.ParseIP(actualIP(r))
if ip != nil {

View File

@@ -2,7 +2,7 @@ package main
import "net/http"
func loggingMiddleware(next http.Handler) http.Handler {
func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if r.URL.RawQuery != "" {

24
main.go
View File

@@ -144,15 +144,21 @@ func main() {
mux.HandleFunc("/{code}", renderEvent)
mux.HandleFunc("/{$}", renderHomepage)
var mainHandler http.Handler = relay
// apply http middlewares
for _, middleware := range []func(http.Handler) http.Handler{
cors.Default().Handler,
loggingMiddleware,
agentBlock,
cloudflareBlock,
} {
mainHandler = middleware(mainHandler)
corsH := cors.Default()
corsM := func(next http.HandlerFunc) http.HandlerFunc {
return corsH.Handler(next).ServeHTTP
}
var mainHandler http.HandlerFunc = func(w http.ResponseWriter, r *http.Request) {
cloudflareBlock(
agentBlock(
loggingMiddleware(
corsM(
relay.ServeHTTP,
),
),
),
)(w, r)
}
log.Print("listening at http://0.0.0.0:" + s.Port)