Remove dependency on github.com/julienschmidt/httprouter

This commit is contained in:
Dan Jones 2025-11-01 19:32:58 -05:00
commit 9a15c77653
3 changed files with 20 additions and 38 deletions

2
go.mod
View file

@ -1,5 +1,3 @@
module codeberg.org/danjones000/http-go-status
go 1.21.4
require github.com/julienschmidt/httprouter v1.3.0

2
go.sum
View file

@ -1,2 +0,0 @@
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=

54
main.go
View file

@ -23,15 +23,14 @@ import (
"os"
"strconv"
"strings"
"github.com/julienschmidt/httprouter"
)
func Status(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
func Status(w http.ResponseWriter, r *http.Request) {
header := w.Header()
header.Set("Access-Control-Allow-Origin", "*")
status := ps.ByName("status")
status := strings.TrimLeft(r.RequestURI, "/")
status, _, _ = strings.Cut(status, "/")
fmt.Printf("Got %s status\n", status)
if status == "" {
status = "200"
@ -52,37 +51,18 @@ func Status(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
w.WriteHeader(ret)
}
func GetRouter() *httprouter.Router {
router := httprouter.New()
// We don't handle OPTIONS, so that we can support CORS
methods := [8]string{
http.MethodGet,
http.MethodHead,
http.MethodPost,
http.MethodPut,
http.MethodPatch,
http.MethodDelete,
http.MethodConnect,
http.MethodTrace}
for _, method := range methods {
router.Handle(method, "/:status", Status)
func HandleCors(w http.ResponseWriter, r *http.Request) {
fmt.Println("handling CORS")
if r.Header.Get("Access-Control-Request-Method") != "" {
// Set CORS headers
header := w.Header()
header.Set("Access-Control-Allow-Methods", "*")
header.Set("Access-Control-Allow-Origin", "*")
header.Set("Access-Control-Allow-Headers", "*")
}
// Handle CORS preflight requests
router.GlobalOPTIONS = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("Access-Control-Request-Method") != "" {
// Set CORS headers
header := w.Header()
header.Set("Access-Control-Allow-Methods", header.Get("Allow"))
header.Set("Access-Control-Allow-Origin", "*")
}
// Adjust status code to 204
w.WriteHeader(http.StatusNoContent)
})
return router
// Adjust status code to 204
w.WriteHeader(http.StatusNoContent)
}
func GetPort() string {
@ -100,5 +80,11 @@ func GetPort() string {
func main() {
port := GetPort()
fmt.Printf("Listening on %s\n", port)
log.Fatal(http.ListenAndServe(port, GetRouter()))
log.Fatal(http.ListenAndServe(port, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
HandleCors(w, r)
} else {
Status(w, r)
}
})))
}