@@ -70,43 +70,49 @@ def auth(self, request, with_valid=True):
7070
7171
7272class AuthProfileSerializer (serializers .Serializer ):
73+ """v3: 直接通过 application_id 获取认证 profile"""
74+ application_id = serializers .UUIDField (required = True , label = _ ("application_id" ))
75+
76+ def profile (self ):
77+ self .is_valid (raise_exception = True )
78+ application_id = self .validated_data .get ("application_id" )
79+ application_access_token = QuerySet (ApplicationAccessToken ).filter (application_id = application_id ).first ()
80+ if application_access_token is None :
81+ raise NotFound404 (404 , _ ("Invalid application_id" ))
82+ if not application_access_token .is_active :
83+ raise NotFound404 (404 , _ ("Invalid application_id" ))
84+ login_value = application_access_token .authentication_value .get ('login_value' , [])
85+ chat_platform = DatabaseModelManage .get_model ('chat_platform' )
86+ if chat_platform is not None :
87+ types = QuerySet (chat_platform ).filter (is_active = True , is_valid = True ).values_list ('auth_type' , flat = True )
88+ login_value = list (set (login_value ) & set (types ))
89+ if 'LOCAL' in application_access_token .authentication_value .get ('login_value' , []):
90+ login_value .insert (0 , 'LOCAL' )
91+ return {
92+ 'application_name' : application_access_token .application .name ,
93+ 'authentication' : application_access_token .authentication ,
94+ 'authentication_type' : application_access_token .authentication_value .get ('type' , 'password' ),
95+ 'max_attempts' : application_access_token .authentication_value .get ('max_attempts' , 1 ),
96+ 'login_value' : login_value ,
97+ 'rsaKey' : get_key_pair_by_sql ().get ('key' )
98+ }
99+
100+
101+ class AuthProfileV2Serializer (serializers .Serializer ):
102+ """v2: 通过 access_token 查表得到 application_id,委托给 AuthProfileSerializer"""
73103 access_token = serializers .CharField (required = True , label = _ ("access_token" ))
74104
75105 def profile (self ):
76106 self .is_valid (raise_exception = True )
77- access_token = self .data .get ("access_token" )
107+ access_token = self .validated_data .get ("access_token" )
78108 application_access_token = QuerySet (ApplicationAccessToken ).filter (access_token = access_token ).first ()
79109 if application_access_token is None :
80110 raise NotFound404 (404 , _ ("Invalid access_token" ))
81111 if not application_access_token .is_active :
82112 raise NotFound404 (404 , _ ("Invalid access_token" ))
83- application_id = application_access_token .application_id
84- profile = {
85- 'authentication' : False
86- }
87- application_setting_model = DatabaseModelManage .get_model ('application_setting' )
88- chat_platform = DatabaseModelManage .get_model ('chat_platform' )
89- if application_setting_model and chat_platform :
90- application_setting = QuerySet (application_setting_model ).filter (application_id = application_id ).first ()
91- types = QuerySet (chat_platform ).filter (is_active = True , is_valid = True ).values_list ('auth_type' , flat = True )
92- login_value = application_access_token .authentication_value .get ('login_value' , [])
93- max_attempts = application_access_token .authentication_value .get ('max_attempts' , 1 )
94- final_login_value = list (set (login_value ) & set (types ))
95- if 'LOCAL' in login_value :
96- final_login_value .insert (0 , 'LOCAL' )
97- if application_setting is not None :
98- profile = {
99- 'icon' : application_setting .application .icon ,
100- 'application_name' : application_setting .application .name ,
101- 'bg_icon' : application_setting .chat_background ,
102- 'authentication' : application_access_token .authentication ,
103- 'authentication_type' : application_access_token .authentication_value .get (
104- 'type' , 'password' ),
105- 'max_attempts' : max_attempts ,
106- 'login_value' : final_login_value ,
107- 'rsaKey' : get_key_pair_by_sql ().get ('key' )
108- }
109- return profile
113+ return AuthProfileSerializer (
114+ data = {'application_id' : application_access_token .application_id }
115+ ).profile ()
110116
111117
112118class ApplicationProfileSerializer (serializers .Serializer ):
0 commit comments