Skip to content

Commit 748faff

Browse files
committed
Add API key token generation endpoint
1 parent 7ab5f3e commit 748faff

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

py/core/main/api/v3/users_router.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ def __init__(
5252
self.github_redirect_uri = os.environ.get("GITHUB_REDIRECT_URI")
5353

5454
def _setup_routes(self):
55+
@self.router.post(
56+
"/users/generate-tokens",
57+
response_model=WrappedTokenResponse,
58+
openapi_extra={
59+
"x-codeSamples": [
60+
{
61+
"lang": "cURL",
62+
"source": "curl -X POST https://api.example.com/v3/users/generate-tokens -H 'x-api-key: YOUR_API_KEY'"
63+
}
64+
]
65+
}
66+
)
67+
@self.base_endpoint
68+
async def generate_tokens_via_api_key(
69+
auth_user=Depends(self.providers.auth.auth_wrapper(public=True))
70+
) -> WrappedTokenResponse:
71+
"""Generate new access and refresh tokens using API key authentication."""
72+
result = await self.services.auth.generate_tokens_via_api_key(
73+
user_id=auth_user.id
74+
)
75+
return result
76+
5577
@self.router.post(
5678
"/users",
5779
# dependencies=[Depends(self.rate_limit_dependency)],

py/core/main/services/auth_service.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,7 @@ async def list_user_api_keys(self, user_id: UUID) -> list[dict]:
330330
dict: Contains the list of API keys
331331
"""
332332
return await self.providers.auth.list_user_api_keys(user_id)
333+
334+
async def generate_tokens_via_api_key(self, user_id: UUID) -> dict[str, Token]:
335+
"""Expose the provider method through the service layer."""
336+
return await self.providers.auth.generate_tokens_via_api_key(user_id)

py/core/providers/auth/r2r_auth.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,3 +699,19 @@ async def oauth_callback_handler(
699699
"access_token": Token(token=access_token, token_type="access"),
700700
"refresh_token": Token(token=refresh_token, token_type="refresh"),
701701
}
702+
703+
async def generate_tokens_via_api_key(self, user_id: UUID) -> dict[str, Token]:
704+
"""Generate new tokens for API key authenticated users."""
705+
user = await self.database_provider.users_handler.get_user_by_id(user_id)
706+
707+
access_token = self.create_access_token(
708+
data={"sub": normalize_email(user.email)}
709+
)
710+
refresh_token = self.create_refresh_token(
711+
data={"sub": normalize_email(user.email)}
712+
)
713+
714+
return {
715+
"access_token": Token(token=access_token, token_type="access"),
716+
"refresh_token": Token(token=refresh_token, token_type="refresh"),
717+
}

0 commit comments

Comments
 (0)