From 5cae8707451184c81c4c746e7f2ea1a00df62d44 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Fri, 8 May 2026 04:15:30 +0000 Subject: [PATCH] feat(provider/pia): try parsing JSON on bad port forwarding API status codes --- .../provider/privateinternetaccess/portforward.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/provider/privateinternetaccess/portforward.go b/internal/provider/privateinternetaccess/portforward.go index 0d2dcd7a..80150481 100644 --- a/internal/provider/privateinternetaccess/portforward.go +++ b/internal/provider/privateinternetaccess/portforward.go @@ -470,6 +470,18 @@ func makeNOKStatusError(response *http.Response, substitutions map[string]string url = replaceInString(url, substitutions) b, _ := io.ReadAll(response.Body) + + var responseData struct { + Status string `json:"status"` + Message string `json:"message"` + } + if err := json.Unmarshal(b, &responseData); err == nil { + responseData.Message = replaceInString(responseData.Message, substitutions) + return fmt.Errorf("HTTP status code not OK: %s: %d %s: response received: status %q and message %q", + url, response.StatusCode, response.Status, responseData.Status, responseData.Message) + } + + // Fallback on non JSON response body shortenMessage := string(b) shortenMessage = strings.ReplaceAll(shortenMessage, "\n", "") shortenMessage = strings.ReplaceAll(shortenMessage, " ", " ")