""" API Key Generation Script. Generates secure API keys for VoiceAuth API authentication. """ import argparse import secrets import sys from pathlib import Path def generate_api_key(prefix: str = "sk_", length: int = 48) -> str: """ Generate a secure API key. Args: prefix: Prefix for the API key (default: "sk_") length: Length of the random portion in characters (default: 48) Returns: Generated API key string """ # Generate random hex bytes (length/2 bytes = length hex chars) random_part = secrets.token_hex(length // 2) return f"{prefix}{random_part}" def main() -> None: """Main entry point for API key generation.""" parser = argparse.ArgumentParser( description="Generate secure API keys for VoiceAuth API", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: python generate_api_key.py python generate_api_key.py --prefix sk_live_ python generate_api_key.py --count 5 python generate_api_key.py --save """, ) parser.add_argument( "--prefix", type=str, default="sk_", help="Prefix for the API key (default: sk_)", ) parser.add_argument( "--length", type=int, default=48, help="Length of random portion (default: 48)", ) parser.add_argument( "--count", type=int, default=1, help="Number of keys to generate (default: 1)", ) parser.add_argument( "--save", action="store_true", help="Save to .env file (appends if exists)", ) args = parser.parse_args() # Generate keys keys = [generate_api_key(args.prefix, args.length) for _ in range(args.count)] # Display keys print("\n" + "=" * 60) print("VoiceAuth API - Generated API Keys") print("=" * 60 + "\n") for i, key in enumerate(keys, 1): if args.count > 1: print(f"Key {i}: {key}") else: print(f"API Key: {key}") print("\n" + "-" * 60) print("Usage Instructions:") print("-" * 60) print("\n1. Add to your .env file:") print(f" API_KEYS={','.join(keys)}") print("\n2. Use in requests:") print(f' curl -H "x-api-key: {keys[0]}" ...') print("\n" + "=" * 60 + "\n") # Save to .env if requested if args.save: env_path = Path(__file__).parent.parent / ".env" # Check if .env exists if env_path.exists(): # Read existing content with open(env_path, "r") as f: content = f.read() # Check if API_KEYS already exists if "API_KEYS=" in content: print(f"[WARNING] API_KEYS already exists in {env_path}") print(" Please update it manually or remove the existing entry.") sys.exit(1) # Append new keys with open(env_path, "a") as f: f.write(f"\nAPI_KEYS={','.join(keys)}\n") print(f"[OK] API keys appended to {env_path}") else: # Create new .env from template template_path = Path(__file__).parent.parent / ".env.example" if template_path.exists(): with open(template_path, "r") as f: content = f.read() # Replace placeholder content = content.replace( "API_KEYS=sk_test_your_api_key_here", f"API_KEYS={','.join(keys)}", ) with open(env_path, "w") as f: f.write(content) print(f"[OK] Created {env_path} with generated API keys") else: # Just create minimal .env with open(env_path, "w") as f: f.write(f"API_KEYS={','.join(keys)}\n") print(f"[OK] Created {env_path} with API keys") if __name__ == "__main__": main()