from const import *
# Logger
-logger = logging.getLogger(__name__)
+_LOGGER = logging.getLogger(__name__)
class MercedesMeConfig:
- name = NAME
- domain = DOMAIN
- version = VERSION
- token_file = TOKEN_FILE
- credentials_file = CREDENTIAL_FILE
- resources_file = RESOURCES_FILE
- redirect_uri = REDIRECT_URL
- scope = SCOPE
+ token_file = ""
+ credentials_file = ""
+ resources_file = ""
client_id = ""
client_secret = ""
vin = ""
oauth_url = URL_OAUTH
res_url_prefix = URL_RES_PREFIX
+ ########################
+ # Init
+ ########################
+ def __init__(self):
+ # Files
+ self.token_file = TOKEN_FILE
+ self.credentials_file = CREDENTIAL_FILE
+ self.resources_file = RESOURCES_FILE
+
########################
# Read Configuration
########################
def ReadConfig(self):
+ needToRefresh = False
+
# Read credentials from file
if not os.path.isfile(self.credentials_file):
- logger.error ("Credential File " + self.credentials_file + " not found")
+ _LOGGER.error ("Credential File " + self.credentials_file + " not found")
return False
try:
f = ConfigObj(self.credentials_file)
except Exception:
- logger.error ("Wrong "+ self.credentials_file + " file found")
+ _LOGGER.error ("Wrong "+ self.credentials_file + " file found")
return False
# Client ID
self.client_id = f.get(CONF_CLIENT_ID)
if not self.client_id:
- logger.error ("No "+ CONF_CLIENT_ID + " found in the configuration")
+ _LOGGER.error ("No "+ CONF_CLIENT_ID + " found in the configuration")
return False
# Client Secret
self.client_secret = f.get(CONF_CLIENT_SECRET)
if not self.client_secret:
- logger.error ("No "+ CONF_CLIENT_SECRET + " found in the configuration")
+ _LOGGER.error ("No "+ CONF_CLIENT_SECRET + " found in the configuration")
return False
# Vehicle ID
self.vin = f.get(CONF_VEHICLE_ID)
if not self.vin:
- logger.error ("No "+ CONF_VEHICLE_ID + " found in the configuration")
+ _LOGGER.error ("No "+ CONF_VEHICLE_ID + " found in the configuration")
return False
# Base64
b64_str = self.client_id + ":" + self.client_secret
self.base64 = b64_bytes.decode('ascii')
# Read Token
- token_file = self.token_file
- if not os.path.isfile(token_file):
- logger.error ("Token File missing - Creating a new one")
- token = self.CreateToken()
- if token == None:
- logger.error ("Error creating token")
+ if not os.path.isfile(self.token_file):
+ _LOGGER.error ("Token File missing - Creating a new one")
+ if (not self.CreateToken()):
+ _LOGGER.error ("Error creating token")
return False
else:
- with open(token_file, 'r') as file:
+ with open(self.token_file, 'r') as file:
try:
token = json.load(file)
except ValueError:
token = None
- if not self.CheckToken(token):
- logger.error ("Token File not correct - Creating a new one")
- token = self.CreateToken()
- if token == None:
- logger.error ("Error creating token")
+ if self.CheckToken(token):
+ # Save Token
+ self.access_token = token['access_token']
+ self.refresh_token = token['refresh_token']
+ needToRefresh = True
+ else:
+ _LOGGER.error ("Token File not correct - Creating a new one")
+ if (not self.CreateToken()):
+ _LOGGER.error ("Error creating token")
return False
- # Save Token
- self.access_token = token['access_token']
- self.refresh_token = token['refresh_token']
+
+ if (needToRefresh):
+ if (not self.RefreshToken()):
+ _LOGGER.error ("Error refreshing token")
+ return False
+
return True
########################
# Write Token
########################
def WriteToken(self, token):
- token_file = self.token_file
- with open(token_file, 'w') as file:
+ with open(self.token_file, 'w') as file:
json.dump(token, file)
########################
def CheckToken(self, token):
if "error" in token:
if "error_description" in token:
- logger.error ("Error retriving token: " + token["error_description"])
+ _LOGGER.error ("Error retriving token: " + token["error_description"])
else:
- logger.error ("Error retriving token: " + token["error"])
+ _LOGGER.error ("Error retriving token: " + token["error"])
return False
if len(token) == 0:
- logger.error ("Empty token found.")
+ _LOGGER.error ("Empty token found.")
return False
if not 'access_token' in token:
- logger.error ("Access token not present.")
+ _LOGGER.error ("Access token not present.")
return False
if not 'refresh_token' in token:
- logger.error ("Refresh token not present.")
+ _LOGGER.error ("Refresh token not present.")
return False
return True
########################
def CreateToken(self):
print( "Open the browser and insert this link:\n" )
- print( "https://id.mercedes-benz.com/as/authorization.oauth2?response_type=code&client_id=" + self.client_id + "&redirect_uri=" + self.redirect_uri + "&scope=" + self.scope + "\n")
+ print( "https://id.mercedes-benz.com/as/authorization.oauth2?response_type=code&client_id=" + self.client_id + "&redirect_uri=" + REDIRECT_URL + "&scope=" + SCOPE + "\n")
print( "Copy the code in the url:")
auth_code = input()
# Check Token
if not self.CheckToken(token):
- return None
+ return False
else:
+ # Save Token
self.WriteToken(token)
- return token
+ self.access_token = token['access_token']
+ self.refresh_token = token['refresh_token']
+ return True
########################
# Refresh Token
# Check Token
if not self.CheckToken(token):
- return None
+ return False
else:
+ # Save Token
self.WriteToken(token)
- return token
+ self.access_token = token['access_token']
+ self.refresh_token = token['refresh_token']
return True