
    Vi[*                        d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ  e            Z  ee           Z! eddg          Z" ed          Z# e
dgdd          Z$ ej%        ej&                    ej'        e(          Z)d*dZ*d+dZ+d Z, ee"ddge          e"-                    de          defd                         Z.e"-                    d!          defd"            Z/e"0                    de           ed#           ed#           ed#           ed#           ed#          fded$e1d%e1d&e1d'e1d(e1fd)            Z2dS ),    )	APIRouterFormRequest)Jinja2Templates)HTMLResponseJSONResponse)CryptContextN)MIMEText)MIMEMultipart)	BaseModelEmailStrfield_validator)get_pingconf_vars
open_mysqlget_mysql_creds)add_dual_routez	/registerregister)prefixtags	templates)	directorybcryptauto2b)schemes
deprecatedbcrypt__ident)level   c                     d                     t          j        t          j        t          j        z   |                     S N )kjoinrandomchoicesstringascii_lettersdigitslengths    +/wd/v2025.freedom4um.com/routes/register.pygenerate_captcha_coder.      -    776>&"6"F&QQQRRR       c                     d                     t          j        t          j        t          j        z   |                     S r!   r$   r+   s    r-   generate_confirm_coder3      r/   r0   c           	      j   dt           d          d| d| }dt           d          d| d}d	t           d          d
t           d          d| dt           d          d	}t          d          }t           d          d|d<   dt           d          |d<   | |d<   t          |dd          }t          |dd          }|                    |           |                    |           	 t	          j        t           d         d          5 }	|	                                 |	                    |d         | g|                                           d d d            n# 1 swxY w Y   t          
                    d|             d S # t          $ r+}
t                              d|  d|
            Y d }
~
d S d }
~
ww xY w)Nzhttps://HomeURLDomainz:1443/confirm?id=z&code=zThank you for registering at SiteNamez2!!

Please confirm your registration by visiting:

a[  <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"></head>
<body style="font-family: Arial, sans-serif; background-color: #f5f1e9; color: #193048; margin:0; padding:20px;">
  <div style="max-width:600px; margin:auto; padding:20px; background:#fff; border:3px solid #C6BBA3; border-radius:8px;">
    <h1 style="color:#7ed957;">Welcome to z>!</h1>
    <p>Thank you for registering an account at <strong>zo</strong>..</p>
    <p>Please confirm your registration by clicking the link below:</p>
    <p>
      <a href="a  " style="color:#ffde59; font-weight:bold; text-decoration:none;">
        Confirm Registration
      </a>
    </p>
    <hr style="border-color:#C6BBA3;">
    <p>If you did not initiate this registration, you can safely ignore this email.</p>
    <p>Best regards,<br>The z# Team</p>
  </div>
</body>
</html>
alternativez Registration ConfirmationSubjectznoreply@FromToplainzutf-8htmlOutMailServer   zConfirmation email sent to zFailed to send email to z: )PingConfr   r
   attachsmtplibSMTPehlosendmail	as_stringloggerdebug	Exception	exception)emailid_numconfirm_codeconfirm_url	text_part	html_partmsgr<   r=   serveres              r-   send_confirmation_email1rT      sd   eXo6eeeeWceeK&z2  	  I ,4J+?  9A8L     &j1!  I. 
