Add custom logger to redact headers
This commit is contained in:
parent
1e02b9ba36
commit
b6ace6dc35
|
@ -1,19 +1,46 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/go-resty/resty/v2"
|
"github.com/go-resty/resty/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
TokenHeader = "X-Auth-Token"
|
||||||
|
TokenQuery = "token"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
RedactedHeaders = []string{TokenHeader, " X-Request-Id"}
|
||||||
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
restClient *resty.Client
|
restClient *resty.Client
|
||||||
|
authToken *string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClient() *Client {
|
type Params struct {
|
||||||
|
Debug bool
|
||||||
|
Trace bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(p Params) *Client {
|
||||||
c := resty.New()
|
c := resty.New()
|
||||||
|
if p.Trace {
|
||||||
c.EnableTrace()
|
c.EnableTrace()
|
||||||
|
}
|
||||||
|
if p.Debug {
|
||||||
|
c.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
|
||||||
|
logRequest(req)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
c.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
|
||||||
|
logResponse(resp)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
c.SetError(&Error{})
|
c.SetError(&Error{})
|
||||||
c.SetBaseURL("https://api.ente.io")
|
c.SetBaseURL("https://api.ente.io")
|
||||||
return &Client{
|
return &Client{
|
||||||
|
@ -21,10 +48,6 @@ func NewClient() *Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func authReq(ctx context.Context, fn func(*resty.Request) (*resty.Response, error)) (*resty.Response, error) {
|
|
||||||
return fn(ctx.Value("auth").(*resty.Request))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error type for resty.Error{}
|
// Error type for resty.Error{}
|
||||||
type Error struct{}
|
type Error struct{}
|
||||||
|
|
||||||
|
|
50
internal/api/log.go
Normal file
50
internal/api/log.go
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/go-resty/resty/v2"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func logRequest(req *resty.Request) {
|
||||||
|
fmt.Println("Request:")
|
||||||
|
fmt.Printf("Method: %s\n", req.Method)
|
||||||
|
fmt.Printf("URL: %s\n", req.URL)
|
||||||
|
fmt.Println("Headers:")
|
||||||
|
for k, v := range req.Header {
|
||||||
|
redacted := false
|
||||||
|
for _, rh := range RedactedHeaders {
|
||||||
|
if strings.ToLower(k) == strings.ToLower(rh) {
|
||||||
|
redacted = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if redacted {
|
||||||
|
fmt.Printf("%s: %s\n", k, "REDACTED")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%s: %s\n", k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func logResponse(resp *resty.Response) {
|
||||||
|
fmt.Println("Response:")
|
||||||
|
fmt.Printf("Status Code: %d\n", resp.StatusCode())
|
||||||
|
fmt.Printf("Protocol: %s\n", resp.Proto())
|
||||||
|
fmt.Printf("Time Duration: %s\n", resp.Time())
|
||||||
|
fmt.Println("Headers:")
|
||||||
|
for k, v := range resp.Header() {
|
||||||
|
redacted := false
|
||||||
|
for _, rh := range RedactedHeaders {
|
||||||
|
if strings.ToLower(k) == strings.ToLower(rh) {
|
||||||
|
redacted = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if redacted {
|
||||||
|
fmt.Printf("%s: %s\n", k, "REDACTED")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%s: %s\n", k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue