
    ɢiG:                     D   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	  ej                  e      Zdad ZdedefdZdedefd	Zd-d
ededededededefdZd Zd Zd.defdZd.defdZd Zd ZdedefdZdddddddd d!dd"d#d$d%dd&d'd(d)dd*d+d,d dgZy)/    N)Optional)Fernetc                  <   t         [t        j                  j                  d      } | s8t	        j
                         j                  d      } t        j                  d       | a t	        t        t         t              rt         j                  d            S t               S )NFTP_ENCRYPTION_KEYutf-8u`   FTP_ENCRYPTION_KEY not set — generated ephemeral key. FTP passwords will not survive restarts.)_fernet_keyosenvirongetr   generate_keydecodeloggerwarning
isinstancestrencode)keys    5/sites/domain-asset-master/app/services/ftp_deploy.py_get_fernetr      sq    jjnn12%%'..w7CNN}~K1M+$$W-__S^__    passwordreturnc                 t    t               }|j                  | j                  d            j                  d      S Nr   )r   encryptr   r   )r   fs     r   encrypt_passwordr      s,    A99X__W-.55g>>r   	encryptedc                 t    t               }|j                  | j                  d            j                  d      S r   )r   decryptr   r   )r   r   s     r   decrypt_passwordr!      s.    A99Y%%g./66w??r   hostportusernameprotocol	base_pathc                     	 |dk(  rt        | ||||      S |dv rt        | |||||      S dd| dS # t        $ r}dt        |      dcY d }~S d }~ww xY w)Nsftp)ftpftpsFzUnknown protocol: )successerror)
_test_sftp	_test_ftp	Exceptionr   )r"   r#   r$   r   r%   r&   es          r   test_ftp_connectionr1   $   sq    3vdD(HiHH(T48XyQQ$1CH:/NOO 3 3q6223s"   2 2 2 	AAAAc                 p   dd l }|j                  | |f      }	 |j                  ||       |j                  j	                  |      }	 |j                  |      }dd| dt        |       dd|j                          |j                          S # |j                          w xY w# |j                          w xY w)Nr   r$   r   TConnected. Directory '' contains  items.r+   message)paramiko	Transportconnect
SFTPClientfrom_transportlistdirlenclose)	r"   r#   r$   r   r&   r9   	transportr(   listings	            r   r-   r-   0   s    ""D$<0I	8h?""11)<	ll9-G#2HS^_bcj_k^lls0tuJJL JJLs#   .B# %B -B# B  B# #B5c                    |dk(  rt        j                         }nt        j                         }	 |j                  | |d       |j	                  ||       |dk(  r|j                          |j                  |       |j                         }dd| dt        |       dd|j                          S # |j                          w xY w)	Nr*      timeoutTr4   r5   r6   r7   )
ftplibFTP_TLSFTPr;   loginprot_pcwdnlstr?   quit)r"   r#   r$   r   r%   r&   r)   rB   s           r   r.   r.   ?   s    6nnjjl	D$+		(H%vJJL	((*.DYK{[^_f[gZhho,pq

s   A0B1 1Cfilesc                 <   dd l }|j                  | |f      }d}	t        |      }
	 |j                  ||       |j                  j                  |      }	 t        ||       |j                         D ]  \  }}t        j                  j                  ||      j                  dd      }t        j                  j                  |      }t        ||       t        |t              r&|j                  t!        j"                  |      |       n4|j                  t!        j"                  |j%                  d            |       |	dz  }	|s ||	|
|        	 |j'                          	 |j'                          |	S # |j'                          w xY w# |j'                          w xY w)Nr   r3   \/r      )r9   r:   r?   r;   r<   r=   _sftp_makedirsitemsr	   pathjoinreplacedirnamer   bytesputfoioBytesIOr   r@   )r"   r#   r$   r   remote_pathrO   progress_callbackr9   rA   uploadedtotalr(   relative_pathcontentfull_remote
remote_dirs                   r   deploy_via_sftprf   P   sI   ""D$<0IHJE8h?""11)<	4-*/++- F&w ggll;FNNtUXYWW__[9
tZ0gu-JJrzz'2K@JJrzz'..*ABKPA$%h}EF JJLO JJLs*   .F	 C.E4 E4 F	 4FF	 	Fc           	      B   |dk(  rt        j                         }nt        j                         }d}	t        |      }
	 |j	                  | |d       |j                  ||       |dk(  r|j                          t        ||       |j                         D ]  \  }}t        j                  j                  ||      j                  dd      }t        j                  j                  |      }t        ||       t        |t              r)|j!                  d| t#        j$                  |             n7|j!                  d| t#        j$                  |j'                  d                   |	d	z  }	|s ||	|
|        	 |j)                          |	S # |j)                          w xY w)
Nr*   r      rE   rQ   rR   zSTOR r   rS   )rG   rH   rI   r?   r;   rJ   rK   _ftp_makedirsrU   r	   rV   rW   rX   rY   r   rZ   
storbinaryr\   r]   r   rN   )r"   r#   r$   r   r%   r^   rO   r_   r)   r`   ra   rb   rc   rd   re   s                  r   deploy_via_ftprk   m   sN   6nnjjlHJED$+		(H%vJJLc;'&+kkm 	B"M7'',,{MBJJ4QTUK5J#z*'5){m4bjj6IJ{m4bjjPWAX6YZMH !(E=A	B 	
O 	
s   D/F -F Fc                 4   g }|}|r|dk7  r	 | j                  |       	 t        |      D ]  }	 | j                  |        y # t        $ r3 |j                  |       t        j                  j                  |      }Y nw xY w|se|dk7  r~l# t        $ r Y lw xY w)NrR   )	statFileNotFoundErrorappendr	   rV   rY   reversedmkdirr/   )r(   re   dirs_to_createcurrentds        r   rT   rT      s    NG
gn	/IIg n% 	JJqM ! 	/!!'*ggoog.G	/	 gn  		s"   A B9A>=A>	BBc                     |j                  d      j                  d      }d}|D ]  }|d|z   z  }	 | j                  |        y # t        $ r% 	 | j	                  |       n# t        $ r Y nw xY wY Mw xY w)NrR    )stripsplitrL   r/   mkd)r)   re   partsrs   parts        r   ri   ri      s    S!'',EG 3:	GGG  	  	s5   A	A3A! A3!	A-*A3,A--A32A3domainc                    ddl m}m}m}m}m} ddlm}m}m	}	m
}
m}m}m} ddlm} ddlm}m}m}m}m} |j-                  |      j/                  |j0                  | k(        j3                         }|si S |j-                  |      j/                  |j4                  |j6                  k(        j9                  |j6                  j;                               j3                         }|si S t=        |dd       xs d}i }|j>                  xs i }|}|j@                  xs i }|jB                  }|j-                  |      j/                  |jD                  | k(        j9                  |jF                        jI                         }|jK                  dd      }|jK                  d	g       }|r|tM        |      k  r||   n| d
d}|jK                  dd      } |jK                  dd      }!|jK                  dd      }"|jK                  d|       }#	 |j-                  |      j/                  |j0                  | k(        j3                         }$|$r|j-                  |      j/                  |jN                  |$j6                  k(  |jP                  jS                  g d            jI                         }%|%rA|%d   jT                  }&|&r0tV        jX                  j[                  |&j]                  d            r|&}	  || |||||||r|jd                  nd       }(|(|d<   |jh                  r%	  || |jj                  |jh                  |      }*|*|d<   |D ]7  }+	  ||+j6                  |+jl                        }, || |||+||      }-|-|d|, d <   9 |rtV        jX                  j[                  |j]                  d            rZ	 to        |j]                  d      d#      5 }.tV        jX                  jq                  |      }/|.js                         |d$|/ <   d d d        |jt                  xs g }0|0D ]  }1|1stV        jX                  j[                  |1j]                  d            s5	 to        |1j]                  d      d#      5 }.tV        jX                  jq                  |1      }/|.js                         |d$|/ <   d d d         |jv                  xs i }2 ||2      }3|3D ]  }4|4jK                  d'd
      }5|5stV        jX                  j[                  |5j]                  d            sG	 to        |5j]                  d      d#      5 }.|4jK                  d(tV        jX                  jq                  |5            }6|.js                         |d)|6 <   d d d         g }7	 |j-                  |      j/                  |j0                  | k(        j3                         }$|$r|j-                  |      j/                  |jN                  |$j6                  k(        jI                         }7|7D ]  }4|4jT                  j]                  d      }8tV        jX                  j[                  |8      s>	 to        |8d#      5 }.|4jP                  xs d+}9|.js                         |d,|9 d|4jx                   <   d d d         i }:i };|jz                  xs i }<|<jK                  d/i       }=|=rCt}        |=t~              r2|=}:|:j                         D ],  \  }>}?|?jK                  d0d1      }@|?|;j                  |@i       |><   . |:j                         D ]  \  }>}?	 |?jK                  d2|>      }A|?jK                  d0d1      }B|?jK                  d3d
      }C|Bj                         j                  d4d5      }D|Cr |	C      }E|;jK                  Bi       }F|Fj                         D GHcg c]  \  }G}H|G d |HjK                  d2|G      f }I}G}H || |#| |!|"ABE|I|6
      }J|J || |#| |!ABC|;      }JJ|d7D d|> d <    i }K|j                         D ]E  \  }L}Mt}        |Mt              rtM        M      KL<   %MrtM        Mj                  d9            ndKL<   G d:Kd;<   	  || ||||||7|:|3K|6      }N|N|d;<   tM        |Nj                  d9            |Kd;<   |S # t^        $ r&}'t`        jc                  d|  d|'        Y d }'~'d }'~'ww xY w# t^        $ rl}'t`        jg                  d|  d|'        	  || |||||      }(|(|d<   n1# t^        $ r%})t`        jg                  d|  d|)        Y d })~)nd })~)ww xY wY d }'~'d }'~'ww xY w# t^        $ r&}'t`        jg                  d|  d|'        Y d }'~'d }'~'ww xY w# t^        $ r0}'t`        jg                  d!|+jl                   d"|'        Y d }'~'Wd }'~'ww xY w# 1 sw Y   xY w# t^        $ r#}'t`        jg                  d%|'        Y d }'~'d }'~'ww xY w# 1 sw Y   @xY w# t^        $ r#}'t`        jg                  d&|'        Y d }'~'d }'~'ww xY w# 1 sw Y   xY w# t^        $ r#}'t`        jg                  d*|'        Y d }'~'d }'~'ww xY w# 1 sw Y   xY w# t^        $ r0}'t`        jg                  d-|4jx                   d"|'        Y d }'~'d }'~'ww xY w# t^        $ r&}'t`        jg                  d.|  d|'        Y d }'~'Bd }'~'ww xY wc c}H}Gw # t^        $ r&}'t`        jg                  d8|> d"|'        Y d }'~'d }'~'ww xY w# t^        $ rl}'t`        jg                  d<|  d|'        	  || ||||||7|:|3K
      }N|N|d;<   n.# t^        $ r"})t`        jg                  d=|)        Y d })~)nd })~)ww xY wY d }'~'|S d }'~'ww xY w)>Nr   )PackageDomainAugmentBrandKitBrandKitAsset)generate_standalone_site_htmlgenerate_standalone_sales_htmlrender_markdown generate_standalone_augment_html_augment_sluggenerate_standalone_admin_html_generate_standalone_doc_html)flatten_pack_assets)render_standalone_siterender_standalone_adminrender_standalone_docrender_standalone_augment_hex_to_rgb
