You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							46 lines
						
					
					
						
							1.4 KiB
						
					
					
				| import jwt
 | |
| import os
 | |
| import requests
 | |
| from datetime import datetime, timedelta
 | |
| from openpilot.system.hardware.hw import Paths
 | |
| from openpilot.system.version import get_version
 | |
| 
 | |
| API_HOST = os.getenv('API_HOST', 'https://api.commadotai.com')
 | |
| 
 | |
| class Api():
 | |
|   def __init__(self, dongle_id):
 | |
|     self.dongle_id = dongle_id
 | |
|     with open(Paths.persist_root()+'/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, expiry_hours=1):
 | |
|     now = datetime.utcnow()
 | |
|     payload = {
 | |
|       'identity': self.dongle_id,
 | |
|       'nbf': now,
 | |
|       'iat': now,
 | |
|       'exp': now + timedelta(hours=expiry_hours)
 | |
|     }
 | |
|     token = jwt.encode(payload, self.private_key, algorithm='RS256')
 | |
|     if isinstance(token, bytes):
 | |
|       token = token.decode('utf8')
 | |
|     return token
 | |
| 
 | |
| 
 | |
| def api_get(endpoint, method='GET', timeout=None, access_token=None, **params):
 | |
|   headers = {}
 | |
|   if access_token is not None:
 | |
|     headers['Authorization'] = "JWT " + access_token
 | |
| 
 | |
|   headers['User-Agent'] = "openpilot-" + get_version()
 | |
| 
 | |
|   return requests.request(method, API_HOST + "/" + endpoint, timeout=timeout, headers=headers, params=params)
 | |
| 
 |