forked from open-webui/open-webui
		
	feat: delete user backend support
This commit is contained in:
		
							parent
							
								
									8370465796
								
							
						
					
					
						commit
						b61bb77950
					
				
					 3 changed files with 51 additions and 0 deletions
				
			
		|  | @ -8,6 +8,8 @@ from utils.utils import decode_token | ||||||
| from utils.misc import get_gravatar_url | from utils.misc import get_gravatar_url | ||||||
| 
 | 
 | ||||||
| from apps.web.internal.db import DB | from apps.web.internal.db import DB | ||||||
|  | from apps.web.models.chats import Chat | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| #################### | #################### | ||||||
| # User DB Schema | # User DB Schema | ||||||
|  | @ -110,5 +112,19 @@ class UsersTable: | ||||||
|         except: |         except: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|  |     def delete_user_by_id(self, id: str) -> bool: | ||||||
|  |         try: | ||||||
|  |             # Delete User Chats | ||||||
|  |             query = Chat.delete().where(Chat.user_id == id) | ||||||
|  |             query.execute()  # Remove the rows, return number of rows removed. | ||||||
|  | 
 | ||||||
|  |             # Delete User | ||||||
|  |             query = User.delete().where(User.id == id) | ||||||
|  |             query.execute()  # Remove the rows, return number of rows removed. | ||||||
|  | 
 | ||||||
|  |             return True | ||||||
|  |         except: | ||||||
|  |             return False | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| Users = UsersTable(DB) | Users = UsersTable(DB) | ||||||
|  |  | ||||||
|  | @ -73,3 +73,36 @@ async def update_user_role(form_data: UserRoleUpdateForm, cred=Depends(bearer_sc | ||||||
|             status_code=status.HTTP_401_UNAUTHORIZED, |             status_code=status.HTTP_401_UNAUTHORIZED, | ||||||
|             detail=ERROR_MESSAGES.INVALID_TOKEN, |             detail=ERROR_MESSAGES.INVALID_TOKEN, | ||||||
|         ) |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ############################ | ||||||
|  | # DeleteUser | ||||||
|  | ############################ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @router.delete("/{user_id}", response_model=bool) | ||||||
|  | async def delete_user_by_id(user_id: str, cred=Depends(bearer_scheme)): | ||||||
|  |     token = cred.credentials | ||||||
|  |     user = Users.get_user_by_token(token) | ||||||
|  | 
 | ||||||
|  |     if user: | ||||||
|  |         if user.role == "admin": | ||||||
|  |             result = Users.delete_user_by_id(user_id) | ||||||
|  | 
 | ||||||
|  |             if result: | ||||||
|  |                 return True | ||||||
|  |             else: | ||||||
|  |                 raise HTTPException( | ||||||
|  |                     status_code=status.HTTP_403_FORBIDDEN, | ||||||
|  |                     detail=ERROR_MESSAGES.DELETE_USER_ERROR, | ||||||
|  |                 ) | ||||||
|  |         else: | ||||||
|  |             raise HTTPException( | ||||||
|  |                 status_code=status.HTTP_403_FORBIDDEN, | ||||||
|  |                 detail=ERROR_MESSAGES.ACCESS_PROHIBITED, | ||||||
|  |             ) | ||||||
|  |     else: | ||||||
|  |         raise HTTPException( | ||||||
|  |             status_code=status.HTTP_401_UNAUTHORIZED, | ||||||
|  |             detail=ERROR_MESSAGES.INVALID_TOKEN, | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ class ERROR_MESSAGES(str, Enum): | ||||||
|     DEFAULT = lambda err="": f"Something went wrong :/\n{err if err else ''}" |     DEFAULT = lambda err="": f"Something went wrong :/\n{err if err else ''}" | ||||||
|     ENV_VAR_NOT_FOUND = "Required environment variable not found. Terminating now." |     ENV_VAR_NOT_FOUND = "Required environment variable not found. Terminating now." | ||||||
|     CREATE_USER_ERROR = "Oops! Something went wrong while creating your account. Please try again later. If the issue persists, contact support for assistance." |     CREATE_USER_ERROR = "Oops! Something went wrong while creating your account. Please try again later. If the issue persists, contact support for assistance." | ||||||
|  |     DELETE_USER_ERROR = "Oops! Something went wrong. We encountered an issue while trying to delete the user. Please give it another shot." | ||||||
|     EMAIL_TAKEN = "Uh-oh! This email is already registered. Sign in with your existing account or choose another email to start anew." |     EMAIL_TAKEN = "Uh-oh! This email is already registered. Sign in with your existing account or choose another email to start anew." | ||||||
|     USERNAME_TAKEN = ( |     USERNAME_TAKEN = ( | ||||||
|         "Uh-oh! This username is already registered. Please choose another username." |         "Uh-oh! This username is already registered. Please choose another username." | ||||||
|  | @ -27,4 +28,5 @@ class ERROR_MESSAGES(str, Enum): | ||||||
|     ) |     ) | ||||||
|     NOT_FOUND = "We could not find what you're looking for :/" |     NOT_FOUND = "We could not find what you're looking for :/" | ||||||
|     USER_NOT_FOUND = "We could not find what you're looking for :/" |     USER_NOT_FOUND = "We could not find what you're looking for :/" | ||||||
|  | 
 | ||||||
|     MALICIOUS = "Unusual activities detected, please try again in a few minutes." |     MALICIOUS = "Unusual activities detected, please try again in a few minutes." | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek