forked from open-webui/open-webui
		
	Merge branch 'dev' into feature/support_auth_by_api_key
This commit is contained in:
		
						commit
						56369fea3a
					
				
					 35 changed files with 1231 additions and 325 deletions
				
			
		|  | @ -27,6 +27,7 @@ from utils.utils import ( | |||
| from utils.misc import parse_duration, validate_email_format | ||||
| from utils.webhook import post_webhook | ||||
| from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES | ||||
| from config import WEBUI_AUTH_TRUSTED_EMAIL_HEADER | ||||
| 
 | ||||
| router = APIRouter() | ||||
| 
 | ||||
|  | @ -77,6 +78,8 @@ async def update_profile( | |||
| async def update_password( | ||||
|     form_data: UpdatePasswordForm, session_user=Depends(get_current_user) | ||||
| ): | ||||
|     if WEBUI_AUTH_TRUSTED_EMAIL_HEADER: | ||||
|         raise HTTPException(400, detail=ERROR_MESSAGES.ACTION_PROHIBITED) | ||||
|     if session_user: | ||||
|         user = Auths.authenticate_user(session_user.email, form_data.password) | ||||
| 
 | ||||
|  | @ -96,7 +99,22 @@ async def update_password( | |||
| 
 | ||||
| @router.post("/signin", response_model=SigninResponse) | ||||
| async def signin(request: Request, form_data: SigninForm): | ||||
|     user = Auths.authenticate_user(form_data.email.lower(), form_data.password) | ||||
|     if WEBUI_AUTH_TRUSTED_EMAIL_HEADER: | ||||
|         if WEBUI_AUTH_TRUSTED_EMAIL_HEADER not in request.headers: | ||||
|             raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_TRUSTED_HEADER) | ||||
| 
 | ||||
|         trusted_email = request.headers[WEBUI_AUTH_TRUSTED_EMAIL_HEADER].lower() | ||||
|         if not Users.get_user_by_email(trusted_email.lower()): | ||||
|             await signup( | ||||
|                 request, | ||||
|                 SignupForm( | ||||
|                     email=trusted_email, password=str(uuid.uuid4()), name=trusted_email | ||||
|                 ), | ||||
|             ) | ||||
|         user = Auths.authenticate_user_by_trusted_header(trusted_email) | ||||
|     else: | ||||
|         user = Auths.authenticate_user(form_data.email.lower(), form_data.password) | ||||
| 
 | ||||
|     if user: | ||||
|         token = create_token( | ||||
|             data={"id": user.id}, | ||||
|  |  | |||
|  | @ -189,6 +189,78 @@ async def delete_chat_by_id(request: Request, id: str, user=Depends(get_current_ | |||
|     return result | ||||
| 
 | ||||
| 
 | ||||
| ############################ | ||||
| # ShareChatById | ||||
| ############################ | ||||
| 
 | ||||
| 
 | ||||
| @router.post("/{id}/share", response_model=Optional[ChatResponse]) | ||||
| async def share_chat_by_id(id: str, user=Depends(get_current_user)): | ||||
|     chat = Chats.get_chat_by_id_and_user_id(id, user.id) | ||||
|     if chat: | ||||
|         if chat.share_id: | ||||
|             shared_chat = Chats.update_shared_chat_by_chat_id(chat.id) | ||||
|             return ChatResponse( | ||||
|                 **{**shared_chat.model_dump(), "chat": json.loads(shared_chat.chat)} | ||||
|             ) | ||||
| 
 | ||||
|         shared_chat = Chats.insert_shared_chat_by_chat_id(chat.id) | ||||
|         if not shared_chat: | ||||
|             raise HTTPException( | ||||
|                 status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | ||||
|                 detail=ERROR_MESSAGES.DEFAULT(), | ||||
|             ) | ||||
| 
 | ||||
|         return ChatResponse( | ||||
|             **{**shared_chat.model_dump(), "chat": json.loads(shared_chat.chat)} | ||||
|         ) | ||||
|     else: | ||||
|         raise HTTPException( | ||||
|             status_code=status.HTTP_401_UNAUTHORIZED, | ||||
|             detail=ERROR_MESSAGES.ACCESS_PROHIBITED, | ||||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| ############################ | ||||
| # DeletedSharedChatById | ||||
| ############################ | ||||
| 
 | ||||
| 
 | ||||
| @router.delete("/{id}/share", response_model=Optional[bool]) | ||||
| async def delete_shared_chat_by_id(id: str, user=Depends(get_current_user)): | ||||
|     chat = Chats.get_chat_by_id_and_user_id(id, user.id) | ||||
|     if chat: | ||||
|         if not chat.share_id: | ||||
|             return False | ||||
| 
 | ||||
|         result = Chats.delete_shared_chat_by_chat_id(id) | ||||
|         update_result = Chats.update_chat_share_id_by_id(id, None) | ||||
| 
 | ||||
|         return result and update_result != None | ||||
|     else: | ||||
|         raise HTTPException( | ||||
|             status_code=status.HTTP_401_UNAUTHORIZED, | ||||
|             detail=ERROR_MESSAGES.ACCESS_PROHIBITED, | ||||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| ############################ | ||||
| # 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)): | ||||
|     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 | ||||
|         ) | ||||
| 
 | ||||
| 
 | ||||
| ############################ | ||||
| # GetChatTagsById | ||||
| ############################ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy Jaeryang Baek
						Timothy Jaeryang Baek