HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux mail.btech-izolacje.pl 5.15.0-140-generic #150-Ubuntu SMP Sat Apr 12 06:00:09 UTC 2025 x86_64
User: pewna6876 (1017)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/websiteFunctions/__pycache__/website.cpython-310.pyc
o

217h)��@sddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ej�d�ej
�dd�e��ddlZddlmZddlmZdd	lmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#dd
l$m%Z%ddl&Z&ddl'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-dd
l.m/Z/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7Z7ddl8Z8ddl9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?ddl@mAZAddlBmCZCmDZDddlEmFZFddlGmHZHddlImJZJddlKmLZLddlMmNZNddlOmPZPddlQmQZQddlRZRddlSmTZTddlUZUGdd �d �ZVdS)!�N)�	Databases)�Docker_Sites)�httpProcz/usr/local/CyberCP�DJANGO_SETTINGS_MODULEzCyberCP.settings)�
ACLManager)
�Websites�ChildDomains�GitLogs�	wpplugins�WPSites�	WPStaging�
WPSitesBackup�RemoteBackupConfig�RemoteBackupSchedule�RemoteBackupsites�DockerPackages�PackageAssignment�DockerSites)�virtualHostUtilities)�installUtilities)�HttpResponse�render�redirect)�
Administrator�ACL)�Package)�
mailUtilities)�randint)�ChildDomainManager)�ceil)�AliasManager)�ApplicationInstaller)�hashPassword�randomPassword)�emACL��ProcessUtilities��
PHPManager)�ApacheVhost)�
vhostConfs)�CronUtil�)�StagingSetup)�JsonResponsec@s�eZdZdZdZdZ�dCdd�Z�dDdd�Z�dDd	d
�Z�dDdd�Z	�dEd
d�Z
�dDdd�Z�dDdd�Z�dEdd�Z
�dEdd�Z�dCdd�Z�dDdd�Z�dCdd�Z�dDdd�Z�dDdd �Z�dCd!d"�Z�dCd#d$�Z�dDd%d&�Z�dCd'd(�Z�dCd)d*�Z�dDd+d,�Z�dDd-d.�Z�dDd/d0�Z�dDd1d2�Z�dDd3d4�Z�dDd5d6�Z�dDd7d8�Z�dDd9d:�Z �dCd;d<�Z!�dCd=d>�Z"�dCd?d@�Z#�dCdAdB�Z$�dCdCdD�Z%�dCdEdF�Z&�dCdGdH�Z'�dCdIdJ�Z(�dCdKdL�Z)�dCdMdN�Z*�dCdOdP�Z+�dCdQdR�Z,�dCdSdT�Z-�dCdUdV�Z.�dCdWdX�Z/�dCdYdZ�Z0�dCd[d\�Z1�dCd]d^�Z2�dCd_d`�Z3�dCdadb�Z4�dCdcdd�Z5�dCdedf�Z6�dCdgdh�Z7�dCdidj�Z8�dCdkdl�Z9�dCdmdn�Z:�dCdodp�Z;�dCdqdr�Z<�dCdsdt�Z=�dCdudv�Z>�dCdwdx�Z?�dCdydz�Z@�dCd{d|�ZAd}d~�ZBdd��ZCd�d��ZDd�d��ZEd�d��ZF�dCd�d��ZG�dCd�d��ZH�dCd�d��ZI�dCd�d��ZJ�dCd�d��ZK�dCd�d��ZL�dDd�d��ZM�dDd�d��ZN�dCd�d��ZO�dCd�d��ZP�dCd�d��ZQ�dCd�d��ZR�dCd�d��ZS�dCd�d��ZT�dCd�d��ZU�dCd�d��ZV�dCd�d��ZW�dCd�d��ZX�dCd�d��ZY�dCd�d��ZZ�dCd�d��Z[�dCd�d��Z\�dCd�d��Z]�dCd�d��Z^�dCd�d��Z_�dDd�d��Z`�dCd�d��Za�dCd�d��Zb�dDd�d��Zc�dCd�d„Zd�dDd�dĄZe�dCd�dƄZf�dCd�dȄZg�dCd�dʄZh�dCd�d̄Zi�dDd�d΄Zj�dDd�dЄZk�dCd�d҄Zl�dDd�dԄZm�dCd�dքZn�dCd�d؄Zo�dFd�dڄZpd�d܄Zqd�dބZrd�d�Zsd�d�Zt�dCd�d�Zu�dCd�d�Zv�dCd�d�Zw�dDd�d�Zx�dCd�d�Zy�dDd�d�Zz�dCd�d�Z{�dEd�d�Z|�dCd�d�Z}�dCd�d��Z~�dDd�d��Zd�d��Z��dCd�d��Z��dCd�d��Z��dCd��d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d	�d
�Z��dC�d�d�Z��dC�d
�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��dC�d�d�Z��d�d�Z��dC�d�d�Z��dF�d�d �Z��dC�d!�d"�Z��dC�d#�d$�Z��dC�d%�d&�Z��dD�d'�d(�Z��dC�d)�d*�Z��dE�d+�d,�Z��dE�d-�d.�Z��dD�d/�d0�Z��dC�d1�d2�Z��dC�d3�d4�Z��dC�d5�d6�Z��dC�d7�d8�Z��dC�d9�d:�Z��dE�d;�d<�Z��dC�d=�d>�Z��dE�d?�d@�Z��dC�dA�dB�Z�dS(G�WebsiteManagerr,��NcCs||_||_dS�N)�domain�childDomain)�selfr3r4�r6�./usr/local/CyberCP/websiteFunctions/website.py�__init__6s
zWebsiteManager.__init__cCs�d}dt��d�}ddl}|j|t�|�d�}|��d}d}|dks*t��tjkr,d}t�	|�}	t�
|�}
t�||	�}t�
�}t�d�}
||
||
��|d	�}t|d
|d�}|��S)N�@https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission�all��name�IPr��data�statusr,�
)�packageList�	owernList�phps�
Randam_String�test_domain_dataz#websiteFunctions/createWebsite.html�
createWebsite)r�GetServerIP�requests�post�json�dumpsr&�decideServer�ent�	loadedACL�loadAllUsers�loadPackagesr(�findPHPVersionsr#�
generate_pass�lowerrr)r5�request�userIDr?�urlrI�response�Status�test_domain_status�
currentACL�
adminNames�packagesNamerD�rnpss�Data�procr6r6r7rG:s,�


��zWebsiteManager.createWebsitecCsdd}dt��d�}ddl}|j|t�|�d�}|��d}|dks(t��tjkr�t�	|�}t�
|�}	t�||�}
t|
�dkrAdg}
g}t
jj|d	�}d}
z-ddl}t�|�d
�j�d}|D]}|
dkrfn|d
|vrw|�|d
�|
d}
q^Wngd�}Ytjj|d�}t�d�}d}|
|	|||��|d�}t|d|d�}|��Sddlm}t|d��S)Nr9�
wp-managerr;rr>r@r,�Default��pkz1https://api.wordpress.org/core/version-check/1.7/�offers��current)z5.6z5.5.3z5.5.2��ownerrA)rBrC�
WPVersions�PluginsrErFzwebsiteFunctions/WPCreate.html�createDatabase��reverse�pricing)rrHrIrJrKrLr&rMrNrOrPrQ�lenr�objects�get�loads�text�appendr
�filterr#rSrTrr�django.shortcutsrnr)r5rUrVr?rWrIrXrYr[r\r]�
FinalVersions�userobj�counterrj�versionsrkr^rZr_r`rnr6r6r7�WPCreateXsT�

��


��zWebsiteManager.WPCreatecCsddl}t�|�}tjj|d�}i}t�||�}||d<z|dkr7tjj|d�}	t�|	j	j
||�dkr7|	��WntyJ}
zWYd}
~
nd}
~
wwg}|dD]}|�
|j|j|jdd��qQ|�|�dt|�|�|t|�dd��|��d��d	�}
t|d
|
�}|��S)Nrrc�wpr,T)�id�titlerW�production_status�admin)�user_id�is_admin�wp_sites_count)�wpsiter@�total_sites�
debug_infoz!websiteFunctions/WPsitesList.html)rKrrOrrqrr�GetALLWPObjectsr�checkOwnershiprir3�delete�
BaseExceptionrur~r�FinalURLrLrp�bool�countrr)r5rUrV�DeleteIDrKr[r�r?�wp_sites�WPDelete�msg�sites�site�contextr`r6r6r7�ListWPSites�sF
���
���zWebsiteManager.ListWPSitesc
Csti}t�|�}tjj|d�}tjj|d�}t�|jj||�dkr!nt�	�Sz�d}	dt�
�d�}
ddl}|j|	t
�|
�d�}|�
�d}
t�d	�}|��|d
<|
dksYt��tjkr�||d<d|d<z|j�d
d�}|dkrytjj||d�}|��Wnty�}z
t|�}WYd}~nd}~wwt|d|d�}|��WSddlm}t|d��WSt|d|d�}|��YS)Nrcr,r9rar;rr>r@rArEr�rFr��rdriz websiteFunctions/WPsiteHome.htmlrlrmro)rrOrrqrrrr�rir3�	loadErrorrHrIrJrKrLr#rSrTr&rMrN�GETrr�r��strrrrwrnr)r5rUrV�WPidr�r_r[�WPobjr�rWr?rIrXrYr^�wstagingDeleter��dar`rnr6r6r7�WPHome�sR
�
����
�zWebsiteManager.WPHomec
Csi}t�|�}tjj|d�}t�d�r�tjj|d�|d<t�||d|�dkr(nt��St	�
|dj�}|d|d<z*|d|d<|ddksM|dd	kr[tjj|dj
d�g|d
<nt�||�|d
<Wnd|d<t�||�|d
<Yt|d|d�}|��Sd
dlm}	t|	d��S)Nrcra�	backupobjr,r<�FileName�
BackuptypezDataBase BackupzWebsite Backup�WPsitesz#websiteFunctions/WPRestoreHome.htmlrlrrmro)rrOrrqrr�CheckForPremFeaturer
�CheckIPBackupObjectOwnerr�rKrs�configr�WPSiteIDr�rrrwrnr)
r5rUrV�BackupIDr_r[r�r�r`rnr6r6r7�RestoreHome�s2

��zWebsiteManager.RestoreHomecCsDi}t�|�}tjj|d�}z|dkrtjj|d�}|��WnYt�d�r�t�||�|d<tj�	�}g|d<|D]N}	t
�|	j�}
|	j
dkr\|d�|	j|	j
|
d|
dd��q<|	j
d	kr�|
d
}|dkrz|d�|	j|	j
||
dd��q<|d�|	j|	j
||
dd��q<t|d
|d�}|��Sddlm}
t|
d��S)Nrcrar��
backupconfigs�SFTP�Hostname�Path)r~�Type�HostNamer��S3�Provider�	Backblaze�	S3keynamez(websiteFunctions/RemoteBackupConfig.htmlrlrrmro)rrOrrqrrrr�r�r�r:rKrsr��
configtyperurdrrrwrnr)r5rUrVr�r_r[r��BackupconfigDelete�allcon�i�configrr�r`rnr6r6r7r
sZ
�



�

����z!WebsiteManager.RemoteBackupConfigc
Cs
i}t�|�}tjj|d�}||d<tjj|d�}z|dkr)tjj|d�}	|	��WnYt�d�ryt�	||�|d<tjj
|d�}
g|d<|
D]$}|j}t�
dt�t|���}
|d�|j|j|jj|j|j|
d��qIt|d	|d
�}|��Sddlm}t|d
��S)Nrc�RemoteConfigIDrar�)r�Backupschedulez%Y-%m-%d)r~�Name�RemoteConfiguration�	Retention�	Frequency�LastRunz&websiteFunctions/BackupfileConfig.htmlrlrrmro)rrOrrqrrrrr�r�r�rv�lastrun�time�strftime�	localtime�floatrurdr�r��
fileretention�timeintervelrrrwrnr)r5rUrVr�r�r_r[r��RemoteConfigobj�RemoteBackupConfigDelete�allsecheduler�r�r�r`rnr6r6r7�BackupfileConfig>sB
�

��zWebsiteManager.BackupfileConfigcCs�i}t�|�}tjj|d�}||d<tjj|d�}z|dkr)tjj|d�}	|	��WnYt�d�rrt�	||�|d<tjj
|d�}
g|d<|
D]}ztjj|jd�}|d�
|j|jd��WqIYqIt|d|d	�}
|
��Sd
dlm}t|d��S)
Nrc�RemoteScheduleIDrar�rhr)r~�Titlez)websiteFunctions/AddRemoteBackupSite.htmlrlrrmro)rrOrrqrrrrr�r�r�rvrr�rurdrrrrwrnr)r5rUrVr��DeleteSiteIDr_r[r��RemoteBackupScheduleobj�RemoteBackupsitesDelete�allRemoteBackupsitesr�r�r`rnr6r6r7�AddRemoteBackupsitebs>
�
��z"WebsiteManager.AddRemoteBackupsitecCsi}t|d|d�}|��S)Nz'websiteFunctions/CyberpanelPricing.htmlrG)rr)r5rUrVr_r`r6r6r7�WordpressPricing�szWebsiteManager.WordpressPricingc
Cs�i}t�|�}tjj|d�}d}dt��d�}ddl}	|	j|t�	|�d�}
|
��d}|dks6t
��t
jkr�t
jj|d	��d
�}z/|dkrnt
jj|d�}
t�||
|�dkrn|
j}t�|�}|d}d|}t
�|�|
��Wnty�}zWYd}~nd}~wwg|d
<|D]<}z
tjj|jd�}|j}Wnd}Yz|j}t�|�}|d}|d}Wnd}Y|d
�|j|||d��q�t|d|d�}|��Sddlm}t|d��S)Nrcr9rar;rr>r@r,rh�-idr<zrm -r /home/backup/%s.tar.gz�jobzWebsite Not Foundr��BackupDestinationzBackup type not exists)r~rr�r�z$websiteFunctions/RestoreBackups.htmlrlrmro) rrOrrqrrrHrIrJrKrLr&rMrNr
rv�order_byr�r�rs�executionerr�r�rr�rrur~rrrwrnr)r5rUrVr�r_r[r�rWr?rIrXrY�backobj�DeleteIDobjr��confr��commandr��subr��webr�r�r`rnr6r6r7�RestoreBackups�sj
�

���


��zWebsiteManager.RestoreBackupscCs�|j�d�}t�|�}tjj|d�}tjj|d�}t�|jj	||�dkr%nt�
�Sddlm}|�
|jj�}d|}	d}
dt��d	�}ddl}|j|
t�|�d
�}
|
��d}|dksbt��tjkr�t�d�}d
|	�d�|jjd||jf}t�|�d
|	�d�|jj||jf}t�|�i}|j�d�r�|jdd�}n|j}d||d<d|d<||d<t|d|d�}|��Sddl m!}t"|d��S)Nr~rcr,rr'�/usr/local/lsws/lsphp%s/bin/phpr9rar;r>r@rAzsudo -u %s zr /usr/bin/wp user create autologin %s --role=administrator --user_pass="%s" --path=%s --skip-plugins --skip-themeszautologin@cloudpages.cloudzZ /usr/bin/wp user update autologin --user_pass="%s" --path=%s --skip-plugins --skip-themes�/���z
https://%srW�	autologin�userName�passwordzwebsiteFunctions/AutoLogin.htmlrlrmro)#r�rrrrOrrqrr�rir3r��managePHP.phpManagerr(�getPHPString�phpSelectionrHrIrJrKrLr&rMrNr#rS�externalApp�pathr�r��endswithrrrwrnr)r5rUrVr�r[r�r�r(�php�FinalPHPPathrWr?rIrXrYr�r�r�r`rnr6r6r7�	AutoLogin�sP
�

�

�
�zWebsiteManager.AutoLoginc
Csft�d�r't�|�}tjj|d�}tjj|d�}d|i}t|d|d�}|�	�Sddl
m}	t|	d	��S)
Nrarcrh�Selectedpluginsz(websiteFunctions/WPConfigurePlugins.htmlrlrrmro)
rr�rOrrqrrr
rvrrrwrnr)
r5rUrVr?r[ryr�r_r`rnr6r6r7�ConfigurePlugins
s

�zWebsiteManager.ConfigurePluginscCslddlm}t�d�r0t�|�}t�|�}t�||�}t��}|||d�}	t	|d|	d�}
|
�
�St|d��S)Nrrmra�rBrCrDz$websiteFunctions/WPAddNewPlugin.htmlrlro)rwrnrr�rOrPrQr(rRrrr)r5rUrVr?rnr[r\r]rDr_r`r6r6r7�Addnewplugins


�zWebsiteManager.Addnewpluginc
Cs�z@t�d�r1t�|�}|d}dt|�}ddl}|�|�}|��}d|d�}	t�|	�}
t|
�WSdddd�}	t�|	�}
t|
�WSt	yc}zddt|�d�}	t�|	�}
t|
�WYd}~Sd}~ww)	Nra�
pluginnamezRhttp://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[search]=%srr,)r@�plugnszPremium feature not available.�r@�createWebSiteStatus�
error_message)
rr�rOr�rIrrrKrLrr�)r5rVr?r[r�rWrI�res�r�data_ret�	json_datar�r6r6r7�SearchOnkeyupPlugin*s,

�






��z"WebsiteManager.SearchOnkeyupPluginc
Cs�z0t�|�}tjj|d�}|d}|d}t|t�|�|d�}|��ddi}t�|�}	t	|	�WSt
yS}
zddt|
�d�}t�|�}	t	|	�WYd}
~
Sd}
~
ww)	Nrcr�r�)r�r�rir@r,r)r@�AddNewpluginAjaxr�)rrOrrqrrr
rKrL�saverr�r�)r5rVr?r[ryr�r��addplr�r�r�r6r6r7r�Is 



��zWebsiteManager.AddNewpluginAjaxc
Cs�i}t�|�}tjj|d�}tjj|d�}t�|||�dkrnt��St�	|j
�}||d<||d<|j|d<t|d|d�}	|	�
�S)Nrcr,r��	pluginbID�
BucketNamez"websiteFunctions/WPEidtPlugin.htmlrl)rrOrrqrrr
�CheckIPPluginObjectOwnerr�rKrsr�r�rr)
r5rUrVr�r_r[r��	pluginobj�lmor`r6r6r7�
EidtPluginbs

�zWebsiteManager.EidtPluginc

Cs�zWt�|�}tjj|d�}tjj|d�}|d}|d}tjj||d�}t�|||�dkr.nt��WSg}	t�	|j
�}	|	�|�t�|	�|_
|�
�ddi}
t�|
�}t|�WStyz}zddt|�d�}
t�|
�}t|�WYd}~Sd}~ww)	Nrcr��pluginbBucketIDr�r,r@r�r@�deletesPlginr�)rrOrrqrrr
rr�rKrsr��removerLr�rr�r�)
r5rVr?r[r�ryr�r�obj�abr�r�r�r6r6r7rvs0





��zWebsiteManager.deletesPlginc
CsTz�t�|�}tjj|d�}tjj|d�}|d}|d}tjj||d�}t�|||�dkr.nt��WSt�	|j
�}	z$|	�|�}
td|
�|
dkr\ddt
d�d	�}t�|�}t|�WWSWng}
t�	|j
�}
|
�|�t�|
�|_
|��Yd
di}t�|�}t|�WSty�}zddt
|�d	�}t�|�}t|�WYd}~Sd}~ww)Nrcr�rr�r,zindex.....%srzAlready Save in your Plugin lisrr@)rrOrrqrrr
rr�rKrsr��index�printr�rLrrur�r�)r5rVr?r[r�ryr�r�pObj�listofpluginrr�r�r
r�r6r6r7�
Addplugineidt�sD



�




��zWebsiteManager.AddplugineidtcCs:t�|�}t�||�}t��}t|d||d�d�}|��S)Nz#websiteFunctions/modifyWebsite.html)�websiteListrD�
modifyWebsite)rrO�findAllSitesr(rRrr)r5rUrVr?r[�websitesNamerDr`r6r6r7r�s

�zWebsiteManager.modifyWebsitecC�0t�|�}t�||�}t|dd|id�}|��S)Nz#websiteFunctions/deleteWebsite.htmlr�
deleteWebsite�rrOrrr�r5rUrVr?r[rr`r6r6r7r�s
�zWebsiteManager.deleteWebsitec	CsZt�|�}t�||�}ztjj|d�}|jdkr(t�||�}|dj|_|�	�WnYztjj|d�}t
jj|jd�j}Wn)ztjj|d�}t�||�}|dj|_|�	�|dj}Wnd}YYd}	dt��d�}ddl
}
|
j|	t�|�d�}|��d}d}
|d	ks�t��tjkr�d	}
t�d
�}t|d|t��||
|d��}|��S)
Nrcr�NONEr9r:r;r>r@r,rAz"websiteFunctions/createDomain.html)rrDrErF�defaultSite)rrOrrrqrrr�findWebsiteObjectsr~r�rr3rHrIrJrKrLr&rMrNr#rSrr(rRr)r5rUrVr?r[rr��websites�
defaultDomainrWrIrXrYrZr^r`r6r6r7�CreateNewDomain�sR

���

��zWebsiteManager.CreateNewDomaincCr)Nz$websiteFunctions/suspendWebsite.htmlr�suspendWebsiterrr6r6r7�	siteStates
�zWebsiteManager.siteStatecCs.t�|�}|�||�}t|dd|i�}|��S)Nz"websiteFunctions/listWebsites.html�
pagination)rrO�websitePaginationrr)r5rUrVr?r[r r`r6r6r7�listWebsites
s
�zWebsiteManager.listWebsitesc
CsHt�|�}t�|�}t�||�}t��}|||d�}t|d|�}	|	��S)Nr�z&websiteFunctions/listChildDomains.html)rrOrPrQr(rRrr)
r5rUrVr?r[r\r]rDr_r`r6r6r7�listChildDomainss

�zWebsiteManager.listChildDomainscCs\t�|�}tjj|d�}t�|j�d�||�dkrnt��St|dd|j�d�i�}|�	�S)Nrcr3r,zwebsiteFunctions/listCron.html)
rrOrrqrrr�r�r�rr�r5rUrVr?r[r�r`r6r6r7�listCrons
�zWebsiteManager.listCroncCszt�|�}tjj|d�}t�|j||�dkrnt��St|j�}|�	�\}}d|jd}	t
|d|j||	|d��}
|
��S)Nrcr,�/home/�/public_htmlz!websiteFunctions/domainAlias.html)�masterDomain�aliasesr��noAlias)rrOrrqrrr�r3r�r �fetchAlisForDomainsrr)r5rUrVr?r[r��aliasManagerr*�
finalAlisListr�r`r6r6r7�domainAlias)s

