
    ,Wi&#                        S SK JrJrJrJrJrJrJrJr  S SK	J
r
  S SKJr  S SKJrJrJr  S SKJr  \
R&                  " SSS/S	9S
 5       r\
R&                  " SSS/S	9S 5       r\
R&                  " S5      S 5       r\
R&                  " SSS/S	9\S 5       5       r\
R&                  " SS/S	9\S\4S j5       5       r\
R&                  " SS/S	9\S 5       5       rg)    )render_templaterequesturl_forredirectflashsessiongjsonify)bp)AuthService)UserdbChallengeRecord)login_requiredz	/registerGETPOST)methodsc                  Z   SSK Jn   U R                  5       (       d   [        SS5        [	        [        S5      5      $ [        [        S5      (       a)  [        R                  (       a  [	        [        S5      5      $ [        R                  S:X  Ga  [        R                  R                  S	5      n[        R                  R                  S
5      n[        R                  R                  S5      n[        R                  R                  S5      nU(       a  U(       a  U(       d  [        SS5        [        S5      $ X4:w  a  [        SS5        [        S5      $ [        R                  " XU5      u  pVU(       a   [        SS5        [	        [        S5      5      $ [        SU 3S5        [        S5      $ )u   用户注册页面和处理r   )SystemConfigu0   系统当前不允许注册，请联系管理员warningz
auth.loginuser
main.indexr   usernameemailpasswordconfirm_password   请填写所有必填字段dangerzpages/auth/register.htmlu   两次输入的密码不一致u   注册成功，请登录successu   注册失败: )app.models.database.modelsr   is_registration_enabledr   r   r   hasattrr	   r   r   methodformgetr   r   register_user)r   r   r   r   r   r   results          ?   /Users/yu22x/Desktop/ddd_副本128/ctf/app/routes/auth/views.pyregisterr)      sD    8 //11@)L-.. q&aff-..~~<<##J/  )<<##J/"<<++,>? uH/:"#=>>'2H="#=>> &33HXN,i8GL122N6(+X6566    z/loginc                     [        [        S5      (       a)  [        R                  (       a  [        [	        S5      5      $ [
        R                  R                  S5      =(       d    [	        S5      n [
        R                  S:X  a  [
        R                  R                  S5      n[
        R                  R                  S5      n[
        R                  R                  S5      S:H  nU(       a  U(       d  [        S	S
5        [        SU S9$ [        R                  " X5      nU(       a;  [        R                  " XC5        [        SUR                   S3S5        [        U 5      $ [        SS
5        [        SU S9$ )u   用户登录页面和处理r   r   nextr   r   r   rememberonr   r   zpages/auth/login.html)r,   u   欢迎回来，u   ！r   u   用户名或密码错误)r"   r	   r   r   r   r   argsr%   r#   r$   r   r   r   authenticate_usercreate_sessionr   )next_urlusername_or_emailr   r-   r   s        r(   loginr4   /   s    q&aff-.. ||'@7<+@H~~#LL,,Z8<<##J/<<##J/47 !/:"#:JJ ,,->I&&t6ODMM?#6	BH%%,h72BBr*   z/logoutc                  l    [         R                  " 5         [        SS5        [        [	        S5      5      $ )u   用户登出处理u   您已成功登出r   r   )r   logoutr   r   r    r*   r(   r6   r6   P   s+     	
	*GL)**r*   z/profilec            
         [         R                  S:X  Ga  [         R                  R                  S5      S:H  n [         R                  R                  S5      n[         R                  R                  S5      nU(       d%  SnU (       a  [        SUS.5      $ [        US	5        GO4 [        R                  R                  [        R                  U:H  [        R                  [        R                  R                  :g  5      R                  5       nU(       a$  S
nU (       a  [        SUS.5      $ [        US	5        OU[        R                  l
        UR                  5       (       a  UOS[        R                  l        ["        R$                  R'                  5         SnU (       a+  [        SU[        R                  R)                  5       S.5      $ [        US5         [         R0                  R                  SS5      n[2        R                  R5                  [        R                  R                  S9nU(       a  US:w  a  UR5                  US9nUR7                  [2        R8                  R;                  5       5      R=                  5       n SSKJ n	  U	RC                  5       n
U
 Vs0 s H&  oR                  URD                  URF                  S._M(     nn0 n[2        R                  R5                  [        R                  R                  S9RI                  5       US'   URK                  5        HI  n[2        R                  R5                  [        R                  R                  US9RI                  5       X'   MK     Sn SSK&nURO                  SS/URP                  URP                  SS9nURR                  S:H  n[U        S[        R                  UUUUUS9$ ! [*         a]  n["        R$                  R-                  5         S[/        U5       3nU (       a  [        SUS.5      s SnA$ [        US	5         SnAGNXSnAff = fs  snf !   0 n GNv= f! [*         a    Sn Nf = f)u   用户个人中心页面r   zX-Requested-WithXMLHttpRequestr   avataru   电子邮箱不能为空Fr   messager   u   该电子邮箱已被使用Nu   个人信息已更新T)r   r<   r   r   u   更新失败: categoryall)user_id)challenge_typer   )CategoryConfig)nameicon)r?   r@   dockerz	--version   )stdoutstderrtimeoutzpages/auth/profile.html)r   
challengeschallenges_categorycategories_dictchallenge_countsdocker_available)+r   r#   headersr%   r$   r
   r   r   queryfilterr   idr	   r   firststripr:   r   r   committo_dict	Exceptionrollbackstrr/   r   	filter_byorder_by
created_atdescr>   r    rA   get_all_categoriesrB   rC   countkeys
subprocessrunPIPE
returncoder   )is_ajaxr   r:   r<   existing_usererJ   challenges_queryrI   rA   all_categoriescatrK   rL   cat_idrM   r`   r'   s                     r(   profilerk   W   s{   
 ~~//%%&89=MM   )!!(+ 0G5WEFF'8$) $

 1 1$**2EtwwRSRXRXR[R[G[ \ b b d ;G&5W'MNN'8,#(AFFL.4llnnF$AFFMJJ%%'5G&'+'.$%FFNN$4(   
 '9- ",,**:u= ',,66qvvyy6I2e;+55EX5Y!**?+E+E+J+J+LMQQSJ='::<SabSaC66CHHchh#GGSab
 -33==affii=PVVXU!&&(#2#8#8#B#B16699ek#B#l#r#r#t  ) !; 7
XbXgXgqrs!,,1 4ff$.-@)8*:*:< <O  )

##%*3q6(3"u#IJJgx(()( c  ! !si   #BO )O 6BO 	O P; -P6
P; 4;Q 
P3A P.P3P..P36P; ;QQQz%/api/my/challenges/<int:challenge_id>DELETEchallenge_idc                 X    SSK JnJn  [        [        S5      (       a  [        R
                  (       d  [        SSS.5      S4$ U" [        U 5      5      nU(       d  [        SSS.5      S	4$ UR                  S
5      [        R
                  R                  :w  a.  [        R
                  R                  S:w  a  [        SSS.5      S4$ U" [        U 5      5      nU(       a  [        SS05      $ [        SSS.5      S4$ ! [         a#  n[        S[        U5      S.5      S4s SnA$ SnAff = f)u9   删除当前用户的某个题目记录（个人中心）r   )get_challenge_recorddelete_challenger   Funauthorized)r   errori  	not_foundi  r?   admin	forbiddeni  r   Tdelete_failed  N)app.models.database.operationsro   rp   r"   r	   r   r
   intr%   rQ   rolerV   rX   )rm   ro   rp   recordokrf   s         r(   api_delete_my_challenger}      s    AYq&!!u~FGLL%c,&78u{CDcII::i AFFII-!&&++2Hu{CDcIIc,/0It,--5?CDcII A53q6:;S@@As7   AC< 'C< ,AC< $C< ,C< <
D)D$D)$D)z/api/change-passwordc                     SSK Jn Jn   [        R                  " 5       nUR                  S5      nUR                  S5      nU(       a  U(       d  [        SSS.5      S4$ [        U5      S	:  a  [        SS
S.5      S4$ U " [        R                  R                  U5      (       d  [        SSS.5      S4$ U" USS9[        R                  l
        [        R                  R                  5         [        SSS.5      $ ! [         aD  n[        R                  R                  5         [        SS[!        U5       3S.5      S4s SnA$ SnAff = f)u   修改当前用户密码r   )check_password_hashgenerate_password_hashcurrent_passwordnew_passwordFu   请填写所有字段r;   i     u   新密码长度至少6个字符u   当前密码错误zpbkdf2:sha256)r#   Tu   密码修改成功u   修改失败: rw   N)werkzeug.securityr   r   r   get_jsonr%   r
   lenr	   r   password_hashr   r   rT   rV   rW   rX   )r   r   datar   r   rf   s         r(   api_change_passwordr      s$    NV!88$67xx/|u9PQRTWWW|q u9Z[\^aaa #166#7#79IJJu9MNOQTTT  6l?[


44HIJJ V


5~c!fX5NOPRUUUVs1   AC: C: >5C: 4AC: :
E9E=EEN)flaskr   r   r   r   r   r   r	   r
   app.routes.authr   app.services.authr   r    r   r   r   app.services.auth.decoratorsr   router)   r4   r6   rk   ry   r}   r   r7   r*   r(   <module>r      s   Y Y Y  ) @ @ 7+v/%7 0%7N (UFO,C -C@ )+ + *ufo.U<  /U<n 
1H:FA# A  GA$ 
 6(3V  4Vr*   