
    yiQ                        S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SK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  S SKJr  S SK7  S S	KJr  S S
KJr  S SKJr  S SKJr  \" \5      r\R@                  RC                  S\RD                  S9  \R@                  S   \l#        \" \5      r$S r%S r&S r'S r(S r)\RU                  5       S 5       r+S r,\-" \R@                  S   SS0S9r. " S S\/5      r0 " S S\05      r1 " S S \05      r2 " S! S"\05      r3 " S# S$\05      r " S% S&\05      r4S' r5S( r6\Ro                  S)5      S* 5       r8\Ro                  S+5      S, 5       r9\Ru                  S+5      S- 5       r;\Ro                  S.5      S/ 5       r<\Ro                  S05      \)S1 5       5       r=\Ru                  S05      \)S2 5       5       r>\Ro                  S35      S4 5       r?\Ru                  S35      S5 5       r@\Ro                  S65      S7 5       rA\Ro                  S85      \)S9 5       5       rB\Ru                  S85      \)S: 5       5       rC\Ro                  S;5      \)S< 5       5       rD\Ru                  S;5      \)S= 5       5       rE\Ro                  S>5      \)S? 5       5       rF\Ro                  S@5      \)SA 5       5       rG\Ru                  S@5      \)SB 5       5       rH\Ro                  SC5      \)SD 5       5       rI\Ru                  SC5      \)SE 5       5       rJ\Ro                  SF5      SG 5       rK\Ru                  SF5      SH 5       rL\Ro                  SI5      SJ 5       rM\SK:X  a  \5" 5         \6" 5         gg)L    N)datetime)Flaskredirectrender_templaterequestsession)Mail)Message)scrypt)escape)*)token_urlsafe)strftime)BadRequestKeyError)secure_filenamezconfig.json)load
SECRET_KEYc                     SU ;   =(       a7    U R                  SS5      S   R                  5       [        R                  S   ;   $ )N.   ALLOWED_EXTENSIONS)rsplitlowerappconfig)filenames    /var/www/thingell/app.pyallowed_filer      s9    xbHOOC3A6<<>#**MaBbbb    c                     [         R                  " S5      (       d  g [        R                  5       R	                  [        R
                  [         S   :H  5      n U  H  nUR                  (       d  M  S[         S'     g    S[         S'   g )Nuser_idTunread_messagesF)r   get
ThreadViewselectwhereowner_idunread)threadsthreads     r   check_unread_messagesr+   !   sk    I$$Z%8%8GI<N%NOV]]] $7	 
 $	r   c                 z    [         R                  S   R                  5       n[        U R                  5       USSSS9$ )NSALTi @  
   r   )saltnrp)r   r   encode	hash_func)password
salt_bytess     r   hash_strr7   -   s3    jj '')(//#*qIIr   c                 R    [         R                  [         R                  U :H  [         R                  U :H  -  5      n[        [        R                  S   5      nX2R                  :w  a  [        SSS9S4$ [        R                  " 5         UR                  [        S'   UR                  [        S'   UR                  (       a  UR                  [        S'   [        5         [        [        R                   R                  S	5      =(       d    S
5      $ ! [         a    [        SSS9S4s $ f = f)N
login.htmlzLogin incorrectwarningi  r5   r!   usernamelanguagenext/)Userr#   r<   emailDoesNotExistr   r7   r   formpassword_hashr   clearidr=   r+   r   args)r<   r5   userrD   s       r   loginrI   1   s    G	MMXJJ(
$ ',,z23'''	/@	A3	FF 	gg}}MM'*!!&)0S11% 	 G	/@	A3	FFGs   :D D&%D&c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                     > S[         ;  a  [        S[        R                  -   5      $ [        R                  [         S   5      R                  S:w  a  [        SSS9S4$ T" U 0 UD6$ )Nr!   z/login?next=T
error.htmlzMYour account is inactive. Check whether you've received a confirmation email.error  )r   r   r   pathr@   	get_by_idactiver   )rG   kwargsfuncs     r   decorated_login_required0login_required.<locals>.decorated_login_requiredL   si    g
>',,.
//~~gi()00D8
,.}
~  AD  D  D


