diff --git a/bouncer.go b/bouncer.go index 2a760cb..e9e8b67 100644 --- a/bouncer.go +++ b/bouncer.go @@ -175,7 +175,7 @@ func (bouncer *Bouncer) ServeHTTP(rw http.ResponseWriter, req *http.Request) { if bouncer.crowdsecMode != noneMode { isBanned, err := cache.GetDecision(remoteIP) if err != nil { - logger.Error(err.Error()) + logger.Debug(err.Error()) if err.Error() == simpleredis.RedisUnreachable { healthy = false } @@ -259,7 +259,7 @@ func handleNoStreamCache(bouncer *Bouncer, rw http.ResponseWriter, req *http.Req } body, err := crowdsecQuery(bouncer, routeURL.String()) if err != nil { - logger.Info(err.Error()) + logger.Error(err.Error()) rw.WriteHeader(http.StatusForbidden) return } @@ -275,7 +275,7 @@ func handleNoStreamCache(bouncer *Bouncer, rw http.ResponseWriter, req *http.Req var decisions []Decision err = json.Unmarshal(body, &decisions) if err != nil { - logger.Info(fmt.Sprintf("failed to parse body: %s", err)) + logger.Error(fmt.Sprintf("handleNoStreamCache:parseBody: %s", err)) rw.WriteHeader(http.StatusForbidden) return } @@ -289,7 +289,7 @@ func handleNoStreamCache(bouncer *Bouncer, rw http.ResponseWriter, req *http.Req rw.WriteHeader(http.StatusForbidden) duration, err := time.ParseDuration(decisions[0].Duration) if err != nil { - logger.Info(fmt.Sprintf("failed to parse duration: %s", err)) + logger.Error(fmt.Sprintf("handleNoStreamCache:parseDuration %s", err)) return } if bouncer.crowdsecMode == liveMode { @@ -302,9 +302,9 @@ func handleStreamCache(bouncer *Bouncer) { // Instead of blocking the goroutine interval for all the secondary node, // if the master service is shut down, other goroutine can take the lead // because updated routine information is in the cache - logger.Debug("handleStreamCache") _, err := cache.GetDecision(cacheTimeoutKey) if err == nil { + logger.Debug("handleStreamCache:alreadyUpdated") return } cache.SetDecision(cacheTimeoutKey, false, bouncer.updateInterval-1) @@ -316,14 +316,14 @@ func handleStreamCache(bouncer *Bouncer) { } body, err := crowdsecQuery(bouncer, streamRouteURL.String()) if err != nil { - logger.Info(err.Error()) + logger.Error(err.Error()) crowdsecStreamHealthy = false return } var stream Stream err = json.Unmarshal(body, &stream) if err != nil { - logger.Info(fmt.Sprintf("error while parsing body: %s", err)) + logger.Error(fmt.Sprintf("handleStreamCache:parsingBody %s", err)) crowdsecStreamHealthy = false return } @@ -345,21 +345,20 @@ func crowdsecQuery(bouncer *Bouncer, stringURL string) ([]byte, error) { req.Header.Add(crowdsecLapiHeader, bouncer.crowdsecKey) res, err := bouncer.client.Do(req) if err != nil { - return nil, fmt.Errorf("error while fetching %v: %w", stringURL, err) + return nil, fmt.Errorf("crowdsecQuery url:%s %s", stringURL, err.Error()) } if res.StatusCode != http.StatusOK { - return nil, fmt.Errorf("error while fetching %v, status code: %d", stringURL, res.StatusCode) + return nil, fmt.Errorf("crowdsecQuery url:%s, statusCode:%d", stringURL, res.StatusCode) } - defer func(body io.ReadCloser) { - err = body.Close() - if err != nil { - logger.Error(fmt.Sprintf("failed to close body reader: %s", err.Error())) + defer func() { + if err = res.Body.Close(); err != nil { + logger.Error(fmt.Sprintf("crowdsecQuery:closeBody %s", err.Error())) } - }(res.Body) + }() body, err := io.ReadAll(res.Body) if err != nil { - return nil, fmt.Errorf("error while reading body: %w", err) + return nil, fmt.Errorf("crowdsecQuery:readBody %s", err.Error()) } return body, nil } @@ -402,7 +401,7 @@ func validateParams(config *Config) error { if len(config.ForwardedHeadersTrustedIPs) > 0 { _, err = ip.NewChecker(config.ForwardedHeadersTrustedIPs) if err != nil { - return fmt.Errorf("ForwardedHeadersTrustedIPs must be a list of IP/CIDR :%w", err) + return fmt.Errorf("ForwardedHeadersTrustedIPs must be a list of IP/CIDR :%s", err.Error()) } } else { logger.Debug("No IP provided for ForwardedHeadersTrustedIPs") @@ -410,7 +409,7 @@ func validateParams(config *Config) error { if len(config.ClientTrustedIPs) > 0 { _, err = ip.NewChecker(config.ClientTrustedIPs) if err != nil { - return fmt.Errorf("TrustedIPs must be a list of IP/CIDR :%w", err) + return fmt.Errorf("TrustedIPs must be a list of IP/CIDR :%s", err.Error()) } } else { logger.Debug("No IP provided for TrustedIPs") diff --git a/pkg/ip/ip.go b/pkg/ip/ip.go index f2b167e..b46e9e8 100644 --- a/pkg/ip/ip.go +++ b/pkg/ip/ip.go @@ -33,7 +33,7 @@ func NewChecker(trustedIPs []string) (*Checker, error) { _, ipAddr, err := net.ParseCIDR(ipMask) if err != nil { - return nil, fmt.Errorf("parsing CIDR trusted IPs %s: %w", ipAddr, err) + return nil, fmt.Errorf("parsing CIDR trusted IPs %s: %s", ipAddr, err.Error()) } checker.authorizedIPsNet = append(checker.authorizedIPsNet, ipAddr) logger.Debug(fmt.Sprintf("IP network %v is trusted", ipAddr)) @@ -45,12 +45,12 @@ func NewChecker(trustedIPs []string) (*Checker, error) { // Contains checks if provided address is in the trusted IPs. func (ip *Checker) Contains(addr string) (bool, error) { if len(addr) == 0 { - return false, errors.New("empty IP address") + return false, errors.New("Contains:noAddress") } ipAddr, err := parseIP(addr) if err != nil { - return false, fmt.Errorf("unable to parse address: %s: %w", addr, err) + return false, fmt.Errorf("Contains:parseAddress addr:%s %s", addr, err.Error()) } return ip.ContainsIP(ipAddr), nil @@ -76,7 +76,7 @@ func (ip *Checker) ContainsIP(addr net.IP) bool { func parseIP(addr string) (net.IP, error) { userIP := net.ParseIP(addr) if userIP == nil { - return nil, fmt.Errorf("can't parse IP from address %s", addr) + return nil, fmt.Errorf("parseIP:parseAddress %s", addr) } return userIP, nil @@ -123,7 +123,7 @@ func GetRemoteIP(req *http.Request, strategy *PoolStrategy, customHeader string) } remoteIP, _, err := net.SplitHostPort(req.RemoteAddr) if err != nil { - return "", fmt.Errorf("failed to extract ip from remote address: %w", err) + return "", fmt.Errorf("GetRemoteIP:extractIP: %s", err.Error()) } return remoteIP, nil }