�zWebsiteManager.domainAliasc$Cs��zCt�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr%nt�	�WS|j
}tjj|jd�}|j
}	|j}
t�|
�}d|}d|	||f}
t�|
dd�}t�|�}d|	||f}
t�|
�}d|	||f}
t�|
dd�}|��}d	|	||f}
t�|
dd�}td
d�|�d�D��}|�d
�dkr�d}nd}d|	||f}
t�|
�}d}|�d�D]
}|�d�dkr�d}nq�d|	||f}
t�|
�}t|��d�}d|	||f}
t�|
�}|��d}|�d�dkr�d}nd}|jj}d|��}|�d|��}tj
�|��rd}nd}d|	|j
f}
t�|
�}|�d�dk�r!d}nd}|�d�|||||||||jjd�
} dd| d�}!t�|!�}"t|"�WSt �yh}#zddt!|#�d�}!t�|!�}"t|"�WYd}#~#Sd}#~#ww)Nrcr�r,r��nsudo -u %s %s -d error_reporting=0 /usr/bin/wp core version --skip-plugins --skip-themes --path=%s 2>/dev/nullTzssudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin status litespeed-cache --skip-plugins --skip-themes --path=%s��sudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --status=active --field=name --skip-plugins --skip-themes --path=%s 2>/dev/null�zsudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --field=name --skip-plugins --skip-themes --path=%s 2>/dev/nullcS�g|]}|��r|�qSr6��strip��.0�pr6r6r7�
<listcomp>i�z.WebsiteManager.FetchWPdata.<locals>.<listcomp>�
�Status: Activer�r�asudo -u %s %s -d error_reporting=0 /usr/bin/wp config list --skip-plugins --skip-themes --path=%s�WP_DEBUG	true	constant�lsudo -u %s %s -d error_reporting=0 /usr/bin/wp option get blog_public --skip-plugins --skip-themes --path=%s�msudo -u %s %s -d error_reporting=0 /usr/bin/wp maintenance-mode status --skip-plugins --skip-themes --path=%s�
not activer&r�zsudo -u %s cat %s/wp-config.phpz'DISABLE_WP_CRON', 'true')
�version�lscache�	debugging�searchIndex�maintenanceMode�passwordprotection�wpcron�theme�
activePlugins�
phpVersion�None)r@r��ret_data�r@�
installStatusr�)"rrOrrqrrrr�rir3r�r�r�owner_idr�r�r�r&�outputExecutioner�html�escaper4rp�split�find�int�
splitlines�os�exists�rstriprKrLrr�r�)$r5rVr?r[r��WPManagerIDr�r��Webobj�Vhuser�
PHPVersionr�r�r�rA�lscachee�currentTheme�plugins�pluginCountrB�stdoutrC�items�	stdoutput�searchindex�maintenanceMod�resultrE�	vhostName�vhostPassDir�passwdrG�fbr�r�r�r6r6r7�FetchWPdata?s�


�
�
���
��
�


�


��zWebsiteManager.FetchWPdatac
C�zdt�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr$nt�	�WS|j
}tjj|jd�}|j
}	|j}
t�|
�}d|}d|	||f}
t�|
�}|��d}dd|d�}t�|�}t|�WSty�}zd	d	t|�d
�}t�|�}t|�WYd}~Sd}~ww)Nrcr�r,r�zosudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --skip-plugins --skip-themes --format=json --path=%sr�rK)r@r�r`rrM�rrOrrqrrrr�rir3r�r�rrOr�r�r�r&rPrVrKrLrr�r��r5rVr?r[r�rZr�r�r[r\r]r�r�r�rdr�r�r�r6r6r7�GetCurrentPlugins��8


�



��z WebsiteManager.GetCurrentPluginsc
Crm)Nrcr�r,r�znsudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --skip-plugins --skip-themes --format=json --path=%sr�rK)r@r��themesrrMrnror6r6r7�GetCurrentThemes�rqzWebsiteManager.GetCurrentThemesc
Cs�zIt�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr$nt�	�WSddl
m}|�|j
���d��}dd|d�}	t�|	�}t|�WStyl}
zddt|
�d	�}	t�|	�}t|�WYd}
~
Sd}
~
ww)
Nrcr�r,r��phpUtilitiesr�rK)r@r��wpsitesrM)rrOrrqrrrr�rir3r��plogical.phpUtilitiesru�GetStagingInJson�
wpstaging_setr:r�rKrLrr�r�)r5rVr?r[r�rZr�rur�r�r�r6r6r7�fetchstagings&




��zWebsiteManager.fetchstagingc
Csz�t�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr$nt�	�WSt
�|jj�}d|}|�d|j
�d�}	t�|	|jjddd�\}
}|�d�d	kr\|�d
�}t�|�}nd|d�}
t�|
�}t|�WS|�d
|j
�d�}	t�|	|jjddd�\}
}|�d�d	kr�|�d
�}t�|�}nd|d�}
t�|
�}t|�WS|�d|j
�d�}	t�|	|jjddd�\}
}|�d�d	kr�|�d
�}t�|�}nd|d�}
t�|
�}t|�WSdd|||d�}
t�|
�}t|�WSt�y}zddt|�d�}
t�|
�}t|�WYd}~Sd}~ww)Nrcr�r,r�zZ -d error_reporting=0 /usr/bin/wp config get DB_NAME  --skip-plugins --skip-themes --path=z 2>/dev/nullT�Error:r�r:r�r@r�zZ -d error_reporting=0 /usr/bin/wp config get DB_USER  --skip-plugins --skip-themes --path=z_ -d error_reporting=0 /usr/bin/wp config get table_prefix  --skip-plugins --skip-themes --path=rK)r@r��DataBaseUser�DataBaseName�tableprefixrM)rrOrrqrrrr�rir3r�r(r�r�r�r&rPr�rTrYrQrRrKrLrr�r�)r5rVr?r[r�rZr�r�r�r��	retStatusrdr~r�r�r}rr�r6r6r7�
fetchDatabasesZ













�


��zWebsiteManager.fetchDatabasec
Cs�z�t�|�}tjj|d�}|d}|d}|d}|d}tjj|d�}	t�|	jj||�dkr0nt�	�WSt
�|	jj�}
d|
}|dkr`|�d	�|	j
}t�||	jj�}
|
�d
�dkr_t|
��n;|dkr�|�d
�|	j
}t�||	jj�}
|
�d
�dkrt|
��n|�d�|	j
}t�||	jj�}
|
�d
�dkr�t|
��||	_||	_||	_|	��ddd�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr�rk�Themes�AutomaticUpdatesr,r��Disabledza -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE false --raw --allow-root --path=zSuccess:r�zMinor and Security Updatesz[ -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE minor --allow-root --path=z` -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE true --raw --allow-root --path=rKr|rrM)rrOrrqrrrr�rir3r�r(r�r�r�r&rPr�rTr��AutoUpdates�
PluginUpdates�ThemeUpdatesr�rKrLrr�)r5rVr?r[r�rZrkr�r�r�r�r�r�rgr�r�r�r6r6r7�SaveUpdateConfigXsT

��



��zWebsiteManager.SaveUpdateConfigc
CsFzt�|�}tjj|d�}|d}|d}tjj|d�}tjj|d�}t�|jj||�dkr/nt�	�WSt�|jj||�dkr@nt�	�WSi}	|j
|	d<||	d<||	d<dttdd	��|	d
<t
d|	�}
|
��t�d�ddd
|	d
d�}t�|�}t|�WSty�}
zddt|
�d�}t�|�}t|�WYd}
~
Sd}
~
ww)Nrcr��	StagingIDr,�adminID�
statgingID�/home/cyberpanel/���'�tempStatusPath�DeploytoProductionr0rK�r@rNr�r�rrM�rrOrrqrrrr�rir3r�rdr�rr!�startr��sleeprKrLrr�)r5rVr?r[r�rZr�r��
StagingObj�	extraArgs�
backgroundr�r�r�r6r6r7r��s@





�


��z!WebsiteManager.DeploytoProductionc

Cszgt�|�}tjj|d�}|d}|d}tjj|d�}t�|jj||�dkr(nt�	�WSi}|j
|d<||d<||d<dttdd��|d	<t
d
|�}	|	��t�d�ddd|d	d
�}
t�|
�}t|�WSty�}zddt|�d�}
t�|
�}t|�WYd}~Sd}~ww)Nrcr�r�r,r�r�r�r�r��WPCreateBackupr0rKr�rrMr�)
r5rVr?r[r�rZr�r�r�r�r�r�r�r6r6r7r��s8




�


��zWebsiteManager.WPCreateBackupc

Cszct�|�}tjj|d�}|d}|d}|d}i}|j|d<||d<||d<||d<|d|d<|d|d<d	ttd
d��|d<td
|�}	|	�	�t
�d�ddd|dd�}
t�
|
�}t|�WSty�}zddt|�d�}
t�
|
�}t|�WYd}~Sd}~ww)Nrc�backupid�DesSite�Domainr��	DesSiteIDr��homer�r�r�r��RestoreWPbackupNowr0r,rKr�rrM�rrOrrqrrrdr�rr!r�r�r�rKrLrr�)
r5rVr?r[r�r�r�r�r�r�r�r�r�r6r6r7r��s8



�


��z!WebsiteManager.RestoreWPbackupNowc
CsRz�t�|�}tjj|d�}|d}|dkr-|d}|d}|d}|d}	||||	d�}
n8|d	kre|d
}|dkrR|d}|d
}
|d}|d}|||
||d�}
n|d}|d
}
|d}|||
|d�}
t||t�|
�d�}|��t	�
d�ddd�}t�|�}t|�WSty�}zdt
|�d�}t�|�}t|�WYd}~Sd}~ww)Nrc�typer��Hname�Uname�Passwdr�)r��Username�Passwordr�r�r�r�r��	SecertKey�	AccessKey�EndUrl)r�r�r�r�r�)r�r�r�r�)rir�r�r,rKr|r)rrOrrqrrrrKrLr�r�r�rr�r�)r5rVr?r[r��
ConfigTyper�r�r�r�r�r�r�r�r�r��mkobjr�r�r�r6r6r7�SaveBackupConfigs^
��	�




��zWebsiteManager.SaveBackupConfigc
Csz�t�|�}tjj|d�}|d}|d}|d}|d}|d}	tjj|d�}
t�|
j�}zu|d}|dkr<|d	}
n
|d
krCd}
n|dkrId
}
|d}|d}t	j
��}|jd|
||dd�}t
����}z|j|d�Wn.ty�}z"tj�dt|��dt|�d�}t�|�}t|�WYd}~WWSd}~ww|	|d�}Wnty�}z
d|	i}WYd}~nd}~wwt|
|||t�|�tt���d�}|��ddd�}t�|�}t|�WSty�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrc�
FileRetention�
Backfrequency�ScheduleNamer��
BackupTyper�r�r��Amazonz"https://s3.us-east-1.amazonaws.com�Wasabizhttps://s3.wasabisys.comr�r��s3F)�endpoint_url�aws_access_key_id�aws_secret_access_key�verify)�BucketzCreating Bucket Error: %srr|)r�r)rr�r�r�r�r�r,rK)rrOrrqrrrrKrsr��boto3�session�Session�clientr#rSrT�
create_bucketr��logging�CyberCPLogFileWriter�writeToFiler�rLrrr�r�)r5rVr?r[r�r�r�r�r�r��RemoteBackupConfigobj�Rconfig�provider�EndURlr�r�r�r�rr�r�r�r��svobjr6r6r7�SaveBackupScheduleQsz


�	
��
���
�



��z!WebsiteManager.SaveBackupSchedulec
CsRz�t�|�}tjj|d�}|d}|d}tjj|d�}|j}|jj}	|jj	}
t
�|
�}d|}d|	||f}
t�
|
dddd�\}}|�d�dkrMt|��|�d	�}z	tjj|d
�}Wn	ttd���tjj|d�}t|||jd�}|��dd
d�}t�|�}t|�WSty�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrc�WpsiteIDr�r�zisudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME  --skip-plugins --skip-themes --path=%sr,r{r�r:)�dbNamezDataBase Not Found)rir��databaserKr|r)rrOrrqrrrr�rir�r�r(r�r&rPrTr�rYrr�rrrdr�rKrLr)r5rVr?r[r�r�r��	wpsiteobj�WPpath�VHuser�
PhpVersionr�r�r�rgrb�Finaldbname�DBobj�RemoteScheduleIDobjr�r�r�r�r6r6r7�AddWPsiteforRemoteBackup�sD

�




��z'WebsiteManager.AddWPsiteforRemoteBackupc
Cs�z8t�|�}tjj|d�}|d}|d}|d}tjj|d�}||_||_|��ddd�}	t	�
|	�}
t|
�WStyZ}zdt
|�d�}	t	�
|	�}
t|
�WYd}~Sd}~ww)	Nrc�
ScheduleIDr�r�r,rKr|r)rrOrrqrrrr�r�r�rKrLrr�r�)r5rVr?r[r�r�r�r��scheduleobjr�r�r�r6r6r7�UpdateRemoteschedules�s&




��z$WebsiteManager.UpdateRemoteschedulesc
Cs�z�t�|�}tjj|d�}tj��}tj��}|D]F}d|j}d|}	t	�
|	|j�}
tj
�t	j�r8tj�|
�|
�d�dkr_z	tjj|d�Wqt||j||jdddd�}|��Yqq|D]N}|j
�d	�}
d
|
}	t	�
|	|jj�}
tj
�t	j�r�tj�|
�|
�d�dkr�|
�d	�}z	tjj|d�Wqbt|j|j||jdddd�}|��Yqbqbddd
�}t�|�}t|�WSty�}zdt|�d
�}t�|�}t|�WYd}~Sd}~ww)Nrcz/home/%s/public_html/zcat %swp-config.php�No such file or directoryr�)r��Enabled)rirr�r�r�r�r�r�zcat %s/wp-config.phpr,rKr|r)rrOrrqrrrr:rr3r&rPr�rWr�rX�	debugPathr�r�r�rTrr�rY�masterrKrLrr�r�)r5rVr?r[r��allweb�childdomainr��webpathr�rg�wpobj�chlid�	childPath�
fChildPathr�r�r�r6r6r7�ScanWordpressSite�s^



��	
��



��z WebsiteManager.ScanWordpressSitec
Cs:zyt�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr$nt�	�WS|j
}tjj|jd�}|j
}	|j}
t�|
�}d|}d|	||f}
t�|
dd�}|�d�}d|	�d	|�d
|�d|��}
t�|
�}ddd|d
�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr�r,r�r/Tr:�sudo -u � zQ -d error_reporting=0 /usr/bin/wp core download --force --skip-content --version=z --path=rK�r@rNr�rgrrM)rrOrrqrrrr�rir3r�r�rrOr�r�r�r&rPrYrKrLrr�r�)r5rVr?r[r�rZr�r�r[r\r]r�r�r�rA�outputr�r�r�r6r6r7�
installwpcores<


�




��zWebsiteManager.installwpcorec
Csz_t�|�}tjj|d�}|d}tjj|d�}t�|jj||�dkr$nt�	�WS|j
}tjj|jd�}|j
}	|j}
t�|
�}d|}d|	||f}
t�|
�}ddd|d�}t�|�}t|�WSty�}zddt|�d	�}t�|�}t|�WYd}~Sd}~ww)
Nrcr�r,r�zksudo -u %s %s -d error_reporting=0 /usr/bin/wp core verify-checksums --skip-plugins --skip-themes --path=%srKr�rrM)rrOrrqrrrr�rir3r�r�rrOr�r�r�r&rPrKrLrr�r�)r5rVr?r[r�rZr�r�r[r\r]r�r�r�rgr�r�r�r6r6r7�
dataintegrity@s6


�



��zWebsiteManager.dataintegrityc
C�Lz�t�|�}tjj|d�}|d}|d}|d}tjj|d�}t�|jj||�dkr,nt�	�WS|j
}	tjj|jd�}
|
j
}|
j}t�|�}
d|
}i}|j|d<||d<||d<||d<|	|d	<||d
<td|�}|��t�d�dd
d�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr��plugin�pluginarrayr,r�r�r�r�r\�UpdateWPPluginr0rKr|rrM�rrOrrqrrrr�rir3r�r�rrOr�r�r�rdr!r�r�r�rKrLrr�r��r5rVr?r[r�rZr�r�r�r�r[r\r]r�r�r�r�r�r�r�r6r6r7�
UpdatePluginsg�F









��zWebsiteManager.UpdatePluginsc
Cr�)Nrcr��Theme�
Themearrayr,r�r�r�r�r\�
UpdateWPThemer0rKr|rrMr��r5rVr?r[r�rZr�r�r�r�r[r\r]r�r�r�r�r�r�r�r6r6r7�UpdateThemes�r�zWebsiteManager.UpdateThemesc
Cr�)Nrcr�r�r�r,r�r�r�r�r\�
DeletePluginsr0rKr|rrMr�r�r6r6r7r��r�zWebsiteManager.DeletePluginsc
CsBz}t�|�}tjj|d�}|d}|d}|d}tjj|d�}|j}	tjj|jd�}
t�	|j
j||�dkr7nt��WS|
j
}|
j}t�|�}
d|
}i}|j|d<||d<||d<||d<|	|d	<||d
<td|�}|��ddd
�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr�r�r�r,r�r�r�r�r\�DeleteThemesrKr|rrM)rrOrrqrrrr�rrOr�rir3r�r�r�r�rdr!r�rKrLrr�r�r�r6r6r7r��sD








��zWebsiteManager.DeleteThemesc
Csdz�t�|�}tjj|d�}|d}|d}tjj|d�}t�|jj||�dkr(nt�	�WS|j
}tjj|jd�}	|	j
}
|	j}t�|�}d|}
d|
|
||f}t�|�}|�d�dkrnd	|
|
||f}t�|�}t�d
�nd|
|
||f}t�|�}t�d
�ddd
�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr�r�r,r�zfsudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin status %s --skip-plugins --skip-themes --path=%sr;r�zjsudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin deactivate %s --skip-plugins --skip-themes --path=%sr1zhsudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin activate %s --skip-plugins --skip-themes --path=%srKr|rrM)rrOrrqrrrr�rir3r�r�rrOr�r�r�r&rPrTr�r�rKrLrr�r�)r5rVr?r[r�rZr�r�r�r[r\r]r�r�r�rdr�r�r�r6r6r7�ChangeStatus$sN


�
�
�





��zWebsiteManager.ChangeStatusc
Cs2zut�|�}tjj|d�}|d}|d}tjj|d�}t�|jj||�dkr(nt�	�WS|j
}tjj|jd�}	|	j
}
|	j}t�|�}d|}
i}|j|d<||d<|
|d<||d	<|
|d
<td|�}|��ddd
�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr�rHr,r�r�r�r�r�r\�ChangeStatusThemesrKr|rrM)rrOrrqrrrr�rir3r�r�rrOr�r�r�rdr!r�rKrLrr�r�)r5rVr?r[r�rZr�r�r�r[r\r]r�r�r�r�r�r�r�r6r6r7r�Ws@








��z!WebsiteManager.ChangeStatusThemesc
Cszkt�|�}tjj|d�}i}|j|d<|d|d<|d|d<|d|d<dttdd��|d	<tjj|dd�}t�	|j
j||�d
krFnt��WSt
d|�}|��t�d�d
d
d
|d	d�}t�|�}	t|	�WSty�}
zddt|
�d�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr��
StagingDomain�StagingNamer�r�r�r�r�r,�CreateStagingNowr0rKr�rrM)rrOrrqrrrdr�rrr�rir3r�r!r�r�r�rKrLrr�)r5rVr?r[r�r�r�r�r�r�r�r6r6r7r��s6




�


��zWebsiteManager.CreateStagingNowc
Csddddddd�}|�d�p|�d	�}|sd
dd�}t|�S|�d
�}|s8|D]}||vr7|}|||d<nq'|�||�}|�d�pG|�d�}�z�t�|�}	tjj|d�}
tjj|d�}t�|jj	|
|	�dkrmt�
�WStjj|jd�}|j
}
|j}t�|�}d|}|dkr�d|
�d|�d|�d|j��}�nk|dkr�|r�d|
�d|�d|j��}�nWd|
�d|�d|j��}�nI|dk�r�|jj	}d|��}|�d|��}|�rZdttdd����}t�|�|�d�}|�d�}t�d �}d!|�d"|��}t�|�d#|�d$�}t|d%��
}|�|�Wd�n	1�swYd&|��}t�||jj
�d'|�d|�d�}t�||jj
�d'|�d|j�d�}t�||jj
�d(|��}t�|�n�tj�|��rnd(|��}t�||jj
�|j�d�}tj�|��r�d)|��}t�||jj
�dd*d�}|�d+��r�d
dl}t|�|��WSt|�WS|dk�r�|�r�d|
�d|�d,|j��}nKd|
�d|�d-|j��}n>|dk�r�|�r�d|
�d|�d.|j��}n)d|
�d|�d/|j��}nd
d0d�}|�d+��r�d
dl}t|�|��WSt|�WSt�|�}|� d1�d2k�r-d
|d�}|�d+��r(d
dl}t|�|��WSt|�WSdd*d�}|�d+��rDd
dl}t|�|��WSt|�WSt!�y�}z+d
t|�d�}|�rr|�d+��rrd
dl}t|�|��WYd}~St|�WYd}~Sd}~ww)3Nzpassword-protectionzsearch-indexingrCzmaintenance-moderBrG)�PasswordProtectionrDrCrErB�Wpcron�siteIdr�rzMissing siteId or WPidr|�setting�settingValue�valuercr,r�r�r�z< -d error_reporting=0 /usr/bin/wp option update blog_public z% --skip-plugins --skip-themes --path=ze -d error_reporting=0 /usr/bin/wp config set WP_DEBUG true --raw --skip-plugins --skip-themes --path=zf -d error_reporting=0 /usr/bin/wp config set WP_DEBUG false --raw --skip-plugins --skip-themes --path=r&r�r�r�r�z
/.htpasswd�
/.htaccess�z
htpasswd -cb z admin z:
AuthType Basic
AuthName "Restricted Access"
AuthUserFile z/.htpasswd
Require valid-user
�wz	mkdir -p �mv zrm -rf �rm -f rK�legacy_responsez` -d error_reporting=0 /usr/bin/wp maintenance-mode activate --skip-plugins --skip-themes --path=zb -d error_reporting=0 /usr/bin/wp maintenance-mode deactivate --skip-plugins --skip-themes --path=zf -d error_reporting=0 /usr/bin/wp plugin activate litespeed-cache --skip-plugins --skip-themes --path=zh -d error_reporting=0 /usr/bin/wp plugin deactivate litespeed-cache --skip-plugins --skip-themes --path=zInvalid setting typer{r�)"rrr.rrOrrqrr�rir3r�rrOr�r�r�r�r�rrW�makedirsr#rSr&r��open�writerXrKrrLrPrTr�)r5rVr?�setting_mapr��respr��old_keyr�r[r�r�r[r\r]r�r�r�rhrir��tempPath�htpasswd�htaccessr��htaccess_content�frKrgr�r6r6r7�UpdateWPSettings�s��


�


"






��














��zWebsiteManager.UpdateWPSettingsc

Cs�z�t�|�}tjj|d�}i}||d<|j|d<|d|d<|d|d<|d|d<z|d	|d	<Wnd
|d	<Y|d|d<|d|d<|d|d
<|d|d<|d|d<|d|d<|d|d<|d|d<|d|d<|d|d<|d|d<z|d|d<|ddkr�d|d<WnYdttdd��|d<td|�}|�	�t
�d �d!d!d"|dd#�}t�
|�}t|�WSty�}	zd$d$t|	�d%�}t�
|�}t|�WYd}	~	Sd}	~	ww)&Nrcr[r�r3�
domainName�	WPVersionr�	blogTitle�pluginbucketz-1�	adminUser�PasswordByPass�
adminPassword�Email�
adminEmailr��updatesrkr��websiteOwner�packager��
apacheBackendr���1r�r�r�r��wordpressInstallNewr0r,rKr�rrMr��
r5rVr?r[r�r�r�r�r�r�r6r6r7�submitWorpressCreation/s\


�

�


��z%WebsiteManager.submitWorpressCreationc
Cs��z�t�|�}|d}|d}|d}|d}|d��}|d�d�dkr^d}	d	t��|dd
�}
ddl}|j|	t�|
�d�}|��d
}
|
dkr^dd|��dd�}t�|�}t	|�WSt
jj|d�}t
jj|d�}t�
|d�dkr{t�dd�WSt�|||�dkr�t�dd�WS|ddkr�t�|�dkr�dddd�}t�|�}t	|�WSt�|�s�dddd�}t�|�}t	|�WSt�|�r�|�d�dkr�dddd�}t�|�}t	|�WSz|d}d}Wnd�t�d|��dd�ttdd ��}Yzd}	tjj|d"�}d#|jt|�f}|d!}q�Yd$ttdd ��}zt|d%�}Wnd&}Yzt|d'�}Wnd(}Yddl}d}d)tjd*}|d+|d,|d-|d.|d/td!�d0td!�d1t|d2�d3|d4|d5|d6|d7|}t�|�t �!d8�d!d!d9||d:�}t�|�}t	|�WSt"�y�}zddt|�d�}t�|�}t	|�WYd}~Sd}~ww);Nrrr�rr�cyberpanel.websiter��>https://platform.cyberpersons.com/CyberpanelAdOns/CreateDomain�test-domain�r<r=r3rr>r@r�rMrc�r�rGr�r��Blacklisted domain.r��Invalid domain.z--zInvalid email.�HA�nobodyr�	[a-zA-Z]+�r�r�r,)r��%s%sr�r�0�
mailDomainr �/usr/local/CyberCP/bin/python �!/plogical/virtualHostUtilities.pyz% createVirtualHost --virtualHostName � --administratorEmail � --phpVersion 'z' --virtualHostUser � --ssl �
 --dkimCheck � --openBasedir �openBasedirz --websiteOwner "z
