feat: make all authentication optional

This commit is contained in:
Daulet Amirkhanov 2025-08-20 18:32:30 +01:00
parent 624b4a6a61
commit 3e35c49ebd
5 changed files with 32 additions and 7 deletions

View file

@ -9,7 +9,7 @@ from fastapi import Form, File, UploadFile, Depends
from typing import List, Optional, Union, Literal from typing import List, Optional, Union, Literal
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_optional_authenticated_user, get_default_user
from cognee.shared.utils import send_telemetry from cognee.shared.utils import send_telemetry
from cognee.modules.pipelines.models import PipelineRunErrored from cognee.modules.pipelines.models import PipelineRunErrored
from cognee.shared.logging_utils import get_logger from cognee.shared.logging_utils import get_logger
@ -25,7 +25,7 @@ def get_add_router() -> APIRouter:
data: List[UploadFile] = File(default=None), data: List[UploadFile] = File(default=None),
datasetName: Optional[str] = Form(default=None), datasetName: Optional[str] = Form(default=None),
datasetId: Union[UUID, Literal[""], None] = Form(default=None, examples=[""]), datasetId: Union[UUID, Literal[""], None] = Form(default=None, examples=[""]),
user: User = Depends(get_authenticated_user), user: Optional[User] = Depends(get_optional_authenticated_user),
): ):
""" """
Add data to a dataset for processing and knowledge graph construction. Add data to a dataset for processing and knowledge graph construction.
@ -62,6 +62,10 @@ def get_add_router() -> APIRouter:
- The ALLOW_HTTP_REQUESTS environment variable controls URL processing - The ALLOW_HTTP_REQUESTS environment variable controls URL processing
- datasetId value can only be the UUID of an already existing dataset - datasetId value can only be the UUID of an already existing dataset
""" """
# Use default user for anonymous requests
if user is None:
user = await get_default_user()
send_telemetry( send_telemetry(
"Add API Endpoint Invoked", "Add API Endpoint Invoked",
user.id, user.id,

View file

@ -10,7 +10,7 @@ from starlette.status import WS_1000_NORMAL_CLOSURE, WS_1008_POLICY_VIOLATION
from cognee.api.DTO import InDTO from cognee.api.DTO import InDTO
from cognee.modules.pipelines.methods import get_pipeline_run from cognee.modules.pipelines.methods import get_pipeline_run
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_optional_authenticated_user, get_default_user
from cognee.modules.users.get_user_db import get_user_db_context from cognee.modules.users.get_user_db import get_user_db_context
from cognee.modules.graph.methods import get_formatted_graph_data from cognee.modules.graph.methods import get_formatted_graph_data
from cognee.modules.users.get_user_manager import get_user_manager_context from cognee.modules.users.get_user_manager import get_user_manager_context
@ -46,7 +46,7 @@ def get_cognify_router() -> APIRouter:
router = APIRouter() router = APIRouter()
@router.post("", response_model=dict) @router.post("", response_model=dict)
async def cognify(payload: CognifyPayloadDTO, user: User = Depends(get_authenticated_user)): async def cognify(payload: CognifyPayloadDTO, user: Optional[User] = Depends(get_optional_authenticated_user)):
""" """
Transform datasets into structured knowledge graphs through cognitive processing. Transform datasets into structured knowledge graphs through cognitive processing.
@ -92,6 +92,10 @@ def get_cognify_router() -> APIRouter:
## Next Steps ## Next Steps
After successful processing, use the search endpoints to query the generated knowledge graph for insights, relationships, and semantic search. After successful processing, use the search endpoints to query the generated knowledge graph for insights, relationships, and semantic search.
""" """
# Use default user for anonymous requests
if user is None:
user = await get_default_user()
send_telemetry( send_telemetry(
"Cognify API Endpoint Invoked", "Cognify API Endpoint Invoked",
user.id, user.id,

View file

@ -9,7 +9,7 @@ from cognee.api.DTO import InDTO, OutDTO
from cognee.modules.users.exceptions.exceptions import PermissionDeniedError from cognee.modules.users.exceptions.exceptions import PermissionDeniedError
from cognee.modules.users.models import User from cognee.modules.users.models import User
from cognee.modules.search.operations import get_history from cognee.modules.search.operations import get_history
from cognee.modules.users.methods import get_authenticated_user from cognee.modules.users.methods import get_optional_authenticated_user, get_default_user
from cognee.shared.utils import send_telemetry from cognee.shared.utils import send_telemetry
@ -33,7 +33,7 @@ def get_search_router() -> APIRouter:
created_at: datetime created_at: datetime
@router.get("", response_model=list[SearchHistoryItem]) @router.get("", response_model=list[SearchHistoryItem])
async def get_search_history(user: User = Depends(get_authenticated_user)): async def get_search_history(user: Optional[User] = Depends(get_optional_authenticated_user)):
""" """
Get search history for the authenticated user. Get search history for the authenticated user.
@ -50,6 +50,10 @@ def get_search_router() -> APIRouter:
## Error Codes ## Error Codes
- **500 Internal Server Error**: Error retrieving search history - **500 Internal Server Error**: Error retrieving search history
""" """
# Use default user for anonymous requests
if user is None:
user = await get_default_user()
send_telemetry( send_telemetry(
"Search API Endpoint Invoked", "Search API Endpoint Invoked",
user.id, user.id,
@ -66,7 +70,7 @@ def get_search_router() -> APIRouter:
return JSONResponse(status_code=500, content={"error": str(error)}) return JSONResponse(status_code=500, content={"error": str(error)})
@router.post("", response_model=list) @router.post("", response_model=list)
async def search(payload: SearchPayloadDTO, user: User = Depends(get_authenticated_user)): async def search(payload: SearchPayloadDTO, user: Optional[User] = Depends(get_optional_authenticated_user)):
""" """
Search for nodes in the graph database. Search for nodes in the graph database.
@ -93,6 +97,10 @@ def get_search_router() -> APIRouter:
- To search datasets not owned by the request sender, dataset UUID is needed - To search datasets not owned by the request sender, dataset UUID is needed
- If permission is denied, returns empty list instead of error - If permission is denied, returns empty list instead of error
""" """
# Use default user for anonymous requests
if user is None:
user = await get_default_user()
send_telemetry( send_telemetry(
"Search API Endpoint Invoked", "Search API Endpoint Invoked",
user.id, user.id,

View file

@ -5,3 +5,4 @@ from .get_default_user import get_default_user
from .get_user_by_email import get_user_by_email from .get_user_by_email import get_user_by_email
from .create_default_user import create_default_user from .create_default_user import create_default_user
from .get_authenticated_user import get_authenticated_user from .get_authenticated_user import get_authenticated_user
from .get_optional_authenticated_user import get_optional_authenticated_user

View file

@ -0,0 +1,8 @@
from ..get_fastapi_users import get_fastapi_users
# Create optional authenticated user dependency using FastAPI Users' built-in optional parameter
fastapi_users = get_fastapi_users()
get_optional_authenticated_user = fastapi_users.current_user(
optional=True, # Returns None instead of raising HTTPException(401)
active=True # Still require users to be active when authenticated
)