&
&C ,HHHC	N8Xo688CKCI Y11EIvw//DJJuJJtB\(?3R88 	CFKKMMMOOCK%#--//BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	:5::;;;;; B B B@E@@Q@@AAAAAAAAABs=   " E= AEE= EE= E E= =
F2 F--F2r"   GET)methodsresponse_class/)rW   requestc                    K   t                      }|| j        d<   t                              d|            t                              d| dddd|i d          S )Ncaptcha_codez#GET /register - Generated CAPTCHA: register.htmlr"   rY   rK   usernamepasswordconfirm_passwordr[   errors)r.   sessionrG   rH   r   TemplateResponserY   r[   s     r-   get_registerre   V   st       )**L&2GON#
LLE|EEFFF%% "(	
 	
  r0   z/captchac                    K   t                      }|| j        d<   t                              d|            t	          d|i          S )Nr[   zCAPTCHA refresh - Generated: )r.   rb   rG   rH   r   rd   s     r-   get_new_captcharg   k   sK      (**L&2GON#
LL???@@@6777r0   .rK   r^   r_   r`   captchac                 @  K   i }t                               d| d| d           t                               d| d           t                               d| j                            d           d           | j                            d          }| d|d<   t                               d	           nP|                                |k    r8d
|d<   t                               d| d|                                 d           t          j        d|          s"d|d<   t                               d|            t          j        d|          s"d|d<   t                               d|            t          |          dk     rd|d<   t                               d           ||k    rd|d<   t                               d           |rZt                               d|            t                      }|| j        d<   t                              d| ||dd||dd !          S 	 t          t                    5 }	|	                                }
|
                    d"|f           |
                                r#d#|d<   t                               d$| d%           |
                    d&|f           |
                                r#d'|d<   t                               d(| d%           |rIt                      }|| j        d<   t                              d| ||dd||dd !          cd d d            S t#                      }t$                              |          }t                               d)| d| d           |
                    d*||||f           |	                                 |
j        }t                               d+| d,| d           	 t/          |||           t                               d-|            n4# t0          $ r'}t                               d.|            Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   n# t2          j        j        $ ri}t                               d/|            d0|d1<   t                      }|| j        d<   t                              d| ||dd||dd2!          cY d }~S d }~wt0          $ ri}t                               d3|            d4|d1<   t                      }|| j        d<   t                              d| ||dd||dd2!          cY d }~S d }~ww xY w| j                            dd            t                               d5| d           t                              d6| t<          d7          S )8Nz5POST /register - Received registration for username='z
', email=''z(POST /register - User entered CAPTCHA: 'z#POST /register - Session CAPTCHA: 'r[   z7Session expired. Please refresh the page and try again.rh   z0CAPTCHA validation failed: No CAPTCHA in sessionz$Incorrect CAPTCHA. Please try again.z%CAPTCHA validation failed: expected 'z', got 'z^[^@]+@[^@]+\.[^@]+$zInvalid email formatrK   zEmail validation failed for: z%^[a-zA-Z0-9\s\-\_\'\+\?\!\@\.]{1,30}$zGUsername must be 1-30 characters, alphanumeric, space, or -_'+?!@. onlyr^   z Username validation failed for: r   z+Password must be at least 6 characters longr_   z%Password validation failed: too shortzPasswords do not matchr`   z3Password confirmation failed: passwords don't matchzValidation errors found: r\   r"   r]   i  )status_codez'SELECT 1 FROM Handles WHERE Handle = %sz/Username already exists. Please choose another.z
Username 'z' already existsz&SELECT 1 FROM Handles WHERE Email = %sz6Email already registered. Please use another or login.zEmail 'zInserting new user: username='z
                INSERT INTO Handles (Handle, Email, Password, RegisterDate, StatusCode, ConfirmCode)
                VALUES (%s, %s, %s, NOW(), 'U', %s)
                u(   ✓ Successfully inserted new handle ID z for 'u   ✓ Confirmation email sent to u'   ✗ Failed to send confirmation email: z$Database error during registration: z0Database error occurred. Please try again later.databasei  z&Unexpected error during registration: z/An unexpected error occurred. Please try again.u   ✓ Registration complete for 'zsuccess.html)rY   r@   )rG   rH   rb   geterrorstriprematchlenr.   r   rc   r   mysql_credscursorexecutefetchoner3   pwd_contexthashcommit	lastrowidinforT   rI   mysql	connectorErrorrJ   popr@   )rY   rK   r^   r_   r`   rh   ra   stored_captchanew_captchaconnrt   rM   hashed_password	handle_idemail_errordb_errorrS   s                    r-   post_registerr   s   s!      F
LLeee]beeefff
LLFGFFFGGG
LL]w7J7J>7Z7Z]]]^^^ _((88NUyGHHHH	N	*	*Byg^ggU\UbUbUdUdggghhh 8+U33 >0w<U<<=== 8<hGG DfzBBBCCC 8}}qJz<=== ###%=!"JKKK  
999:::+--*5'))"$$& +    * 
 
 	
]
$$ 6	V[[]]F NNDxkRRR   F%Vz"D(DDDEEE NNCeXNNN   @"Zw>u>>>???  3552=/ 11##*!&$,$&,.(3"(  !$ 2  '6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	VD 122L)..x88OLLV(VVeVVVWWWNN 5/<@   KKMMM(IKK_9__T\___```V(	<HHHEeEEFFFF V V VT{TTUUUUUUUUVk6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	V 6	Vr ?  
 
 
JJJKKKOz+--*5'))"$$& +    * 
 
 	
 	
 	
 	
 	
 	
  
 
 
E!EEFFFNz+--*5'))"$$& +    * 
 
 	
 	
 	
 	
 	
 	

( O---
KK=(===>>>%%22  s   (Q <C/Q+Q 8BQ.PQ
P8P3.Q3P88Q;Q QQ QQ U'ASUUAT<6U<U)r   )r1   )3fastapir   r   r   fastapi.templatingr   fastapi.responsesr   r   passlib.contextr	   rp   r&   r(   mysql.connectorr|   rB   loggingemail.mime.textr
   email.mime.multipartr   pydanticr   r   r   utils.pingdatar   r   r   utils.routesr   r@   rs   routerr   rw   basicConfigDEBUG	getLogger__name__rG   r.   r3   rT   rm   re   rg   poststrr    r0   r-   <module>r      s/   , , , , , , , , , , . . . . . . 8 8 8 8 8 8 8 8 ( ( ( ( ( ( < < < < < < < < < < < < < < < < < < < < < < < < $ $ $ $ $ $ . . . . . . 9 9 9 9 9 9 9 9 9 9 I I I I I I I I I I ' ' ' ' ' 'oh''	+ZL	9	9	9Ok222	lH:&PTUUU  '- ( ( ( (		8	$	$S S S SS S S S4B 4B 4Bn UGLIIIC--    .- JI& J87 8 8 8 8 S.. T#YYS		S		 $S		tCyyd ddd d 	d
 d d d d /.d d dr0   