" --package "z" --tempStatusPath �
 --apache z --mailDomain %sr0rK)r@r�r�r��	LinuxUser)#rrOrTrTrHrIrJrKrLrrrqrr�currentContextPermission�
loadErrorJson�checkOwnerProtection�CheckDomainBlackList�
validatorsr3�email�join�re�findallr�rrr��pwdr�
cyberPanelr&�popenExecutionerr�r�r�)r5rVr?r[r3rr��packageNamerrW�domain_datarIrX�
domain_statusr�r��
loggedUser�newOwnerr+r�rz�tWebr�rr1rE�execPathr�r6r6r7�submitWebsiteCreationas�
�








*�
�����������
�����������

�


��z$WebsiteManager.submitWebsiteCreationc
Cs�zct�|�}tjj|d�}z|d}Wnd}Y|d}|d}|dkr0|d}|d}	ntj|d}
tj�	|
�rAd	|d
<t
jj|d�j}dtt
d
d��}t�|�sgdddd�}t�|�}
t|
�WS|d�d�dkr�d}dt��|dd�}ddl}|j|t�|�d�}|��d}|dkr�dd|��dd�}t�|�}
t|
�WSt�|||�d	kr�nt�dd�WS|d�d�dkr�t�dd�WS|dd	kr�d	|d<|dkr�t|	�dkr�|	�d�}	d|d|	}	nd|d|}	nd|�d �}	zt|d
�}Wnd!}Yd"tjd#}|d$|d%|d&|d'td	�d(td	�d)t|d�d*|	d+|jd,|d-|d.t|���}t�|�t �!d/�d	d	d0|d1�}t�|�}
t|
�WSt"�y�}zddt|�d�}t�|�}
t|
�WYd}~Sd}~ww)2Nrc�aliasrr(rr�r��.confr,r�r3r�r�r�r*r�r$r�r%r&r'r>r@r�rMr��..r�r9r�r&r'r0r2r3z createDomain --masterDomain � --virtualHostName r5z' --ssl r7r8z --path � --websiteOwner � --tempStatusPath r:� --aliasDomain r0rK)r@r�r�r�)#rrOrrqrrr)�configBasePathrWr�rXrr�r�rr@r3rKrLrrTrHrIrJr�r=rp�lstriprrFr�r&rGr�r�r�)r5rVr?r[r�rPr(r3r�r��
apachePathr�r�r�rWrIrIrXrJrrNr�r6r6r7�submitDomainCreation�s�




�


�������
����������

�


��z#WebsiteManager.submitDomainCreationc
Cs�zFt�|�}tjj|d�}|d}z|d}Wnd}Yt�|||�dkr(nt�dd�WSt|�}|�|�}t	�
ddd|d��}	t|	�WStyi}
zddt
|
�d	�}t	�
|�}	t|	�WYd}
~
Sd}
~
ww)
Nrcr(rPrr,�fetchStatusrK)r@r\r�r?�r@r\r�)rrOrrqrrr�r=r�findChildDomainsJsonrKrLrr�r�)r5rVr?r[r�r(rP�	cdManagerr��
final_jsonr��	final_dicr6r6r7�fetchDomains0	s*



��zWebsiteManager.fetchDomainsc
Cs�zHt�|�}z|�|||d�}Wnty0}zi}d|d<|�||�WYd}~WSd}~ww|�||�}ddd||d�}t�|�}	t|	�WStyk}zddt	|�d�}
t�|
�}t|�WYd}~Sd}~ww)N�patternAddedr,�pagerK�r@�listWebSiteStatusr�r?r r�r@rfr�)
rrO�searchWebsitesJsonr��getFurtherAccountsr!rKrLrr�)r5rVr?r[r�r��tempDatar rar`�dicr6r6r7�searchWebsitesL	s,
���


��zWebsiteManager.searchWebsitesc

Cs�z9t�|�}t�||�}g}|D]}|jj|dd�D]}|�|�qq|�|�}ddd|d�}	t�|	�}
t	|
�WSt
y\}zddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrc)�domain__istartswithr,rK)r@rfr�r?rrg)rrOr�childdomains_setrvru�findChildsListJsonrKrLrr�r�)
r5rVr?r[r�childDomainsr��childr�rar`r�rkr6r6r7�searchChilds`	s$
�



��zWebsiteManager.searchChildsc
Cs�z*t�|�}t|d�}|�|||�}|�||�}ddd||d�}t�|�}t|�WStyM}	zddt	|	�d�}
t�|
�}t|�WYd}	~	Sd}	~	ww)Nrdr,rKrerrg)
rrOrU�findWebsitesJsonr!rKrLrr�r�)r5rVr?r[�
pageNumberr�r rar`r�rkr6r6r7riu	s 
�


��z!WebsiteManager.getFurtherAccountsc
CsNz�t�|�}t|d�}t|d�}tj�tj�rtj	�
d�|�||�\}}tj�tj�r4tj	�
d�t�||�}tj�tj�rGtj	�
d�|�
t|�|�}	tj�tj�r\tj	�
d�|�|||��}
tj�tj�rrtj	�
d�ddd	|
|	d
�}t�|�}t|�WSty�}
zddt|
�d�}t�|�}
t|
�WYd}
~
Sd}
~
ww)
Nrd�
recordsToShowzFetch sites step 1..zFetch sites step 2..zFetch sites step 3..zFetch sites step 4..zFetch sites step 5..r,rKrerrg)rrOrUrWr�rXr&r�r�r�r��recordsPointerr�
getPaginationrp�findWebsitesListJsonrKrLrr�r�)r5rVr?r[rtru�
endPageNumber�finalPageNumberrr r�rar`r�rkr6r6r7�fetchWebsitesList�	s:
�


��z WebsiteManager.fetchWebsitesListc
Cszbt�|�}t|d�}t|d�}|�||�\}}t�||�}g}	|D]}
|
jjdd�D]}|jd|
j��kr9q-|	�|�q-q$|�	t
|	�|�}|�|	||��}
ddd|
|d�}t�
|�}t|�WSty�}zddt|�d	�}t�
|�}
t|
�WYd}~Sd}~ww)
Nrdrur��alaiszmail.r,rKrerg)rrOrUrvrrnrvr3rurwrprorKrLrr�r�)r5rVr?r[rtruryrzrrpr�rqr r�rar`r�rkr6r6r7�fetchChildDomainsMain�	s4
��


��z$WebsiteManager.fetchChildDomainsMainc
Cszd}t|�}|��}|�dd�d}Wnty2}ztj�dt|��d}WYd}~nd}~wwg}|D]G}g}	ztj	j
|d�}	dd	�|	D�}	WnYt�|�\}
}}}
d
t|
�}|j
dkrfdnd}|�|j|j|j|||jj|jj|	|d
�	�q7t�|�S)N�/etc/cyberpanel/machineIPr:r,r�!Failed to read machine IP, error:�
192.168.100.1rhc	S�Bg|]}|j|j|jt|d�r|jndt|d�r|jndd��qS�rA�UnknownrJ)r~rrWrArJ�r~rr��hasattrrArJ�r6r}r6r6r7r8�	��
�z7WebsiteManager.findWebsitesListJson.<locals>.<listcomp>�%sMB�Active�	Suspended)	r3rrJ�state�	ipAddressrr�r��diskUsed)r�readrSr�r�r�r�r�rrqrvr�	FindStatsr�rur3rr�rrHr�r�rKrL)r5r�ipFiler�ipDatar�r�r��websiter��	DiskUsage�DiskUsagePercentage�bwInMB�bwUsager�r�r6r6r7rx�	sF��
�
�
z#WebsiteManager.findWebsitesListJsoncCsfd}d}zd}t|�}|��}|�dd�d}Wnty6}ztj�dt|��d}WYd}~nd}~wwddlm	}	|D]m}
t
jj|
j
jd	�}d
|j�d�}z|	�|�}
Wnd}
Y|
jdkrgd
}nd}tjj|j
d�}|
j|j|j||j
j|jj|t|
j�t|
j�t|
j�t|
j�|
d�
}|dkr�|t�|�}d}q?|dt�|�}q?|d}|S)N�[rrr:r,r�r�rtrc�/usr/local/lsws/conf/vhosts/�/vhost.conf�PHP 8.1r�r���user)
r~r3rr�r�rr��CPU�RamrJ�,�])rr�rSr�r�r�r�r�rwrurrqrrr�rdr3�,WrapGetPHPVersionFromFileToGetVersionWithPHPr�rrr�rr�rU�	CPUsMySQL�CPUsSite�
MemorySite�MemoryMySQLrKrL)r5�
Dockersiter��checkerr�rr�r�r�rurcr��vhFile�PHPVersionActualr��dpkgrkr6r6r7�findDockersitesListJson�	sD��
&�z&WebsiteManager.findDockersitesListJsonc
Cs�d}d}zd}t|�}|��}|�dd�d}Wnty6}ztj�dt|��d}WYd}~nd}~ww|D]/}	|	j|	j	j|	j	j
||	j	jj|	j	j
j|	jd�}
|dkr_|t�|
�}d}q9|d	t�|
�}q9|d
}|S)Nr�rrr:r,r�r�)r3r(rr�r�rr�r�r�)rr�rSr�r�r�r�r�r3r�rr�r�rrHr�rKrL)r5�childsr�r�r�rr�r�r�rcrkr6r6r7ro&
s0���z!WebsiteManager.findChildsListJsoncCs|||}||}||fSr2r6)r5rd�toShowrzryr6r6r7rvE
szWebsiteManager.recordsPointercCslt|�t|�}g}d}|dkrd}|�|�|St|�}t|�d}td|�D]}|�|�|d}q(|S)Nr,��?)r�rurrU�range)r5�recordsr��pagesr rz�
finalPagesr�r6r6r7rwJ
s
	�

zWebsiteManager.getPaginationc
Cs^z�|d�d�dkr$d}dt��|dd�}ddl}|j|t�|�d�}t�|�}t�|d	�dkr8t�	d
d�WS|d}t
jj|d�}	t�
||	|�dkrMnt�	d
d�WSd
tjd}
|
d|}
t�|
�zddlm}|jj|d���WnYdddd�}t�|�}
t|
�WSty�}zddt|�d�}t�|�}
t|
�WYd}~Sd}~ww)N�websiteNamer$r��>https://platform.cyberpersons.com/CyberpanelAdOns/DeleteDomainr&r'rr>r�websiteDeleteStatusrcr,r2r3z3 deleteVirtualHostConfigurations --virtualHostName )�GDriveSitesrRrK�r@r�r�)rTrrHrIrJrKrLrOr<r=rrqrrr�rrFr&rG�websiteFunctions.modelsr�rvr�rr�r�)r5rVr?rWrIrIrXr[r�r�rNr�r�r�r�r6r6r7�submitWebsiteDeletion]
sD�




��z$WebsiteManager.submitWebsiteDeletionc
Cs>z{|d�d�dkr$d}dt��|dd�}ddl}|j|t�|�d�}t�|�}tj	j
|d	�}|d}	zt|d
�}
Wnd}
Yt�|	||�dkrMnt�
dd�WSd
tjd}|d|	dt|
�}t�|�dddd�}t�|�}
t|
�WSty�}zddt|�d�}t�|�}
t|
�WYd}~Sd}~ww)Nr�r$r�r�r&r'rr>rc�
DeleteDocRootr,r�r2r3z  deleteDomain --virtualHostName z --DeleteDocRoot %srKr�)rTrrHrIrJrKrLrOrrqrrrUr�r=rrFr�r&rPrr�)r5rVr?rWrIrIrXr[r�r�r�rNr�r�r�r6r6r7�submitDomainDeletion�
sB�
�



��z#WebsiteManager.submitDomainDeletionc
Cs
z�t�|�}t�|d�dkrt�dd�WS|d}|d}tjj|d�}tjj|d�}t�|||�dkr5nt�dd�WS|d	krt	j
d
|}d|d|d
}	t�|	�|j
��}
|
D]}t	j
d
|j}d|d|d
}	t�|	�q]t��d|_nPt	j
d
|}d|d
d|}	t�|	�d|}	t�|	�|j
��}
|
D]"}t	j
d
|j}d|d
d|}	t�|	�d|}	t�|	�q�t��d|_|��ddd�}t�|�}
t|
�WSt�y}zdt|�d�}t�|�}
t|
�WYd}~Sd}~ww)Nrr�
websiteStatusr�r�rRrcr,�Suspend�
/conf/vhosts/rr�z
-suspendedzchown -R lsadm:lsadm rK)r�r�)rrOr<r=rrqrrrr�r�Server_rootr&rGrnr:r3r�r�reStartLiteSpeedSocketr�r�rKrLrr�r�)r5rVr?r[r�r�r�r��confPathr�rprcr�r�r�r6r6r7�submitWebsiteStatus�
s\










��z"WebsiteManager.submitWebsiteStatusc
Cs�z�t�|�}t�|d�dkrt�dd�WStjj|d�}t�|d||�dkr(nt�dd�WSt�||�}t�	|�}d}d}|D]}	d	|	i}
|dkrT|t
�|
�}d}q@|d
t
�|
�}q@|d}d}d}|D]}	d|	i}
|dkr||t
�|
�}d}qh|d
t
�|
�}qh|d}|d}tjj|d
�}
|
j
}|
jj}|
jj}ddd|||||d�}t
�|�}t|�WSty�}zddt|�d�}
t
�|
�}t|�WYd}~Sd}~ww)Nrr�modifyStatusrc�websiteToBeModifiedr,r�r��packr�r�r\rRrK)r@r�r�r�packages�current_packr\�currentAdmin)r@r�r�)rrOr<r=rrqrrr�rQrPrKrLrrrrHr�r�rr�r�)r5rVr?r[r��packs�adminsr�r�rcrk�
admin_datar��	modifyWebrA�currentPackrir�r`r�r6r6r7�submitWebsiteModify�
sZ

�


��z"WebsiteManager.submitWebsiteModifyc
CsFz�t�|�}t�|d�dkrt�dd�WSt�||�}t�|�}d}d}|D]}d|i}	|dkr:|t�|	�}d}q&|dt�|	�}q&|d}d}
d}|D]}d	|i}	|dkrb|
t�|	�}
d}qN|
dt�|	�}
qN|
d}
dd
||
d�}t�|�}t|�WSt	y�}
zdt
|
�d�}	t�|	�}t|�WYd}
~
Sd}
~
ww)
NrGrr�r�r�r,r�r�r\rK)r@r�r�r\r|)rrOr<r=rQrPrKrLrr�r�)r5rVr?r[r�r�r�r�rcrkr�r�r`r�r6r6r7�fetchWebsiteDataJSON?sF

�


��z#WebsiteManager.fetchWebsiteDataJSONc
Cs�z�|d}|d}|d}|d}|d}t�|�}t�|d�dkr)t�dd�WStjj|d	�}	t�||	|�d
kr:nt�dd�WStjj|d�}
t�||	|
�d
krRnt�dd�WSt	j
d
|}|d}dt	jd}
|
d|d|}
t�
|
�tjj|d�}
tjj|d�}tjj|d�}||_||_||_|
|_|��d}t�|�d
d
dd�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr3�
packForWebrArJr�rr�
saveStatusrcr,r�r(r�r�r2r3� changePHP --phpVersion '�	' --path rR)rHz^/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py UpdateDiskUsageForcerK�r@r�r�)rrOr<r=rrqrrr��checkUserOwnerShiprr�rFr&rGrrrrr�r�r�rPrKrLrr�r�)r5rVr?r3rrArJ�newUserr[r�rLr��completePathToConfigFilerNr��webpackr�r�r�r�r6r6r7�saveWebsiteChangesssR





��z!WebsiteManager.saveWebsiteChangesc?
Cs4tjj|jd����r�t�|�}tjj|jd�}tjj|d�}t�	|j||�dkr*nt�
�Si}ddlm}t
�|j�}	|	|d<|jj|d<|j����|d<|j����|d	<|jj|d
<|j|d<t�|�\}
}}}
|jj|d<||d
<|
|d<|dkr�d}||d<|
|d<|jj|d<t��|d<ddl}d}|j�|�r�d|d<nd|d<zhddl}ddl m }d|j}|j!�"|j!j#t$|d��%��}|�&��'d�}|�(|d�}|�)�}||}d|d<t*|j+�|d<|�,��-�dd�'d�|d<|ddk�rd |j|d<nd!|j|df|d<Wnt.�y0}zd|d<t/j0�1t*|��WYd}~nd}~wwd"}|j�|��r?d|d#<nd|d#<d$}d%t�2�d&�}ddl3}ddl4}z|j5||�6|�d'�}|�4��d(d�}Wnt7�ytd}Ynwt8|dk�p�|�9�|j:k�|d)<d|j}d*} d+}!zNddl}t$|d��}"|"�%�}#Wd�n	1�s�wY|j!�"|j!j#|#�}$d}%|$�,��-�D]\}&}'|&�'�d,k�r�|'�'�}%n�q�|%dk�r�d-} nd*} Wnt7�y�d-} Ynwt8| �|d.<|!|d/<dd0l;m0}(d*})z!|�<��=d1�d}*z	t>�?|*�d-})Wnt@�yd*})YnwWnt7�y;}+zd*})|(�1d2t*|+����WYd}+~+nd}+~+wwt8|)�|d3<ddlA},d4}-dd0l;m0}(z)|�Bd5|-���}.d6|.v�rv|,�Cd7�}/d8|/�d9|-�d:�}0|�B|0�d;}1|�B|1�Wnt7�y�|(�Dd<|+���Ynwdd0l;m0}(z!d=}2d>}3|�Bd?|2�d@��}4dA|4v�r�|�BdB|2���|�BdC�Wnt7�y�}+z|(�DdD|+���WYd}+~+nd}+~+wwz�|�BdE�|�BdF�|�BdG�dH}5dI}6|j�|5��rdJ|6dK�}7ddLlEmF}8|8�}9|9�G|7�dM|6dK�}7|9�G|7�n`ddNlHmI}:ddOlJmK};z|;jjdPdQ�}<|:�LdR|<jMdS�|6|<_M|<�N�|:�OdR|6dS�Wn4z|;dP|6dRdT�}=|=�N�|:�OdR|6dS�Wnt.�yd}zt/j0�1t*|��WYd}~nd}~wwYWnt7�y�}+z|(�DdU|+���WYd}+~+nd}+~+wwtP|dV|�}>|>�Q�StP|dVddWdX��}>|>�Q�S)YNrRrcr,rr%�marketingStatus�ftpTotal�ftpUsed�
databasesUsed�databasesTotalr3�bwInMBTotalr�r��d�	diskUsage�diskInMB�
diskInMBTotalrD�/home/cyberpanel/postfixrA��datetime�&/etc/letsencrypt/live/%s/fullchain.pemr��ascii�
%Y%m%d%H%M%SZ�viewSSL�days�utf-8�	authority�Denial�%s has SELF-SIGNED SSL.�%s has SSL from %s.�/home/cyberpanel/pureftpd�ftpr9r:r;r>r@�
has_addonsF�/manageSSL/sslForHostName�OT�is_selfsigned_ssl�ssl_issue_link�r��:�!Error detecting accessed_via_ip: �accessed_via_ip�(/usr/local/CyberCP/fastapi_ssh_server.py�cat �REPLACE_ME_WITH_INSTALLER� �Ased -i 's|JWT_SECRET = "REPLACE_ME_WITH_INSTALLER"|JWT_SECRET = "�"|' '�'�$systemctl restart fastapi_ssh_server�Failed to update JWT secret: �./etc/systemd/system/fastapi_ssh_server.service�fastapi_ssh_server.service�test -f � && echo exists || echo missing�missing�1cp /usr/local/CyberCP/fastapi_ssh_server.service �systemctl daemon-reload�5Failed to copy or reload fastapi_ssh_server.service: �.systemctl is-active --quiet fastapi_ssh_server�)systemctl enable --now fastapi_ssh_server�"systemctl start fastapi_ssh_server�/etc/csf�8888�TCP_IN��protocol�ports��FirewallManager�TCP_OUT��FirewallUtilities��
FirewallRules�WebTerminalPort�r<�tcp�	0.0.0.0/0�r<�port�proto�0Failed to ensure fastapi_ssh_server is running: zwebsiteFunctions/website.htmlzThis domain does not exists.��errorr3)Rrrqrvr3rXrrOrrrr�r��plogical.processUtilitiesr&r$�checkIfEMEnabledr�r�ftpAccounts�	users_setr:r��
databases_set�	dataBasesrr��	bandwidth�	diskSpacer(rRrWr��OpenSSLr��crypto�load_certificate�FILETYPE_PEMrr��get_notAfter�decode�strptime�nowr�r��
get_issuer�get_componentsr�r�r�r�rHrIrKrJrL�	Exceptionr�rMrN�plogical.CyberCPLogFileWriter�get_hostrS�	ipaddress�
ip_address�
ValueError�secretsrP�
token_urlsafe�writeLog�firewall.firewallManagerr�modifyPorts�plogical.firewallUtilitiesr�firewall.modelsr�
deleteRuler#r��addRulerr)?r5rUrVr?r[r�r�r_r&r�r�r�r�r�rW�servicePathr0r��filePath�x509�
expireData�	finalDater7�diffr�rW�
addon_datarIrKrXrY�	cert_path�
is_selfsignedr�r�pem_data�cert�
issuer_org�k�vr�r��host�er@�fastapi_file�content�
new_secret�sed_cmdr��service_path�local_service_path�
check_service�csfPath�sshPort�dataInr�firewallManagerrr�updateFW�newFireWallRuler`r6r6r7�loadDomainHome�sl



����
�� 

��
��
�� ��



��

���





������zWebsiteManager.loadDomainHomec
Cs�tjj|jd����r=t�|�}tjj|d�}t�	|j
||�dkr"nt��Stjj|j
d�}i}|j
j|d<|j����|d<|j����|d<|j
j|d<|j
|d<|j|d	<t�|�\}}	}
}|j
j|d
<|
|d<||d<|	d
krud
}	|	|d<||d<|j
j|d<t��|d<d}tj�|�r�d|d<nd|d<d}tj�|�r�d|d<nd|d<zhddl}
ddlm}d|j}|
j�|
jj t!|d��"��}|�#��$d�}|�%|d�}|�&�}||}d|d<t'|j(�|d<|�)��*�dd�$d�|d<|dd k�rd!|j|d<nd"|j|df|d<Wnt+�y2}zd|d<t,j-�.t'|��WYd}~nd}~wwt/|d#|�}|�0�St/|d#dd$d%��}|�0�S)&NrRrcr,r�r�r�r�r3r4r�r�r�r�r�r�r�rDr�rArr�r�r�r�r�r�r�r�r�r�r�r�r�r�z!websiteFunctions/launchChild.htmlz!This child domain does not existsr&)1rrqrvr4rXrrOrrrr�r3r�rrr*r+r:r�r,r-rr�r.r/r(rRrWr�r0r�r1r2r3rr�r4r5r6r7r�r�r8r9r�r�r�r�rr)r5rUrVr?r[r�r�r_r�r�r�r�rIr0r�rJrKrLrMr7rNr�r`r6r6r7�launchChild�sz





�����zWebsiteManager.launchChildcCs�t�|�}tjj|d�}|d}|d|_|d}t�|j||�dkr$nt�dd�S|dkr;d|jd	|jd
}nd|jd	|jd}d|}t�	|�}	|	�
d
�dkrdt�dddd��}
t
|
�Stjj|jd�}t�|||j�}|�
d�dkr�t�ddd|d��}
t
|
�S|�d�}d}
d}t|�D]S}t|�dkr�|�d�}|d�d�}|d�d�}|d�d��d�}|d�d�}|d�dd�}|||||d�}|dkr�|
t�|�}
d}q�|
d t�|�}
q�|
d}
t�ddd!|
d"��}
t
|
�S)#Nrc�logType�virtualHostrdr,�	logstatusrr&�/logs/z.access_log�
.error_log�	ls -la %s�->r��Symlink attack.�r@rjr�rR�1,Nonez?Not able to fetch logs, see CyberPanel main log file, Error: %sr:r�rAr�r.�"r1r���	r)r3r�r��resource�sizer�rK�r@rjr�r?)rrOrrqrrr3r�r=r&rPrTrKrLrrr�
getAccessLogsr�rS�reversedrpr4�replace)r5rVr?r[r�rhrd�fileNamer�rgr`r�r�r�r�rc�logDatar3r�r�rurvrkr6r6r7�getDataFromLogFile�sl


����

��z!WebsiteManager.getDataFromLogFilecCst�|�}tjj|d�}|d|_|d}t�|j||�dkr nt�dd�Sd|jd|jd	}d
|}t�	|�}|�
d�dkrOt�ddd
d��}	t
|	�Stjj|jd�}
t�|||
j�}|�
d�dkrst�dddd��}	t
|	�St�ddd|d��}	t
|	�S)Nrcrirdr,rjrr&rkrlrmrnr�rorprRrqz5Not able to fetch logs, see CyberPanel main log file!rKrw)rrOrrqrrr3r�r=r&rPrTrKrLrrr�getErrorLogsr�)r5rVr?r[r�rdr{r�rgr`r�r�r6r6r7�fetchErrorLogs3
s4


��
�zWebsiteManager.fetchErrorLogsc
Cs�t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�Sdd}t�	|��
d�d	krZtjd
|jd}d|}t�	|d
�}t
|�dkrYdddd�}t�|�}	t|	�Snd|j}t�	|�}d|}dd|d�}t�|�}	t|	�S)Nrcrir,�configstatusr�cat %s�&/usr/local/lsws/conf/dvhost_redis.conf�	127.0.0.1r�r�r�r��lsadmz&Configuration file is currently empty!)r@r�r�zredis-cli get "vhost:%s"zU#### This configuration is fetched from redis as Redis-Mass Hosting is being used.
%s)r@r��
configData)rrOrrqrrr3r�r=r&rPrTr�Server_root_pathrprKrLr)
r5rVr?r[r�r�rJr�r@r`r6r6r7�getDataFromConfigFileZ
s0


�

�
z$WebsiteManager.getDataFromConfigFilecCslt�|�}|ddkrt�dd�S|d}|d|_t|�dkr.ddd�}t�|�}t|�Sd	d
}t�	|��
d�dkr�t��d
t
tdd��}t|d�}	|	�|�|	��tjd|jd}
dtjd}|d|
d|}t�	|�}|�
d�dkr�ddi}t�|�}t|�Sd|d�}
t�|
�}t|�Sd|j|�dd�f}t�|�ddi}t�|�}t|�S)Nr�r,r�rr�rizOError: you are trying to save empty vhost file, your website will stop working.)r�r�r�r�r�r�r�r�r�rr�r�r2r3z saveVHostConfigs --path � --tempPath rqzredis-cli set vhost:%s '%s'zS#### This configuration is fetched from redis as Redis-Mass Hosting is being used.
r)rrOr=r3rprKrLrr&rPrTr�	checkHomer�rrr�closerr�rrFrzr�)r5rVr?r[r�r@r`r�r�vhostrJrNr�r�r�r6r6r7�saveConfigsToFile}
sD