style_tierpremiumrecommendedoptionsrv   )nametaglinecolor_primaryz#4F46E5color_secondaryz#7C3AEDcolor_accentz#06B6D4r   )hero_banner	lifestylebackground_texturerR   z%Brand kit hero resolution failed for z: )augmentstiertemplate_typez
index.htmlz!Failed to generate site HTML for )r   zNano fallback also failed for z
sales.htmlz"Failed to generate sales HTML for )all_augmentsr   ztools/z.htmlz%Failed to generate augment page for 'z': rbzimages/zFailed to read hero image: zFailed to read feature image: urlfilenamezimages/graphics/z$Failed to read graphics pack asset: uncategorizedzassets/brand-kit/z Failed to read brand kit asset 'z'Failed to collect brand kit assets for 	documentsr   generaltitlerc    -)r   zdocs/z!Failed to generate doc page for 'r   pendingz
admin.htmlz"Failed to generate admin HTML for zAdmin fallback also failed: )F
app.modelsr~   r   r   r   r   app.mainr   r   r   r   r   r   r   app.services.graphicsr    app.services.standalone_rendererr   r   r   r   r   queryfilterr|   first	domain_ididorder_bydescgetattrbrand	site_copyhero_image_urldomain_name
created_atallr   r?   brand_kit_idclassificationin_	file_pathr	   rV   existslstripr/   r   r   r   r,   sales_letterchosen_nicher   openbasenamereadfeature_imagesgraphics_packr   business_boxr   dictrU   
setdefaultlowerrX   rZ   r   )Or|   
db_sessionr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   dompkgr   rO   r   
brand_datar   r   r   recommended_idxr   chosen_brandprimary	secondaryaccent
brand_namekithero_assetsbk_hero_pathr0   	site_htmle2
sales_htmlaugslugaug_htmlr   img_filenamer   img_urlr   graphics_assetsasset	asset_urlgp_filenamebrand_kit_assets	disk_pathr   business_docsall_docs_by_tierr   raw_docsdkdvr   	doc_titledoc_tierdoc_content	tier_slugrendered_md	same_tierkvtier_nav_linksdoc_htmldeployed_files_manifestfpathrc   
admin_htmlsO                                                                                  r   collect_deploy_filesr      sr   LL  
 :  

6
"
)
)&--6*A
B
H
H
JC	


7
#
*
*7+<+<+F
G
P
PQXQ[Q[Q`Q`Qb
c
i
i
kC	lD1>YJEIIOEJ#I''N(//0C0Cv0MNWWX_XjXjkooqHiiq1Oii	2&G/6?SQX\;Y7?+hn{}_~Lnn_i8G0)<I^^NI6F!!&&1JNx(//60IJPPR$**=9@@**cff4,,001cd ce  *1~77BGGNN<3F3Fs3K$L%1N	J*6<YXfqy  AK  ps  [^  [l  [l  y}  ~	'l 	M7@P@PRURbRbdijJ",E,  T	T 3D0zSVemt~H*2EF4&&'	T "''..)>)>s)CD	<n++C0$7 ;1!ww//?23&&(~./; ''-2N! Crww~~gnnS&9:C'..-t4 ?#%77#3#3G#<L67ffhEGL>23?C %%+M)-8O  IIIeR(		(8(8(=>I)**3/6 G!"'))J8H8H8S"TK>?ffhE,[M:;G	I Nx(//60IJPPR)//>EEmF`F`dgdjdjFjkooq) `!OO2237	77>>),`!)T2 da-2-A-A-T_N[\[a[a[cE$5n5EQu~~FV"WXd	` M##)rLR0HJx. #))+ 	;FB66&),D8:''b1"5	; $))+ 	MFBMFF7B/	66&)4 ffY3$NN,44S#>	"1+">K 0 4 4Xr BIS\SbSbSd%e41a!E{AEE'14E&F%eN%e4
GY!8[.' H
  '#@"J%x>N$ <DEE)AbT78)	M0 !++- \wgu%-0\#E*MTS1H-IZ[#E*	\
 -6L)>,L*i&4	

 )l03J4E4Eg4N0O- LW  N>vhbLMMN  J81#FG	J5flJXacq  }E  FI"+E, 	JLL9&B4HII	JJ  	MLL=fXRsKLL	M  	TLL@3qcRSS	T
; ;  	<LL6qc:;;	<? ?  C=aSABBCG G  ICA3GHHId d % `'GGWWZ[\Z]%^__` N>vhbLMMN, &f  M@CsKLLM(  
>9&A3GH	>7j)S*M!8J
 #-E, 	>LL7t<==	> L
>s   C!a? "#b1 $d) <4e#f$ >6f4f$ g 6gg hAh"h/Cj 2i>4i2i:j Bk!k42k5k> ?	b.b))b.1	d&:d!c*)d!*	d3dd!dd!!d&)	e2ee	f$%fff!f$ $	g-ggg	g  	h)hhh	h	i%iii	i	j!%jj jj 	kj>>kk	k;k66k;>	m3m.#l:9m.:	m%m m. m%%m..m3initzPreparing deploymentz%Loading project files and FTP profile   )r   labeldescriptionest_secondscollectzCollecting filesz(Rendering site HTML and gathering assets   r;   zConnecting to serverz(Establishing connection to remote server   uploadzUploading filesz#Transferring files to remote serverrD   completezDeployment completezAll files uploaded successfully)r(   rR   )N)r	   r\   loggingdatetimerG   rm   typingr   cryptography.fernetr   	getLogger__name__r   r   r   r   r   r!   intr   r1   r-   r.   rf   rk   rT   ri   r   FTP_DEPLOY_STEPS r   r   <module>r     sC   	 	      &			8	$`?s ?s ?
@ @ @
	3c 	3 	3 	3s 	3VY 	3or 	3  ~B 	3" :QU <"@ @T @H 3Dk|}~ 2Cm~  A 6Gq  CD  E0Afwyz!6Ghyz{ r   