diff --git a/pkg/services/shield_service.go b/pkg/services/shield_service.go index 1bb71d7..bfab79e 100644 --- a/pkg/services/shield_service.go +++ b/pkg/services/shield_service.go @@ -50,7 +50,18 @@ func (s *ShieldClient) do(method, path string, body interface{}) ([]byte, int, e } defer resp.Body.Close() data, err := io.ReadAll(resp.Body) - return data, resp.StatusCode, err + if err != nil { + return nil, resp.StatusCode, err + } + if resp.StatusCode >= 400 { + // La API puede devolver texto plano en errores; evitamos que el caller intente parsear JSON + msg := string(data) + if msg == "" { + msg = resp.Status + } + return nil, resp.StatusCode, fmt.Errorf("shield API error %d: %s", resp.StatusCode, msg) + } + return data, resp.StatusCode, nil } // ─── Health ────────────────────────────────────────────────────────────────── @@ -118,13 +129,10 @@ func (s *ShieldClient) ReviewRequests(status string) (map[string]interface{}, er func (s *ShieldClient) ApproveRequest(id, note, reason string) (map[string]interface{}, error) { body := map[string]string{"note": note, "reason": reason} - data, code, err := s.do("PUT", "/api/admin/review-requests/"+id+"/approve", body) + data, _, err := s.do("PUT", "/api/admin/review-requests/"+id+"/approve", body) if err != nil { return nil, err } - if code >= 400 { - return nil, fmt.Errorf("shield API error %d: %s", code, string(data)) - } var out map[string]interface{} json.Unmarshal(data, &out) return out, nil @@ -132,13 +140,10 @@ func (s *ShieldClient) ApproveRequest(id, note, reason string) (map[string]inter func (s *ShieldClient) RejectRequest(id, note string) (map[string]interface{}, error) { body := map[string]string{"note": note} - data, code, err := s.do("PUT", "/api/admin/review-requests/"+id+"/reject", body) + data, _, err := s.do("PUT", "/api/admin/review-requests/"+id+"/reject", body) if err != nil { return nil, err } - if code >= 400 { - return nil, fmt.Errorf("shield API error %d: %s", code, string(data)) - } var out map[string]interface{} json.Unmarshal(data, &out) return out, nil @@ -157,27 +162,18 @@ func (s *ShieldClient) Whitelist() (map[string]interface{}, error) { func (s *ShieldClient) AddWhitelist(domain, reason, addedBy string) (map[string]interface{}, error) { body := map[string]string{"domain": domain, "reason": reason, "added_by": addedBy} - data, code, err := s.do("POST", "/api/admin/whitelist", body) + data, _, err := s.do("POST", "/api/admin/whitelist", body) if err != nil { return nil, err } - if code >= 400 { - return nil, fmt.Errorf("shield API error %d: %s", code, string(data)) - } var out map[string]interface{} json.Unmarshal(data, &out) return out, nil } func (s *ShieldClient) DeleteWhitelist(domain string) error { - data, code, err := s.do("DELETE", "/api/admin/whitelist/"+domain, nil) - if err != nil { - return err - } - if code >= 400 { - return fmt.Errorf("shield API error %d: %s", code, string(data)) - } - return nil + _, _, err := s.do("DELETE", "/api/admin/whitelist/"+domain, nil) + return err } // ─── Blacklist ─────────────────────────────────────────────────────────────── @@ -193,27 +189,18 @@ func (s *ShieldClient) Blacklist() (map[string]interface{}, error) { func (s *ShieldClient) AddBlacklist(domain, reason, addedBy string) (map[string]interface{}, error) { body := map[string]string{"domain": domain, "reason": reason, "added_by": addedBy} - data, code, err := s.do("POST", "/api/admin/blacklist", body) + data, _, err := s.do("POST", "/api/admin/blacklist", body) if err != nil { return nil, err } - if code >= 400 { - return nil, fmt.Errorf("shield API error %d: %s", code, string(data)) - } var out map[string]interface{} json.Unmarshal(data, &out) return out, nil } func (s *ShieldClient) DeleteBlacklist(domain string) error { - data, code, err := s.do("DELETE", "/api/admin/blacklist/"+domain, nil) - if err != nil { - return err - } - if code >= 400 { - return fmt.Errorf("shield API error %d: %s", code, string(data)) - } - return nil + _, _, err := s.do("DELETE", "/api/admin/blacklist/"+domain, nil) + return err } // ─── Reputación ────────────────────────────────────────────────────────────── @@ -229,13 +216,10 @@ func (s *ShieldClient) Reputation(domain string) (map[string]interface{}, error) func (s *ShieldClient) AdjustScore(domain string, votesReal, votesFake int) (map[string]interface{}, error) { body := map[string]int{"votes_real": votesReal, "votes_fake": votesFake} - data, code, err := s.do("PUT", "/api/admin/reputation/"+domain+"/score", body) + data, _, err := s.do("PUT", "/api/admin/reputation/"+domain+"/score", body) if err != nil { return nil, err } - if code >= 400 { - return nil, fmt.Errorf("shield API error %d: %s", code, string(data)) - } var out map[string]interface{} json.Unmarshal(data, &out) return out, nil