�

z WebsiteManager.saveConfigsToFilec
Cs<t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�Sztjj|jd�}|j	d}|j
j}Wntjj|jd�}|j}d|jd	}Yz.d
|}	t
�|	|�}
t|
�dkrlddd�}t�|�}t|�WSd|
d
�}t�|�}t|�WSty�}
zdt|
�dd�}t�|�}t|�WYd}
~
Sd}
~
ww)Nrcrir,�
rewriteStatusrrRrr&�/public_html/.htaccessr�zRules file is currently empty�r�r�)r��rewriteRulesr)r�r�r�)rrOrrqrrr3r�r=rr�r�r�rr&rPrprKrLrr�r�)r5rVr?r[r��childDomrJr�r�r�r�r@r`r�r6r6r7�getRewriteRules�
s<









��zWebsiteManager.getRewriteRulesc
Csvz�t�|�}tjj|d�}|d|_|d�d�}t�|j||�dkr$nt�dd�WSt	�
�dttd	d
��}t
|d�}|�|�|��ztjj|jd�}|jd
}	|jj}
Wnd|jd}	tjj|jd�}|j}
Yd||	f}t�||
�d|}t�|d�t��ddd�}
t�|
�}t|�WSty�}zdt|�d�}
t�|
�}t|�WYd}~Sd}~ww)Nrcrir�r�r,r�r�/tmp/r�r��wbrRrr&r�zcp %s %szrm -f %s�
cyberpanelrKr�)rrOrrqrrr3�encoder�r=rr�r�rrrr�rr�r�r�rr&r�rr�rKrLrr�)r5rVr?r[r�r�rr�r4rJr�r�r�r@r`r�r6r6r7�saveRewriteRules�
sF








��zWebsiteManager.saveRewriteRulescCs@t�|�}tjj|d�}|d|_|d}|d}t�|j||�dkr$nt�dd�St�	�dt
td	d
��}t|d�}|�
|�|��dt
td	d
��}	t|	d�}|�
|�|��dtjd
}
|
d|jd|d|	}
t�|
�}|�d�dkr�ddd�}t�|�}
t|
�Stj�|�d|d�}t�|�}
t|
�S)Nrcri�keyrSr,�	sslStatusrr�r�r�rr2r3z saveSSL --virtualHostName z --tempKeyPath z --tempCertPath rqr�rK)r�r�)rrOrrqrrr3r�r=rr�r�rrrr�rrFr&rPrTrKrLrr�r�r�)r5rVr?r[r�r�rS�tempKeyPathr��tempCertPathrNr�r�r�r6r6r7�saveSSLs<








�

zWebsiteManager.saveSSLcCs�t�|�}tjj|d�}|d|_|d}t�|j||�dkr nt�dd�Stj	d|j}|d}d	tj
d
}|d|d|}t�|�z^t
jj|jd
�}	|d|	_|	��|	jjdd�D]C}
z$tj	d|
j}|d}d	tj
d
}|d|d|}t�|�Wqaty�}ztj�dt|����WYd}~qad}~wwWntjj|jd
�}	|d|	_|	��Ydddd�}t�|�}
t|
�S)Nrcr4r�r,�	changePHPrr�r�r2r3r�r�rRr|zError changing PHP for alias: rK)r@r�r�)rrOrrqrrr3r�r=rr�rFr&rGrr�r�rnrvr�r�r�r�r�rrKrLr)r5rVr?r[r�rJr�r�rNr�rPr�r�r�r6r6r7r�@sF



"���



zWebsiteManager.changePHPcCs^�zt�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WStjj|jd�}tjj	|jd��
�r8nddd�}t�|�}t
|�WSt�d�g}d	tjd
}	|	d|j}	t�|	|j�}
t�d�t��tjksvt��tjkr|d|j}nd
|j}|
�d�dkr�d|}t�|�d|j|j|f}t�|�t�|	|j�}
|
�d�dkr�d|jid�}
t�|
�}t
|�WSd}|
�d�D]-}|r�|�dd�}t|�dkr�|d7}|�||d|d|d|d|d|dd��q�d|j|d�}
t�|
�}t
|�WSt�y.}ztj� t!|��dt!|�d�}t�|�}t
|�WYd}~Sd}~ww)Nrcr3r,�getWebsiteCronrrR�You do not own this domain�r�r�r2�/plogical/cronUtil.py� getWebsiteCron --externalApp �/var/spool/cron/�/var/spool/cron/crontabs/�Permission deniedr�zchmod 644 %s�chown %s:%s %sz
0,CyberPanel,)r�r��cronsr:r�r.rsr0r1�)�line�minute�hour�monthday�month�weekdayr�)"rrOrrqrrr3r�r=rrvrXrKrLrr+�CronPremrrFr�r&rP�decideDistro�centos�cent8rTr�rSrprur�r�r�r�r�)r5rVr?r[r�r�rkr�r�rNr�cronPathr�r�r`rzr�rSr�r6r6r7r�psr











��


��zWebsiteManager.getWebsiteCronc
Csz�t�|�}tjj|d�}|d|_|d}t�|j||�dkr!nt�dd�WStjj	|jd��
�r3nddd	�}t�|�}t
|�WS|d8}tjj|jd�}z!t�d�d
tjd}	|	d|j}	t�|	|j�}
t�d�Wn"tjy�}zdd
d	�}t�|�}t
|�WYd}~WSd}~ww|
�d�}
|
|}|�dd�}t|�dkr�ddd	�}t�|�}t
|�WSd|j|d|d|d|d|d|dd�|d�}
t�|
�}t
|�WSt�y}zt|�dt|�d	�}t�|�}t
|�WYd}~Sd}~ww)Nrcr3r�r,r�rrRr�r�r2r�r�zUnable to access Cron filer:r�r.rszCron line incorrectr0r1r�)r�r�r�r�r�r��r�r��cronr�)rrOrrqrrr3r�r=rrvrXrKrLrr+r�rrFr�r&rP�
subprocess�CalledProcessErrorrSrpr�rr�)r5rVr?r[r�r�rkr�r�rNrr'r�r�r`r�r6r6r7�
getCronbyLine�sl







��



��


��zWebsiteManager.getCronbyLinec
Cs�z�t�|�}tjj|d�}|d|_|d}|d}|d}|d}|d}	|d}
|d	}t�|j||�d
kr9nt�dd�WStjj|jd
�}d||||	|
|f}
t	�
d
�dtjd}|d|j
dt|�d|
d}t�||j
�}t	�
d�|�d�dkr�d
|j
|
|d�}t�|�}t|�WSd|d�}t�|�}t|�WSty�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr3r�r�r�r�r�r��cronCommandr,r�rrR�%s %s %s %s %s %sr2r�z saveCronChanges --externalApp � --line � --finalCron 'r�1,r�r�r�)rrOrrqrrr3r�r=rr+r�rrFr�r�r&rPrTrKrLrr�)r5rVr?r[r�r�r�r�r�r�r�r�r��	finalCronrNr�r�r`rkr�r�r6r6r7�saveCronChanges�s\


����
�





��zWebsiteManager.saveCronChangesc
CsHz�t�|�}tjj|d�}|d|_|d}t�|j||�dkr!nt�dd�WStjj|jd�}t	�
d�dtjd	}|d
|j
dt|�}t�||j
�}t	�
d�|�d�d
krsd|j
|�d�d|d�}	t�|	�}
t|
�WSd|d�}t�|�}t|�WSty�}
zdt|
�d�}t�|�}t|�WYd}
~
Sd}
~
ww)Nrcr3r�r,�
addNewCronrrRr2r�z remCronbyLine --externalApp r�r�r�r�)�
remCronbyLiner��
removeLiner�)r�r�)rrOrrqrrr3r�r=rr+r�rrFr�r�r&rPrTrSrKrLrr�)r5rVr?r[r�r�r�rNr�r�r`rkr�r�r6r6r7r�,sB


�
�





��zWebsiteManager.remCronbyLinec
Csz�t�|�}tjj|d�}|d|_|d}|d}|d}|d}|d}	|d}
t�|j||�d	kr5nt�d
d�WStjj|jd�}t	�
�t	jksRt	�
�t	jkrXd
|j
}nd|j
}d|}
t	�|
d�d|j
|j
|f}
t	�|
d�t�d	�d|||||	|
f}dtjd}|d|j
d|d}t	�||j
�}t	�
�t	jks�t	�
�t	jkr�d|}
t	�|
�d}
t	�|
�t�d�|�d�dkr�d	|j
|d�}t�|�}t|�WSd|d�}t�|�}t|�WSt�y}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr3r�r�r�r�r�r�r,r�rrRr�r�ztouch %s�rootr�r�r2r�z addNewCron --externalApp r�rzchmod 600 %szsystemctl restart cronr�r�)r�r�r�)r�r�)rrOrrqrrr3r�r=rr&r�r�r�r�r�r+r�rrFrP�ubuntu�ubuntu20rTrKrLrr�r�)r5rVr?r[r�r�r�r�r�r�r�r�r��commandTr�rNr�r�r`rkr�r�r6r6r7r�Vs`






�





��zWebsiteManager.addNewCronc

Cs|z�t�|�}tjj|d�}|d|_|d}|d}t�|�s/dddd�}t�|�}t	|�WSt�
|j||�dkr:nt�d	d�WSd
|jd}	dtj
d
}
|
d|jd|dt|�d|	d|jd|j}
t�|
�}|�d�dkr{nd|dd�}t�|�}t	|�WSdddd�}t�|�}t	|�WSty�}zdt|�dd�}t�|�}t	|�WYd}~Sd}~ww)Nrcr(�aliasDomain�sslrr*)r@�createAliasStatusr�r,r�r&r'r2r3z createAlias --masterDomain rWr6� --sslPath r4rUrqr�)r�r��existsStatusrK)rrOrrqrrr3r@rKrLrr�r=rrFr�rAr�r&rPrTr�)
r5rVr?r[r�r�r�r�r��sslpathrNr�r�r6r6r7�submitAliasCreation�sZ




�������





��z"WebsiteManager.submitAliasCreationc
CsVz�t�|�}tjj|d�}|d|_|d}t�|j||�dkr!nt�dd�WSt�|||j�dkr3nt�dd�WSd|jd}d	t	j
d
}|d|jd|d
|d|j}t�
|�}|�d�dkrxdddd�}	t�|	�}
t|
�WSd|dd�}	t�|	�}
t|
�WSty�}zdt|�dd�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr(r�r,r�rr&r'r2r3z issueAliasSSL --masterDomain rWr�r4rqr�rK)r�r�r�)rrOrrqrrr3r�r=�AliasDomainCheckrrFrAr&rPrTrKrLrr�r�)r5rVr?r[r�r�r�rNr�r�r�r�r6r6r7�
issueAliasSSL�s8

(





��zWebsiteManager.issueAliasSSLc
Cs6zwt�|�}tjj|d�}|d|_|d}t�|j||�dkr!nt�dd�WSt�|||j�dkr3nt�dd�WSdt	j
d}|d	|jd
|}t�|�}|�
d�dkrhdd
dd�}t�|�}	t|	�WSd|dd�}t�|�}	t|	�WSty�}
zdt|
�dd�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr(r�r,�deleteAliasrr2r3z deleteAlias --masterDomain rWrqr�rK)r�r�r�)rrOrrqrrr3r�r=r�rrFr&rPrTrKrLrr�r�)r5rVr?r[r�r�rNr�r�r�r�r6r6r7�delateAlias�s6







��zWebsiteManager.delateAliasc

Cs�zCt�|�}|d|_|d}|ddkrnt�dd�WSdtjd}|d	|jd
|}t�|�}dddd�}t�	|�}t
|�WStyf}	zddt|	�d�}t�	|�}t
|�WYd}	~	Sd}	~	ww)
Nr�openBasedirValuer�r,�changeOpenBasedirrr2r3z& changeOpenBasedir --virtualHostName 'z' --openBasedirValue rK)r@r�r�)
rrOr3r=rrFr&rGrKrLrr�r�)
r5rVr?r[r�rNr�r�r�r�r6r6r7r�s&





��z WebsiteManager.changeOpenBasedircC�Pt�|�}tjj|d�}t�|j||�dkrnt��St|dd|ji�}|�	�S)Nrcr,z&websiteFunctions/installWordPress.htmlr�
rrOrrqrrr�r3r�rrr$r6r6r7�wordpressInstall7�
zWebsiteManager.wordpressInstallc

CsZz�t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSt�	�i}||d<|d|d<|d|d<|d	|d	<|d
|d
<|d|d<|d
|d
<dt
tdd��|d<|ddkri|d|d<td|�}|�
�t�d�ddd|dd�}t�|�}t|�WSty�}	zddt
|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,rNrr�rr�rr�passwordByPassrrr�r�r�r�r0r��	wordpressr0rKr�rM�rrOrrqrrr3r�r=rr�r�rr!r�r�r�rKrLrr�r"r6r6r7�installWordpressCsB



�


��zWebsiteManager.installWordpressc

Csnz�|d}t�|�rnddddd�}t�|�}t|�WSt�d|���}|d}|�d	�dkrMd
|}t	�
t�|��ddddd�}t�|�}t|�WS|�d�dkrlddd
t�d|���d�}t�|�}t|�WS|�d�}	|	d}
z|	d}Wnd}Ydd||
d�}t�|�}t|�WSt
y�}zddd
t|�d�}t�|�}t|�WYd}~Sd}~ww)N�
statusFiler,r�100zInvalid status file.)�abortrN�installationProgress�
currentStatusr�r�z[200]rzSuccessfully Installed.z[404]r0)r�rNr�r�r�)r�CheckStatusFilleLocrKrLrr&rPrVrTr��call�shlexrSr�r�)
r5rVr?r�r�r��
statusData�lastLiner��progressr�r�r�r6r6r7�installWordpressStatusnsT
�

�

�


�


��z%WebsiteManager.installWordpressStatuscCr�)Nrcr,z#websiteFunctions/installJoomla.htmlrr�r$r6r6r7�
joomlaInstall�r�zWebsiteManager.joomlaInstallc

CsFzt�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSi}|d|d<|d|d<|d|d<|d	|d	<|d
|d
<dtt	dd
��|d<t
��|d	dkr_|d|d<td|�}|�
�t�d�ddd|dd�}t�|�}t|�WSty�}	zddt|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,rNrr�r��prefixr��siteNamer�r�r�r�r0r��joomlar0rKr�rM)rrOrrqrrr3r�r=r�rrr�r!r�r�r�rKrLrr�r"r6r6r7�
installJoomla�s>



�


��zWebsiteManager.installJoomlacCs�t�|�}tjj|d�}tjj|jd�}t�|j||�dkrnt��Sd|jd}t	j
�|�rbd}t|�}	|	�
�}
|
�dd�d}t��}d	|d
||jd}
t|d|jd|
d
��}|��Sd|j|jf}t�||j�d|j|jf}d}t|d�}|�|�|��d||jf}t�|�d|j|j|jf}t�|�d|j|jf}t�||j�}t|d|j|dd��}|��S)NrcrRr,r�z.gitrr:r�https://z
:%s/websites/z
/gitNotifyzwebsiteFunctions/setupGit.html)r�	installed�
webhookURL�+ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''zGHost github.com
IdentityFile /home/%s/.ssh/%s
StrictHostKeyChecking no
z/home/cyberpanel/configrzmv %s /home/%s/.ssh/configz chown %s:%s /home/%s/.ssh/config�cat /home/%s/.ssh/%s.pub)r�
deploymentKeyr�)rrOrrqrrrr3r�r=rWr�rXrr�rSr&�fetchCurrentPortrrr�r��
writelinesr�rP)r5rUrVr?r[r�r�r�r�rr�r�r#r�r`r��
configContentr�r�r6r6r7�setupGit�sJ
�
�



�zWebsiteManager.setupGitc

Cs2zvt�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSt�	�i}||d<|d|d<|d|d<|d	|d	<|d
|d
<dt
tdd
��|d<|d|d<td|�}|�
�t�d�dd|dd�}t�|�}t|�WSty�}	zdt
|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,rNrr�r�username�reponame�branchr�r�r�r��defaultProvider�gitr0rK)rNr�r�)rNr�r�r"r6r6r7�setupGitRepo
s<