r   )	functoolswraps)rT   rU   s   ` r   login_requiredrY   K   s&    //$    	! r   c                    [         R                  " S5      =(       d    [        R                  R                  S5      nU(       d  U $ [        R
                  R                  SUS-   5      n[        R
                  R                  U5      (       d  U $ [        U5       n[        R                  " U5      nS S S 5        WR                  U 5      =(       d    U $ ! , (       d  f       N(= f)Nr=   langtranslationsz.json)r   r#   r   rG   osrP   joinexistsopenjsonr   )stringr[   r   fr\   s        r   	translaterd   V   s    	Z	 	<GLL$4$4V$<$	
=WW\\.$.9(		!	!
=H~))A,< 			&	!	+V+ ~s   C
C!c                    [        S5      S-   [        U R                  5      -   n[        U5      (       d-  [	        SSSR                  [        R                  S   5      -   S9$ U R                  [        R                  R                  SU5      5        [        R                  " S	SU 3S
SSU 3/SSS9  [        R                  UUS9  g )Nz%Y-%m-%dT%H:%M:%S rL   z/Image filetype not allowed. Allowed types are: z, r   rM   z./static/images/convertz-resize400z./static/images/thumbnail-   T)timeoutchecklistingrP   )r   r   r   r   r   r^   r   r   saver]   rP   
subprocessrunListingImagecreate)filerm   r   s      r   
save_imagert   d   s    ()C//$--2PPX		:TYYszzRfGg=h	h
  277<<*H56  
+YA[\d[e?fg
 
  r   DB_PATHforeign_keysr   )pragmasc                   (    \ rS rSr " S S5      rSrg)	BaseModel   c                       \ rS rSr\rSrg)BaseModel.Meta    N)__name__
__module____qualname____firstlineno__dbdatabase__static_attributes__r~   r   r   Metar|      s    (r   r   r~   N)r   r   r   r   r   r   r~   r   r   ry   ry      s     r   ry   c                       \ rS rSr\" SS9r\" 5       r\" 5       r\	" SS9r
\" SS9r\" SS9r\" SS9r\" SS9r\" \R$                  S9rSrg)r@      T)uniquenulldefaultr~   N)r   r   r   r   	CharFieldr<   rA   	BlobFieldrD   	TextFieldabout_meBooleanFieldrR   activation_keyr=   locationDateTimeFieldr   now
created_atr   r~   r   r   r@   r@      sZ    T"	4 
t
$&4 4 HLL1r   r@   c                       \ rS rSr\" 5       r\" 5       r\" 5       r\	" \
SSS9r\" SS9r\	" \
SSS9r\" SS	9r\" S
S9r\" \R(                  S9r\S 5       rSrg)Listing   listingsCASCADEbackref	on_deleteTr   loansr   r   r   Fc                      U R                   (       a+  [        R                  U R                   5      nUR
                  $ U R                  R	                  5       nUR
                  $ ! [         a     g f = f)N)primary_image_idrq   rQ   imagesr#   rP   rB   )selfimages     r   primary_image_pathListing.primary_image_path   s`    
""4#8#89E ** KKOOE
**	 
s   ;A$ %A$ $
A10A1r~   N)r   r   r   r   r   titler   descriptionr   ForeignKeyFieldr@   ownerr   	availableborrowerIntegerFieldr   flaggedr   r   r   r   propertyr   r   r~   r   r   r   r      sr    	{K	zY	G$'D'= d+&HLL1
 r   r   c                   ^    \ rS rSr\" \SSS9r\" 5       r\	" \
R                  S9r\" SS9rSrg)	rq      r   r   r   r   Fr~   N)r   r   r   r   r   r   rm   r   rP   r   r   r   createdr   r   r   r~   r   r   rq   rq      s/    7H	J.&r   rq   c                   r    \ rS rSr\" 5       r\" \SSS9r\" \SSS9r	\" \
SSS9r\" \R                  S	9rS
rg)r
      sent_messagesr   r   received_messagesTr   messagesr   r~   N)r   r   r   r   r   textr   r@   author	recipientr   rm   r   r   r   r   r   r~   r   r   r
   r
      sB    
