From 6aac2dcb85393030dcec0c2e6cf9d07c8c15ade9 Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 6 Mar 2025 18:43:47 +0100 Subject: [PATCH] VW: update api (#19496) --- vehicle/vag/vwidentity/forms.go | 28 ++++++++++++------------- vehicle/vag/vwidentity/forms_test.go | 31 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 vehicle/vag/vwidentity/forms_test.go diff --git a/vehicle/vag/vwidentity/forms.go b/vehicle/vag/vwidentity/forms.go index 8c662929d..ceadb0575 100644 --- a/vehicle/vag/vwidentity/forms.go +++ b/vehicle/vag/vwidentity/forms.go @@ -3,7 +3,6 @@ package vwidentity import ( "encoding/json" "errors" - "fmt" "io" "regexp" "strings" @@ -72,27 +71,26 @@ type CredentialParams struct { } func ParseCredentialsPage(r io.ReadCloser) (CredentialParams, error) { - var res CredentialParams - - buf := new(strings.Builder) - if _, err := io.Copy(buf, r); err != nil { - return res, err + b, err := io.ReadAll(r) + if err != nil { + return CredentialParams{}, err } - re := regexp.MustCompile(`(?s)window._IDK\s*=\s*(.*?)[;<]`) - match := re.FindAllStringSubmatch(buf.String(), -1) + return parseCredentials(string(b)) +} + +func parseCredentials(body string) (CredentialParams, error) { + // find js block + match := regexp.MustCompile(`(?s)window._IDK\s*=\s*(.*?)[;<]`).FindAllStringSubmatch(body, -1) // clean quotes - tmpl := strings.ReplaceAll(match[0][1], `'`, `"`) + quotes1 := strings.ReplaceAll(match[0][1], `'`, `"`) + quotes2 := regexp.MustCompile(`\s(\w+)(?s)*:`).ReplaceAllString(quotes1, `" $1":`) // strip , } - re2 := regexp.MustCompile(`(?s),\s+}`) - tmpl = re2.ReplaceAllString(tmpl, "}") - - for _, v := range []string{"templateModel", "disabledFeatures", "isFooterEnabled", "currentLocale", "csrf_parameterName", "csrf_token", "userSession", "userId", "countryOfResidence", "baseUrl", "consentBaseUrl", "isRTLEnabled"} { - tmpl = strings.Replace(tmpl, v, fmt.Sprintf(`"%s"`, v), 1) - } + tmpl := regexp.MustCompile(`(?s),\s+}`).ReplaceAllString(quotes2, "}") + var res CredentialParams err := json.Unmarshal([]byte(tmpl), &res) return res, err diff --git a/vehicle/vag/vwidentity/forms_test.go b/vehicle/vag/vwidentity/forms_test.go new file mode 100644 index 000000000..511b9eae7 --- /dev/null +++ b/vehicle/vag/vwidentity/forms_test.go @@ -0,0 +1,31 @@ +package vwidentity + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParse(t *testing.T) { + b := `` + + _, err := parseCredentials(b) + require.NoError(t, err) +}