diff --git a/enterprise/storage/api_key_store.py b/enterprise/storage/api_key_store.py index 693bfdb321..9714d7476a 100644 --- a/enterprise/storage/api_key_store.py +++ b/enterprise/storage/api_key_store.py @@ -17,10 +17,13 @@ from openhands.core.logger import openhands_logger as logger class ApiKeyStore: session_maker: sessionmaker + API_KEY_PREFIX = 'sk-oh-' + def generate_api_key(self, length: int = 32) -> str: - """Generate a random API key.""" + """Generate a random API key with the sk-oh- prefix.""" alphabet = string.ascii_letters + string.digits - return ''.join(secrets.choice(alphabet) for _ in range(length)) + random_part = ''.join(secrets.choice(alphabet) for _ in range(length)) + return f'{self.API_KEY_PREFIX}{random_part}' def create_api_key( self, user_id: str, name: str | None = None, expires_at: datetime | None = None diff --git a/enterprise/tests/unit/test_api_key_store.py b/enterprise/tests/unit/test_api_key_store.py index c1c6a98f3d..df0481937d 100644 --- a/enterprise/tests/unit/test_api_key_store.py +++ b/enterprise/tests/unit/test_api_key_store.py @@ -25,10 +25,12 @@ def api_key_store(mock_session_maker): def test_generate_api_key(api_key_store): - """Test that generate_api_key returns a string of the expected length.""" + """Test that generate_api_key returns a string with sk-oh- prefix and expected length.""" key = api_key_store.generate_api_key(length=32) assert isinstance(key, str) - assert len(key) == 32 + assert key.startswith('sk-oh-') + # Total length should be prefix (6 chars) + random part (32 chars) = 38 chars + assert len(key) == len('sk-oh-') + 32 def test_create_api_key(api_key_store, mock_session):