|
|
|
|
|
""" |
|
|
FleetMind API Key Generator |
|
|
|
|
|
Generate API keys for users to authenticate with FleetMind MCP Server. |
|
|
|
|
|
Usage: |
|
|
python generate_api_key.py |
|
|
python generate_api_key.py --email user@example.com --name "John Doe" |
|
|
python generate_api_key.py --list |
|
|
python generate_api_key.py --revoke user@example.com |
|
|
""" |
|
|
|
|
|
import argparse |
|
|
import sys |
|
|
from database.api_keys import generate_api_key, list_api_keys, revoke_api_key |
|
|
|
|
|
def main(): |
|
|
parser = argparse.ArgumentParser( |
|
|
description='FleetMind API Key Management', |
|
|
formatter_class=argparse.RawDescriptionHelpFormatter, |
|
|
epilog=""" |
|
|
Examples: |
|
|
# Interactive mode (prompts for email and name) |
|
|
python generate_api_key.py |
|
|
|
|
|
# Generate key with arguments |
|
|
python generate_api_key.py --email alice@company.com --name "Alice Smith" |
|
|
|
|
|
# List all API keys |
|
|
python generate_api_key.py --list |
|
|
|
|
|
# Revoke a key |
|
|
python generate_api_key.py --revoke alice@company.com |
|
|
""" |
|
|
) |
|
|
|
|
|
parser.add_argument('--email', help='User email address') |
|
|
parser.add_argument('--name', help='User display name') |
|
|
parser.add_argument('--list', action='store_true', help='List all API keys') |
|
|
parser.add_argument('--revoke', metavar='EMAIL', help='Revoke API key for email') |
|
|
|
|
|
args = parser.parse_args() |
|
|
|
|
|
|
|
|
if args.list: |
|
|
print("\n" + "="*80) |
|
|
print("FLEETMIND API KEYS") |
|
|
print("="*80 + "\n") |
|
|
|
|
|
keys = list_api_keys() |
|
|
if not keys: |
|
|
print("No API keys found.\n") |
|
|
return |
|
|
|
|
|
for key in keys: |
|
|
status = "β
Active" if key['is_active'] else "β Revoked" |
|
|
print(f"Email: {key['email']}") |
|
|
print(f"Name: {key['name']}") |
|
|
print(f"User ID: {key['user_id']}") |
|
|
print(f"Key: {key['key_preview']}") |
|
|
print(f"Created: {key['created_at']}") |
|
|
print(f"Last Used: {key['last_used_at'] or 'Never'}") |
|
|
print(f"Status: {status}") |
|
|
print("-" * 80) |
|
|
|
|
|
print() |
|
|
return |
|
|
|
|
|
|
|
|
if args.revoke: |
|
|
print(f"\nβ οΈ Revoking API key for {args.revoke}...") |
|
|
result = revoke_api_key(args.revoke) |
|
|
|
|
|
if result['success']: |
|
|
print(f"β
{result['message']}\n") |
|
|
else: |
|
|
print(f"β Error: {result['error']}\n") |
|
|
sys.exit(1) |
|
|
return |
|
|
|
|
|
|
|
|
if not args.email: |
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("GENERATE NEW FLEETMIND API KEY") |
|
|
print("="*80 + "\n") |
|
|
|
|
|
email = input("Enter user email: ").strip() |
|
|
if not email: |
|
|
print("β Email is required") |
|
|
sys.exit(1) |
|
|
|
|
|
name = input("Enter user name (optional): ").strip() or None |
|
|
else: |
|
|
email = args.email |
|
|
name = args.name |
|
|
|
|
|
print(f"\nGenerating API key for {email}...") |
|
|
result = generate_api_key(email, name) |
|
|
|
|
|
if not result['success']: |
|
|
print(f"\nβ Error: {result['error']}\n") |
|
|
sys.exit(1) |
|
|
|
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("β
API KEY GENERATED SUCCESSFULLY") |
|
|
print("="*80 + "\n") |
|
|
|
|
|
print(f"Email: {result['email']}") |
|
|
print(f"Name: {result['name']}") |
|
|
print(f"User ID: {result['user_id']}") |
|
|
print(f"Created: {result['created_at']}") |
|
|
print() |
|
|
print("π API KEY (copy this now - it won't be shown again!):") |
|
|
print("-" * 80) |
|
|
print(result['api_key']) |
|
|
print("-" * 80) |
|
|
print() |
|
|
print("π Add this to your Claude Desktop config:") |
|
|
print() |
|
|
print(' {') |
|
|
print(' "mcpServers": {') |
|
|
print(' "fleetmind": {') |
|
|
print(' "command": "npx",') |
|
|
print(' "args": [') |
|
|
print(' "mcp-remote",') |
|
|
print(' "https://mcp-1st-birthday-fleetmind-dispatch-ai.hf.space/sse"') |
|
|
print(' ],') |
|
|
print(' "env": {') |
|
|
print(f' "FLEETMIND_API_KEY": "{result["api_key"]}"') |
|
|
print(' }') |
|
|
print(' }') |
|
|
print(' }') |
|
|
print(' }') |
|
|
print() |
|
|
print("β οΈ IMPORTANT: Save this API key securely. You won't be able to see it again!") |
|
|
print() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|