| | """
|
| | 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
|
| | """
|
| |
|
| | 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()
|
| |
|
| |
|
| | keys = [generate_api_key(args.prefix, args.length) for _ in range(args.count)]
|
| |
|
| |
|
| | 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")
|
| |
|
| |
|
| | if args.save:
|
| | env_path = Path(__file__).parent.parent / ".env"
|
| |
|
| |
|
| | if env_path.exists():
|
| |
|
| | with open(env_path, "r") as f:
|
| | content = f.read()
|
| |
|
| |
|
| | 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)
|
| |
|
| |
|
| | 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:
|
| |
|
| | template_path = Path(__file__).parent.parent / ".env.example"
|
| |
|
| | if template_path.exists():
|
| | with open(template_path, "r") as f:
|
| | content = f.read()
|
| |
|
| |
|
| | 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:
|
| |
|
| | 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()
|
| |
|