11# coding=utf-8
22"""
3- @project: MaxKB
4- @Author:虎虎
5- @file: user.py
6- @date:2025/4/14 10:22
7- @desc:
3+ @project: MaxKB
4+ @Author:虎虎
5+ @file: user.py
6+ @date:2025/4/14 10:22
7+ @desc:
88"""
9- from django .core .cache import cache
10- from django .utils .translation import gettext_lazy as _
11- from drf_spectacular .utils import extend_schema
12- from rest_framework .request import Request
13- from rest_framework .views import APIView
149
1510from common import result
1611from common .auth import TokenAuth
1712from common .constants .cache_version import Cache_Version
1813from common .log .log import log
1914from common .utils .common import encryption
15+ from django .core .cache import cache
16+ from django .utils .translation import gettext_lazy as _
17+ from drf_spectacular .utils import extend_schema
2018from maxkb .const import CONFIG
2119from models_provider .api .model import DefaultModelResponse
22- from users .api .login import LoginAPI , CaptchaAPI
23- from users .serializers .login import LoginSerializer , CaptchaSerializer
20+ from rest_framework .request import Request
21+ from rest_framework .views import APIView
22+ from users .api .login import CaptchaAPI , LoginAPI
23+ from users .serializers .login import CaptchaSerializer , LoginSerializer
2424
2525
2626def _get_details (request ):
2727 path = request .path
2828 body = request .data
2929 query = request .query_params
30- return {
31- 'path' : path ,
32- 'body' : {** body , 'password' : encryption (body .get ('password' , '' ))},
33- 'query' : query
34- }
30+ return {"path" : path , "body" : {** body , "password" : encryption (body .get ("password" , "" ))}, "query" : query }
3531
3632
3733class LoginView (APIView ):
38- @extend_schema (methods = ['POST' ],
39- description = _ ("Log in" ),
40- summary = _ ("Log in" ),
41- operation_id = _ ("Log in" ), # type: ignore
42- tags = [_ ("User Management" )], # type: ignore
43- request = LoginAPI .get_request (),
44- responses = LoginAPI .get_response ())
45- @log (menu = 'User management' , operate = 'Log in' , get_user = lambda r : {'username' : r .data .get ('username' , None )},
46- get_details = _get_details ,
47- get_operation_object = lambda r , k : {'name' : r .data .get ('username' )})
34+ @extend_schema (
35+ methods = ["POST" ],
36+ description = _ ("Log in" ),
37+ summary = _ ("Log in" ),
38+ operation_id = _ ("Log in" ), # type: ignore
39+ tags = [_ ("User Management" )], # type: ignore
40+ request = LoginAPI .get_request (),
41+ responses = LoginAPI .get_response (),
42+ )
43+ @log (
44+ menu = "User management" ,
45+ operate = "Log in" ,
46+ get_user = lambda r : {"username" : r .data .get ("username" , None )},
47+ get_details = _get_details ,
48+ get_operation_object = lambda r , k : {"name" : r .data .get ("username" )},
49+ )
4850 def post (self , request : Request ):
4951 token , f_token = LoginSerializer ().login (request .data )
5052 response = result .success (token )
53+ from common .utils .logger import maxkb_logger
54+
55+ maxkb_logger .info (
56+ f"LoginView.post: request.scheme={ request .scheme } , request.is_secure()={ request .is_secure ()} , request.META['wsgi.url_scheme']={ request .META .get ('wsgi.url_scheme' )} , request.META['HTTPS']={ request .META .get ('HTTPS' )} "
57+ )
5158 response .set_cookie (
52- ' mk_file_auth' ,
59+ " mk_file_auth" ,
5360 value = f_token ,
5461 max_age = 7 * 24 * 3600 ,
55- path = f' { CONFIG .get_admin_path ()} ' ,
62+ path = f" { CONFIG .get_admin_path ()} " ,
5663 domain = None ,
5764 secure = request .scheme == "https" ,
5865 httponly = True ,
@@ -64,27 +71,30 @@ def post(self, request: Request):
6471class Logout (APIView ):
6572 authentication_classes = [TokenAuth ]
6673
67- @extend_schema (methods = ['POST' ],
68- summary = _ ("Sign out" ),
69- description = _ ("Sign out" ),
70- operation_id = _ ("Sign out" ), # type: ignore
71- tags = [_ ("User Management" )], # type: ignore
72- responses = DefaultModelResponse .get_response ())
73- @log (menu = 'User management' , operate = 'Sign out' ,
74- get_operation_object = lambda r , k : {'name' : r .user .username })
74+ @extend_schema (
75+ methods = ["POST" ],
76+ summary = _ ("Sign out" ),
77+ description = _ ("Sign out" ),
78+ operation_id = _ ("Sign out" ), # type: ignore
79+ tags = [_ ("User Management" )], # type: ignore
80+ responses = DefaultModelResponse .get_response (),
81+ )
82+ @log (menu = "User management" , operate = "Sign out" , get_operation_object = lambda r , k : {"name" : r .user .username })
7583 def post (self , request : Request ):
7684 version , get_key = Cache_Version .TOKEN .value
77- cache .delete (get_key (token = request .META .get (' HTTP_AUTHORIZATION' )[7 :]), version = version )
85+ cache .delete (get_key (token = request .META .get (" HTTP_AUTHORIZATION" )[7 :]), version = version )
7886 return result .success (True )
7987
8088
8189class CaptchaView (APIView ):
82- @extend_schema (methods = ['GET' ],
83- summary = _ ("Get captcha" ),
84- description = _ ("Get captcha" ),
85- operation_id = _ ("Get captcha" ), # type: ignore
86- tags = [_ ("User Management" )], # type: ignore
87- responses = CaptchaAPI .get_response ())
90+ @extend_schema (
91+ methods = ["GET" ],
92+ summary = _ ("Get captcha" ),
93+ description = _ ("Get captcha" ),
94+ operation_id = _ ("Get captcha" ), # type: ignore
95+ tags = [_ ("User Management" )], # type: ignore
96+ responses = CaptchaAPI .get_response (),
97+ )
8898 def get (self , request : Request ):
89- username = request .query_params .get (' username' , None )
99+ username = request .query_params .get (" username" , None )
90100 return result .success (CaptchaSerializer ().generate (username ))
0 commit comments