Skip to content
This repository was archived by the owner on Jun 7, 2025. It is now read-only.

Commit 2903490

Browse files
authored
chore: replace gorilla/mux by http.ServerMux (#349)
1 parent 618c0a6 commit 2903490

File tree

8 files changed

+220
-141
lines changed

8 files changed

+220
-141
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ go 1.22
44

55
require (
66
github.com/google/uuid v1.6.0
7-
github.com/gorilla/mux v1.8.1
87
github.com/miekg/dns v1.1.58
98
github.com/mvmaasakkers/certificates v0.7.2
109
github.com/nats-io/nats.go v1.33.1

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1818
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1919
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
2020
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
21-
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
22-
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
2321
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
2422
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
2523
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=

internal/app/pdns-api-proxy/internalserviceproxy/httphandler.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func defaultProxy(respond http.ResponseWriter, incomingrequest *http.Request) {
104104
logger.ErrorErrLog(preparerequesterr)
105105
}
106106

107-
httputils.CopyHTTPHeader(incomingrequest.Header, proxyrequest.Header)
107+
proxyrequest.Header = incomingrequest.Header.Clone()
108108

109109
proxyresponse, proxyexecuteerr := proxyclient.Do(proxyrequest) //nolint:bodyclose
110110
if proxyexecuteerr != nil {
@@ -114,14 +114,22 @@ func defaultProxy(respond http.ResponseWriter, incomingrequest *http.Request) {
114114
return
115115
}
116116

117-
defer httputils.CloseResponseBody(proxyresponse)
117+
defer func(Body io.ReadCloser) {
118+
if err := Body.Close(); err != nil {
119+
logger.ErrorErrLog(err)
120+
}
121+
}(proxyresponse.Body)
118122

119123
proxyresponsebody, proxyresponsereaderr := io.ReadAll(proxyresponse.Body)
120124
if proxyresponsereaderr != nil {
121125
logger.ErrorErrLog(proxyresponsereaderr)
122126
}
123127

124-
httputils.CopyHTTPHeader(proxyresponse.Header, respond.Header())
128+
for key, values := range proxyresponse.Header {
129+
for _, value := range values {
130+
respond.Header().Add(key, value)
131+
}
132+
}
125133

126134
respond.WriteHeader(proxyresponse.StatusCode)
127135

internal/app/pdns-api-proxy/internalserviceproxy/internalserviceproxy.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"net/http"
55
"time"
66

7-
"github.com/gorilla/mux"
87
"github.com/nameserver-systems/pdns-distribute/internal/app/pdns-api-proxy/certificate"
98
"github.com/nameserver-systems/pdns-distribute/internal/app/pdns-api-proxy/config"
109
"github.com/nameserver-systems/pdns-distribute/internal/pkg/httputils"
@@ -45,7 +44,8 @@ func startHTTPServer(serviceconfig *config.ServiceConfiguration) error {
4544

4645
const serverwritetimeout = 15 * time.Second
4746

48-
router := getNewRouterWithRoutes()
47+
router := http.NewServeMux()
48+
registerRoutes(router)
4949

5050
serviceurl := serviceconfig.ServiceURL
5151

@@ -79,16 +79,3 @@ func startHTTPServer(serviceconfig *config.ServiceConfiguration) error {
7979

8080
return nil
8181
}
82-
83-
func getNewRouterWithRoutes() *mux.Router {
84-
router := getNewRouter()
85-
router.StrictSlash(true)
86-
87-
registerRoutes(router)
88-
89-
return router
90-
}
91-
92-
func getNewRouter() *mux.Router {
93-
return mux.NewRouter()
94-
}
Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
//nolint:lll
21
package internalserviceproxy
32

43
import (
5-
"github.com/gorilla/mux"
4+
"net/http"
65
)
76

8-
func registerRoutes(router *mux.Router) {
9-
router.HandleFunc("/api/v1/servers/{server_id}/zones", createZoneHandler(defaultProxy)).Methods("POST")
10-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/rectify", changeZoneHandler(defaultProxy)).Methods("PUT")
11-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}", changeZoneHandler(defaultProxy)).Methods("PUT")
12-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}", changeZoneHandler(defaultProxy)).Methods("PATCH")
13-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}", deleteZoneHandler(defaultProxy)).Methods("DELETE")
7+
func registerRoutes(router *http.ServeMux) {
8+
router.HandleFunc("POST /api/v1/servers/{server_id}/zones", createZoneHandler(defaultProxy))
9+
router.HandleFunc("PUT /api/v1/servers/{server_id}/zones/{zone_id}/rectify", changeZoneHandler(defaultProxy))
10+
router.HandleFunc("PUT /api/v1/servers/{server_id}/zones/{zone_id}", changeZoneHandler(defaultProxy))
11+
router.HandleFunc("PATCH /api/v1/servers/{server_id}/zones/{zone_id}", changeZoneHandler(defaultProxy))
12+
router.HandleFunc("DELETE /api/v1/servers/{server_id}/zones/{zone_id}", deleteZoneHandler(defaultProxy))
1413

15-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/metadata", changeZoneHandler(defaultProxy)).Methods("POST")
16-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/metadata/{metadata_kind}", changeZoneHandler(defaultProxy)).Methods("PUT")
17-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/metadata/{metadata_kind}", changeZoneHandler(defaultProxy)).Methods("DELETE")
14+
router.HandleFunc("POST /api/v1/servers/{server_id}/zones/{zone_id}/metadata", changeZoneHandler(defaultProxy))
15+
router.HandleFunc("PUT /api/v1/servers/{server_id}/zones/{zone_id}/metadata/{metadata_kind}", changeZoneHandler(defaultProxy))
16+
router.HandleFunc("DELETE /api/v1/servers/{server_id}/zones/{zone_id}/metadata/{metadata_kind}", changeZoneHandler(defaultProxy))
1817

19-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys", changeZoneHandler(defaultProxy)).Methods("POST")
18+
router.HandleFunc("POST /api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys", changeZoneHandler(defaultProxy))
2019

21-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys/{cryptokey_id}", changeZoneHandler(defaultProxy)).Methods("PUT")
22-
router.HandleFunc("/api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys/{cryptokey_id}", changeZoneHandler(defaultProxy)).Methods("DELETE")
20+
router.HandleFunc("PUT /api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys/{cryptokey_id}", changeZoneHandler(defaultProxy))
21+
router.HandleFunc("DELETE /api/v1/servers/{server_id}/zones/{zone_id}/cryptokeys/{cryptokey_id}", changeZoneHandler(defaultProxy))
2322

24-
router.PathPrefix("/").HandlerFunc(defaultProxy)
23+
router.HandleFunc("/", defaultProxy)
2524
}

internal/pkg/httputils/httputils.go

Lines changed: 20 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -8,89 +8,62 @@ import (
88
"net/http"
99
neturl "net/url"
1010
"strconv"
11-
"strings"
1211

13-
"github.com/gorilla/mux"
12+
"github.com/miekg/dns"
1413
"github.com/nameserver-systems/pdns-distribute/pkg/microservice/logger"
1514
)
1615

17-
func CopyHTTPHeader(src, dest http.Header) {
18-
for key, values := range src {
19-
for _, value := range values {
20-
dest.Add(key, value)
21-
}
22-
}
23-
}
24-
2516
func GetZoneIDFromRequest(r *http.Request) (string, error) {
2617
var err error
2718

2819
zoneid := getZoneIDFromRequestPath(r)
2920

30-
if hasNotFoundZoneID(zoneid) {
31-
zoneid, err = getZoneIDFromRequestBody(r, zoneid)
21+
if len(zoneid) == 0 {
22+
zoneid, err = getZoneIDFromRequestBody(r)
3223
if err != nil {
3324
return "", err
3425
}
3526
}
3627

37-
zoneid = ensureTrailingDot(zoneid)
28+
zoneid = dns.Fqdn(zoneid)
3829

3930
return zoneid, nil
4031
}
4132

42-
func ensureTrailingDot(zoneid string) string {
43-
if !strings.HasSuffix(zoneid, ".") {
44-
zoneid += "."
45-
}
46-
47-
return zoneid
48-
}
49-
50-
func getZoneIDFromRequestBody(r *http.Request, zoneid string) (string, error) {
33+
func getZoneIDFromRequestBody(r *http.Request) (zoneID string, err error) {
5134
var result map[string]interface{}
5235

53-
incomingbodybytes, readerr := io.ReadAll(r.Body)
54-
if readerr != nil {
55-
return "", readerr
36+
incomingbodybytes, err := io.ReadAll(r.Body)
37+
if err != nil {
38+
return
5639
}
5740

58-
closerr := r.Body.Close()
59-
if closerr != nil {
60-
return "", closerr
41+
if err = r.Body.Close(); err != nil {
42+
return
6143
}
6244

6345
// necessary due to io.ReadAll clears after read the body and body is used for proxy
6446
r.Body = io.NopCloser(bytes.NewBuffer(incomingbodybytes))
6547

66-
unmarshalerr := json.Unmarshal(incomingbodybytes, &result)
67-
if unmarshalerr != nil {
68-
return "", unmarshalerr
48+
if err = json.Unmarshal(incomingbodybytes, &result); err != nil {
49+
return
6950
}
7051

7152
if rawzoneid, okid := result["id"]; okid {
72-
zoneid = rawzoneid.(string)
53+
zoneID = rawzoneid.(string)
7354
} else if rawzonename, okname := result["name"]; okname {
74-
zoneid = rawzonename.(string)
55+
zoneID = rawzonename.(string)
7556
}
7657

77-
if hasNotFoundZoneID(zoneid) {
78-
return "", errZoneIDNotFound
58+
if len(zoneID) == 0 {
59+
err = errZoneIDNotFound
7960
}
8061

81-
return zoneid, nil
62+
return
8263
}
8364

8465
func getZoneIDFromRequestPath(r *http.Request) string {
85-
vars := mux.Vars(r)
86-
87-
zoneid := vars["zone_id"]
88-
89-
return zoneid
90-
}
91-
92-
func hasNotFoundZoneID(zoneid string) bool {
93-
return zoneid == ""
66+
return r.PathValue("zone_id")
9467
}
9568

9669
func GetHostAndPortFromURL(url string) (string, error) {
@@ -121,13 +94,6 @@ func GetHostnameFromURL(url string) (string, error) {
12194
return hostname, parseerr
12295
}
12396

124-
func CloseResponseBody(response *http.Response) {
125-
err := response.Body.Close()
126-
if err != nil {
127-
logger.ErrorErrLog(err)
128-
}
129-
}
130-
13197
func ExecutePowerDNSRequest(method, url, apitoken string, body io.Reader) (string, error) {
13298
var client http.Client
13399

@@ -143,14 +109,14 @@ func ExecutePowerDNSRequest(method, url, apitoken string, body io.Reader) (strin
143109
return "", executeerr
144110
}
145111

146-
defer CloseResponseBody(response)
112+
defer response.Body.Close()
147113

148114
responsebody, responsereaderr := io.ReadAll(response.Body)
149115
if responsereaderr != nil {
150116
return "", responsereaderr
151117
}
152118

153-
if 200 > response.StatusCode || response.StatusCode >= 300 {
119+
if !IsStatusCodeSuccesful(response.StatusCode) {
154120
logger.ErrorLog("invalid pdns answer with http status" + strconv.Itoa(response.StatusCode) + " with message: " + string(responsebody))
155121

156122
return "", errInvalidPDNSAPIAnswer

0 commit comments

Comments
 (0)