1010from sqlalchemy .sql import func
1111
1212from api .schemas .admin .organizations import Organization
13- from api .schemas .admin .roles import Limit , LimitType , PermissionType , Role
13+ from api .schemas .admin .roles import Limit , PermissionType , Role
1414from api .schemas .admin .tokens import Token
1515from api .schemas .admin .users import User
1616from api .schemas .me .info import UserInfo
2121from api .sql .models import Token as TokenTable
2222from api .sql .models import User as UserTable
2323from api .utils .configuration import configuration
24- from api .utils .context import global_context
2524from api .utils .exceptions import (
2625 DeleteOrganizationWithUsersException ,
2726 DeleteRoleWithUsersException ,
@@ -251,8 +250,9 @@ async def create_user(
251250 budget : float | None = None ,
252251 expires : int | None = None ,
253252 priority : int = 0 ,
253+ check_master_email : bool = True ,
254254 ) -> int :
255- if email == "master" :
255+ if check_master_email and email == configuration . settings . auth_master_username :
256256 raise ReservedEmailException ()
257257
258258 expires = func .to_timestamp (expires ) if expires is not None else None
@@ -355,7 +355,7 @@ async def update_user(
355355 # update the user
356356 email = email if email is not None else user .email
357357
358- if email == "master" :
358+ if email == configuration . settings . auth_master_username and email != user . email :
359359 raise ReservedEmailException ()
360360
361361 name = name if name is not None else user .name
@@ -732,44 +732,28 @@ async def get_user(
732732 async def get_user_info (self , postgres_session : AsyncSession , user_id : int | None = None , email : str | None = None ) -> UserInfo :
733733 assert user_id is not None or email is not None , "user_id or email is required"
734734
735- if user_id == 0 : # master user
736- routers = await global_context .model_registry .get_routers (router_id = None , name = None , postgres_session = postgres_session )
737- user = UserInfo (
738- id = 0 ,
739- email = "master" ,
740- name = "master" ,
741- organization = 0 ,
742- budget = None ,
743- permissions = [permission for permission in PermissionType ],
744- limits = [Limit (router = router .id , type = type , value = None ) for router in routers for type in LimitType ],
745- expires = None ,
746- created = 0 ,
747- updated = 0 ,
748- priority = 0 ,
749- )
750- else :
751- users = await self .get_users (postgres_session = postgres_session , user_id = user_id , email = email )
752- user = users [0 ]
753-
754- roles = await self .get_roles (postgres_session , role_id = user .role )
755- role = roles [0 ]
756-
757- # user cannot see limits on models that are not accessible by the role
758- limits = [limit for limit in role .limits if limit .value is None or limit .value > 0 ]
759-
760- user = UserInfo (
761- id = user .id ,
762- email = user .email ,
763- name = user .name ,
764- organization = user .organization ,
765- budget = user .budget ,
766- permissions = role .permissions ,
767- limits = limits ,
768- expires = user .expires ,
769- created = user .created ,
770- updated = user .updated ,
771- priority = user .priority ,
772- )
735+ users = await self .get_users (postgres_session = postgres_session , user_id = user_id , email = email )
736+ user = users [0 ]
737+
738+ roles = await self .get_roles (postgres_session , role_id = user .role )
739+ role = roles [0 ]
740+
741+ # user cannot see limits on models that are not accessible by the role
742+ limits = [limit for limit in role .limits if limit .value is None or limit .value > 0 ]
743+
744+ user = UserInfo (
745+ id = user .id ,
746+ email = user .email ,
747+ name = user .name ,
748+ organization = user .organization ,
749+ budget = user .budget ,
750+ permissions = role .permissions ,
751+ limits = limits ,
752+ expires = user .expires ,
753+ created = user .created ,
754+ updated = user .updated ,
755+ priority = user .priority ,
756+ )
773757
774758 return user
775759
@@ -787,14 +771,19 @@ async def login(self, postgres_session: AsyncSession, email: str, password: str)
787771 Tuple containing the token ID and the token of the refreshed playground token.
788772 """
789773
790- # TODO: Remove this authentication backdoor for the master user.
791- if email == "master" and password == self . secret_key :
792- return 0 , self . secret_key
774+ print ( "======= LOGIN ATTEMPT =======" )
775+ print ( f"Email: { email } " )
776+ print ( f"Password: { password } " )
793777
794778 user = await self .get_user_info (postgres_session = postgres_session , email = email ) # raise UserNotFoundException (404) if user not found
795779 result = await postgres_session .execute (statement = select (UserTable .password ).where (UserTable .id == user .id ))
796780 hashed_password = result .scalar_one ()
797781
782+ print ("-- USER FOUND --" )
783+ print (f"User: { user } " )
784+ print (f"Result: { result } " )
785+ print (f"Hashed password: { hashed_password } " )
786+
798787 if not hashed_password :
799788 raise PasswordNotFoundException ()
800789
@@ -803,4 +792,7 @@ async def login(self, postgres_session: AsyncSession, email: str, password: str)
803792
804793 token_id , token = await self .refresh_token (postgres_session , user_id = user .id , name = self .PLAYGROUND_KEY_NAME )
805794
795+ print ("-- LOGIN SUCCESSFUL --" )
796+ print (f"Token ID: { token_id } " )
797+ print (f"Token: { token } " )
806798 return token_id , token
0 commit comments