add skeleton for cli-client
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									48b9e595ff
								
							
						
					
					
						commit
						ca79af5e38
					
				
					 1 changed files with 83 additions and 0 deletions
				
			
		
							
								
								
									
										83
									
								
								cli-client/toolshed-client.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										83
									
								
								cli-client/toolshed-client.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,83 @@ | |||
| #!/usr/bin/env python3 | ||||
| import argparse | ||||
| import os | ||||
| import requests | ||||
| from nacl.signing import SigningKey | ||||
| from json import dumps | ||||
| 
 | ||||
| 
 | ||||
| class ToolshedApi: | ||||
|     user = None | ||||
|     host = None | ||||
|     signing_key = None | ||||
| 
 | ||||
|     def __init__(self, user, host, key): | ||||
|         if host is None: | ||||
|             raise ValueError("TOOLSHED_HOST environment variable not set") | ||||
| 
 | ||||
|         if user is None: | ||||
|             raise ValueError("TOOLSHED_USER environment variable not set") | ||||
| 
 | ||||
|         if key is None: | ||||
|             raise ValueError("TOOLSHED_KEY environment variable not set") | ||||
| 
 | ||||
|         if len(key) != 64: | ||||
|             raise ValueError("TOOLSHED_KEY must be 64 hex characters") | ||||
| 
 | ||||
|         signing_key = SigningKey(bytes.fromhex(key)) | ||||
| 
 | ||||
|         self.user = user | ||||
|         self.host = host | ||||
|         self.signing_key = signing_key | ||||
| 
 | ||||
|     def get(self, target): | ||||
|         url = "http://" + self.host + target | ||||
|         signed = self.signing_key.sign(url.encode('utf-8')) | ||||
|         signature = signed.signature.hex() | ||||
|         response = requests.get(url, headers={"Authorization": "Signature " + self.user + ":" + signature}) | ||||
|         return response.json() | ||||
| 
 | ||||
|     def post(self, target, data): | ||||
|         url = "http://" + self.host + target | ||||
|         json = dumps(data) | ||||
|         signed = self.signing_key.sign(url.encode('utf-8') + json.encode('utf-8')) | ||||
|         signature = signed.signature.hex() | ||||
|         response = requests.post(url, headers={"Authorization": "Signature " + self.user + ":" + signature}, json=data) | ||||
|         return response.json() | ||||
| 
 | ||||
| 
 | ||||
| def main(): | ||||
|     host = os.environ.get('TOOLSHED_HOST') | ||||
|     user = os.environ.get('TOOLSHED_USER') | ||||
|     key = os.environ.get('TOOLSHED_KEY') | ||||
| 
 | ||||
|     parser = argparse.ArgumentParser(description='Toolshed API client') | ||||
|     parser.add_argument('--host', help='Toolshed host') | ||||
|     parser.add_argument('--user', help='Toolshed user') | ||||
|     parser.add_argument('--key', help='Toolshed key') | ||||
|     parser.add_argument('cmd', help='Command') | ||||
|     args = parser.parse_args() | ||||
| 
 | ||||
|     if args.host is not None: | ||||
|         host = args.host | ||||
| 
 | ||||
|     if args.user is not None: | ||||
|         user = args.user | ||||
| 
 | ||||
|     if args.key is not None: | ||||
|         key = args.key | ||||
| 
 | ||||
|     api = ToolshedApi(user, host, key) | ||||
| 
 | ||||
|     if args.cmd == 'getinventory': | ||||
|         inv = api.get("/api/inventory_items/") | ||||
|         print(inv) | ||||
|     elif args.cmd == 'additem': | ||||
|         inv = api.post("/api/inventory_items/", {"name": "test"}) | ||||
|         print(inv) | ||||
|     else: | ||||
|         print("Unknown command: " + args.cmd) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue