From 2cb91bd04072979fd001194617cdad94ee114a12 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 18 Apr 2022 20:32:39 +0200 Subject: [PATCH] VW: fix MBB token refresh error --- util/request/roundtrip.go | 9 ++++----- vehicle/vag/tokensource.go | 23 ++++++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/util/request/roundtrip.go b/util/request/roundtrip.go index 63e3cbf82..74c223159 100644 --- a/util/request/roundtrip.go +++ b/util/request/roundtrip.go @@ -18,10 +18,9 @@ type roundTripper struct { base http.RoundTripper } -const max = 1024 * 64 - var ( LogHeaders bool + LogMaxLen = 1024 * 8 reqMetric *prometheus.SummaryVec resMetric *prometheus.CounterVec ) @@ -93,7 +92,7 @@ func dump(r io.ReadCloser, w *strings.Builder) error { if w.Len() > 0 && len(body) > 0 { w.WriteString("\n--\n") } - _, err = w.Write(bytes.TrimSpace(body[:min(max, len(body))])) + _, err = w.Write(bytes.TrimSpace(body[:min(LogMaxLen, len(body))])) return err } @@ -108,7 +107,7 @@ func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) { if LogHeaders { if body, err := httputil.DumpRequestOut(req, true); err == nil { bld.WriteString("\n") - bld.Write(bytes.TrimSpace(body[:min(max, len(body))])) + bld.Write(bytes.TrimSpace(body[:min(LogMaxLen, len(body))])) } } else { if save, req.Body, err = drainBody(req.Body); err == nil { @@ -130,7 +129,7 @@ func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) { if LogHeaders { if body, err := httputil.DumpResponse(resp, true); err == nil { bld.WriteString("\n\n") - bld.Write(bytes.TrimSpace(body[:min(max, len(body))])) + bld.Write(bytes.TrimSpace(body[:min(LogMaxLen, len(body))])) } } else { if save, resp.Body, err = drainBody(resp.Body); err == nil { diff --git a/vehicle/vag/tokensource.go b/vehicle/vag/tokensource.go index d7180170c..a4b96c8a9 100644 --- a/vehicle/vag/tokensource.go +++ b/vehicle/vag/tokensource.go @@ -100,16 +100,25 @@ func (ts *metaTokenSource) TokenEx() (*Token, error) { ts.mu.Lock() defer ts.mu.Unlock() - if ts.ts == nil { - token, err := ts.newT() - if err != nil { - return nil, err + // use token source + if ts.ts != nil { + token, err := ts.ts.TokenEx() + if err == nil { + return token, nil } - - ts.ts = ts.newTS(token) } - token, err := ts.ts.TokenEx() + // create new start token + token, err := ts.newT() + if err != nil { + return nil, err + } + + // create token source + ts.ts = ts.newTS(token) + + // use token source + token, err = ts.ts.TokenEx() if err != nil { // token source doesn't work anymore, reset it ts.ts = nil