From c2e4172088203e74a93c71a6ee1de261a29e581a Mon Sep 17 00:00:00 2001 From: Xingyao Wang Date: Thu, 18 Dec 2025 15:06:03 -0600 Subject: [PATCH] feat: Add sk-oh- prefix to OpenHands Cloud API keys (#12092) Co-authored-by: openhands --- enterprise/storage/api_key_store.py | 7 +++++-- enterprise/tests/unit/test_api_key_store.py | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) 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):