�


��zWebsiteManager.setupGitRepoc
Cs�zi}|j|d<td|�}|��ddd�}t�|�}t|�WStyA}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr3�pullr,rK)�pulledr�r)r3r!r�rKrLrr�r�)r5rVr?r�r�r�r�r�r6r6r7�	gitNotify1s





��zWebsiteManager.gitNotifyc

Cs�zNt�|�}tjj|d�}|d|_t�|j||�dkrnt��WSt�	�i}|d|d<||d<t
d|�}|��t�
d�ddd	�}t�|�}t|�WStyp}	zd
t|	�d	�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,rr��detachr0rKr|r�rrOrrqrrr3r�r=rr�r!r�r�r�rKrLrr�r�r"r6r6r7�
detachRepoCs.








��zWebsiteManager.detachRepoc

Cs�zTt�|�}tjj|d�}|d|_t�|j||�dkrnt��WSt�	�i}|d|d<|d|d<||d<t
d|�}|��t�
d�dd	d
�}t�|�}t|�WStyv}	zdt|	�d
�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,r�githubBranchr��changeBranchr0rKr|rrr"r6r6r7rds0








��zWebsiteManager.changeBranchcCr�)Nrcr,z'websiteFunctions/installPrestaShop.htmlrr�r$r6r6r7�installPrestaShop�r�z WebsiteManager.installPrestaShopcCr�)Nrcr,z$websiteFunctions/installMagento.htmlrr�r$r6r6r7�installMagento�r�zWebsiteManager.installMagentoc

Csrz�t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSt�	�i}||d<|d|d<|d|d<|d	|d	<|d
|d
<|d|d<|d|d<|d
|d<|d|d<dt
tdd��|d<|ddkru|d|d<td|�}|�
�t�d�ddd|dd�}t�|�}t|�WSty�}	zddt
|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r,rNrr�rr��	firstName�lastNamer�rAr�r��
sampleDatar�r�r�r�r0r��magentor0rKr�rMr�r"r6r6r7�magentoInstall�sF



�


��zWebsiteManager.magentoInstallcCr�)Nrcr,z#websiteFunctions/installMautic.htmlrr�r$r6r6r7�
installMautic�r�zWebsiteManager.installMauticc
Cs�z�t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSd|j�d�}dtj	d	}|d
|}t
�|�t�
�i}||d<|d|d<|d
|d
<|d|d<|d|d<|d|d<dttdd��|d<|d
dkr||d|d<td|�}|��t�d�ddd|dd�}	t�|	�}
t|
�WSty�}zddt|�d�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r,rNrr�r�r2r3z) changePHP --phpVersion 'PHP 8.1' --path r�rr�r�rAr�r�r�r�r�r�r0r��mauticr0rKr�rM)rrOrrqrrr3r�r=rrFr&r�rr�r�rr!r�r�r�rKrLrr�)r5rVr?r[r�r�rNr�r�r�r�r�r6r6r7�
mauticInstall�sH




�


��zWebsiteManager.mauticInstallc
Cs�z�t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WSt�	�i}||d<|d|d<|d|d<|d	|d	<|d
|d
<|d|d<|d|d<|d
|d
<|d|d<dt
tdd��|d<|ddkru|d|d<d|j�d�}dtj
d}|d|}t�|�td|�}|��t�d�ddd|dd�}	t�|	�}
t|
�WSty�}zddt
|�d�}	t�|	�}
t|
�WYd}~Sd}~ww) Nrcr3r,rNrr�rr��shopNamerr�databasePrefixrAr�r�r�r�r�r�r0r�r�r�r2r3z) changePHP --phpVersion 'PHP 8.3' --path �
prestashopr0rKr�rM)rrOrrqrrr3r�r=rr�r�rrrFr&r�r!r�r�r�rKrLrr�)r5rVr?r[r�r�r�rNr�r�r�r�r6r6r7�prestaShopInstall
sN




�


��z WebsiteManager.prestaShopInstallc
Cs�z�|d}|d}|d}|d}|d}d|d<d|d<d|d	<|d|d
<z|d|d<Wnd|d<Y|d
|d<z|d}Wnd}Yz|d}Wnd}Ytjj|d�}	t�|	j|�r�|durnd|d
<ztjj|d�}
t|t�|�|d|	j||
dd�}|�	�Wnt
y�Ynwdddd�}t�|�}
t
|
�WS|�|	j|�WSt
y�}zdt|�dd�}t�|�}
t
|
�WYd}~Sd}~ww)Nr�	adminPass�
ownerEmailr�
ownerPasswordr,r��	dkimCheckr9rr�zPHP 7.4rHr�
websitesLimit�aclr�r(zexample@example.orgrr1)r�r�rAr�ri�initWebsitesLimitr�apirz!Could not authorize access to API)r�r�r�)r�r�r�)rrqrrr"�check_passwordr�r�
hash_passwordrdr�r�rKrLrrOr�)r5r?rrrrrr�apiACLr�r�
websiteOwnr�r�r�r6r6r7�createWebsiteAPIDsd
���


��zWebsiteManager.createWebsiteAPIc
Csft�|||�}g}zd}t|�}|��}|�dd�d}	Wnty;}
ztj�dt	|
��d}	WYd}
~
nd}
~
ww|D]o}|j
dkrHd}nd}t�|�\}
}}}d	|j
�d
�}tj�tj�rgtj�|�z
ddlm}|�|�}Wnd}Yd
t	|
�}g}ztjj|d�}dd�|D�}WnY|�|j
|j|	|jj|jj||||d�	�q>t� |�S)Nrr:r,rr�r�r�r�r�r�rtr�r�rhc	Sr�r�r�r�r6r6r7r8�r�z5WebsiteManager.searchWebsitesJson.<locals>.<listcomp>)	r3rr�r�rr�r�rJr�)!r�searchWebsiteObjectsrr�rSr�r�r�r�r�r�rr�r3rWr�rXr&r�rwrur�rrqrvrurr�r�rrHrKrL)r5�currentlACLrV�
searchTermrr�r�rr�r�r�rcr�r�r�r�r�r�rur�r�r�r6r6r7rhs\��

�
�
z!WebsiteManager.searchWebsitesJsonc
Cs,|dd}|d}t�||�||�}d}d}zd}	t|	�}
|
��}|�dd�d}WntyJ}
ztj�dt	|
��d}WYd}
~
nd}
~
ww|D]B}|j
dkrWd	}nd
}t�|�\}}}}dt	|�}|j
|j||jj|jj||d�}|dkr�|t�|�}d}qM|d
t�|�}qM|d}|S)NrAr�rrr:r,r�r�r�r�r�)r3rr�r�rr�r�r�r�)rrrr�rSr�r�r�r�r�r�rr�r3rr�r�rrHrKrL)r5r[rVrtrzryrr�r�r�rr�r�r�rcr�r�r�r�r�r�rkr6r6r7rs�s>��

�zWebsiteManager.findWebsitesJsoncCs|t�||�}tt|��td�}g}|dkrd}|�d�|St|�}t|�d}td|�D]
}|�dt|�d�q.|S�NrAr�r,z<li><a href="\#"></a></li>z<li><a href="\#">z	</a></li>)	rrr�rprurrUr�r��r5r[rVrr�r r�r�r6r6r7r!�s
�z WebsiteManager.websitePaginationcCsztj��}tt|��td�}g}|dkrd}|�d�|St|�}t|�d}td|�D]
}|�dt	|�d�q-|Sr#)
rrqr:r�rprurrUr�r�r$r6r6r7�DockersitePagination�s

�z#WebsiteManager.DockersitePaginationc
Csz�t�|�}tjj|d�}z$|d}i}d|d<tj�d�r#d|d<nd|d<t�	|�}t
|�WWSY|d|_t�|j||�dkrFnt�
dd�WSt��tjkr�tj|jd	}tj�|�r�t�|j�}d
|}	t�|	���}
|
d�d�d
}|
d�d�d
}|
d�d�d
}
|
d�d�d
}i}d|d<tj|d<||d<||d<|
|d<||d<||d<t�d|���|d<ni}d|d<tj|d<ni}d|d<tj|d<t�	|�}t
|�WSt�y}zddt|�d�}t�	|�}t
|�WYd}~Sd}~ww)Nrc�globalr,r@z
/etc/httpd�serverrrrQz	sudo cat �r�r0rtrA��
pmMaxChildren�pmStartServers�pmMinSpareServers�pmMaxSpareServers�phpPathr�r�r�)rrOrrqrrrWr�rXrKrLrr3r�r=r&rM�OLSr)rX�whichPHPExistsrPrVrSr/�apache�ols�lswsr�r�)r5rVr?r[r��
globalDatar��
finalConfPathr.r��phpConfr*r+r,r-r�r�r6r6r7�getSwitchStatussf








��zWebsiteManager.getSwitchStatuscCs�t�|�}tjj|d�}|d}|d}|d}t�|||�dkr"nt��Sdttdd��}d	t	j
d
}	|	d|dt|�d
|d|}	t�|	�t
�d�d|d�}
t�|
�}t|�S)Nrcrr�r'r,r�r�r�r2r3z switchServer --phpVersion 'z' --server rTrVr1)r@r�)rrOrrqrrr�r=r�rrrFr&rGr�r�rKrLr)r5rVr?r[r�rrJr'r�rNr�r�r6r6r7�switchServerRs4
�����



zWebsiteManager.switchServerc
Cs��z�t�|�}tjj|d�}|d}|d}|d}|d}|d}	|d}
t�|||�dkr0nt��WSt|�t|�ksEt|�t|�krTd	d
d�}t�	|�}t
|�WSt|�t|	�krkd	dd�}t�	|�}t
|�WSztjj|d
�}
|
j}Wnt
jj|d
�}
|
jj}Ydttdd��}t��tjks�t��tjkr�d}d}nd}d}tj}|�d|�}|�d|�}|�d|�}|�d|�}|�d|	�}|�dd�t�d|��dd��}|�d|�}|�d|�}|�d |�}t|d!�}|�|�|��d"||
f}t�|�|
�d#�}
t j!�"tj#��rt$j%�&d$|
���t��tjk�s*t��tjk�rk|
dd%k�rN|
d&d'|
d&d&}d(|
d&d'�d)|
d&d&��}n$|
d'd'|
d'd&}d(|
d'd'�d)|
d'd&��}nd(|
d*��}t j!�"tj#��r�t$j%�&d+|���t'�(|�}t j!�"tj#��r�t$j%�&d,|���d-|��}t�)|�d.|��}t�)|�d/di}t�	|�}t
|�WSt*�y�}zd	t|�d�}t�	|�}t
|�WYd}~Sd}~ww)0Nrcrr*r+r,r-r.r,rzfpm.start_servers must not be less than pm.min_spare_servers and not greater than pm.max_spare_servers.r|z?pm.max_spare_servers must not be less than pm.min_spare_serversrRr�r�r�z/var/run/php-fpm/r,z
/var/run/php/�nogroupz
{externalApp}z{pmMaxChildren}z{pmStartServers}z{pmMinSpareServers}z{pmMaxSpareServers}z{www}rr-rfz{Sock}z
{sockPath}z{group}rz
sudo mv %s %sr�zPHP path in tune settings �etcr�r1zPHP �.r0zPHP Version in tune settings zPHP service in tune settings zsystemctl stop zsystemctl restart r@)+rrOrrqrrr�r=rUrKrLrrr�rr�r�rr&r�r�r�r*�phpFpmPoolReplacerzrBrCrDrr�r�r�rSrWr�rXr�r�r�r�r)�DecideFPMServiceName�normalExecutionerr�)r5rVr?r[r�rr*r+r,r-r.r�r�r�r�r��sockPath�group�
phpFPMConfr�r�rJ�
phpServicer�r6r6r7�tuneSettingsks�

 �

�



"



 ""







��zWebsiteManager.tuneSettingsc0
Cs�t�|�}tjj|d�}t�|j||�dkrnt��Stjj|jd�}|j	}ddl
}ddl}	ddl}
ddl
m}d}ddlm}
z(|�d|���}d	|vrg|�d
�}d|�d|�d
�}|�|�d}|�|�Wntyy|
�d|���Ynwddlm}
z d}d}|�d|�d��}d|vr�|�d|���|�d�Wnty�}z|
�d|���WYd}~nd}~wwz�|�d�|�d�|�d�d}d}|
j�|�r�d|d�}ddlm}|�}|�|�d |d�}|�|�n`dd!lm}dd"lm}z|jjd#d$�}|�d%|jd&�||_|� �|�!d%|d&�Wn4z|d#|d%d'�}|� �|�!d%|d&�Wnt"�yQ}zt#j�$t%|��WYd}~nd}~wwYWnt�yo}z|
�d(|���WYd}~nd}~wwd)} d*t�&�d+�}ddl'}!ddl(}"z|!j)| |"�*|�d,�}#|#�(��d-d�}$Wnt�y�d}$Ynw|$dk�p�|�+�|j,k}%ddlm}
d.}&d/}'d0}(z6ddl-})|�d|&���}*|)j.�/|)j.j0|*�}+|+�1��2�dd�3d1�},|
�$d2|,���|,d3k�r�d4}'nd/}'Wn"t�y}zd4}'|
�$d5|'�d6t%|����WYd}~nd}~wwd/}-z!|�4��5d7�d}.z	t6�7|.�d4}-Wnt8�y4d/}-YnwWnt�yU}zd/}-|
�$d8t%|����WYd}~nd}~wwt9|d9|j||%|'|(|-d:��}/|/�:�S);Nrcr,rRrr%r�r�r�r�rrrrrrrrrr	r
rrr
rrrrrrrrrrrrrr r!r"r%r9r:r;r>r@z/usr/local/lscp/conf/cert.pemFr�r�zssl_provider: r�Tzis_selfsigned: z	. Error: r�r�zwebsiteFunctions/sshAccess.html)rr�r�r�r�r�);rrOrrqrrr�r3r�rr�r@rCrWr(r&r;r�rPrAr:rBr�rXrCrrDrErrFrrGr#r�rHr�r�r�r�rHrIrKrJrLrMrNr0r1r2r3r8r9r5r<rSr=r>r?rr)0r5rUrVr?r[r�r�r�r@rCrWr&rYr�rZr[r\r�rXr]r^r_r`rarbrrcrrrdrer�rWrIrKrXrYr�rPrQr�r0�cert_contentrS�ssl_providerr�rWr`r6r6r7�	sshAccess�s�



��
���





�������
�&��
�� ���zWebsiteManager.sshAccessc
Csz\t�|�}tjj|d�}|d|_t�|j||�dkrnt�dd�WStjj|jd�}d}t	j
�|�r>d|j|d	f}n	d
|d	|jf}t
�|�dd|jd�}t�|�}	t|	�WSty}
zddt|
�d
�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr3r,r@rrRz/etc/lsb-releasezecho '%s:%s' | chpasswdr�zecho "%s" | passwd --stdin %srK)r@r�r;rM)rrOrrqrrr3r�r=rrWr�rXr�r&r�rKrLrr�r�)r5rVr?r[r�r��
uBuntuPathr�r�r�r�r6r6r7�saveSSHAccessChangesas,





��z#WebsiteManager.saveSSHAccessChangesc	Csht�|�}tjj|d�}t�|j||�dkrnt��Stjj|jd�}|j	}t
|d|j|d��}|��S)Nrcr,rRz"websiteFunctions/setupStaging.html)rr��rrOrrqrrr�r3r�rr�rr)	r5rUrVr?r[r�r�r�r`r6r6r7�setupStaging�s

�zWebsiteManager.setupStagingc

