import hmac import hashlib import sys from pathlib import Path import requests import subprocess import base64 def load_secret_key(keyb64: str): # Decode the base64 encoded key decoded_key = base64.b64decode(keyb64) return decoded_key def compute_hmac(file_path, secret_key): """Compute the HMAC of a file using HMAC-SHA256.""" hmac_obj = hmac.new(secret_key, digestmod=hashlib.sha256) with open(file_path, 'rb') as f: while chunk := f.read(4096): hmac_obj.update(chunk) return hmac_obj.hexdigest() def upload_file(url, file_path, secret_key): """Upload a file to the server with an HMAC signature.""" # Compute HMAC of the file signature = compute_hmac(file_path, secret_key) print(signature) # Prepare headers headers = {'X-Signature': signature} # Read file and prepare files dictionary for request with open(file_path, 'rb') as f: files = {'file': (Path(file_path).name, f)} response = requests.post(url, files=files, headers=headers) return response def get_short_git_commit_hash(): try: # Run the Git command to get the short commit hash result = subprocess.run(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True) # Extract and return the commit hash return result.stdout.strip() except subprocess.CalledProcessError as e: print(f"Error getting Git commit hash: {e}") return None if __name__ == "__main__": url = "https://fw.revwal.de/master/upload" # Adjust this to your server's URL fw_path = "build/CLS_Master.bin" # Path to the file you want to upload # Get the Git commit hash commit_hash = get_short_git_commit_hash() if commit_hash is None: print("Error: Could not get Git commit hash") sys.exit(1) # replace the file name with the commit hash file_path = fw_path.replace("CLS_Master", commit_hash) # copy the file to the new name subprocess.run(['cp', fw_path, file_path]) secret_key = load_secret_key(sys.argv[1]) response = upload_file(url, file_path, secret_key) print(f"Server response: {response.text}")