mirror of
https://github.com/open-webui/open-webui
synced 2025-04-24 00:06:11 +00:00
feat: access archived chats as admin
This commit is contained in:
parent
62d37f1f10
commit
e20bb23409
@ -191,6 +191,20 @@ class ChatTable:
|
|||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def archive_all_chats_by_user_id(self, user_id: str) -> bool:
|
||||||
|
try:
|
||||||
|
chats = self.get_chats_by_user_id(user_id)
|
||||||
|
for chat in chats:
|
||||||
|
query = Chat.update(
|
||||||
|
archived=True,
|
||||||
|
).where(Chat.id == chat.id)
|
||||||
|
|
||||||
|
query.execute()
|
||||||
|
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
def get_archived_chat_list_by_user_id(
|
def get_archived_chat_list_by_user_id(
|
||||||
self, user_id: str, skip: int = 0, limit: int = 50
|
self, user_id: str, skip: int = 0, limit: int = 50
|
||||||
) -> List[ChatModel]:
|
) -> List[ChatModel]:
|
||||||
@ -205,8 +219,22 @@ class ChatTable:
|
|||||||
]
|
]
|
||||||
|
|
||||||
def get_chat_list_by_user_id(
|
def get_chat_list_by_user_id(
|
||||||
self, user_id: str, skip: int = 0, limit: int = 50
|
self,
|
||||||
|
user_id: str,
|
||||||
|
include_archived: bool = False,
|
||||||
|
skip: int = 0,
|
||||||
|
limit: int = 50,
|
||||||
) -> List[ChatModel]:
|
) -> List[ChatModel]:
|
||||||
|
if include_archived:
|
||||||
|
return [
|
||||||
|
ChatModel(**model_to_dict(chat))
|
||||||
|
for chat in Chat.select()
|
||||||
|
.where(Chat.user_id == user_id)
|
||||||
|
.order_by(Chat.updated_at.desc())
|
||||||
|
# .limit(limit)
|
||||||
|
# .offset(skip)
|
||||||
|
]
|
||||||
|
else:
|
||||||
return [
|
return [
|
||||||
ChatModel(**model_to_dict(chat))
|
ChatModel(**model_to_dict(chat))
|
||||||
for chat in Chat.select()
|
for chat in Chat.select()
|
||||||
|
@ -78,43 +78,25 @@ async def delete_all_user_chats(request: Request, user=Depends(get_current_user)
|
|||||||
async def get_user_chat_list_by_user_id(
|
async def get_user_chat_list_by_user_id(
|
||||||
user_id: str, user=Depends(get_admin_user), skip: int = 0, limit: int = 50
|
user_id: str, user=Depends(get_admin_user), skip: int = 0, limit: int = 50
|
||||||
):
|
):
|
||||||
return Chats.get_chat_list_by_user_id(user_id, skip, limit)
|
return Chats.get_chat_list_by_user_id(
|
||||||
|
user_id, include_archived=True, skip=skip, limit=limit
|
||||||
|
|
||||||
############################
|
|
||||||
# GetArchivedChats
|
|
||||||
############################
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/archived", response_model=List[ChatTitleIdResponse])
|
|
||||||
async def get_archived_session_user_chat_list(
|
|
||||||
user=Depends(get_current_user), skip: int = 0, limit: int = 50
|
|
||||||
):
|
|
||||||
return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
|
|
||||||
|
|
||||||
|
|
||||||
############################
|
|
||||||
# GetSharedChatById
|
|
||||||
############################
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
|
|
||||||
async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
|
|
||||||
if user.role == "pending":
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if user.role == "user":
|
|
||||||
chat = Chats.get_chat_by_share_id(share_id)
|
|
||||||
elif user.role == "admin":
|
|
||||||
chat = Chats.get_chat_by_id(share_id)
|
|
||||||
|
|
||||||
if chat:
|
############################
|
||||||
|
# CreateNewChat
|
||||||
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/new", response_model=Optional[ChatResponse])
|
||||||
|
async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
|
||||||
|
try:
|
||||||
|
chat = Chats.insert_new_chat(user.id, form_data)
|
||||||
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
||||||
else:
|
except Exception as e:
|
||||||
|
log.exception(e)
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
|
status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -150,19 +132,49 @@ async def get_all_user_chats_in_db(user=Depends(get_admin_user)):
|
|||||||
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
# CreateNewChat
|
# GetArchivedChats
|
||||||
############################
|
############################
|
||||||
|
|
||||||
|
|
||||||
@router.post("/new", response_model=Optional[ChatResponse])
|
@router.get("/archived", response_model=List[ChatTitleIdResponse])
|
||||||
async def create_new_chat(form_data: ChatForm, user=Depends(get_current_user)):
|
async def get_archived_session_user_chat_list(
|
||||||
try:
|
user=Depends(get_current_user), skip: int = 0, limit: int = 50
|
||||||
chat = Chats.insert_new_chat(user.id, form_data)
|
):
|
||||||
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
return Chats.get_archived_chat_list_by_user_id(user.id, skip, limit)
|
||||||
except Exception as e:
|
|
||||||
log.exception(e)
|
|
||||||
|
############################
|
||||||
|
# ArchiveAllChats
|
||||||
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/archive/all", response_model=List[ChatTitleIdResponse])
|
||||||
|
async def archive_all_chats(user=Depends(get_current_user)):
|
||||||
|
return Chats.archive_all_chats_by_user_id(user.id)
|
||||||
|
|
||||||
|
|
||||||
|
############################
|
||||||
|
# GetSharedChatById
|
||||||
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/share/{share_id}", response_model=Optional[ChatResponse])
|
||||||
|
async def get_shared_chat_by_id(share_id: str, user=Depends(get_current_user)):
|
||||||
|
if user.role == "pending":
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT()
|
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
|
||||||
|
)
|
||||||
|
|
||||||
|
if user.role == "user":
|
||||||
|
chat = Chats.get_chat_by_share_id(share_id)
|
||||||
|
elif user.role == "admin":
|
||||||
|
chat = Chats.get_chat_by_id(share_id)
|
||||||
|
|
||||||
|
if chat:
|
||||||
|
return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
|
||||||
|
else:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,9 +17,7 @@ export const sanitizeResponseContent = (content: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const revertSanitizedResponseContent = (content: string) => {
|
export const revertSanitizedResponseContent = (content: string) => {
|
||||||
return content
|
return content.replaceAll('<', '<').replaceAll('>', '>');
|
||||||
.replaceAll('<', '<')
|
|
||||||
.replaceAll('>', '>');
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const capitalizeFirstLetter = (string) => {
|
export const capitalizeFirstLetter = (string) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user