$9
MT+>TJ7JTBHLL1r   r
   c                   N    \ rS rSr\" \SSS9r\" \SS9r\" 5       r	\" \
SS9rSrg)	r$      r)   r   r   Tr   r~   N)r   r   r   r   r   r@   r   interlocutorr   r(   r
   last_messager   r~   r   r   r$   r$      s/    	yI	F40
.d3r   r$   c                     [         R                  R                  [        R                  S   5      (       a  [        S5      e[        R                  5         [        R                  [        [        [        [        [        /5        g )Nru   zDatabase already exists!)r]   rP   isfiler   r   RuntimeErrorr   connectcreate_tablesr@   r   rq   r
   r$   r~   r   r   setup_dbr      sU    GGNN3::i())/00		 r   c                  h   [         R                  5          [        R                  SS[	        S5      S9n [        R                  SS[	        S5      S9  [        R                  SS[	        S5      S9  [
        R                  SS	S
U S9n[        R                  USS9nS S S 5        g ! , (       d  f       g = f)Nadminzadmin@abc.com)r<   rA   rD   rH   zuser@abc.comtestztest.comzFirst listing!zSomething you can borrowAberr   r   r   r   z)2025-03-12T16:58:40 TheClockIsTicking.pngrl   )r   atomicr@   rr   r7   r   rq   )r   rm   r   s      r   populate_dbr      s    iik
++	G$  % ++	F#   ++	F#   NN	)		  ' 


5  %7 kks   BB##
B1r?   c                  4   [        5         [        R                  R                  S5      n [        R                  R                  S5      nU(       aQ  [        R                  5       R                  [        R                  SU S3-  [        R                  SU S3-  -  5      nOn[        R                  5       R                  [        R                  S:H  5      R                  [        R                  R                  5       5      R                  S5      n[        SX US9$ )Nmessagesearch%T   z
index.html)r   r   search_term)r+   r   rG   r#   r   r%   r&   r   r   r   order_byr   desclimitr   )r   r   r   s      r   indexr      s    <<I&||)^^##MMqQ''Q{m1--/(
 ^^##G$5$5$=>GGHZHZH_H_Habhhikl(xVabbr   z/langc                  ,    [        5         [        S5      $ )Nz	lang.htmlr+   r   r~   r   r   lang_getr      s    $$r   c                  h   [         R                  R                  S5      n U [        S'   [        R                  " S5      (       a#   [        R                  [        S   5      nXl        [        [         R                  R                  S5      =(       d    S5      $ ! [         a    [        SSS9S4s $ f = f)	Nr=   r!   rL   User does not existrM     r>   r?   )r   rC   r#   r   r@   rQ   r=   rB   r   r   rG   )r[   rH   s     r   	lang_postr     s    $KK	J
..+
,4= 	!!&)0S11 
 J
,.C
Dc
IIJs   "B B10B1z/listing/<int:listing_id>c                     [        5          [        R                  U 5      nS nUR                  (       d  Sn[	        SXS9$ ! [
         a    [	        SSS9S4s $ f = f)Nz#This item is currently unavailable!zlisting.html)rm   r;   rL   Listing not foundrM     )r+   r   rQ   r   r   rB   )
listing_idrm   r;   s      r   listing_getr     sb    Gj)''			27		JJ G	-@	A3	FFGs   3A   AAz/listing/<listing_id>/editc                     [        5          [        R                  U 5      nUR
                  nU[        S   :w  a  [	        SSS9S4$ [	        SUS	9$ ! [         a    [	        SSS9S4s $ f = f)
NrL   r   rM   r   r!   "You don't have permission for thatrO   listing-edit.html)rm   )r+   r   rQ   rB   r   r'   r   )r   rm   r   s      r   edit_listing_getr     s     Gj)' 
			WY		-
 


 

 	+W== 	 G	-@	A3	FFGs   A A)(A)c                 z   [        5          [        R                  U 5      nUR
                  nU[        S   :w  a  [	        SSS9S4$ [        R                  S   Ul	        [        R                  S	   Ul
        [        R                  S
   Ul        [        R                  R                  S5      (       a  SUl        OSUl         [        R                  S   Ul        [        R                  R!                  5        H  nUR#                  S5      (       d  M  [%        UR'                  S5      S   5      n[(        R                  U5      n[*        R,                  " [*        R.                  R1                  SSUR.                  5      5        UR                  U:X  a  S Ul        UR3                  5         M     [        R4                  R7                  S5      nU H!  nUR8                  (       d  M  [;        Xq5        M#     UR=                  5         [	        SUSS9$ ! [         a    [	        SSS9S4s $ f = f! [         a     GN_f = f)NrL   r   rM   r   r!   r   rO   r   r   r   r   TFzprimary-imagezdelete-image--staticr   r   r   zChanges saved!)rm   r   )r+   r   rQ   rB   r   r'   r   r   rC   r   r   r   r#   r   r   r   keys
startswithintsplitrq   r]   removerP   r^   delete_instancefilesgetlistr   rt   rn   )r   rm   r   keyimage_idr   r   rs   s           r   edit_listing_postr   2  s    Gj)' 
			WY		-
 	
	 	
 g&||M2LL,LL[!!''$\\/:'
 LLS^^O$$#))C.$%8!!(+599RWW\\(Hejj9:(*#G   
		w	'T	]]]d  	+WFVWWU 	 G	-@	A3	FFG( 	 s#   H H, H)(H),
H:9H:z/loginc                  ,    [        5         [        S5      $ )Nr9   r   r~   r   r   	login_getr   e  s    %%r   c                      [         R                  " S5        [        R                  S   n [        R                  S   n[	        X5      $ )Nr   r<   r5   )timesleepr   rC   rI   )r<   r5   s     r   
login_postr   j  s4    ALL$LL$h!!r   z/logoutc                  B    [         R                  " 5         [        S5      $ )Nr?   )r   rE   r   r~   r   r   logoutr   q  s    r   z/mec                     [         R                  " S5      (       d  [        S5      e[        5          [        R                  [         S   5      n [        R                  R                  SS[        S	9n[        R                  5       R                  [        R                  U :H  [        R                  S
:H  -  5      R!                  5       n["        R                  5       R                  ["        R                  U :H  5      R%                  ["        R&                  R)                  5       5      R+                  US5      n[        SXUS9$ ! [         a    [        SSS9S4s $ f = f)Nr!   Not logged in!rL   r   rM   r   pager   r   typeTr   	user.html)rH   unread_countr   )r   r#   r   r+   r@   rQ   rB   r   r   rG   r   r$   r%   r&   r   r(   countr   r   r   r   paginate)rH   page_nor  r   s       r   user_getr	  v  s    	I%&&I		*	+$ <<FAC8	685*

d
"z'8'8D'@	AB57  	685$	8G##%&8GR	 
 	$T\]]% 	 I	-B	CS	HHIs   E EEc                     [         R                  " S5      (       d  [        S5      e[        5          [        R                  [         S   5      n [        R                  5       R                  [        R                  U :H  [        R                  S:H  -  5      R                  5       n[        R                  R                  SS	[         S
9n["        R                  5       R                  ["        R                  U :H  5      R%                  ["        R&                  R)                  5       5      R+                  US5      n[        R,                  R                  S5      U R.                  :w  aa  [        R1                  [        R.                  [        R,                  S   :H  5      (       a  [        SXSS9S4$ [        R,                  S   U l        [        R,                  R                  S5      U R2                  :w  a  [        R,                  S   U l        [        R,                  R                  S5      U R4                  :w  aa  [        R1                  [        R4                  [        R,                  S   :H  5      (       a  [        SXSS9S4$ [        R,                  S   U l        [        R,                  R                  S5      (       aK  [        R,                  R                  S5      [        R,                  R                  S5      :w  a  [        SXSS9$ [7        [        R,                  S   5      U l        U R;                  5         [        SXUSS9$ ! [         a    [        SSS9S4s $ f = f)Nr!   r   rL   r   rM   r   Tr  r   r  r   r<   r  Username already in use!)rH   r   r;   r   rA   zEmail address already in use!r5   password-confirmPasswords don't match!zInfo updated!)rH   r  r   r   )r   r#   r   r+   r@   rQ   rB   r   r$   r%   r&   r   r(   r  r   rG   r   r   r   r   r   r  rC   r<   get_or_noner   rA   r7   rD   rn   )rH   r  r  r   s       r   	user_postr    sy    	I%&&I		*	+$ 	685*

d
"z'8'8D'@	AB57  <<FAC8	685$	8G##%&8GR	 
 LLZ DMM1	dmmw||J'??@@
+DMg
hjm
mm,,z*$-LLZ DMM1,,z*$-LLW+	djjGLL$99::
+DMl
mor
rr||G$$*LLZ  \\j!W\\%5%56H%II
+DMe
ffw||J78$T\fuvvK 	 I	-B	CS	HHIs   M MMz
/me/deletec                  ,    [        5         [        S5      $ )Nuser-delete.htmlr   r~   r   r   user_delete_getr    s     *++r   c                     [         R                  " S5      (       d  [        S5      e [        R	                  [         S   5      n [         R                  " S5      (       d  [        S5      e[        5         [        R	                  [         S   5      n [        R                  S   nXR                  :w  a  [        SS	S
9S4$ [        R                  5       R                  [        R                  U :H  5      n[        R                  5       R                  [        R                   R#                  U5      5      nU HB  n[$        R&                  " [$        R(                  R+                  SSUR(                  5      5        MD     U R-                  SS9  [         R.                  " 5         [1        S5      $ ! [
         a    [        SSS9S4s $ f = f)Nr!   r   rL   r   rM   r   zconfirm-deleter  zaType your username to confirm you really want to delete your account. Did you spell it correctly?r:   r   r   T)	recursivez/?message=Account deleted!)r   r#   r   r@   rQ   rB   r   r+   r   rC   r<   r   r%   r&   r   rq   rm   in_r]   r   rP   r^   r   rE   r   )rH   confirmationr   r   r   s        r   user_delete_postr    so    	I%&&I		*	+$ 	I%&&wy)*-.MM!	+  6Y  
Z  \_  
_  _NN""7==D#89




%
%l&:&:&>&>x&H
IU))BGGLL8UZZ89  %-..- 	 I	-B	CS	HHIs   F) )GGz	/messagesc                     [         R                  " S5      (       d  [        S5      e[        5         [        R
                  R                  SS[        S9n Sn[        R                  [        [        5      R                  [        5      R                  [        R                  [         S   :H  5      R                  [        R                  R                  R!                  5       5      R#                  X5      n[%        SX US9$ )	Nr!   r   r  r   r  2   zmessages.html)r)   r  pagination_no)r   r#   r   r+   r   rG   r   r$   r%   r
   r^   r&   r'   r   r   r   r   r  r   )r  r  r)   s      r   get_my_messagesr    s     	I%&&<<FAC8	6*g4=5			 2	238J##..33568G# 	 	Yfggr   z/messages/<interlocutor_id>c                 2   [         R                  " S5      (       d  [        S5      e [        R	                  U 5      n[        R                  SS9R                  [        R                  [         S   :H  [        R                  U:H  -  5      R                  5         [        5         [        R                  R                  S	S
[         S9nSn["        R%                  5       R                  ["        R&                  [         S   :H  ["        R(                  U :H  -  ["        R&                  U :H  ["        R(                  [         S   :H  -  -  5      R+                  ["        R,                  5      R/                  X#5      n[        SXAX#S9$ ! [
         a    [        SSS9S4s $ f = f)Nr!   r   rL   z)Not found, this user may no longer exist.rM   r   F)r(   r  r   r  r  zmessage-thread.html)r   r   r  r  )r   r#   r   r@   rQ   rB   r   r$   updater&   r'   r   executer+   r   rG   r   r
   r%   	author_idrecipient_idr   r   r  )interlocutor_idr   r  r  r   s        r   get_message_threadr"    s]    	I%&&_0, 	665*

!3
3
8O8OS_8_	`a
79<<FAC8	685'),,1E1E1XY/)g.B.BgiFX.XY[ HW 8G# 
 	-el  	K  K- 	 _	-X	Y[^	^^_s   E= =FFc           	         [         R                  " S5      (       d  [        S5      e[        5         [        R                  [         S   5      nS n[        R                  R                  S[        S9nU(       a   [        R                  U5      n [        R                  U 5      n[        [        R                  S
   5      S::  a  [        SSS9S4$ [        R                  5          [         R#                  UU[        R                  S
   US9n [$        R                  [$        R&                  U:H  [$        R(                  U:H  -  5      nXVl        SUl        UR/                  5          [$        R                  [$        R&                  U:H  [$        R(                  U:H  -  5      nXWl        SUl        UR/                  5         S S S 5        [0        R2                  S    SUR4                   SWR4                   3n[0        R2                  S    SUR6                   3n	[9        [        R                  S
   5      n
UR6                   SU
 SU 3nSUR6                   SU
 SU SU S3	n[;        U	UR<                  /UUS9n[>        RA                  U5        U(       a  [C        SUR4                   SU 35      $ [C        SUR4                   35      $ ! [         a    [        SSS9S4s $ f = f! [         a    [        SS	S9S4s $ f = f! [         a    [$        R#                  UUSUS9n GNf = f! [         a    [$        R#                  UUSUS9n GNf = f! , (       d  f       GN= f) Nr!   r   r   )r  rL   zNo such listingrM   r   z(Not found, this user may no longer existr   r   zMessage is empty!i  )r   r   r   rm   F)r   r   r(   r   TSITE_URLz
/messages/#	SITE_NAMEz Message from z sent you a message:

z

See it here: z<h2>zN sent you a message:</h2>
	<br />
	<blockquote style='white-space: pre-wrap;'>z-</blockquote>
	<br />
	See it here: <a href=''>z</a>
	subject
recipientsbodyhtmlz?listing_id=)"r   r#   r   r+   r@   rQ   r   rG   r   r   rB   r   lenrC   r   r   r
   rr   r$   r   r   r   r(   rn   r   r   rF   r<   r   EmailMessagerA   emailersendr   )r!  senderrm   r   r   r   sender_threadrecipient_threadmessage_urlr)  escaped_messager   r,  rA   s                 r   post_messager6  !  sB    	I%&&
..+
,ll|#6Fz*7^nn_-) V"	-@	A3	FFiikNN
V	  '>>:#3#3v#=*BYBY]fBf"gh= '= nnj&6&6)&C
H_H_ciHi%jk#* !5 H **Z()FII;a

|Ljj%&nV__4EF',,v./??
3O3DDUVaUbc! "--<,= >#}B{m 4		 

oo	
 	e	Jy||nLE	FF:ill^,--M 
 F
,.?
@#
EEF
 	 ^	-W	XZ]	]]^( 
 $$	 % = 
  ''	 ( 7 ksn   9K K  $(M
AK<%AL#KK K98K9< L M
L  M
# MM
MM


Mz/new-listingc                      [         R                  " S5      (       d  [        S5      e[        S[        R                  [         S   5      S9$ )Nr!   r   listing-new.html)rH   )r   r#   r   r   r@   rQ   r~   r   r   new_listing_getr9  w  s;     	I%&&*	@R1STTr   c            	         [         R                  " S5      (       d  [        S5      e[        [        R
                  S   5      S:  d@  [        [        R
                  S   5      S:  d   [        [        R
                  S   5      S:  a
  [        SSS	9$ [        R                  [        R
                  S   [        R
                  S   [        R
                  S   [        R                  [         S   5      S
9n [        R                  R                  S5      nU H!  nUR                  (       d  M  [        X 5        M#     [        SU R                   S35      $ )Nr!   r   r   r   r   r   r8  z5Please fill (at least) Title, Description & Location.r:   r   r   z	/listing/z/edit?message=Listing created!)r   r#   r   r-  r   rC   r   r   rr   r@   r   r   r   rt   r   rF   )rm   r   rs   s      r   new_listing_postr;    s    	I%&& gll7q gll=!"Q&gll:"	+5l	mm>>
,,w
]+\\*%#$	   
		w	'T	]]]d  	9WZZL(FGHHr   z/signupc                  ,    [        5         [        S5      $ )Nsignup.htmlr   r~   r   r   
signup_getr>    s    &&r   c            	         [        [        R                  S   5      S:  d`  [        [        R                  S   5      S:  d@  [        [        R                  S   5      S:  d   [        [        R                  S   5      S:  a
  [        SSS9$ [        R                  S   [        R                  S   :w  a
  [        SS	S9$ [        R                  [        R                  [        R                  S   :H  5      (       a
  [        SS
S9$ [        R                  [        R                  [        R                  S   :H  5      (       a
  [        SSS9$ [        S5      n [        R                  [        R                  S   [        R                  S   [        R                  R                  S5      [        [        R                  S   5      SU S9n[        R                  S    SUR                   SU  3n[        R                  S    S3nSU 3nS[        R                  S    SU SU S3n[        UUR                  /UUS9n[         R#                  U5        [        S5      $ )Nr<   r   rA   r5   r  r=  zPlease fill all fields!r:   r  r  zEmail already in use!(   r   F)r<   rA   r   rD   rR   r   r$  z/signup/z?k=r&  z - Confirm your email addresszKFollow this link to validate your email address and activate your account:
z
	<h2>Welcome to zH!</h2>
	<p> Click this link to activate your account:
	<br />
	<a href='r'  z</a>
	</p>
	r(  zsignup-success.html)r-  r   rC   r   r@   r  r<   rA   r   rr   r#   r7   r   r   rF   r.  r/  r0  )r   rH   validation_linkr)  r   r,  rA   s          r   signup_postrB    s    gll:!#gll7q gll:!#gll%&'!+	0I	JJLL-? @@	0H	IIT]]gll:&>>??
-1K
LLTZZ7<<#8899	0G	HH#<<
#W<<J'j12	 	 	 jj,-XdggYc.AQRjj%&&CD
VWfVghK() * 
2o. /		 

jj\	
 	e-..r   z/signup/<user_id>c                 ,    [         R                  U 5      n[        R
                  R                  S5      nX!R                  :w  a  [        SSS9S4$ SUl        S Ul        UR                  5         [        S	5      $ ! [         a    [        SSS9S4s $ f = f)
NrL   r   rM   r   kzIncorrect keyrO   Tzuser-verified.html)
r@   rQ   rB   r   r   rG   r#   r   rR   rn   )r!   rH   r   s      r   signup_valdiate_postrE    s    I		 $ ||	_	=s	BB,-- 	 I	-B	CS	HHIs   A: :BB__main__)NrW   ra   r]   ro   r   werkzeugr   flaskr   r   r   r   r   
flask_mailr	   r
   r.  hashlibr   r4   
markupsafer   peeweesecretsr   r   werkzeug.exceptionsr   werkzeug.utilsr   r   r   r   	from_filer   
secret_keyr/  r   r+   r7   rI   rY   template_globalrd   rt   SqliteDatabaser   Modelry   r@   r   rq   r$   r   r   r#   r   r   postr   r   r   r   r   r   r   r	  r  r  r  r  r"  r6  r9  r;  r>  rB  rE  r~   r   r   <module>rV     s   7 6 6  D D  . '   !  2 * Ho 

  ]  3L)
s)
c
$J24	! , ,8 CJJy)NA3FG 	29 	2i ,'9 '2i 24 4N c c  % % '	2 	2 	$%G &G 	%&>  '>" 
&'/X  (/Xb & & (" "   ^  ^8 %-w  -w^ ,  ,
 ,/  /< h  h& 	&'K  (K< 
'(R.  )R.h U  U .I  I4 ' '
 )1/ 1/f 	. ." z	 r   