Csxz�t�|�}tjj|d�}|d|_t�|j�s(dddd�}t�|�}t	|�WSt�|d�s?dddd�}t�|�}t	|�WSt�
|j||�dkrJnt�dd�WSi}|d|d	<|d|d<||d
<dtt
dd
��}t|d�}	d}
|	�|
�|	��||d<td|�}|��dd|d�}t�|�}t	|�WSty�}zddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrcr(rr*r�rr,r@r3r�r�r�r��azCloning process has started..,5r��startCloningrK�r@r�r�rM)rrOrrqrrr3r@rKrLrr�r=r�rrrr�r-r�r��
r5rVr?r[r�r�r�r�r�r��message�str�r6r6r7rL�sH











��zWebsiteManager.startCloningc
Csjt�|�}tjj|d�}t�|j||�dkrnt��Stjj|jd�}|j	}t
|d|j||d��}	|	��S)Nrcr,rRz websiteFunctions/syncMaster.html)rr�r4rI)
r5rUrVr?r4r[r�r�r�r`r6r6r7�syncToMaster�s
�zWebsiteManager.syncToMasterc

Cs�z�t�|�}tjj|d�}t�|d�s$dddd�}t�|�}t	|�WS|d|_t�
|j||�dkr4nt�dd�WSi}|d|d<z|d|d<Wnd	|d<Yz|d
|d
<Wnd	|d
<Yz|d|d<Wnd	|d<Y||d<d
tt
dd��}t|d�}	d}
|	�|
�|	��||d<td|�}|��dd|d�}t�|�}t	|�WSty�}zddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrcr4rr*r�r,r@�
eraseCheckF�dbCheck�copyChangedr�r�r�r�rKzSyncing process has started..,5r��startSyncingrKrMrM)rrOrrqrrr@r3rKrLrr�r=r�rrrr�r-r�r�rNr6r6r7�	startSync�sV












��zWebsiteManager.startSyncc
Cs�z,i}||d<dttdd��|d<td|�}|��dd|dd�}t�|�}t|�WStyO}zd	d	t|�d
�}t�|�}t|�WYd}~Sd}~ww)NrUr�r�r�r��convertDomainToSiter,)r@r�r�rr�)r�rr!r�rKrLrr�)r5rVrUr�r�r�r�r�r6r6r7rWs



��z"WebsiteManager.convertDomainToSitec
Cs�t�|�}tjj|d�}t�|j||�dkrnt��Sztjj|jd�}d|jg}|j	�
�}Wntjj|jd�|_|jj
g}|jjj	�
�}Yt|d|j|d��}	|	��S)Nrcr,rR�/home/%s/public_htmlzwebsiteFunctions/manageGIT.html)r�folders)rrOrrqrrr�r3r�rr,r:r�childWebsiter�r�rr)
r5rUrVr?r[r�r�rY�	databasesr`r6r6r7�	manageGIT s"


�zWebsiteManager.manageGITc
Cs��z�d|j}d|j}d|j}z4tjj|jd�}||_|j|_|j}|j|_|j|_|j	j
|_
|j	j|_d|_|j
d|jkrDd|_Wn;tjj|jd�}|j|_|jj|_|jj}|jj|_|jj|_|jj	j
|_
|jj	j|_d|_|j
|jkr�d|_Yd|_d}d||jf}tj�|�s�t�|�tj�|�s�t�|�tj�|��rt�|�}t|�dk�r|D]N}	d||	f|_t�t|jd	����}
|
d
|j
k�r|
d|_|
d|_|
d
|_z|
d|_Wnd|_Yz|
d|_ Wnd|_ Yd|_nq�|j�rd|_d|_d|_d|_ d|_|j
|k�r&||_WdS|j
|k�r2||_WdSztjj|jd�}|j
|jk�rI||_WWdSWnY|j
|k�r[d|_WdSz$|j!�"�D]}d|_d}
d|
|j#f}|j
|k�rzWWdS�qaWWdS|jj!�"�D]}d|_d}
d|
|j#f}|j
|k�r�YWdS�q�YWdSt$�y�}zt%j&�'dt(|��WYd}~dSd}~ww)NrXz/home/%sz/home/vmail/%srRrr,�/home/cyberpanel/git�%s/%sr��folder�
autoCommit�autoPush�	emailLogs�commandszFAdd Commands to run after every commit, separate commands using comma.�webhookCommand�False�Never�vmail�mysqlz/var/lib/mysql/r/z%s. [folderCheck:3002]))r3rrqrr�
masterWebsiter(r��externalAppLocalrr�rrr�r_rr�r��	confCheckrWrX�mkdir�listdirrp�	finalFilerKrsrr��autoCommitCurrent�autoPushCurrent�emailLogsCurrentrc�webhookCommandCurrentr,r:r�r�r�r�r�r�)r5�
domainPath�vhRoot�	vmailPathr�r��
gitConfFolder�
gitConFile�files�file�gitConfr4r��basePath�dbPathr�r6r6r7�folderCheckBs�




�


�





��
���
����zWebsiteManager.folderCheckcCs��z2t�|�}tjj|d�}|d|_|d|_t�|j||�dkr#nt�dd�WS|�	�r/nt��WSd|j}d|}t
�||j��
d	�d
kr�d|j|jf}t
�||j�}|�
d	�d
kr}d|j|jf}t
�||j�d|j|jf}t
�||j�}dd||jd
�}t�|�}	t|	�WSd|j}t
�||j��d�dd
�}
d|j|jf}t
�||j�}|�
d	�d
kr�d|j|jf}t
�||j�d|j|jf}t
�||j�}d|j}t
�||j�}d}|�
d�d
kr�d}d}d|j}t
�||j�}
|
�
d�d
k�rd}
t
��}dt��||jf}dd|
||||
|j||j|j|j|j|jd�}t�|�}	t|	�WSt�yW}zddt|�d�}t�|�}	t|	�WYd}~Sd}~ww)Nrcr3r_r,r@rz%s/.gitrmr�r�r�r�)r@�repor�r�zgit -C %s branchr:�git -C %s remote -v�originzRemote currently not set.zgit -C %s rev-list --count HEAD�fatalr0z!https://%s:%s/websites/%s/webhook)r@r~�
finalBranchesr��remote�remoteResult�totalCommitsr��
webHookURLrorprqrcrrrM)rrOrrqrrr3r_r�r=r}r&rPrjrTr(r�r�rKrLrrSr��fetchIProrprqrcrrr�r�)r5rVr?r[r��gitPathr�r�r�r��branchesr�r�r�r#r�r�r6r6r7�fetchFolderDetails�s�




��




�


��z!WebsiteManager.fetchFolderDetailsc
Cs\z�t�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSt
jj|jd�}d|j}t�
||j�}|�d	�d
kr|d|j|jf}t�||j�d|j|j|jf}t�||j�ddi}t�|�}	t|	�WSd|d
�}t�|�}	t|	�WSty�}
zddt|
�d�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr3r_r,r@rrRzgit -C %s initz#Initialized empty Git repository inr��&git -C %s config --local user.email %s�*git -C %s config --local user.name "%s %s"r|rM)rrOrrqrrr3r_r�r=r}rr(r&rPr�rTrr�rrrKrLrr�r�)r5rVr?r[r�r�r�rgr�r�r�r6r6r7�initRepo4sB




�	





��zWebsiteManager.initRepoc

Csj�zt�|�}tjj|d�}|d|_|d|_|d|_|d|_|d|_	t�
|j||�dkr2nt�dd	�WS|��r>nt��WS|j�
d
�dkrz|j�d
�d	}|j�d
�d}t�|�sgt�dd�WSzt|�}Wnt�dd�YWSt�|j�s�t�dd�WSt�|j�r�t�|j	�r�nt�dd�WSd
|j|j|jf}t�||j�d|j}t�||j�}|�
d�dkr�d|j|j|j|j	f}nd|j|j|j|j	f}t�||j�}	d|j}t�||j�}|�
|j�dk�rddi}
t�|
�}t|�WSd	|	d�}
t�|
�}t|�WSt�y4}zd	d	t|�d�}
t�|
�}t|�WYd}~Sd}~ww)Nrcr3r_�gitHost�gitUsername�gitReponamer,r@rr�r��!Invalid characters in your input.�`git -C %s config --local core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""rr�z,git -C %s remote add origin git@%s:%s/%s.gitz0git -C %s remote set-url origin git@%s:%s/%s.gitr|rM)rrOrrqrrr3r_r�r�r�r�r=r}rTrSr@rU�
validateInputr(rjr&r�rPrKrLrr�r�)
r5rVr?r[r��
gitHostDomain�gitHostPortr�r��
possibleErrorr�r�r�r6r6r7�setupRemoteisr







�
��
	





��zWebsiteManager.setupRemotec

Cs�z�t�|�}tjj|d�}|d|_|d|_|d|_t�|j||�dkr'nt�	dd�WS|�
�r3nt�	�WSt�|j�r?nt�	dd�WS|j�d	�d
kr^dddd�}t
�|�}t|�WSt�|j�|_d
|j|j�d�f}t�||j�}|�d�d
kr�d|dd�}t
�|�}t|�WSdd|d�}t
�|�}t|�WSty�}	zdt|	�d�}t
�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r_�
branchNamer,r@rr��*r�zAlready on this branch.)r@�
commandStatusr�zgit -C %s checkout %sr�zSwitched to branchzRefreshing page in 3 seconds..�r@r�zFailed to change branch�r@r�r�r|)rrOrrqrrr3r_r�r�r=r}r�rTrKrLr�FetchExternalAppr�r4r&rPr�r�)
r5rVr?r[r�r�r�r�r�r�r6r6r7�changeGitBranch�sJ




�

	




��zWebsiteManager.changeGitBranchc

CsJz�t�|�}tjj|d�}|d|_|d|_|d|_t�|j||�dkr'nt�	dd�WS|�
�r3nt�	�WSt�|j�r?nt�	dd�WSt�|j�|_
d	|j|jf}t�||j
�}|�|j�d
krsd|d�}t�|�}t|�WSdd|d
�}t�|�}t|�WSty�}	zdt|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r_�
newBranchNamer,r@rr�zgit -C %s checkout -b "%s"r�r�zFailed to create branchr�r|)rrOrrqrrr3r_r�r�r=r}r�r�r�r&rPrTrKrLrr�r��
r5rVr?r[r�r�r�r�r�r�r6r6r7�createNewBranchs>





	




��zWebsiteManager.createNewBranchc
CsZ�zt�|�}tjj|d�}|d|_|d|_|d|_t�|j||�dkr(nt�	dd�WS|�
�r4nt�	dd�WSt�|j�rBnt�	�WSt�|j�|_
d|j}t�||j
�d	|j|j�d
d�f}t�||j
�}|�d�d
kr�zo|jdkr�t|jddd���|j�d�d
kr�|j�d�}|D]!}t|jdd|d���t�||j�}t|jdd|d���q�n!t|jdd|jd���t�|j|j�}t|jdd|d���t|jddd���WnYd|d�}	t�|	�}
t|
�WSdd|d�}	t�|	�}
t|
�WSt�y,}zdt|�t|�d�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r_�
commitMessager,r@rzgit -C %s add -Azgit -C %s commit -m "%s"rrrznothing to commitr�r�INFO�.Running commands after successful git commit..�rir�rOr:�Running: %s�
Result: %s�Finished running commands.r�zNothing to commit.r�)rrOrrqrrr3r_r�r�r=r}r�r�r�r&rPrzrTrcr	rir�rSrjrKrLrr�r�)r5rVr?r[r�r�r�rcrgr�r�r�r6r6r7�
commitChanges;s�






��������
	




��zWebsiteManager.commitChangesc

Cs>z|t�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSt�
|j�|_d|j|j|j
f}t�||j�d|j}t�||j�}|�d	�d
krmd|d�}t�|�}t|�WSdd|d
�}t�|�}t|�WSty�}	zdt|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)Nrcr3r_r,r@rr��git -C %s pull�Already up to dater�r��Pull not required.r�r|)rrOrrqrrr3r_r�r=r}r�r�r(rjr&r�rPrTrKrLrr�r�r�r6r6r7�gitPull�s>



�

	




��zWebsiteManager.gitPullc
Cs�z�t�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSt�
|j�|_d|j|j|j
f}t�||j�d|j}t�||jd	�}|�d
�dkr�d|j}t�||jd	��d
�}|�d�dkr�dddd�}t�|�}	t|	�WSd|j|f}t�||jd	�}|�d�dkr�|�d�dkr�|�d�dkr�d|d�}t�|�}	t|	�WSdd|d�}t�|�}	t|	�WSty�}
zdt|
�t|
�d�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr3r_r,r@rr�zgit -C %s pushFzhas no upstream branchr�z%git -C %s rev-parse --abbrev-ref HEADr:zfatal: ambiguous argumentzYou need to commit first.r�z'git -C %s push --set-upstream origin %szEverything up-to-date�rejectedr�r�zPush failed.)rrOrrqrrr3r_r�r=r}r�r�r(rjr&r�rPrTrYrKrLrr�r�)r5rVr?r[r�r�r��
currentBranchr�r�r�r6r6r7�gitPush�s^



�

�

��





��zWebsiteManager.gitPushc
Cs��z/t�|�}tjj|d�}|d|_|d|_|d|_|d|_|d|_	z|d|_
Wnd|_
Yt�|j||�d	krAnt�d
d�WS|�
�rMnt��WS|j�d�d
kr�|j�d�d}|j�d�d	}t�|�svt�d
d�WSzt|�}Wnt�d
d�YWSt�|j�s�t�d
d�WSt�|j�r�t�|j	�r�nt�d
d�WSt�|j�|_|j
r�d|j}t�||j�d|j|jf}t�||j�d|j|j|j	|jf}t�||j�}|�d�d
k�r!|�d�d
k�r!d|j|jf}t�||j�d|j|j|jf}t�||j�d	|d�}	t�|	�}
t|
�WSdd|d�}	t�|	�}
t|
�WSt �yS}zdt!|�d�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r_r�r�r��overrideDataFr,r@rr�r�r��	rm -rf %sz[git config --global core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""zgit clone git@%s:%s/%s.git %szalready existsr�r�r�r�zFailed to clone.r�r|)"rrOrrqrrr3r_r�r�r�r�r�r=r}rTrSr@rUr�r�r�r&r�r(rjrPrrrrKrLrr�r�)r5rVr?r[r�r�r�r�r�r�r�r�r6r6r7�
attachRepoGITsv








� 


	


��zWebsiteManager.attachRepoGITc
Cs,zst�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSt�
|j�|_d|j}t�
||j�d}d	||jf}d	||j�d
�df}d|}t�||j�ddi}	t�|	�}
t|
�WSty�}zdt|�d
�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r_r,r@rzrm -rf %s/.gitr]r^r�r�r�r|)rrOrrqrrr3r_r�r=r}r�r�r&r�r(rSrPrKrLrr�r�)r5rVr?r[r�r�rvrwrnr�r�r�r6r6r7�removeTrackingjs8




	


��zWebsiteManager.removeTrackingc

Cs�zVt�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSd|j}t
�||j�}|�
d�d	krHd
}d|d�}t�|�}t|�WStyx}	zdt|	�d�}t�|�}t|�WYd}	~	Sd}	~	ww)
Nrcr3r_r,r@rzcat %s/.gitignorer�r�zFile is currently empty.)r@�gitIgnoreContentr|)rrOrrqrrr3r_r�r=r}r&rPrjrTrKrLrr�r�)
r5rVr?r[r�r�r�r�r�r�r6r6r7�fetchGitignore�s0








��zWebsiteManager.fetchGitignorec
Cs*zrt�|�}tjj|d�}|d|_|d|_|d|_dtt	dd��}t�
|j||�dkr0nt�d	d
�WS|��r<nt��WSt
|d�}|�|j�|��t�|j�|_d||jf}t�||j�d	di}t�|�}	t|	�WSty�}
zd
t|
�d
�}t�|�}	t|	�WYd}
~
Sd}
~
ww)Nrcr3r_r�r�r�r�r,r@rrzmv %s %s/.gitignorer|)rrOrrqrrr3r_r�r�rr�r=r}rrr�r�r�r&r�rKrLrr�)r5rVr?r[r�rr�r�r�r�r�r6r6r7�
saveGitIgnore�s8





	


��zWebsiteManager.saveGitIgnorec
Cs�z�t�|�}tjj|d�}|d|_|d|_t�|j||�dkr"nt�dd�WS|�	�r.nt��WSd}t�
|j�|_d|j|f}t�
||j��d	�}d
}d}	d}
|D]8}|�d�}t|
�|d|d�dd
�|d|dd�}
|
d}
|	dkr�|t�|
�}d}	qU|dt�|
�}qU|d}d|d�}t�|�}t|�WSty�ddd�}t�|�}t|�YSty�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr3r_r,r@rz'log --pretty=format:"%h|%s|%cn|%cd" -50zgit -C %s %sr:r��|rrrr0r1)r~�commitrOr<�dater�r�)r@�commitszNo commits found.r|)rrOrrqrrr3r_r�r=r}r�r�r&rPrSr�rzrKrLr�
IndexErrorr�)r5rVr?r[r��initCommandr�r�r�r�r~r��cmrkr�r�r6r6r7�fetchCommits�sP




,





��zWebsiteManager.fetchCommitsc
CsLz�t�|�}tjj|d�}|d|_|d|_|d|_t�|j||�dkr'nt�	dd�WS|�
�r3nt�	�WSt�|j�r?nt�	dd�WSt�|j�|_
d	|j|jf}t�||j
��d
�}g}|D]}|dkrt|�|�d
��d
��qcd|d�}	t�|	�}
t|
�WSty�}zdt|�d
�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r_r�r,r@rr�z4git -C %s diff-tree --no-commit-id --name-only -r %sr:r)r@rxr|)rrOrrqrrr3r_r�r�r=r}r�r�r�r&rPrSrurYrYrKrLrr�r�)r5rVr?r[r�r�rx�
FinalFilesrcr�r�r�r6r6r7�
fetchFiles(s@




�



��zWebsiteManager.fetchFilesc
CsP�zlt�|�}tjj|d�}|d|_|d|_|d|_|d|_t�	|j||�dkr-nt�
dd�WS|��r9nt�
�WSt�|j�rM|j�
d	�d
krMnt�
dd�WSt�|j�|_d|j|j|j|j�d
��d�f}t�||j��d
�}d}|D]}t|�dkr�|d}q{|ddkr�n|d}q{zt||�d�d�d�d�}	Wnt||�d�d�d�d�}	Yt|�}
dd||f}t|d|
d�D]�}||ddkr�t||�d�d�d�d�}	|dd||f}q�||ddk�rd||�dd��dd�}
|dt|	�|
f}|	d}	q�||ddk�rBd||�dd��dd�}
|dt|	�|
f}|	d}	q�d||�dd��dd�}
|dt|	�|
f}|	d}	q�d|d�}t�|�}t|�WSt�y�dd d!�}t�|�}t|�YSt�y�}zdt|�d!�}t�|�}t|�WYd}~Sd}~ww)"Nrcr3r_ryr�r,r@rrSr�r�zgit -C %s show %s -- %s/%sr:r��@�+r�zw<tr><td style="border-top: none;color:blue">%s</td><td style="border-top: none;"><p style="color:blue">%s</p></td></tr>�#z<p style="color:green">%s</p>�<z&lt;�>z&gt;zg<tr style="color:green"><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>�-z<p style="color:red">%s</p>ze<tr style="color:red"><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>z	<p>%s</p>zS<tr><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>)r@�fileChangedContent�Not a text file.r|)rrOrrqrrr3r_ryr�r�r=r}r�rTr�r�r4r&rPrSrprUr�rzr�rKrLrr�r�)r5rVr?r[r�r�r��
initialNumberrc�
lineNumber�fileLen�finalConentr�rZr�r�r�r6r6r7�fetchChangesInFileYs�





�

$"� ���
��
�






��z!WebsiteManager.fetchChangesInFilec
Cs�z�t�|�}tjj|d�}|d|_|d|_i}|j|d<|d|d<z|d|d<Wnd|d<Yz|d|d<Wnd|d<Yz|d	|d	<Wnd
|d	<Yz|d|d<Wnd|d<Y|j|d<t�|j||�dkrxnt�d
d�WS|�	�r�nt��WS|j
dkr�d}d||jf}d|tt
dd��f|_tj�|�s�t�|�tj�|�s�t�|�t|jd�}|�t�|��|��d
di}	t�|	�}
t|
�WSty�}zdt|�d�}	t�|	�}
t|
�WYd}~Sd}~ww)Nrcr3r_r`rarfrbFrcrrdr,r@rr]r^r�r�rr|)rrOrrqrrr3r_r�r=r}rkr(r�rrnrWr�rXrlrrrKrLr�rr�)r5rVr?r[r�rkrvrwr�r�r�r�r6r6r7�saveGitConfigurations�sf















��z$WebsiteManager.saveGitConfigurationscCspd}d}d}|D])}|j|j�d�|jd�}|dkr$|t�|�}d}n	|dt�|�}|d}q|d}|S)Nr�rr,z%m.%d.%Y_%H-%M-%S)r�r�rOr�r�)r�r�r�rOrKrL)r5�logsr�r�rzrcrkr6r6r7�
getLogsInJson�s
zWebsiteManager.getLogsInJsonc
Cs^zvt�|�}tjj|d�}|d|_|d|_t|d�}t|d�}t�|j||�dkr.nt�	dd�WS|�
�r:nt�	�WS|jj�
��d	�}dd
lm}|�t|�|�}	|�||�\}
}|�|||
��}d||	d�}
t�|
�}t|�WSty�ddd
�}
t�|
�}t|�YSty�}zdt|�d
�}
t�|
�}t|�WYd}~Sd}~ww)Nrcr3r_rurdr,r@rr�)�	S3Backups)r@r�r r�r|)rrOrrqrrr3r_rUr�r=r}ri�gitlogs_setr:r��s3Backups.s3Backupsr�rwrprvr�rKrLrr�r�r�)r5rVr?r[r�rurdr�r�r ryrz�jsonDatar�r�r�r6r6r7�fetchGitLogss>








��zWebsiteManager.fetchGitLogsc
Cs�ze||_ztjj|jd�}||_d||_||_Wntjj|jd�}|j|_|j	j|_|j	|_Yt
�|j�|_d|j}t
�||j�}|�d�dk�rId|}t|jd|d���d	}d
}d||jf}	tj�|�sst�|�tj�|	�s~t�|	�tj�|	�r�t�|	�}
t|
�dkr�|
D]}d|	|f}t�t|d
����}
|
d|jkr�d}nq�|�r:z�|
d�r4|
ddk�r4t|jddd���|
d�d�dk�r|
d�d�}|D]%}t|jdd|d���t
�||jjd|j�}t|jdd|d���q�n't|jdd|
dd���t
�|
d|jjd|j�}t|jdd|d���t|jddd���WnYd|d�}t�|�}t|�WSd|}t|jd|d���d	d|d�}t�|�}t|�WSt�y�}zd	t|�d�}t�|�}t|�WYd}~Sd}~ww)NrRrXr�r�r�zebhook Fired] Status: %s.r�r�rr]r^r,r�r_rdrcrr�r:r�r�r�r��ERRORr�r�r|) r3rrqrrr�r_r(rr�r�rr�r�r&rPrTr	r�rWrXrlrmrprKrsrr�rSrLrr�r�)r5r3r?r�r�r�rO�foundrvrwrxryrnrzrcrgr�r�r�r6r6r7�webhook8s�







