Source code for mindroot.coreplugins.api_keys.api_key_manager

import json
import uuid
from datetime import datetime
from pathlib import Path
from typing import Optional, List, Dict

[docs] class APIKeyManager: def __init__(self, keys_dir: str = "data/apikeys"): self.keys_dir = Path(keys_dir) self.keys_dir.mkdir(parents=True, exist_ok=True) self._load_keys() def _load_keys(self) -> None: """Load all API keys from storage""" self.keys = {} for key_file in self.keys_dir.glob("*.json"): try: with open(key_file, 'r') as f: key_data = json.load(f) self.keys[key_data['key']] = key_data except json.JSONDecodeError: print(f"Warning: Invalid JSON in key file: {key_file}") except Exception as e: print(f"Error loading key file {key_file}: {e}")
[docs] def create_key(self, username: str, description: str = "") -> Dict: """Create a new API key for a user Args: username: The username to associate with the key description: Optional description for the key Returns: Dict containing the key details """ api_key = str(uuid.uuid4()) key_data = { "key": api_key, "username": username, "description": description, "created_at": datetime.utcnow().isoformat() } # Save to file key_file = self.keys_dir / f"{api_key}.json" with open(key_file, 'w') as f: json.dump(key_data, f, indent=4) self.keys[api_key] = key_data return key_data
[docs] def validate_key(self, api_key: str) -> Optional[Dict]: """Validate an API key and return associated data if valid Args: api_key: The API key to validate Returns: Dict containing the key details if valid, None otherwise """ print(f"Validating key: {api_key}") print("My keys are", self.keys) return self.keys.get(api_key)
[docs] def delete_key(self, api_key: str) -> bool: """Delete an API key Args: api_key: The API key to delete Returns: bool: True if key was deleted, False if key not found """ if api_key in self.keys: key_file = self.keys_dir / f"{api_key}.json" try: key_file.unlink(missing_ok=True) del self.keys[api_key] return True except Exception as e: print(f"Error deleting key file {key_file}: {e}") return False return False
[docs] def list_keys(self, username: Optional[str] = None) -> List[Dict]: """List all API keys or keys for specific user Args: username: Optional username to filter keys by Returns: List of key data dictionaries """ if username: return [k for k in self.keys.values() if k['username'] == username] return list(self.keys.values())
# Global instance api_key_manager = APIKeyManager()