From af790e5765bfbb3b1f0080cd53641f97001d7f98 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Sun, 20 Jul 2025 16:25:05 +0100 Subject: [PATCH] feat: favicon --- Dockerfile | 3 +-- favicon.ico | Bin 0 -> 15086 bytes go.mod | 2 +- go.sum | 50 ++++++++++++++------------------------ internal/server/router.go | 3 +++ 5 files changed, 23 insertions(+), 35 deletions(-) create mode 100644 favicon.ico diff --git a/Dockerfile b/Dockerfile index 1ace648..56ecbcc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,9 +14,8 @@ RUN CGO_ENABLED=0 GOOS=linux go build -o api . FROM alpine:latest WORKDIR /app - COPY --from=builder /app/api . +COPY favicon.ico . EXPOSE 8888 - CMD [ "/app/api" ] diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1068050b78f43de30019c4c944fee1f800f99c97 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod index 007bf30..5396212 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module api -go 1.23.1 +go 1.24.1 require ( github.com/go-chi/chi/v5 v5.2.2 diff --git a/go.sum b/go.sum index e8cdec9..2f0a510 100644 --- a/go.sum +++ b/go.sum @@ -2,65 +2,51 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= -github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.2.0 h1:Aj1EtB0qR2Rdo2dG4O94RIU35w2lvQSj6BRA4+qwFL0= -github.com/go-chi/chi/v5 v5.2.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= -github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= -github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-chi/cors v1.2.2 h1:Jmey33TE+b+rB7fT8MUy1u0I4L+NARQlK6LhzKPSyQE= github.com/go-chi/cors v1.2.2/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= -github.com/go-chi/httprate v0.14.1 h1:EKZHYEZ58Cg6hWcYzoZILsv7ppb46Wt4uQ738IRtpZs= -github.com/go-chi/httprate v0.14.1/go.mod h1:TUepLXaz/pCjmCtf/obgOQJ2Sz6rC8fSf5cAt5cnTt0= github.com/go-chi/httprate v0.15.0 h1:j54xcWV9KGmPf/X4H32/aTH+wBlrvxL7P+SdnRqxh5g= github.com/go-chi/httprate v0.15.0/go.mod h1:rzGHhVrsBn3IMLYDOZQsSU4fJNWcjui4fWKJcCId1R4= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/klauspost/cpuid/v2 v2.2.11 h1:0OwqZRYI2rFrjS4kvkDnqJkKHdHaRnCm68/DY4OxRzU= -github.com/klauspost/cpuid/v2 v2.2.11/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/lmittmann/tint v1.0.6 h1:vkkuDAZXc0EFGNzYjWcV0h7eEX+uujH48f/ifSkJWgc= -github.com/lmittmann/tint v1.0.6/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= -github.com/lmittmann/tint v1.0.7 h1:D/0OqWZ0YOGZ6AyC+5Y2kD8PBEzBk6rFHVSfOqCkF9Y= -github.com/lmittmann/tint v1.0.7/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lmittmann/tint v1.1.2 h1:2CQzrL6rslrsyjqLDwD11bZ5OpLBPU+g3G/r5LSfS8w= github.com/lmittmann/tint v1.1.2/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/server/router.go b/internal/server/router.go index 2c29f39..45bae75 100644 --- a/internal/server/router.go +++ b/internal/server/router.go @@ -59,6 +59,9 @@ func NewRouter() { "url": "https://github.com/trafficlunar/api", }) }) + r.Get("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "./favicon.ico") + }) r.Get("/hit", handler.HandleGetHitCounter) r.With(httprate.LimitByRealIP(1, time.Hour)).Patch("/hit", handler.HandlePatchHitCounter)