�
�����	
�
����
	




��zWebsiteManager.webhookc
Cs�z�t�|�}tjj|d�}|d}tjj|d�}t�|||�dkr"nt�dd�WSd|}d|}t�	||j
��d	�}d
}	d}
|D]e}|�d�dkr�|�d
�}z*d|ddd�d|d}
z|dd|d�
d��}Wn|d}YWnd|ddd�}
d}Y||
d�}|
dkr�|	t�|�}	d}
qA|	dt�|�}	qA|	d}	t�dd|	d��}t|�WSty�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr3rRr,r@r�/home/%s/.ssh/authorized_keysr�r:r�zssh-rsar�r�zssh-rsa �2z  ..  r0r�r)r�r�r�r�rK)r@r�r?r|)rrOrrqrrrr�r=r&rPr�rSrTrrKrLrr�r�)r5rVr?r[r�r3r��
pathToKeyFile�catr�r�rc�keydatar�r�rkr`r�rar6r6r7�
getSSHConfigs�sV

 
���

��zWebsiteManager.getSSHConfigsc
CsDz~t�|�}tjj|d�}|d}t�|||�dkrnt�dd�WS|d}d|}tjj|d�}d	|j�d
|j�d|��}	t	�
|	�dtjd
}
|
d||f}
t	�
|
|j�}|�
d�dkroddd�}t�|�}
t|
�WSdd|d�}t�|�}
t|
�WSty�}zddt|�d�}t�|�}
t|
�WYd}~Sd}~ww)Nrcr3r,r@rr�r�rRzchown r�r�r2�/plogical/firewallUtilities.pyz" deleteSSHKey --key '%s' --path %srqr�)r@�
delete_status)r@r��error_mssage)rrOrrqrrr�r=rr�r&rPrrFrTrKrLrr�r�)r5rVr?r[r�r3r�r�r�r�rNr�rar`r�r6r6r7�deleteSSHKey�s8







��zWebsiteManager.deleteSSHKeyc
Csxz�t�|�}tjj|d�}|d}tjj|d�}t�|||�dkr"nt�dd�WS|d}d|}d	|}	t�	|	�d
|j
|j
|f}	t�	|	�dttdd
��}
t
|
d�}|�|�|��dtjd}|d|
|f}t�|�}
|
�d�dkr�ddd�}t�|�}t|�WSdd|
d�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nrcr3rRr,r@rr�r�zmkdir -p /home/%s/.ssh/zchown %s:%s /home/%s/.ssh/r�r�r�rz#sudo /usr/local/CyberCP/bin/python r�z" addSSHKey --tempPath %s --path %srqr�)r@�
add_status)r@r�r�)rrOrrqrrrr�r=r&r�r�r�rrrr�rrFrPrTrKrLrr�)r5rVr?r[r�r3r�r�r�r�rr�rNr�rar`r�r6r6r7�	addSSHKeysD











��zWebsiteManager.addSSHKeyc
Cszt�|�}tjj|d�}t�|j||�dkrnt��St�	�}t�
�}t�d�r+d}nd}t|d|j|||d��}	|	�
�S)Nrcr,r:rz#websiteFunctions/ApacheManager.html)rrD�
apachemanager�
apachePHPs)rrOrrqrrr�r3r�r(rR�findApachePHPVersionsr�rr)
r5rUrVr?r[r�rDr�r�r`r6r6r7�
ApacheManager1s

�zWebsiteManager.ApacheManagerc
Cs�t�|�}|ddkrt�dd�S|d}|d|_t��dttdd	��}t|d
�}|�	|�|�
�tj|jd}dt
jd
}|d|d|}t�|�}	|	�d�dkrgddi}
t�|
�}t|�Sd|	d�}t�|�}t|�S)Nr�r,r�rr�rr�r�r�rrQr2r3z  saveApacheConfigsToFile --path r�rqr�r@r|)rrOr=r3rr�r�rrrr�r)rXrrFr&rPrTrKrLr)
r5rVr?r[r�rr�rJrNr�r@r`rar6r6r7�saveApacheConfigsToFileFs*







z&WebsiteManager.saveApacheConfigsToFilec	Csti}t�|�}|ddkrnt��Sz|dkr"tjj|d�}|��WnYtj��|d<t|d|d�}|�	�S)Nr�r,rcr�z)websiteFunctions/CreateDockerPackage.htmlrG)
rrOr�rrqrrr�r:rr)	r5rUrVr?r�r_r[�DockerPackagesDeleter`r6r6r7�CreateDockerPackagens"
��z"WebsiteManager.CreateDockerPackagecCs�t�|�}|ddkrnt��Sz|dkr tjj|d�}|��WnYt�|�}tj�	�}tj�	�}	|||	d�}
t
|d|
d�}|��S)Nr�r,rc)r\r�
assignpackagez#websiteFunctions/assignPackage.htmlrG)rrOr�rrqrrr�rPrr:rr)r5rUrVr?r�r[r�r\�dockerpackagesr�r_r`r6r6r7�
AssignPackage�s&
�


�zWebsiteManager.AssignPackagecCs�d}dt��d�}ddl}|j|t�|�d�}|��d}|dks(t��tjkrnt�	|�}d|i}	t
j���
�dkrcd	}
d
}d}d}
d}t|
|||
|d
d�}|��tjjdd�}t
||d�}|��t|d|	d�}|��Sddlm}t|d��S)Nr9�docker-managerr;rr>r@r,r\rbr0ir�r�r��CPUsr��	Bandwidth�	DiskSpacer�rc�r�rz&websiteFunctions/CreateDockerSite.htmlrGrmro)rrHrIrJrKrLr&rMrNrPrrqr:r�rr�rrrrrrwrnr)r5rUrVr?rWrIrXrYr\r_r<�cpu�Memoryr��disk�saveobjry�svr`rnr6r6r7�CreateDockersite�s6�
�zWebsiteManager.CreateDockersitec
Cs�zIt�|�}|ddkr
nt��WStjj|d�}|d}|d}|d}|d}|d}	t|||||	d	d
�}
|
��ddd�}t�	|�}t
|�WStyk}
zdt|
�d�}t�	|�}t
|�WYd}
~
Sd}
~
ww)
Nr�r,rcr<r�r�r�r�rr�r|r)
rrOr�rrqrrrr�rKrLrr�r�)r5rVr?r[r�r<r�r�r�r�r�r@r`r�rar6r6r7�AddDockerpackage�s,





��zWebsiteManager.AddDockerpackagec

Cs�zCt�|�}|ddkr
nt��WStjj|d�}|d}tjj|d�}|j|j|j	|j
|jd�}d|i}d|d�}	t�
|	�}
t|
�WStye}zdt|�d�}t�
|�}
t|
�WYd}~Sd}~ww)	Nr�r,rcr~)r�r�r�r�r�r	r|r)rrOr�rrqrrrr�r�r�r�r�rKrLrr�r�)
r5rVr?r[r�r~�docker_package�package_data�rdatar@r`r�rar6r6r7�
Getpackage�s0

�



��zWebsiteManager.Getpackagec
Cs�zRt�|�}|ddkr
nt��WStjj|d�}|d}|d}|d}|d}|d}	tjj|d�}
||
_||
_||
_	|	|
_
|
��ddd	�}t�
|�}t|�WStyt}
zd
t|
�d	�}t�
|�}t|�WYd}
~
Sd}
~
ww)Nr�r,rcr~r��RAMr�r�r|r)rrOr�rrqrrrr�r�r�r�r�rKrLrr�r�)r5rVr?r[r�r~r�rr�r�r�r@r`r�rar6r6r7�
Updatepackages4





��zWebsiteManager.Updatepackagec
Cs�z[t�|�}|ddkr
nt��WStjj|d�}|d}|d}tjj|d�}z
tjj|d�}|��WnYtjjt	|�d�}	t||	d�}
|
�
�ddd	�}t�|�}t
|�WSty}}
zd
t|
�d	�}t�|�}t
|�WYd}
~
Sd}
~
ww)Nr�r,rcrr�r(r�r�r|r)rrOr�rrqrrrr�rrUr�rKrLrr�r�)r5rVr?r[r�rr�ry�delasgr�r�r@r`r�rar6r6r7�
AddAssignment"s4





��zWebsiteManager.AddAssignmentc 
Cs��z�tjj|d�}t�|�}|d}|d}|d}t|d�}t|d�}	t|d�}
t|d�}|d	}|d
}
|d}|d}t|	�d
krWddd�}t�|�}t|�WSt|�d
krlddd�}t�|�}t|�WSd}t	�
||�rundd|�d�d�}t�|�}t|�WStjj|d�}tjj|d�}z	tjj|d�}Wndtd�d�}t�|�}t|�YWSt
jj|jjd�}|j}|j}|
|}||	}||kr�dtd|�d|�d��d�}t�|�}t|�WS||k�rdtd|�d|�d��d�}t�|�}t|�WSt�|d�dk�rt�dd�WSt�|||�dk�r't�dd�WSt�|�dk�r?dddd�}t�|�}t|�WSd ttd!d"��}i}||d#<||d<||d<||d<||d$<||d<|	|d<|
|d<||d<||d<|
|d
<||d<d%�t	�d&|��dd'�ttd!d"��|d(<||d	<td)|�}|��t�d*�d+d+d,|d-�}t�|�}t|�WSt�y�}zdt|�d�}t�|�}t|�WYd}~Sd}~ww).Nrc�sitename�Ownerr��MysqlCPU�MYsqlRam�SiteCPU�SiteRam�App�
WPusername�WPemal�WPpasswd�rz"Minimum MySQL ram should be 256MB.r|z!Minimum site ram should be 256MB.z^[a-z0-9][a-z0-9]*$zinvalid site name "zd": must consist only of lowercase alphanumeric characters, as well as start with a letter or number.r(r�z&Please assign package to selected userzYou can add z or less then z CPUs.z Ram.rGr�r)r�r�r�r��JobIDrVrr-r.r��SubmitDockersiteCreationr0r,rKr�)rrqrrrrOrUrKrLrrC�matchrr�rrr~r�r�r<r=r>r?rrBrDrr�r�r�r�) r5rVr?r�r[rrr�rrr	r
rrr
rrar`�patternrKrL�pkaobj�Dpkgobj�pkg_cpu�pkg_Ram�totalcup�totalRamr�r�r�r�r�r6r6r7�submitDockerSiteCreationHs�
















,

�


��z'WebsiteManager.submitDockerSiteCreationc

Cs�tjj|d�}t�|�}i}z@|dkrMtjj|d�}t�|jj||�dkr&nt�	�WSi}	|jj|	d<d|	d<|j
|	d<td|	�}
|
��|�
�d|d<Wntyj}zd|d<t|�|d<WYd}~nd}~ww|�||�|d	<t|d
|�}|��S)Nrcr,r3rr<�Deleted�LPError�	LPMessager z$websiteFunctions/ListDockersite.html)rrqrrrrOrr�r�r3r��SiteNamer�DeleteDockerAppr�r�r�r%rr)
r5rUrVr?r�r�r[�fdata�DockerSitesDelete�passdatar�r�r`r6r6r7�ListDockerSites�s8



����zWebsiteManager.ListDockerSitesc
Cs�zLt�|�}t|d�}t|d�}|�||�\}}t�||�}|�t|�|�}	tj�	dt
|��|�|||��}
ddd|
|	d�}t�
|�}t|�WStyo}
zddt
|
�d�}t�
|�}t|�WYd}
~
Sd}
~
ww)	NrdruzOur dockersiter,rKrerrg)rrOrUrv�findDockersiteObjectsrwrpr�r�r�r�r�rKrLrr�)r5rVr?r[rtruryrz�dockersitesr r�rar`r�r6r6r7�fetchDockersite�s(
�


��zWebsiteManager.fetchDockersitecCs�d}dt��d�}ddl}|j|t�|�d�}|��d}|dks(t��tjkrXt�	|�}	t
jj|d�}
t
jj|jd�}t�|jj|
|	�dkrHnt��St|d	d
|i�}|��Sddlm}
t|
d��S)
Nr9r�r;rr>r@r,rcz$websiteFunctions/DockerSiteHome.html�
dockerSitermro)rrHrIrJrKrLr&rMrNrOrrqrrrr3r�r�r�rrrwrnr)r5rUrVr?r�rWrIrXrYr[r��dsr`rnr6r6r7�Dockersitehome�s(�
�zWebsiteManager.DockersitehomecCsx�zt�|�}tjj|d�}|d}tjj|d�}t�|||�dkr)t�dd�WStjj	|d�}g}|j
}	|j}
t�|
�}d|}|D]�}
d	|	||
j
f}t�|dd
�}t�|�}d|	||
j
f}t�|dd
�}|��}d|	||
j
f}t�|dd
�}td
d�|�d�D��}|
j}|�d�s�d|��}d|	||
j
f}t�|�}d}|�d�D]
}|�d�dkr�d}nq�d|	||
j
f}t�|�}t|��d�}d|	||
j
f}t�|�}|��d}|�d�dkr�d}nd}|�|
j|
j|
j|
j
||
jj|||||d|�d�d��qCddd|d�}t�|�}t |�WSt!�y;}zddt"|�d�}t�|�}t |�WYd}~Sd}~ww)Nrcr3rRr,r\rrhr�r/Tr0r1cSr2r6r3r5r6r6r7r82r9z8WebsiteManager.fetchWPSitesForDomain.<locals>.<listcomp>r:)zhttp://r�r�r<r=r�r>r?r@zhttps://api.microlink.io/?url=z0&screenshot=true&meta=false&embed=screenshot.url)r~rrWr�rArJrHrIrCrDrE�
screenshotrK)r@r\r�r�r])#rrOrrqrrrr�r=rrvr�r�r�r�r&rPrQrRr4rprSr��
startswithrTrUrVrur~rrirKrLrr�r�)r5rVr?r[r�r3r�r�r�r\r]r�r�r�r�rAr_r`ra�site_urlrbrCrcrdrerfrgrEr�r�r�r6r6r7�fetchWPSitesForDomains�

�
��

�
��
�


�


��z$WebsiteManager.fetchWPSitesForDomain)NN)NNN)NNNNr2)��__name__�
__module__�__qualname__r1r2r3r8rGr|r�r�r�rr�r�r�r�r�r�r�r�r�rrrrrrrr"r#r%r.rlrprsrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr#rOr[rbrlrrrir{r~rxr�rorvrwr�r�r�r�r�r�rfrgr}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrrhrsr!r%r7r8rCrFrHrJrLrQrVrWr\r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr#r&r)r-r6r6r6r7r/1sN5)4#1$#E; +	0	
u&&<8-%5:G-8,'000-3,#
2kd&0/2+BC4AcUH'#?'1,0J@2*B3*(+-,7'!"/47;@)Ff&07"`5^<8X6<e/"3:1[I)k8'/(%!"&m!r/)WrQrW�os.path�sys�django�databases.modelsr�plogical.DockerSitesr�plogical.httpProcrr�ru�environ�
setdefault�setuprK�plogical.aclrr;r�r�r�rrr	r
rrr
rrrrrr�plogical.virtualHostUtilitiesrr�r��plogical.installUtilitiesrrwrrr�loginSystem.modelsrr�packages.modelsr�plogical.mailUtilitiesr�randomrr�rCr��plogical.childDomainr�mathr�plogical.aliasr �plogical.applicationInstallerr!�plogicalr"r#�emailMarketing.emACLr$r(r&r�r(�ApachController.ApacheVhostsr)�plogical.vhostConfsr*�plogical.cronUtilr+r-r@�django.httpr.r=r/r6r6r6r7�<module>sV<