diff --git a/const.py b/const.py index 68edb2e..7bcd87c 100644 --- a/const.py +++ b/const.py @@ -9,7 +9,7 @@ # Software Parameters NAME = "Mercedes Me API" DOMAIN = "mercedesmeapi" -VERSION = "0.5" +VERSION = "0.6" TOKEN_FILE = ".mercedesme_token" CREDENTIAL_FILE = ".mercedesme_credentials" RESOURCES_FILE = ".mercedesme_resources" diff --git a/custom_components/mercedesmeapi/const.py b/custom_components/mercedesmeapi/const.py index c68913c..889532b 100644 --- a/custom_components/mercedesmeapi/const.py +++ b/custom_components/mercedesmeapi/const.py @@ -9,7 +9,7 @@ # Software Parameters NAME = "Mercedes Me API" DOMAIN = "mercedesmeapi" -VERSION = "0.5" +VERSION = "0.6" TOKEN_FILE = ".mercedesme_token" CREDENTIAL_FILE = ".mercedesme_credentials" RESOURCES_FILE = ".mercedesme_resources" diff --git a/custom_components/mercedesmeapi/oauth.py b/custom_components/mercedesmeapi/oauth.py index b7fd4df..8ee37eb 100644 --- a/custom_components/mercedesmeapi/oauth.py +++ b/custom_components/mercedesmeapi/oauth.py @@ -142,7 +142,7 @@ def CreateToken(self): auth_code = input() data = f"grant_type=authorization_code&code={auth_code}&redirect_uri={REDIRECT_URL}" - token = GetToken(URL_OAUTH_TOKEN, self.headers, data) + token = GetToken(URL_OAUTH_TOKEN, self.headers, data, refresh=False) # Check Token if not self.CheckToken(token): @@ -160,8 +160,8 @@ def CreateToken(self): ######################## def RefreshToken(self): - data = f"grant_type=refresh_token&refresh_token={self.refresh_token}" - token = GetToken(URL_OAUTH_TOKEN, self.headers, data) + data = f"grant_type=refresh_token&refresh_token={self.refresh_token}" + token = GetToken(URL_OAUTH_TOKEN, self.headers, data, refresh=True) # Check Token if not self.CheckToken(token): diff --git a/custom_components/mercedesmeapi/query.py b/custom_components/mercedesmeapi/query.py index 6a148ee..37e886c 100644 --- a/custom_components/mercedesmeapi/query.py +++ b/custom_components/mercedesmeapi/query.py @@ -64,7 +64,7 @@ def GetResource(resourceURL, config): ######################## # GetToken ######################## -def GetToken(tokenURL, headers, data): +def GetToken(tokenURL, headers, data, refresh=True): res = requests.post(tokenURL, data = data, headers = headers) try: data = res.json() @@ -79,14 +79,23 @@ def GetToken(tokenURL, headers, data): if ("reason" in data): reason = data["reason"] else: - if res.status_code == 302: - reason = "The request scope is invalid" - elif res.status_code == 400: - reason = "The redirect_uri differs from the registered one" - elif res.status_code == 401: - reason = "The specified client ID is invalid" + if (refresh == False): + # New Token Errors + if res.status_code == 302: + reason = "The request scope is invalid" + elif res.status_code == 400: + reason = "The redirect_uri differs from the registered one" + elif res.status_code == 401: + reason = "The specified client ID is invalid" + else: + reason = "Generic Error" else: - reason = "Generic Error" + # Refresh Token Errors + if res.status_code == 400: + reason = "The given refresh token is not valid or was already used." + else: + reason = "Generic Error" + data["reason"] = reason data["code"] = res.status_code