|  |  |  | import jwt
 | 
					
						
							|  |  |  | import requests
 | 
					
						
							|  |  |  | from datetime import datetime, timedelta
 | 
					
						
							|  |  |  | from common.basedir import PERSIST
 | 
					
						
							|  |  |  | from selfdrive.version import version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Api():
 | 
					
						
							|  |  |  |   def __init__(self, dongle_id):
 | 
					
						
							|  |  |  |     self.dongle_id = dongle_id
 | 
					
						
							|  |  |  |     with open(PERSIST+'/comma/id_rsa') as f:
 | 
					
						
							|  |  |  |       self.private_key = f.read()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def get(self, *args, **kwargs):
 | 
					
						
							|  |  |  |     return self.request('GET', *args, **kwargs)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def post(self, *args, **kwargs):
 | 
					
						
							|  |  |  |     return self.request('POST', *args, **kwargs)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def request(self, method, endpoint, timeout=None, access_token=None, **params):
 | 
					
						
							|  |  |  |     return api_get(endpoint, method=method, timeout=timeout, access_token=access_token, **params)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def get_token(self):
 | 
					
						
							|  |  |  |     now = datetime.utcnow()
 | 
					
						
							|  |  |  |     payload = {
 | 
					
						
							|  |  |  |       'identity': self.dongle_id,
 | 
					
						
							|  |  |  |       'nbf': now,
 | 
					
						
							|  |  |  |       'iat': now,
 | 
					
						
							|  |  |  |       'exp': now + timedelta(hours=1)
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     return jwt.encode(payload, self.private_key, algorithm='RS256').decode('utf8')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def api_get(endpoint, method='GET', timeout=None, access_token=None, **params):
 | 
					
						
							|  |  |  |   backend = "https://api.commadotai.com/"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   headers = {}
 | 
					
						
							|  |  |  |   if access_token is not None:
 | 
					
						
							|  |  |  |     headers['Authorization'] = "JWT "+access_token
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   headers['User-Agent'] = "openpilot-" + version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return requests.request(method, backend+endpoint, timeout=timeout, headers=headers, params=params)
 |