diff --git a/vehicle/jlr.go b/vehicle/jlr.go index 67492128cf..b2af947559 100644 --- a/vehicle/jlr.go +++ b/vehicle/jlr.go @@ -100,15 +100,12 @@ func (v *JLR) RegisterDevice(log *util.Logger, user, device string, t jlr.Token) uri := fmt.Sprintf("%s/users/%s/clients", jlr.IFOP_BASE_URL, url.PathEscape(user)) - req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), map[string]string{ + req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), jlr.Headers(device, map[string]string{ "Authorization": "Bearer " + t.AccessToken, "Content-type": "application/json", "Accept": "application/json", - "X-Device-Id": device, "x-telematicsprogramtype": "jlrpy", - "x-App-Id": "ICR_JAGUAR_ANDROID", - "x-App-Secret": "7bf6f544-1926-4714-8066-ceceb40d538d", - }) + })) if err == nil { _, err = c.DoBody(req) } diff --git a/vehicle/jlr/api.go b/vehicle/jlr/api.go index e8e1488972..e3a150f7cc 100644 --- a/vehicle/jlr/api.go +++ b/vehicle/jlr/api.go @@ -32,13 +32,10 @@ func NewAPI(log *util.Logger, device string, ts oauth2.TokenSource) *API { Decorator: func(req *http.Request) error { token, err := ts.Token() if err == nil { - for k, v := range map[string]string{ - "Authorization": fmt.Sprintf("Bearer %s", token.AccessToken), - "X-Device-Id": device, + for k, v := range Headers(device, map[string]string{ + "Authorization": "Bearer " + token.AccessToken, "x-telematicsprogramtype": "jlrpy", - "x-App-Id": "ICR_JAGUAR_ANDROID", - "x-App-Secret": "7bf6f544-1926-4714-8066-ceceb40d538d", - } { + }) { req.Header.Set(k, v) } } diff --git a/vehicle/jlr/identity.go b/vehicle/jlr/identity.go index e2422cb7ee..008a432ce6 100644 --- a/vehicle/jlr/identity.go +++ b/vehicle/jlr/identity.go @@ -2,6 +2,7 @@ package jlr import ( "fmt" + "maps" "net/http" "time" @@ -21,6 +22,18 @@ type Identity struct { oauth2.TokenSource } +func Headers(device string, headers map[string]string) map[string]string { + res := map[string]string{ + "X-Device-Id": device, + "x-App-Id": "ICR_JAGUAR", + "x-App-Secret": "018dd168-6271-707f-9fd4-aed2bf76905e", + } + + maps.Copy(res, headers) + + return res +} + // NewIdentity creates Fiat identity func NewIdentity(log *util.Logger, user, password, device string) *Identity { return &Identity{ @@ -32,15 +45,12 @@ func NewIdentity(log *util.Logger, user, password, device string) *Identity { } // Login authenticates with given payload -func (v *Identity) login(data map[string]string) (Token, error) { +func (v *Identity) login(data any) (Token, error) { uri := fmt.Sprintf("%s/tokens", IFAS_BASE_URL) - req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), map[string]string{ + req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), Headers(v.device, map[string]string{ "Authorization": "Basic YXM6YXNwYXNz", "Content-type": request.JSONContent, - "X-Device-Id": v.device, - "x-App-Id": "ICR_JAGUAR_ANDROID", - "x-App-Secret": "7bf6f544-1926-4714-8066-ceceb40d538d", - }) + })) var token Token if err == nil {