forked from open-webui/open-webui
		
	refac: api_key field moved to user
This commit is contained in:
		
							parent
							
								
									38c34b4444
								
							
						
					
					
						commit
						ba0523cd69
					
				
					 3 changed files with 59 additions and 9 deletions
				
			
		
							
								
								
									
										48
									
								
								backend/apps/web/internal/migrations/003_add_auth_api_key.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								backend/apps/web/internal/migrations/003_add_auth_api_key.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | ||||||
|  | """Peewee migrations -- 002_add_local_sharing.py. | ||||||
|  | 
 | ||||||
|  | Some examples (model - class or model name):: | ||||||
|  | 
 | ||||||
|  |     > Model = migrator.orm['table_name']            # Return model in current state by name | ||||||
|  |     > Model = migrator.ModelClass                   # Return model in current state by name | ||||||
|  | 
 | ||||||
|  |     > migrator.sql(sql)                             # Run custom SQL | ||||||
|  |     > migrator.run(func, *args, **kwargs)           # Run python function with the given args | ||||||
|  |     > migrator.create_model(Model)                  # Create a model (could be used as decorator) | ||||||
|  |     > migrator.remove_model(model, cascade=True)    # Remove a model | ||||||
|  |     > migrator.add_fields(model, **fields)          # Add fields to a model | ||||||
|  |     > migrator.change_fields(model, **fields)       # Change fields | ||||||
|  |     > migrator.remove_fields(model, *field_names, cascade=True) | ||||||
|  |     > migrator.rename_field(model, old_field_name, new_field_name) | ||||||
|  |     > migrator.rename_table(model, new_table_name) | ||||||
|  |     > migrator.add_index(model, *col_names, unique=False) | ||||||
|  |     > migrator.add_not_null(model, *field_names) | ||||||
|  |     > migrator.add_default(model, field_name, default) | ||||||
|  |     > migrator.add_constraint(model, name, sql) | ||||||
|  |     > migrator.drop_index(model, *col_names) | ||||||
|  |     > migrator.drop_not_null(model, *field_names) | ||||||
|  |     > migrator.drop_constraints(model, *constraints) | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from contextlib import suppress | ||||||
|  | 
 | ||||||
|  | import peewee as pw | ||||||
|  | from peewee_migrate import Migrator | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | with suppress(ImportError): | ||||||
|  |     import playhouse.postgres_ext as pw_pext | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def migrate(migrator: Migrator, database: pw.Database, *, fake=False): | ||||||
|  |     """Write your migrations here.""" | ||||||
|  | 
 | ||||||
|  |     migrator.add_fields( | ||||||
|  |         "user", api_key=pw.CharField(max_length=255, null=True, unique=True) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def rollback(migrator: Migrator, database: pw.Database, *, fake=False): | ||||||
|  |     """Write your rollback migrations here.""" | ||||||
|  | 
 | ||||||
|  |     migrator.remove_fields("user", "api_key") | ||||||
|  | @ -25,7 +25,6 @@ class Auth(Model): | ||||||
|     email = CharField() |     email = CharField() | ||||||
|     password = CharField() |     password = CharField() | ||||||
|     active = BooleanField() |     active = BooleanField() | ||||||
|     api_key = CharField(null=True, unique=True) |  | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         database = DB |         database = DB | ||||||
|  | @ -36,7 +35,6 @@ class AuthModel(BaseModel): | ||||||
|     email: str |     email: str | ||||||
|     password: str |     password: str | ||||||
|     active: bool = True |     active: bool = True | ||||||
|     api_key: Optional[str] = None |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #################### | #################### | ||||||
|  | @ -136,13 +134,8 @@ class AuthsTable: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             auth = Auth.get(Auth.api_key == api_key, Auth.active == True) |             user = Users.get_user_by_api_key(api_key) | ||||||
|             if auth: |             return user if user else None | ||||||
|                 user = Users.get_user_by_id(auth.id) |  | ||||||
|                 return user |  | ||||||
|             else: |  | ||||||
|                 return None |  | ||||||
| 
 |  | ||||||
|         except: |         except: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ class User(Model): | ||||||
|     role = CharField() |     role = CharField() | ||||||
|     profile_image_url = CharField() |     profile_image_url = CharField() | ||||||
|     timestamp = DateField() |     timestamp = DateField() | ||||||
|  |     api_key = CharField(null=True, unique=True) | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         database = DB |         database = DB | ||||||
|  | @ -32,6 +33,7 @@ class UserModel(BaseModel): | ||||||
|     role: str = "pending" |     role: str = "pending" | ||||||
|     profile_image_url: str = "/user.png" |     profile_image_url: str = "/user.png" | ||||||
|     timestamp: int  # timestamp in epoch |     timestamp: int  # timestamp in epoch | ||||||
|  |     api_key: Optional[str] = None | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #################### | #################### | ||||||
|  | @ -82,6 +84,13 @@ class UsersTable: | ||||||
|         except: |         except: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|  |     def get_user_by_api_key(self, api_key: str) -> Optional[UserModel]: | ||||||
|  |         try: | ||||||
|  |             user = User.get(User.api_key == api_key) | ||||||
|  |             return UserModel(**model_to_dict(user)) | ||||||
|  |         except: | ||||||
|  |             return None | ||||||
|  | 
 | ||||||
|     def get_user_by_email(self, email: str) -> Optional[UserModel]: |     def get_user_by_email(self, email: str) -> Optional[UserModel]: | ||||||
|         try: |         try: | ||||||
|             user = User.get(User.email == email) |             user = User.get(User.email == email) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timothy J. Baek
						Timothy J. Baek