mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-07 05:40:17 +00:00
Create API endpoint to get authenticated user information
This help clients render UI with user information
This commit is contained in:
@@ -196,6 +196,17 @@ def get_user_name(user: KhojUser):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_photo(user: KhojUser):
|
||||||
|
full_name = user.get_full_name()
|
||||||
|
if not is_none_or_empty(full_name):
|
||||||
|
return full_name
|
||||||
|
google_profile: GoogleUser = GoogleUser.objects.filter(user=user).first()
|
||||||
|
if google_profile:
|
||||||
|
return google_profile.picture
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_user_subscription(email: str) -> Optional[Subscription]:
|
def get_user_subscription(email: str) -> Optional[Subscription]:
|
||||||
return Subscription.objects.filter(user__email=email).first()
|
return Subscription.objects.filter(user__email=email).first()
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,13 @@ from asgiref.sync import sync_to_async
|
|||||||
from fastapi import APIRouter, Depends, File, HTTPException, Request, UploadFile
|
from fastapi import APIRouter, Depends, File, HTTPException, Request, UploadFile
|
||||||
from fastapi.requests import Request
|
from fastapi.requests import Request
|
||||||
from fastapi.responses import Response
|
from fastapi.responses import Response
|
||||||
from starlette.authentication import requires
|
from starlette.authentication import has_required_scope, requires
|
||||||
|
|
||||||
from khoj.configure import initialize_content
|
from khoj.configure import initialize_content
|
||||||
from khoj.database.adapters import (
|
from khoj.database.adapters import (
|
||||||
ConversationAdapters,
|
ConversationAdapters,
|
||||||
EntryAdapters,
|
EntryAdapters,
|
||||||
|
get_user_photo,
|
||||||
get_user_search_model_or_default,
|
get_user_search_model_or_default,
|
||||||
)
|
)
|
||||||
from khoj.database.models import ChatModelOptions, KhojUser, SpeechToTextModelOptions
|
from khoj.database.models import ChatModelOptions, KhojUser, SpeechToTextModelOptions
|
||||||
@@ -368,3 +369,25 @@ async def extract_references_and_questions(
|
|||||||
def health_check(request: Request) -> Response:
|
def health_check(request: Request) -> Response:
|
||||||
response_obj = {"email": request.user.object.email}
|
response_obj = {"email": request.user.object.email}
|
||||||
return Response(content=json.dumps(response_obj), media_type="application/json", status_code=200)
|
return Response(content=json.dumps(response_obj), media_type="application/json", status_code=200)
|
||||||
|
|
||||||
|
|
||||||
|
@api.get("/v1/user", response_class=Response)
|
||||||
|
@requires(["authenticated"])
|
||||||
|
def user_info(request: Request) -> Response:
|
||||||
|
# Get user information
|
||||||
|
user: KhojUser = request.user.object
|
||||||
|
user_picture = get_user_photo(user=user)
|
||||||
|
is_active = has_required_scope(request, ["premium"])
|
||||||
|
has_documents = EntryAdapters.user_has_entries(user=user)
|
||||||
|
|
||||||
|
# Collect user information in a dictionary
|
||||||
|
user_info = {
|
||||||
|
"email": user.email,
|
||||||
|
"username": user.username,
|
||||||
|
"photo": user_picture,
|
||||||
|
"is_active": is_active,
|
||||||
|
"has_documents": has_documents,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Return user information as a JSON response
|
||||||
|
return Response(content=json.dumps(user_info), media_type="application/json", status_code=200)
|
||||||
|
|||||||
Reference in New Issue
Block a user