flake, rm clerk dep

This commit is contained in:
emrgnt-cmplxty
2025-03-20 00:58:28 -07:00
parent 2e8fa344fd
commit f7f977e69c
7 changed files with 77 additions and 27 deletions
+6 -1
View File
@@ -37,7 +37,12 @@ if TYPE_CHECKING:
class R2RProviders(BaseModel):
auth: R2RAuthProvider | SupabaseAuthProvider | JwtAuthProvider | ClerkAuthProvider
auth: (
R2RAuthProvider
| SupabaseAuthProvider
| JwtAuthProvider
| ClerkAuthProvider
)
database: PostgresDatabaseProvider
ingestion: R2RIngestionProvider | UnstructuredIngestionProvider
embedding: (
+6 -1
View File
@@ -67,7 +67,12 @@ class R2RProviderFactory:
),
*args,
**kwargs,
) -> R2RAuthProvider | SupabaseAuthProvider | JwtAuthProvider | ClerkAuthProvider:
) -> (
R2RAuthProvider
| SupabaseAuthProvider
| JwtAuthProvider
| ClerkAuthProvider
):
if auth_config.provider == "r2r":
r2r_auth = R2RAuthProvider(
auth_config, crypto_provider, database_provider, email_provider
+6 -1
View File
@@ -1,4 +1,9 @@
from .auth import ClerkAuthProvider, JwtAuthProvider, R2RAuthProvider, SupabaseAuthProvider
from .auth import (
ClerkAuthProvider,
JwtAuthProvider,
R2RAuthProvider,
SupabaseAuthProvider,
)
from .crypto import (
BcryptCryptoConfig,
BCryptCryptoProvider,
+7 -2
View File
@@ -1,6 +1,11 @@
from .clerk import ClerkAuthProvider
from .jwt import JwtAuthProvider
from .r2r_auth import R2RAuthProvider
from .supabase import SupabaseAuthProvider
from .clerk import ClerkAuthProvider
__all__ = ["R2RAuthProvider", "SupabaseAuthProvider", "JwtAuthProvider", "ClerkAuthProvider"]
__all__ = [
"R2RAuthProvider",
"SupabaseAuthProvider",
"JwtAuthProvider",
"ClerkAuthProvider",
]
+51 -20
View File
@@ -1,12 +1,16 @@
import logging
import os
from datetime import datetime
from typing import Dict, Any
from clerk_backend_api.jwks_helpers.verifytoken import verify_token, VerifyTokenOptions
from core.base import AuthConfig, TokenData
from core.base.abstractions.exception import R2RException
from core.base import (
AuthConfig,
CryptoProvider,
EmailProvider,
R2RException,
TokenData,
)
from ..database import PostgresDatabaseProvider
from .jwt import JwtAuthProvider
logger = logging.getLogger(__name__)
@@ -18,16 +22,43 @@ class ClerkAuthProvider(JwtAuthProvider):
It uses Clerk's SDK to verify the JWT token and extract user information.
"""
def __init__(
self,
config: AuthConfig,
crypto_provider: CryptoProvider,
database_provider: PostgresDatabaseProvider,
email_provider: EmailProvider,
):
super().__init__(
config=config,
crypto_provider=crypto_provider,
database_provider=database_provider,
email_provider=email_provider,
)
try:
from clerk_backend_api.jwks_helpers.verifytoken import (
VerifyTokenOptions,
verify_token,
)
self.verify_token = verify_token
self.VerifyTokenOptions = VerifyTokenOptions
except ImportError as e:
raise R2RException(
status_code=500,
message="Clerk SDK is not installed. Run `pip install clerk-backend-api`",
) from e
async def decode_token(self, token: str) -> TokenData:
"""
Decode and verify the JWT token using Clerk's verify_token function.
Args:
token: The JWT token to decode
Returns:
TokenData: The decoded token data with user information
Raises:
R2RException: If the token is invalid or verification fails
"""
@@ -37,27 +68,27 @@ class ClerkAuthProvider(JwtAuthProvider):
status_code=500,
message="CLERK_SECRET_KEY environment variable is not set",
)
try:
# Configure verification options
options = VerifyTokenOptions(
options = self.VerifyTokenOptions(
secret_key=clerk_secret_key,
# Optional: specify audience if needed
# audience="your-audience",
# Optional: specify authorized parties if needed
# authorized_parties=["https://your-domain.com"]
)
# Verify the token using Clerk's SDK
payload = verify_token(token, options)
payload = self.verify_token(token, options)
# Check for the expected claims in the token payload
if not payload.get("sub") or not payload.get("email"):
raise R2RException(
status_code=401,
message="Invalid token: missing required claims"
status_code=401,
message="Invalid token: missing required claims",
)
# Create user in database if not exists
try:
await self.database_provider.users_handler.get_user_by_email(
@@ -72,11 +103,11 @@ class ClerkAuthProvider(JwtAuthProvider):
first_name = payload.get("first_name", "")
last_name = payload.get("last_name", "")
name = payload.get("name")
# If name not directly provided, try to build it from first and last names
if not name and (first_name or last_name):
name = f"{first_name} {last_name}".strip()
await self.database_provider.users_handler.create_user(
email=payload.get("email"),
account_type="external",
@@ -87,16 +118,16 @@ class ClerkAuthProvider(JwtAuthProvider):
raise R2RException(
status_code=500, message="Failed to create user"
) from e
# Return the token data
return TokenData(
email=payload.get("email"),
token_type="bearer",
exp=datetime.fromtimestamp(payload.get("exp")),
)
except Exception as e:
logger.info(f"Clerk token verification failed: {e}")
raise R2RException(
status_code=401, message="Invalid token", detail=str(e)
) from e
) from e
-1
View File
@@ -88,7 +88,6 @@ core = [
"uvicorn >=0.27.0.post1,<0.28.0",
"vecs >=0.4.0,<0.5.0",
"xlrd >=2.0.1,<3.0.0",
"clerk-backend-api >=1.8.0,<2.0.0",
]
[dependency-groups]
+1 -1
View File
@@ -35,7 +35,7 @@ rag_tools = ["search_file_descriptions", "search_file_knowledge", "get_file_cont
research_tools = ["rag", "reasoning", "critique", "python_executor"]
[auth]
provider = "r2r"
provider = "clerk"
access_token_lifetime_in_minutes = 60000
refresh_token_lifetime_in_days = 7
require_authentication = false