HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/websiteFunctions/__pycache__/website.cpython-310.pyc
o

��h���@s ddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ej�d�ej
�dd�e��ddlZddlmZddlmZdd	lmZdd
lmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%ddl&Z&ddl'Z'ddl(m)Z)dd
l*m+Z+m,Z,m-Z-ddl.m/Z/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7Z7ddl8Z8ddl9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?ddl@mAZAddlBmCZCmDZDddlEmFZFddlGmHZHddlImJZJddlKmLZLddlMmNZNddlOmPZPddlQmQZQddlRZRddlSmTZTddlUZUGd d!�d!�ZVdS)"�N)�	Databases)�Docker_Sites)�httpProcz/usr/local/CyberCP�DJANGO_SETTINGS_MODULEzCyberCP.settings)�
ACLManager��CyberCPLogFileWriter)
�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@seZdZdZdZdZ�dGdd�Z�dHdd�Z�dHd	d
�Z�dHdd�Z	�dId
d�Z
�dHdd�Z�dHdd�Z�dIdd�Z
�dIdd�Z�dGdd�Z�dHdd�Z�dGdd�Z�dHdd�Z�dHdd �Z�dGd!d"�Z�dGd#d$�Z�dHd%d&�Z�dGd'd(�Z�dGd)d*�Z�dHd+d,�Z�dHd-d.�Z�dHd/d0�Z�dHd1d2�Z�dHd3d4�Z�dHd5d6�Z�dHd7d8�Z�dHd9d:�Z �dGd;d<�Z!�dGd=d>�Z"�dGd?d@�Z#�dGdAdB�Z$�dGdCdD�Z%�dGdEdF�Z&�dGdGdH�Z'�dGdIdJ�Z(�dGdKdL�Z)�dGdMdN�Z*�dGdOdP�Z+�dGdQdR�Z,�dGdSdT�Z-�dGdUdV�Z.�dGdWdX�Z/�dGdYdZ�Z0�dGd[d\�Z1�dGd]d^�Z2�dGd_d`�Z3�dGdadb�Z4�dGdcdd�Z5�dGdedf�Z6�dGdgdh�Z7�dGdidj�Z8�dGdkdl�Z9�dGdmdn�Z:�dGdodp�Z;�dGdqdr�Z<�dGdsdt�Z=�dGdudv�Z>�dGdwdx�Z?�dGdydz�Z@�dGd{d|�ZAd}d~�ZBdd��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZG�dGd�d��ZH�dGd�d��ZI�dGd�d��ZJ�dGd�d��ZK�dGd�d��ZL�dGd�d��ZM�dHd�d��ZN�dHd�d��ZO�dGd�d��ZP�dGd�d��ZQ�dGd�d��ZR�dGd�d��ZS�dGd�d��ZT�dGd�d��ZU�dGd�d��ZV�dGd�d��ZW�dGd�d��ZX�dGd�d��ZY�dGd�d��ZZ�dGd�d��Z[�dGd�d��Z\�dGd�d��Z]�dGd�d��Z^�dGd�d��Z_�dGd�d��Z`�dHd�d��Za�dGd�d��Zb�dGd�d��Zc�dHd�d„Zd�dGd�dĄZe�dHd�dƄZf�dGd�dȄZg�dGd�dʄZh�dGd�d̄Zi�dGd�d΄Zj�dHd�dЄZk�dHd�d҄Zl�dGd�dԄZm�dHd�dքZn�dGd�d؄Zo�dGd�dڄZp�dJd�d܄Zqd�dބZrd�d�Zsd�d�Ztd�d�Zu�dGd�d�Zv�dGd�d�Zw�dGd�d�Zx�dHd�d�Zy�dGd�d�Zz�dHd�d�Z{�dGd�d�Z|�dId�d�Z}�dGd�d��Z~�dGd�d��Z�dHd�d��Z�d�d��Z��dGd�d��Z��dGd��d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d	�d
�Z��dG�d�d�Z��dG�d
�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��dG�d�d�Z��d�d�Z��dG�d�d �Z��dJ�d!�d"�Z��dG�d#�d$�Z��dG�d%�d&�Z��dG�d'�d(�Z��dH�d)�d*�Z��dG�d+�d,�Z��dI�d-�d.�Z��dI�d/�d0�Z��dH�d1�d2�Z��dG�d3�d4�Z��dG�d5�d6�Z��dG�d7�d8�Z��dG�d9�d:�Z��dG�d;�d<�Z��dI�d=�d>�Z��dG�d?�d@�Z��dI�dA�dB�Z��dG�dC�dD�Z��dG�dE�dF�Z�dS(K�WebsiteManagerr.��NcCs||_||_dS�N)�domain�childDomain)�selfr5r6�r8�./usr/local/CyberCP/websiteFunctions/website.py�__init__7s
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)r7�request�userIDrA�urlrK�response�Status�test_domain_status�
currentACL�
adminNames�packagesNamerF�rnpss�Data�procr8r8r9rI;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)Nr;�
wp-managerr=rr@rBr.�Default��pkz1https://api.wordpress.org/core/version-check/1.7/�offers��current)z5.6z5.5.3z5.5.2��ownerrC)rDrE�
WPVersions�PluginsrGrHzwebsiteFunctions/WPCreate.html�createDatabase��reverse�pricing)rrJrKrLrMrNr(rOrPrQrRrS�lenr�objects�get�loads�text�appendr�filterr%rUrVrr�django.shortcutsrpr)r7rWrXrArYrKrZr[r]r^r_�
FinalVersions�userobj�counterrl�versionsrmr`r\rarbrpr8r8r9�WPCreateYsT�

��


��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)Nrre�wpr.T)�id�titlerY�production_status�admin)�user_id�is_admin�wp_sites_count)�wpsiterB�total_sites�
debug_infoz!websiteFunctions/WPsitesList.html)rMrrQrrsrt�GetALLWPObjectsr
�checkOwnershiprkr5�delete�
BaseExceptionrwr�r��FinalURLrNrr�bool�countrr)r7rWrX�DeleteIDrMr]r�rA�wp_sites�WPDelete�msg�sites�site�contextrbr8r8r9�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)Nrer.r;rcr=rr@rBrCrGr�rHr��rfrkz websiteFunctions/WPsiteHome.htmlrnrorq)rrQr
rsrtrr�rkr5�	loadErrorrJrKrLrMrNr%rUrVr(rOrP�GETrr�r��strrrryrpr)r7rWrX�WPidr�rar]�WPobjr�rYrArKrZr[r`�wstagingDeleter��darbrpr8r8r9�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)Nrerc�	backupobjr.r>�FileName�
BackuptypezDataBase BackupzWebsite Backup�WPsitesz#websiteFunctions/WPRestoreHome.htmlrnrrorq)rrQrrsrt�CheckForPremFeaturer�CheckIPBackupObjectOwnerr�rMru�configr
�WPSiteIDr�rrryrpr)
r7rWrX�BackupIDrar]r�r�rbrpr8r8r9�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)Nrercr��
backupconfigs�SFTP�Hostname�Path)r��Type�HostNamer��S3�Provider�	Backblaze�	S3keynamez(websiteFunctions/RemoteBackupConfig.htmlrnrrorq)rrQrrsrtrr�r�r�r<rMrur��
configtyperwrfrrryrpr)r7rWrXr�rar]r��BackupconfigDelete�allcon�i�configrr�rbrpr8r8r9rsZ
�



�

����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)Nre�RemoteConfigIDrcr�)r�Backupschedulez%Y-%m-%d)r��Name�RemoteConfiguration�	Retention�	Frequency�LastRunz&websiteFunctions/BackupfileConfig.htmlrnrrorq)rrQrrsrtrrr�r�r�rx�lastrun�time�strftime�	localtime�floatrwrfr�r��
fileretention�timeintervelrrryrpr)r7rWrXr�r�rar]r��RemoteConfigobj�RemoteBackupConfigDelete�allsecheduler�r�r�rbrpr8r8r9�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)
Nre�RemoteScheduleIDrcr�rjr)r��Titlez)websiteFunctions/AddRemoteBackupSite.htmlrnrrorq)rrQrrsrtrrr�r�r�rxr
r�rwrfr�rrryrpr)r7rWrXr��DeleteSiteIDrar]r��RemoteBackupScheduleobj�RemoteBackupsitesDelete�allRemoteBackupsitesr�r�rbrpr8r8r9�AddRemoteBackupsitecs>
�
��z"WebsiteManager.AddRemoteBackupsitecCsi}t|d|d�}|��S)Nz'websiteFunctions/CyberpanelPricing.htmlrI)rr)r7rWrXrarbr8r8r9�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)Nrer;rcr=rr@rBr.rj�-idr>zrm -r /home/backup/%s.tar.gz�jobzWebsite Not Foundr��BackupDestinationzBackup type not exists)r�r�r�r�z$websiteFunctions/RestoreBackups.htmlrnrorq) rrQrrsrtrJrKrLrMrNr(rOrPrrx�order_byr�r�ru�executionerr�r�r
r�r�rwr�rrryrpr)r7rWrXr�rar]r�rYrArKrZr[�backobj�DeleteIDobjr��confr��commandr��subr��webr�r�rbrpr8r8r9�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�rer.rr)�/usr/local/lsws/lsphp%s/bin/phpr;rcr=r@rBrCzsudo -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://%srY�	autologin�userName�passwordzwebsiteFunctions/AutoLogin.htmlrnrorq)#r�rtrrQr
rsrr�rkr5r��managePHP.phpManagerr*�getPHPString�phpSelectionrJrKrLrMrNr(rOrPr%rU�externalApp�pathr�r��endswithrrryrpr)r7rWrXr�r]r�r�r*�php�FinalPHPPathrYrArKrZr[r�r�r�rbrpr8r8r9�	AutoLogin�sP
�

�

�
�zWebsiteManager.AutoLoginc
Csft�d�r't�|�}tjj|d�}tjj|d�}d|i}t|d|d�}|�	�Sddl
m}	t|	d	��S)
Nrcrerj�Selectedpluginsz(websiteFunctions/WPConfigurePlugins.htmlrnrrorq)
rr�rQrrsrtrrxrrryrpr)
r7rWrXrAr]r{r�rarbrpr8r8r9�ConfigurePluginss

�zWebsiteManager.ConfigurePluginscCslddlm}t�d�r0t�|�}t�|�}t�||�}t��}|||d�}	t	|d|	d�}
|
�
�St|d��S)Nrrorc�rDrErFz$websiteFunctions/WPAddNewPlugin.htmlrnrq)ryrprr�rQrRrSr*rTrrr)r7rWrXrArpr]r^r_rFrarbr8r8r9�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)	Nrc�
pluginnamezRhttp://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[search]=%srr.)rB�plugnszPremium feature not available.�rB�createWebSiteStatus�
error_message)
rr�rQr�rKrtrMrNrr�)r7rXrAr]r�rYrK�res�r�data_ret�	json_datar�r8r8r9�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)	Nrer�r�)r�r�rkrBr.r)rB�AddNewpluginAjaxr�)rrQrrsrtrrMrN�saverr�r�)r7rXrAr]r{r�r��addplr�r�r�r8r8r9r�Js 



��zWebsiteManager.AddNewpluginAjaxc
Cs�i}t�|�}tjj|d�}tjj|d�}t�|||�dkrnt��St�	|j
�}||d<||d<|j|d<t|d|d�}	|	�
�S)Nrer.r��	pluginbID�
BucketNamez"websiteFunctions/WPEidtPlugin.htmlrn)rrQrrsrtr�CheckIPPluginObjectOwnerr�rMrur�r�rr)
r7rWrXrrar]r��	pluginobj�lmorbr8r8r9�
EidtPlugincs

�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)	Nrer��pluginbBucketIDr�r.rBr�rB�deletesPlginr�)rrQrrsrtrrr�rMrur��removerNr�rr�r�)
r7rXrAr]r�r{r�r�obj�abr�r�r�r8r8r9r	ws0





��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)Nrer�rr�r.zindex.....%srzAlready Save in your Plugin lisrrB)rrQrrsrtrrr�rMrur��index�printr�rNrrwr�r�)r7rXrAr]r�r{r�r�pObj�listofpluginr
r�r�rr�r8r8r9�
Addplugineidt�sD



�




��zWebsiteManager.AddplugineidtcCs:t�|�}t�||�}t��}t|d||d�d�}|��S)Nz#websiteFunctions/modifyWebsite.html)�websiteListrF�
modifyWebsite)rrQ�findAllSitesr*rTrr)r7rWrXrAr]�websitesNamerFrbr8r8r9r�s

�zWebsiteManager.modifyWebsitecC�0t�|�}t�||�}t|dd|id�}|��S)Nz#websiteFunctions/deleteWebsite.htmlr�
deleteWebsite�rrQrrr�r7rWrXrAr]rrbr8r8r9r�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)
Nrer�NONEr;r<r=r@rBr.rCz"websiteFunctions/createDomain.html)rrFrGrH�defaultSite)rrQrrrsrtr�findWebsiteObjectsr�r�r	r5rJrKrLrMrNr(rOrPr%rUrr*rTr)r7rWrXrAr]rr��websites�
defaultDomainrYrKrZr[r\r`rbr8r8r9�CreateNewDomain�sR

���

��zWebsiteManager.CreateNewDomaincCr)Nz$websiteFunctions/suspendWebsite.htmlr�suspendWebsiterrr8r8r9�	siteStates
�zWebsiteManager.siteStatecCs.t�|�}|�||�}t|dd|i�}|��S)Nz"websiteFunctions/listWebsites.html�
pagination)rrQ�websitePaginationrr)r7rWrXrAr]r"rbr8r8r9�listWebsitess
�zWebsiteManager.listWebsitesc
CsHt�|�}t�|�}t�||�}t��}|||d�}t|d|�}	|	��S)Nr�z&websiteFunctions/listChildDomains.html)rrQrRrSr*rTrr)
r7rWrXrAr]r^r_rFrarbr8r8r9�listChildDomainss

�zWebsiteManager.listChildDomainscCs\t�|�}tjj|d�}t�|j�d�||�dkrnt��St|dd|j�d�i�}|�	�S)Nrer5r.zwebsiteFunctions/listCron.html)
rrQrrsrtr�r�r�rr�r7rWrXrAr]r�rbr8r8r9�listCrons
�zWebsiteManager.listCroncCszt�|�}tjj|d�}t�|j||�dkrnt��St|j�}|�	�\}}d|jd}	t
|d|j||	|d��}
|
��S)Nrer.�/home/�/public_htmlz!websiteFunctions/domainAlias.html)�masterDomain�aliasesr��noAlias)rrQrrsrtr�r5r�r"�fetchAlisForDomainsrr)r7rWrXrAr]r��aliasManagerr,�
finalAlisListr�rbr8r8r9�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)Nrer�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|�qSr8��strip��.0�pr8r8r9�
<listcomp>j�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)rBr��ret_data�rB�
installStatusr�)"rrQrrsrtr
r�rkr5r�r�r	�owner_idr�r�r�r(�outputExecutioner�html�escaper6rr�split�find�int�
splitlines�os�exists�rstriprMrNrr�r�)$r7rXrAr]r��WPManagerIDr�r��Webobj�Vhuser�
PHPVersionr�r�r�rC�lscachee�currentTheme�plugins�pluginCountrD�stdoutrE�items�	stdoutput�searchindex�maintenanceMod�resultrG�	vhostName�vhostPassDir�passwdrI�fbr�r�r�r8r8r9�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)Nrer�r.r�zosudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --skip-plugins --skip-themes --format=json --path=%sr�rM)rBr�rbrrO�rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�r(rRrXrMrNrr�r��r7rXrAr]r�r\r�r�r]r^r_r�r�r�rfr�r�r�r8r8r9�GetCurrentPlugins��8


�



��z WebsiteManager.GetCurrentPluginsc
Cro)Nrer�r.r�znsudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --skip-plugins --skip-themes --format=json --path=%sr�rM)rBr��themesrrOrprqr8r8r9�GetCurrentThemes�rszWebsiteManager.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)
Nrer�r.r��phpUtilitiesr�rM)rBr��wpsitesrO)rrQrrsrtr
r�rkr5r��plogical.phpUtilitiesrw�GetStagingInJson�
wpstaging_setr<r�rMrNrr�r�)r7rXrAr]r�r\r�rwr�r�r�r8r8r9�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)Nrer�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�rBr�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=rM)rBr��DataBaseUser�DataBaseName�tableprefixrO)rrQrrsrtr
r�rkr5r�r*r�r�r�r(rRr�rVr[rSrTrMrNrr�r�)r7rXrAr]r�r\r�r�r�r��	retStatusrfr�r�r�rr�r�r8r8r9�
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)Nrer�rm�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=rMr~rrO)rrQrrsrtr
r�rkr5r�r*r�r�r�r(rRr�rVr��AutoUpdates�
PluginUpdates�ThemeUpdatesr�rMrNrr�)r7rXrAr]r�r\rmr�r�r�r�r�r�rir�r�r�r8r8r9�SaveUpdateConfigYsT

��



��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)Nrer��	StagingIDr.�adminID�
statgingID�/home/cyberpanel/���'�tempStatusPath�DeploytoProductionr2rM�rBrPr�r�rrO�rrQrrsrtr
r�rkr5r�rfr�rr#�startr��sleeprMrNrr�)r7rXrAr]r�r\r�r��
StagingObj�	extraArgs�
backgroundr�r�r�r8r8r9r��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)Nrer�r�r.r�r�r�r�r��WPCreateBackupr2rMr�rrOr�)
r7rXrAr]r�r\r�r�r�r�r�r�r�r8r8r9r��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)Nre�backupid�DesSite�Domainr��	DesSiteIDr��homer�r�r�r��RestoreWPbackupNowr2r.rMr�rrO�rrQrrsrtrfr�rr#r�r�r�rMrNrr�)
r7rXrAr]r�r�r�r�r�r�r�r�r�r8r8r9r��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)Nre�typer��Hname�Uname�Passwdr�)r��Username�Passwordr�r�r�r�r��	SecertKey�	AccessKey�EndUrl)r�r�r�r�r�)r�r�r�r�)rkr�r�r.rMr~r)rrQrrsrtrrMrNr�r�r�rr�r�)r7rXrAr]r��
ConfigTyper�r�r�r�r�r�r�r�r�r��mkobjr�r�r�r8r8r9�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)Nre�
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.rM)rrQrrsrtrrMrur��boto3�session�Session�clientr%rUrV�
create_bucketr��loggingr�writeToFiler�rNrrr�r�)r7rXrAr]r�r�r�r�r�r��RemoteBackupConfigobj�Rconfig�provider�EndURlr�r�r�r�rr�r�r�r��svobjr8r8r9�SaveBackupScheduleRsz


�	
��
���
�



��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)Nre�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)rkr��databaserMr~r)rrQrrsrtr
r�rkr�r�r*r�r(rRrVr�r[rr�rrrfr�rMrNr)r7rXrAr]r�r�r��	wpsiteobj�WPpath�VHuser�
PhpVersionr�r�r�rird�Finaldbname�DBobj�RemoteScheduleIDobjr�r�r�r�r8r8r9�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)	Nre�
ScheduleIDr�r�r.rMr~r)rrQrrsrtrr�r�r�rMrNrr�r�)r7rXrAr]r�r�r�r��scheduleobjr�r�r�r8r8r9�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)Nrez/home/%s/public_html/zcat %swp-config.php�No such file or directoryr�)r��Enabled)rkr�r�r�r�r�r�r�zcat %s/wp-config.phpr.rMr~r)rrQrrsrtr	r<r
r5r(rRr�rYr�rZ�	debugPathr�rr�rVr
r�r[�masterrMrNrr�r�)r7rXrAr]r��allweb�childdomainr��webpathr�ri�wpobj�chlid�	childPath�
fChildPathr�r�r�r8r8r9�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)Nrer�r.r�r1Tr<�sudo -u � zQ -d error_reporting=0 /usr/bin/wp core download --force --skip-content --version=z --path=rM�rBrPr�rirrO)rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�r(rRr[rMrNrr�r�)r7rXrAr]r�r\r�r�r]r^r_r�r�r�rC�outputr�r�r�r8r8r9�
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)
Nrer�r.r�zksudo -u %s %s -d error_reporting=0 /usr/bin/wp core verify-checksums --skip-plugins --skip-themes --path=%srMr�rrO)rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�r(rRrMrNrr�r�)r7rXrAr]r�r\r�r�r]r^r_r�r�r�rir�r�r�r8r8r9�
dataintegrityAs6


�



��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)Nrer��plugin�pluginarrayr.r�r�r�r�r^�UpdateWPPluginr2rMr~rrO�rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�rfr#r�r�r�rMrNrr�r��r7rXrAr]r�r\r�r�r�r�r]r^r_r�r�r�r�r�r�r�r8r8r9�
UpdatePluginsh�F









��zWebsiteManager.UpdatePluginsc
Cr�)Nrer��Theme�
Themearrayr.r�r�r�r�r^�
UpdateWPThemer2rMr~rrOr��r7rXrAr]r�r\r�r�r�r�r]r^r_r�r�r�r�r�r�r�r8r8r9�UpdateThemes�r�zWebsiteManager.UpdateThemesc
Cr�)Nrer�r�r�r.r�r�r�r�r^�
DeletePluginsr2rMr~rrOr�r�r8r8r9r��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)Nrer�r�r�r.r�r�r�r�r^�DeleteThemesrMr~rrO)rrQrrsrtr
r�r	rQr�rkr5r�r�r�r�rfr#r�rMrNrr�r�r�r8r8r9r��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)Nrer�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=%sr3zhsudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin activate %s --skip-plugins --skip-themes --path=%srMr~rrO)rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�r(rRrVr�r�rMrNrr�r�)r7rXrAr]r�r\r�r�r�r]r^r_r�r�r�rfr�r�r�r8r8r9�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)Nrer�rJr.r�r�r�r�r�r^�ChangeStatusThemesrMr~rrO)rrQrrsrtr
r�rkr5r�r�r	rQr�r�r�rfr#r�rMrNrr�r�)r7rXrAr]r�r\r�r�r�r]r^r_r�r�r�r�r�r�r�r8r8r9r�Xs@








��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)Nrer��
StagingDomain�StagingNamer�r�r�r�r�r.�CreateStagingNowr2rMr�rrO)rrQrrsrtrfr�rr
r�rkr5r�r#r�r�r�rMrNrr�)r7rXrAr]r�r�r�r�r�r�r�r8r8r9r��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-indexingrEzmaintenance-moderDrI)�PasswordProtectionrFrErGrD�Wpcron�siteIdr�rzMissing siteId or WPidr~�setting�settingValue�valuerer.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
�w�	mkdir -p �mv zrm -rf �rm -f rM�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�)"rtr0rrQrrsr
r�rkr5r�r	rQr�r�r�r�r�rrY�makedirsr%rUr(r��open�writerZrMrrNrRrVr�)r7rXrA�setting_mapr��respr��old_keyrr]r�r�r]r^r_r�r�r�rjrkr��tempPath�htpasswd�htaccessr��htaccess_content�frMrir�r8r8r9�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)&Nrer]r�r5�
domainName�	WPVersionr��	blogTitle�pluginbucketz-1�	adminUser�PasswordByPass�
adminPassword�Email�
adminEmailr��updatesrmr��websiteOwner�packager��
apacheBackendr���1r�r�r�r��wordpressInstallNewr2r.rMr�rrOr��
r7rXrAr]r�r�r�r�r�r�r8r8r9�submitWorpressCreation0s\


�

�


��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?r5rr@rBr�rOre�r�rIr�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 %sr2rM)rBr�r�r��	LinuxUser)#rrQrVrVrJrKrLrMrNrrrsrt�currentContextPermission�
loadErrorJson�checkOwnerProtection�CheckDomainBlackList�
validatorsr5�email�join�re�findallr�rr	r��pwdr�
cyberPanelr(�popenExecutionerr�r�r�)r7rXrAr]r5rr��packageNamerrY�domain_datarKrZ�
domain_statusr�r��
loggedUser�newOwnerr-r�r|�tWebr�r r3rG�execPathr�r8r8r9�submitWebsiteCreationbs�
�








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

�


��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)2Nre�aliasrr*rr�r��.confr.r �r5r�r�r�r,r�r&r�r'r(r)r@rBr�rOr��..r�r;r�r(r)r2r4r5z createDomain --masterDomain � --virtualHostName r7z' --ssl r9r:z --path � --websiteOwner � --tempStatusPath r<� --aliasDomain r2rM)rBr�r�r�)#rrQrrsrtr+�configBasePathrYr�rZr	r�r�rrBr5rMrNrrVrJrKrLr�r?rr�lstriprrHr�r(rIr�r�r�)r7rXrAr]r�rRr*r5r�r��
apachePathr�r�r�rYrKrKrZrLr rPr�r8r8r9�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)
Nrer*rRrr.�fetchStatusrM)rBr^r�rA�rBr^r�)rrQrrsrtr�r?r �findChildDomainsJsonrMrNrr�r�)r7rXrAr]r�r*rR�	cdManagerr��
final_jsonr��	final_dicr8r8r9�fetchDomains1	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.�pagerM�rB�listWebSiteStatusr�rAr"r�rBrhr�)
rrQ�searchWebsitesJsonr��getFurtherAccountsr#rMrNrr�)r7rXrAr]r�r��tempDatar"rcrb�dicr8r8r9�searchWebsitesM	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)Nre)�domain__istartswithr.rM)rBrhr�rArri)rrQr�childdomains_setrxrw�findChildsListJsonrMrNrr�r�)
r7rXrAr]r�childDomainsr��childr�rcrbr�rmr8r8r9�searchChildsa	s$
�



��zWebsiteManager.searchChildsc
Cs�z*t�|�}t|d�}|�|||�}|�||�}ddd||d�}t�|�}t|�WStyM}	zddt	|	�d�}
t�|
�}t|�WYd}	~	Sd}	~	ww)Nrfr.rMrgrri)
rrQrW�findWebsitesJsonr#rMrNrr�r�)r7rXrAr]�
pageNumberr�r"rcrbr�rmr8r8r9rkv	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)
Nrf�
recordsToShowzFetch sites step 1..zFetch sites step 2..zFetch sites step 3..zFetch sites step 4..zFetch sites step 5..r.rMrgrri)rrQrWrYr�rZr(r�r�rr��recordsPointerr�
getPaginationrr�findWebsitesListJsonrMrNrr�r�)r7rXrAr]rvrw�
endPageNumber�finalPageNumberrr"r�rcrbr�rmr8r8r9�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)
Nrfrwr��alaiszmail.r.rMrgri)rrQrWrxrrprxr5rwryrrrqrMrNrr�r�)r7rXrAr]rvrwr{r|rrrr�rsr"r�rcrbr�rmr8r8r9�fetchChildDomainsMain�	s4
��


��z$WebsiteManager.fetchChildDomainsMaincCszd}t|�}|��}|�dd�d}Wnty2}ztj�dt|��d}WYd}~nd}~wwg}|D]N}g}	ztj	j
|d�}	dd	�|	D�}	WnYt�|�\}
}}}
d
t|
�}|j
dkrfdnd}|�|j�}|�|j|j|j|||jj|jj|	||d
�
�q7t�|�S)N�/etc/cyberpanel/machineIPr<r.r�!Failed to read machine IP, error:�
192.168.100.1rjc	S�Bg|]}|j|j|jt|d�r|jndt|d�r|jndd��qS�rC�UnknownrL)r�r�rYrCrL�r�r�r��hasattrrCrL�r8rr8r8r9r:�	��
�z7WebsiteManager.findWebsitesListJson.<locals>.<listcomp>�%sMB�Active�	Suspended)
r5rrL�state�	ipAddressrr�r��diskUsed�ssl)r	�readrUr�r�rr�r�r
rsrxr�	FindStatsr��getSSLStatusr5rwrr�rrJr�r�rMrN)r7r�ipFiler�ipDatar�r�r��websiter��	DiskUsage�DiskUsagePercentage�bwInMB�bwUsager�r��
ssl_statusr8r8r9rz�	sJ��
�
�
z#WebsiteManager.findWebsitesListJsonc
CsD�z�ddl}ddlm}d|}tj�|�s�|�d�}t|�dkr�d�|dd��}d|}tj�|�r�zB|j�	|jj
t|d����}d}	|�
���D]}
|
d�d	�d
kr_|
d�d	�}	nqK|	rl|	�d�rl|}d
}n	ddddd�WWSWnddddd�YWSddddd�WSddddd�WSd}|j�	|jj
t|d����}|���d�}|�|d�}
|��}|
|}|j}d}|����D]}
|
d�d	�dkr�|
d�d	�}nq�|s�d}|�sd}	|�
���D]}
|
d�d	�d
kr�|
d�d	�}	nq�|	�r|	�d��rd
}d}d}d}|����D]}
|
d�d	�d
k�r)|
d�d	�}n�q|�
���D]}
|
d�d	�d
k�rF|
d�d	�}n�q1|�rU|�rU||k�rUd
}|��|�
�k�r`d
}|�rfd}n|dk�rnd}n|dk�rvd}n
|dk�r~d}nd}||||d�WSt�y�}z
ddddd�WYd}~Sd}~ww)zGet SSL status for a domainrN��datetime�&/etc/letsencrypt/live/%s/fullchain.pem�.r2���r��utf-8�CNr.z*.T�noner!F)rB�days�issuer�is_wildcard�ascii�
%Y%m%d%H%M%SZ�Or�zself-signed�expiredrh�expiring��warning�valid)�OpenSSLr�rYr�rZrUrrrD�crypto�load_certificate�FILETYPE_PEMr	r��get_subject�get_components�decode�
startswith�get_notAfter�strptime�nowr��
get_issuer�	Exception)r7r5r�r��filePath�parts�
parent_domain�
wildcard_path�x509�cn�	componentr��
expireData�	finalDater��diffr��
issuer_org�is_self_signed�	issuer_cn�
subject_cnrB�er8r8r9r��	s�
��������


���zWebsiteManager.getSSLStatusc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�[rr�r<r.r�r�rvre�/usr/local/lsws/conf/vhosts/�/vhost.conf�PHP 8.1r�r���user)
r�r5rr�r�rr��CPU�RamrL�,�])r	r�rUr�r�rr�r�ryrwr	rsrtr�rfr5�,WrapGetPHPVersionFromFileToGetVersionWithPHPr�rrr�rr�rW�	CPUsMySQL�CPUsSite�
MemorySite�MemoryMySQLrMrN)r7�
Dockersiter��checkerr�rr�r�r�rwrer��vhFile�PHPVersionActualr��dpkgrmr8r8r9�findDockersitesListJsons
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�rr�r<r.r�r�)r5r*rr�r�rr�r�r�)r	r�rUr�r�rr�r�r5r�rr�r�rrJr�rMrN)r7�childsr�r�r�rr�r�r�rermr8r8r9rq�
s0���z!WebsiteManager.findChildsListJsoncCs|||}||}||fSr4r8)r7rf�toShowr|r{r8r8r9rx�
szWebsiteManager.recordsPointercCslt|�t|�}g}d}|dkrd}|�|�|St|�}t|�d}td|�D]}|�|�|d}q(|S)Nr.��?)r�rwr!rW�range)r7�recordsr��pagesr"r|�
finalPagesr�r8r8r9ry�
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�websiteDeleteStatusrer.r4r5z3 deleteVirtualHostConfigurations --virtualHostName )�GDriveSitesrTrM�rBr�r�)rVrrJrKrLrMrNrQr>r?rrsrtr�rrHr(rI�websiteFunctions.modelsr�rxr�rr�r�)r7rXrArYrKrKrZr]r�r�rPr�r�r�r�r8r8r9�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@re�
DeleteDocRootr.r�r4r5z  deleteDomain --virtualHostName z --DeleteDocRoot %srMr�)rVrrJrKrLrMrNrQrrsrtrWr�r?rrHr�r(rRrr�)r7rXrArYrKrKrZr]r�r�r�rPr�r�r�r8r8r9�submitDomainDeletionsB�
�



��z#WebsiteManager.submitDomainDeletionc$Cs�	�z�t�|�}t�|d�dkrt�dd�WS|d}|d}tjj|d�}tjj|d�}t�|||�dkr6nt�dd�WS|d	k�r�t	j
d
|}|d}	d}
tj�
|
�s�d
}zAtj�|
�}tj�
|�snd|��}
t�|
�d}t|d��
}|�|�Wd�n1s�wYd|�d|
��}
t�|
�WnYzd|
��}
t�|
�d|
��}
t�|
�WnYd}zgt|	d��}|��}Wd�n1s�wYd|v�r d}t�||tjtjB�r�tj|dd�|tjtjBd�}|d|}t|	d��
}|�|�Wd�n	1�swYd|	��}
t�|
�Wn�t�y�}z�d|	��}
t�|
�}|�r�d|v�r�d}t�||tjtjB��rYtj|dd�|tjtjBd�}|d|}ddl}|jddd d!��}|�|�|j}Wd�n	1�swYd"|�d|	��}
t�|
�d|	��}
t�|
�zt�|�WnYWYd}~nd}~ww|j� �}|D]�}t	j
d
|j!}|d}z�zLt|d��}|��}Wd�n	1�s�wYd|v�r|d|}t|d��
}|�|�Wd�n	1�swYd|��}
t�|
�Wnjt�y~d|��}
t�|
�}|�r|d|v�r||d|}ddl}|jddd#d!��}|�|�|j}Wd�n	1�sTwYd"|�d|��}
t�|
�d|��}
t�|
�zt�|�WnYYnwW�q�t"�y�}zt#�$d$|j!�d%t%|����WYd}~�q�d}~wwt&�'�d|_(�n�t	j
d
|}|d}	zft|	d��}|��}Wd�n	1�s�wYd|v�rd&}tj|d'|tjd�}d(}d)d*�} t�||��r�t�|| |�}t|	d��
}|�|�Wd�n	1�swYd|	��}
t�|
�Wn�t�y�d|	��}
t�|
�}|�r�d|v�r�d&}tj|d'|tjd�}d(}d+d*�} t�||��rXt�|| |�}ddl}|jddd d!��}|�|�|j}Wd�n	1�sxwYd"|�d|	��}
t�|
�d|	��}
t�|
�zt�|�WnYYnw|j� �}|D]�}t	j
d
|j!}|d}z�zRt|d��}|��}Wd�n	1�s�wYd|v�r
d&}tj|d'|tjd�}t|d��
}|�|�Wd�n	1�s�wYd|��}
t�|
�Wnpt�y{d|��}
t�|
�}|�ryd|v�ryd&}tj|d'|tjd�}ddl}|jddd#d!��}|�|�|j}Wd�n	1�sQwYd"|�d|��}
t�|
�d|��}
t�|
�zt�|�WnYYnwW�q�t"�y�}zt#�$d,|j!�d%t%|����WYd}~�q�d}~wwt&�'�d|_(|�)�dd-d.�}!t*�+|!�}"t,|"�WSt"�y�}#z t#�$d/t%|#����dt%|#�d.�}!t*�+|!�}"t,|"�WYd}#~#Sd}#~#ww)0Nr r�
websiteStatusr�r�rTrer.�Suspend�
/conf/vhosts/r�z3/usr/local/CyberCP/websiteFunctions/suspension.htmla�<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Website Suspended</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f5f5f5;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
        .container {
            text-align: center;
            background-color: white;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            max-width: 500px;
        }
        h1 {
            color: #e74c3c;
            margin-bottom: 20px;
        }
        p {
            color: #555;
            line-height: 1.6;
            margin-bottom: 20px;
        }
        .contact {
            color: #777;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Website Suspended</h1>
        <p>This website has been temporarily suspended. This could be due to various reasons including billing issues, policy violations, or administrative actions.</p>
        <p>If you are the website owner, please contact your hosting provider for more information about why your account was suspended and how to restore service.</p>
        <p class="contact">For support, please contact your system administrator.</p>
    </div>
</body>
</html>rz%/home/cyberpanel/suspension_temp.htmlrrr�zchown lsadm:lsadm z
chmod 644 a�# Website Suspension Configuration
context /{
  location                        $DOC_ROOT/
  allowBrowse                     1
  
  rewrite  {
    enable                  1
    autoLoadHtaccess        0
    rules                   <<<END_rules
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/cyberpanel_suspension_page\.html$
RewriteRule ^(.*)$ /cyberpanel_suspension_page.html [L]
END_rules
  }
  
  addDefaultCharset               off
}

context /cyberpanel_suspension_page.html {
  location                        /usr/local/CyberCP/websiteFunctions/suspension.html
  accessible                      1
  extraHeaders                    X-Frame-Options: DENY
  allowBrowse                     1
}
# End Website Suspension Configuration
r�z"# Website Suspension Configurationz^(rewrite\s*\{[^}]*\})cS�d|�d��dd�S�Nz## Commented out during suspension
#rr<z
#��group�replace��mr8r8r9�<lambda>��z4WebsiteManager.submitWebsiteStatus.<locals>.<lambda>)�flagsr<�cat cSr�r�r�r�r8r8r9r��r�F�cyberpanel_)�moder��prefixzcp �cyberpanel_child_zError suspending child domain z: zM# Website Suspension Configuration.*?# End Website Suspension Configuration\nr!z3# Commented out during suspension\n((?:#[^\n]*\n)+)cS�&|�d�}d�dd�|��D��}|S)Nr.r<cs�*�|]}|�d�r|dd�n|VqdS��#r.N�r��r8�liner8r8r9�	<genexpr>D��"��VWebsiteManager.submitWebsiteStatus.<locals>.restore_commented_block.<locals>.<genexpr>�r�rDrX��match�commented_block�restored_blockr8r8r9�restore_commented_blockA�


�zCWebsiteManager.submitWebsiteStatus.<locals>.restore_commented_blockcSr)Nr.r<csrrrrr8r8r9r
arrr
rr8r8r9r^rz Error unsuspending child domain rM)r�r�zError in submitWebsiteStatus: )-rrQr>r?r	rsrtrr�r�Server_rootrYr�rZ�dirnamer(r�r	r
r�rE�search�	MULTILINE�DOTALLr��IOErrorrR�tempfile�NamedTemporaryFiler>r
rpr<r5r�rr�r�r�reStartLiteSpeedSocketr�r�rMrNr)$r7rXrAr]r�r�r�r��confPath�
vhostConfPath�suspensionPagePath�defaultSuspensionHTML�dirPathr��tempFiler�suspensionConf�vhostContent�rewrite_pattern�modifiedContentr�r�tmpfilerrre�
childConfPath�childVhostConfPath�childVhostContent�childModifiedContent�
childTempFile�pattern�commented_rewrite_patternrr�r�r�r8r8r9�submitWebsiteStatus6s�

1

�



�

��

�


�
�


��
*
�
�

�


�


���*��

�
��

�

�
�


��
)
�
�

�


�


���*��



��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�modifyStatusre�websiteToBeModifiedr.r�r��packr�r�r^rTrM)rBr0r�r�packages�current_packr^�currentAdmin)rBr0r�)rrQr>r?rrsrtr�rSrRrMrNr	rrrJr�r�rr�r�)r7rXrAr]r��packs�adminsr�r�rerm�
admin_datar1�	modifyWebrC�currentPackrkr�rbr�r8r8r9�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)
NrIrr�r�r2r.r�r�r^rM)rBr�r3r^r~)rrQr>r?rSrRrMrNrr�r�)r7rXrAr]r6r7r�r�rermr8r�rbr�r8r8r9�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�}||_||_||_|
|_|��|jr�|j�d|j�d�}d|j�d|�d�}t�|�d}t�|�d
d
dd�}t�|�}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr5�
packForWebrCrLr�rr�
saveStatusrer.r�r*r�r�r4r5� changePHP --phpVersion '�	' --path rT)rJzM �Mzsetquota -u r�z 0 0 /z^/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py UpdateDiskUsageForcerM�rBr>r�)rrQr>r?rrsrtr��checkUserOwnerShiprrrHr(rIr	rrrr�r�r��enforceDiskLimits�	diskSpacer�r�rRrMrNrr�r�)r7rXrAr5rrCrL�newUserr]r�rNr�completePathToConfigFilerPr9�webpack�spaceStringr�r�r�r�r8r8r9�saveWebsiteChanges1
sZ






��z!WebsiteManager.saveWebsiteChangesc?
Cs2tjj|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�Wn3z|;dP|6dRdT�}=|=�N�|:�OdR|6dS�Wnt.�yc}z
|(�1t*|��WYd}~nd}~wwYWnt7�y�}+z|(�DdU|+���WYd}+~+nd}+~+wwtP|dV|�}>|>�Q�StP|dVddWdX��}>|>�Q�S)YNrTrer.rr'�marketingStatus�ftpTotal�ftpUsed�
databasesUsed�databasesTotalr5�bwInMBTotalr�r��d�	diskUsage�diskInMB�
diskInMBTotalrF�/home/cyberpanel/postfixrCr�r�r�r�r��viewSSLr�r��	authority�Denial�%s has SELF-SIGNED SSL.�%s has SSL from %s.�/home/cyberpanel/pureftpd�ftpr;r<r=r@rB�
has_addonsF�/manageSSL/sslForHostNamer�T�is_selfsigned_ssl�ssl_issue_linkr�:�!Error detecting accessed_via_ip: �accessed_via_ip�(/usr/local/CyberCP/fastapi_ssh_server.pyr��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.��errorr5)Rr	rsrxr5rZrrQrtrr�r��plogical.processUtilitiesr(r&�checkIfEMEnabledr�r�ftpAccounts�	users_setr<r��
databases_set�	dataBasesrr��	bandwidthrEr*rTrYr�r�r�r�r�r�r	r�r�r�r�r�r�r�r�r�r�r�rr�rJrKrMrLrNr�r�rOrP�plogical.CyberCPLogFileWriter�get_hostrU�	ipaddress�
ip_address�
ValueError�secretsrR�
token_urlsafe�writeLog�firewall.firewallManagerr~�modifyPorts�plogical.firewallUtilitiesr��firewall.modelsr��
deleteRuler�r��addRulerr)?r7rWrXrAr]r�r�rar(rKr�r�r�r�rY�servicePathr�r�r�r�r�r�r�r�r�rY�
addon_datarKrMrZr[�	cert_path�
is_selfsignedr`r�pem_data�certr��k�vrrc�hostr�r��fastapi_file�content�
new_secret�sed_cmdr��service_path�local_service_path�
check_service�csfPath�sshPort�dataInr~�firewallManagerr�r��updateFW�newFireWallRulerbr8r8r9�loadDomainHomex
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)&NrTrer.rLrMrNrOr5r6rPr�r�rQrRrSrTrFrUrCrr[r\r�r�r�r�r�rVr�r�rWrXrYrZz!websiteFunctions/launchChild.htmlz!This child domain does not existsr�)1r
rsrxr6rZrrQrrtr�r5r�r	rr�r�r<r�r�r�rr�r�rEr*rTrYr�r�r�r�r�r�r	r�r�r�r�r�r�r�r�r�r�r�rr�rr)r7rWrXrAr]r�r�rar�r�r�r�r�r�r�r�r�r�r�r�r�r�rbr8r8r9�launchChildZsz





�����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)#Nre�logType�virtualHostrfr.�	logstatusrr(�/logs/z.access_log�
.error_log�	ls -la %s�->r��Symlink attack.�rBr�r�rT�1,Nonez?Not able to fetch logs, see CyberPanel main log file, Error: %sr<r�rCr�r0�"r3r���	r!)r5r�r��resource�sizer�rM�rBr�r�rA)rrQrrsrtr5r�r?r(rRrVrMrNrr	r�
getAccessLogsr�rU�reversedrrr6r�)r7rXrAr]r�r�rf�fileNamer�rirbr�r�r�r�re�logDatar5r�r�r�r�rmr8r8r9�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)Nrer�rfr.r�rr(r�r�r�r�r�r�r�rTr�z5Not able to fetch logs, see CyberPanel main log file!rMr�)rrQrrsrtr5r�r?r(rRrVrMrNrr	r�getErrorLogsr�)r7rXrAr]r�rfr�r�rirbr�r�r8r8r9�fetchErrorLogs�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)Nrer�r.�configstatusr�cat %s�&/usr/local/lsws/conf/dvhost_redis.conf�	127.0.0.1r�r�r�r��lsadmz&Configuration file is currently empty!)rBr�r�zredis-cli get "vhost:%s"zU#### This configuration is fetched from redis as Redis-Mass Hosting is being used.
%s)rBr��
configData)rrQrrsrtr5r�r?r(rRrVr�Server_root_pathrrrMrNr)
r7rXrAr]r�r�r�r�rBrbr8r8r9�getDataFromConfigFiles0


�

�
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�r�zOError: you are trying to save empty vhost file, your website will stop working.)r�r�r�r�r�r�r�r�r�rr�r�r4r5z saveVHostConfigs --path � --tempPath r�zredis-cli set vhost:%s '%s'zS#### This configuration is fetched from redis as Redis-Mass Hosting is being used.
r!)rrQr?r5rrrMrNrr(rRrVr�	checkHomer�rr	r
�closerr�rrHr�r�)r7rXrAr]r�rBrbr�r�vhostr�rPr�r�r�r8r8r9�saveConfigsToFileAsD










�

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)Nrer�r.�
rewriteStatusrrTrr(�/public_html/.htaccessr�zRules file is currently empty�r�r�)r��rewriteRulesr!)r�r�r�)rrQrrsrtr5r�r?r
r�r�r�r	r(rRrrrMrNrr�r�)r7rXrAr]r��childDomr�r�r�r�r�rBrbr�r8r8r9�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)Nrer�r�r�r.r�r�/tmp/r�r��wbrTrr(r�zcp %s %szrm -f %s�
cyberpanelrMr�)rrQrrsrtr5�encoder�r?rr�r�rr	r
r�r
r�r�r�r	r(r�rrrMrNrr�)r7rXrAr]r�r�rr�r6r�r�r�r�rBrbr�r8r8r9�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)Nrer��keyr�r.�	sslStatusrr�r�r�rr4r5z saveSSL --virtualHostName z --tempKeyPath z --tempCertPath r�r�rM)r�r�)rrQrrsrtr5r�r?rr�r�rr	r
r�rrHr(rRrVrMrNrr�rr�)r7rXrAr]r�r�r��tempKeyPathr��tempCertPathrPr�r�r�r8r8r9�saveSSL�s<








�

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)Nrer6r�r.�	changePHPrr�r�r4r5r?r@rTr~zError changing PHP for alias: rM)rBr�r�)rrQrrsrtr5r�r?rrrHr(rIr	r�r�rprxr�r�rr�r�r
rMrNr)r7rXrAr]r�rLrrGrPr�rRr�r�r�r8r8r9r�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)Nrer5r.�getWebsiteCronrrT�You do not own this domain�r�r�r4�/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�r0r�r2r3�)r	�minute�hour�monthday�month�weekdayr�)"rrQrrsrtr5r�r?r	rxrZrMrNrr-�CronPremrrHr�r(rR�decideDistro�centos�cent8rVr�rUrrrwr�r�rr�r�)r7rXrAr]r�r�rmr�r�rPr�cronPathr�r�rbr|r	rUr�r8r8r9r�4sr











��


��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)Nrer5r	r.r�rrTr�r�r4r�r�zUnable to access Cron filer<r�r0r�zCron line incorrectr2r3r�)r�r�r�r�r�r��r�r��cronr	)rrQrrsrtr5r�r?r	rxrZrMrNrr-rrrHr�r(rR�
subprocess�CalledProcessErrorrUrrr�rr�)r7rXrAr]r�r	rmr�r�rPrr�rr�rbr�r8r8r9�
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)Nrer5r	r�r�r�r�r��cronCommandr.r�rrT�%s %s %s %s %s %sr4r�z saveCronChanges --externalApp � --line � --finalCron 'ri�1,r�rr�)rrQrrsrtr5r�r?r	r-rrrHr�r�r(rRrVrMrNrr�)r7rXrAr]r�r	r�r�r�r�r�r�r��	finalCronrPr�r�rbrmr�r�r8r8r9�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)Nrer5r	r.�
addNewCronrrTr4r�z remCronbyLine --externalApp rrr�r�)�
remCronbyLiner��
removeLiner	)rr�)rrQrrsrtr5r�r?r	r-rrrHr�r�r(rRrVrUrMrNrr�)r7rXrAr]r�r	r�rPr�r�rbrmr�r�r8r8r9r�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)Nrer5r�r�r�r�r�r
r.rrrTr�r�ztouch %s�rootr�rr4r�z addNewCron --externalApp r
rizchmod 600 %szsystemctl restart cronrr�)rr�r)rr�)rrQrrsrtr5r�r?r	r(rrrr�r�r-rrrHrR�ubuntu�ubuntu20rVrMrNrr�r�)r7rXrAr]r�r�r�r�r�r�r�r�r�commandTrrPr�r�rbrmr�r�r8r8r9rs`






�





��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)Nrer*�aliasDomainr�rr,)rB�createAliasStatusr�r.rr(r)r4r5z createAlias --masterDomain rYr8� --sslPath r6rWr�r�)rr��existsStatusrM)rrQrrsrtr5rBrMrNrr�r?rrHr�rCr�r(rRrVr�)
r7rXrAr]r�rr�r�r��sslpathrPr�r�r8r8r9�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)Nrer*rr.r�rr(r)r4r5z issueAliasSSL --masterDomain rYrr6r�r�rM)r�r�r)rrQrrsrtr5r�r?�AliasDomainCheckrrHrCr(rRrVrMrNrr�r�)r7rXrAr]r�rrrPr�r�r�r�r8r8r9�
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)Nrer*rr.�deleteAliasrr4r5z deleteAlias --masterDomain rYr�r�rM)r r�r)rrQrrsrtr5r�r?rrrHr(rRrVrMrNrr�r�)r7rXrAr]r�rrPr�r�r�r�r8r8r9�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.�changeOpenBasedirrr4r5z& changeOpenBasedir --virtualHostName 'z' --openBasedirValue rM)rBr#r�)
rrQr5r?rrHr(rIrMrNrr�r�)
r7rXrAr]r"rPr�r�r�r�r8r8r9r#�s&





��z WebsiteManager.changeOpenBasedircC�Pt�|�}tjj|d�}t�|j||�dkrnt��St|dd|ji�}|�	�S)Nrer.z&websiteFunctions/installWordPress.htmlr�
rrQrrsrtr�r5r�rrr&r8r8r9�wordpressInstall��
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)Nrer5r.rPrr�rr�rr�passwordByPassrrr�r�r�r�r2r��	wordpressr2rMr�rO�rrQrrsrtr5r�r?rr�r�rr#r�r�r�rMrNrr�r$r8r8r9�installWordpresssB



�


��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.)�abortrP�installationProgress�
currentStatusr�r�z[200]rzSuccessfully Installed.z[404]r2)r.rPr/r�r�)r�CheckStatusFilleLocrMrNrr(rRrXrVr�call�shlexrUr�r�)
r7rXrAr,r�r��
statusData�lastLiner��progressr0r/r�r8r8r9�installWordpressStatus2sT
�

�

�


�


��z%WebsiteManager.installWordpressStatuscCr$)Nrer.z#websiteFunctions/installJoomla.htmlrr%r&r8r8r9�
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)Nrer5r.rPrr(r�rr��siteNamer�r�r�r�r2r��joomlar2rMr�rO)rrQrrsrtr5r�r?r�rrr�r#r�r�r�rMrNrr�r$r8r8r9�
installJoomlaks>



�


��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)NrerTr.r�z.gitr�r<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=)rrQrrsrtr	r5r�r?rYr�rZr	r�rUr(�fetchCurrentPortrrr�r��
writelinesr�rR)r7rWrXrAr]r�r�r�r�rr�r�r�r>rbr��
configContentr�rAr8r8r9�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)Nrer5r.rPrr�r�username�reponame�branchr�r�r�r��defaultProvider�gitr2rM)rPr�r�)rPr�r*r$r8r8r9�setupGitRepo�s<



�


��zWebsiteManager.setupGitRepoc
Cs�zi}|j|d<td|�}|��ddd�}t�|�}t|�WStyA}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr5�pullr.rM)�pulledr�r)r5r#r�rMrNrr�r�)r7rXrAr�r�r�r�r�r8r8r9�	gitNotify�s





��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)Nrer5r.rr��detachr2rMr~r�rrQrrsrtr5r�r?rr�r#r�r�r�rMrNrr�r�r$r8r8r9�
detachRepos.








��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)Nrer5r.r�githubBranchr��changeBranchr2rMr~rrPr$r8r8r9rS(s0








��zWebsiteManager.changeBranchcCr$)Nrer.z'websiteFunctions/installPrestaShop.htmlrr%r&r8r8r9�installPrestaShopJr'z WebsiteManager.installPrestaShopcCr$)Nrer.z$websiteFunctions/installMagento.htmlrr%r&r8r8r9�installMagentoVr'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)Nrer5r.rPrr�rr��	firstName�lastNamerFrCr(r��
sampleDatar�r�r�r�r2r��magentor2rMr�rOr*r$r8r8r9�magentoInstallbsF



�


��zWebsiteManager.magentoInstallcCr$)Nrer.z#websiteFunctions/installMautic.htmlrr%r&r8r8r9�
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)Nrer5r.rPrr�r�r4r5z) changePHP --phpVersion 'PHP 8.1' --path r�rr�rFrCr(r�r�r�r�r�r2r��mauticr2rMr�rO)rrQrrsrtr5r�r?rrHr(r�rr�r�rr#r�r�r�rMrNrr�)r7rXrAr]r�rGrPr�r�r�r�r�r8r8r9�
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) Nrer5r.rPrr�rr��shopNamerVrW�databasePrefixrCr(r�r�r�r�r�r2r�r�r�r4r5z) changePHP --phpVersion 'PHP 8.3' --path �
prestashopr2rMr�rO)rrQrrsrtr5r�r?rr�r�rrrHr(r�r#r�r�r�rMrNrr�)r7rXrAr]r�r�rGrPr�r�r�r�r8r8r9�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��	dkimCheckr;rr�zPHP 7.4rJr�
websitesLimit�aclr�r*zexample@example.orgr�r3)r�r�rCr�rk�initWebsitesLimitrg�apirz!Could not authorize access to API)rr�r�)r�r�r)rrsrtr$�check_passwordr�r�
hash_passwordrfr�r�rMrNrrQr�)r7rArrbrrrdrf�apiACLr�rg�
websiteOwnr�r�r�r8r8r9�createWebsiteAPIsd
���


��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)Nr�r<r.rr�r�r�r�r�r�rvr�r�rjc	Sr�r�r�r�r8r8r9r:kr�z5WebsiteManager.searchWebsitesJson.<locals>.<listcomp>)	r5rr�r�rr�r�rLr�)!r�searchWebsiteObjectsr	r�rUr�r�rr�r�r�rr�r5rYr�rZr(r�ryrwr�r
rsrxrwrr�r�rrJrMrN)r7�currentlACLrX�
searchTermrr�r�rr�r�r�rer�r�r�r�r�r�rwr�r�r�r8r8r9rjCs\��

�
�
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)NrCr�rr�r<r.r�r�r�r�r�)r5rr�r�rr�r�r�r�)rrr	r�rUr�r�rr�r�r�rr�r5rr�r�rrJrMrN)r7r]rXrvr|r{rr�r�r�rr�r�r�rer�r�r�r�r�r�rmr8r8r9ru�s>��

�zWebsiteManager.findWebsitesJsoncCs|t�||�}tt|��td�}g}|dkrd}|�d�|St|�}t|�d}td|�D]
}|�dt|�d�q.|S�NrCr�r.z<li><a href="\#"></a></li>z<li><a href="\#">z	</a></li>)	rrr�rrrwr!rWr�r��r7r]rXrr�r"r�r�r8r8r9r#�s
�z WebsiteManager.websitePaginationcCsztj��}tt|��td�}g}|dkrd}|�d�|St|�}t|�d}td|�D]
}|�dt	|�d�q-|Srr)
rrsr<r�rrrwr!rWr�r�rsr8r8r9�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)Nre�globalr.rBz
/etc/httpd�serverrrrSz	sudo cat �r�r2r�rC��
pmMaxChildren�pmStartServers�pmMinSpareServers�pmMaxSpareServers�phpPathr�r�rB)rrQrrsrtrYr�rZrMrNrr5r�r?r(rO�OLSr+rZ�whichPHPExistsrRrXrUr1�apache�ols�lswsr�r�)r7rXrAr]r��
globalDatar��
finalConfPathr}r��phpConfryrzr{r|r�r�r8r8r9�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)Nrerr�rvr.r�r�r�r4r5z switchServer --phpVersion 'z' --server rVrXr3)rBr�)rrQrrsrtr�r?r�rrrHr(rIr�r�rMrNr)r7rXrAr]r�rrLrvr�rPr�r�r8r8r9�switchServers4
�����



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)0Nrerryrzr{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_serversrTr�r�r�z/var/run/php-fpm/r.z
/var/run/php/�nogroupz
{externalApp}z{pmMaxChildren}z{pmStartServers}z{pmMinSpareServers}z{pmMaxSpareServers}z{www}r!r/rhz{Sock}z
{sockPath}z{group}rz
sudo mv %s %sr�zPHP path in tune settings �etcr�r3zPHP r�r2zPHP Version in tune settings zPHP service in tune settings zsystemctl stop zsystemctl restart rB)+rrQrrsrtr�r?rWrMrNrr	r�r
r�r�rr(rrrr,�phpFpmPoolReplacer�rDrErFr	rCr�r�rUrYr�rZr�r�rr�r+�DecideFPMServiceName�normalExecutionerr�)r7rXrAr]r�rryrzr{r|r}r�r�r�r�r��sockPathr��
phpFPMConfr�r�rL�
phpServicer�r8r8r9�tuneSettings/s�

 �

�



"



 ""







��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&�Wn3z|d#|d%d'�}|� �|�!d%|d&�Wnt"�yP}z
|
�#t$|��WYd}~nd}~wwYWnt�yn}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-j/|*�}+|+�0��1�dd�2d1�},|
�#d2|,���|,d3k�r�d4}'nd/}'Wn"t�y}zd4}'|
�#d5|'�d6t$|����WYd}~nd}~wwd/}-z!|�3��4d7�d}.z	t5�6|.�d4}-Wnt7�y3d/}-YnwWnt�yT}zd/}-|
�#d8t$|����WYd}~nd}~wwt8|d9|j||%|'|(|-d:��}/|/�9�S);Nrer.rTrr'rdrr�rerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr}rr�r�r�r�r�r�r�r�r;r<r=r@rBz/usr/local/lscp/conf/cert.pemFr^r�zssl_provider: rXTzis_selfsigned: z	. Error: rarbzwebsiteFunctions/sshAccess.html)rr�r]r_r`rc):rrQrrsrtr�r5r�r	r�r�rErYr�r(r�rrRr�r�r�r�rZr�r~r�r�r�r�r�r�r�r�r�r�r�r�rJrKrMrLrNrOrPr�r�r�r�r�r�r�r�rUr�r�r�rr)0r7rWrXrAr]r�r�r�r�rErYr(r�rr�r�r�r�r�r�r�r�r�r�r�r~r�r�r�r�r�r�rYrKrMrZr[r]r�r�r`r��cert_contentr��ssl_providerrcr�rbr8r8r9�	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)Nrer5r.rBrrTz/etc/lsb-releasezecho '%s:%s' | chpasswdr�zecho "%s" | passwd --stdin %srM)rBr�r=rO)rrQrrsrtr5r�r?r	rYr�rZr�r(r�rMrNrr�r�)r7rXrAr]r�r��
uBuntuPathr�r�r�r�r8r8r9�saveSSHAccessChanges%s,





��z#WebsiteManager.saveSSHAccessChangesc	Csht�|�}tjj|d�}t�|j||�dkrnt��Stjj|jd�}|j	}t
|d|j|d��}|��S)Nrer.rTz"websiteFunctions/setupStaging.html)rr��rrQrrsrtr�r5r�r	r�rr)	r7rWrXrAr]r�r�r�rbr8r8r9�setupStagingKs

�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)Nrer*rr,r�rr.rBr5r�r�r�r��azCloning process has started..,5r��startCloningrM�rBr�r�rO)rrQrrsrtr5rBrMrNrr�r?r�rr	r
r�r/r�r��
r7rXrAr]r�r�r�r�r�r��message�str�r8r8r9r�[sH











��zWebsiteManager.startCloningc
Csjt�|�}tjj|d�}t�|j||�dkrnt��Stjj|jd�}|j	}t
|d|j||d��}	|	��S)Nrer.rTz websiteFunctions/syncMaster.html)rr�r6r�)
r7rWrXrAr6r]r�r�r�rbr8r8r9�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)Nrer6rr,r�r.rB�
eraseCheckF�dbCheck�copyChangedr�r�r�r�r�zSyncing process has started..,5r��startSyncingrMr�rO)rrQrrsrtrBr5rMrNrr�r?r�rr	r
r�r/r�r�r�r8r8r9�	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)NrWr�r�r�r��convertDomainToSiter.)rBr�r�rr�)r�rr#r�rMrNrr�)r7rXrWr�r�r�r�r�r8r8r9r��s



��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)Nrer.rT�/home/%s/public_htmlzwebsiteFunctions/manageGIT.html)r�folders)rrQrrsrtr�r5r�r	r�r<r
�childWebsiter�r�rr)
r7rWrXrAr]r�r�r��	databasesrbr8r8r9�	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)Nr�z/home/%sz/home/vmail/%srTrr.�/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/r1z%s. [folderCheck:3002]))r5r	rsrt�
masterWebsiter*r��externalAppLocalrr�rVrWr�r�r
r�r��	confCheckrYrZ�mkdir�listdirrr�	finalFilerMrur	r��autoCommitCurrent�autoPushCurrent�emailLogsCurrentr��webhookCommandCurrentr�r<r�r�r�rr�r�)r7�
domainPath�vhRoot�	vmailPathr�r��
gitConfFolder�
gitConFile�files�file�gitConfr6r��basePath�dbPathr�r8r8r9�folderChecks�




�


�





��
���
����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)Nrer5r�r.rBrz%s/.gitr�r�r�r@r?)rB�reporAr�zgit -C %s branchr<�git -C %s remote -v�originzRemote currently not set.zgit -C %s rev-list --count HEAD�fatalr2z!https://%s:%s/websites/%s/webhook)rBr��
finalBranchesrA�remote�remoteResult�totalCommitsr��
webHookURLr�r�r�r�r�rO)rrQrrsrtr5r�r�r?r�r(rRr�rVr*r�r�rMrNrrUrB�fetchIPr�r�r�r�r�r�r�)r7rXrAr]r��gitPathr�rAr�r��branchesr�r�r�r�r�r�r8r8r9�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)Nrer5r�r.rBrrTzgit -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~rO)rrQrrsrtr5r�r�r?r�r	r*r(rRr�rVrr�rVrWrMrNrr�r�)r7rXrAr]r�r�r�rir�r�r�r8r8r9�initRepo�sB




�	





��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)Nrer5r��gitHost�gitUsername�gitReponamer.rBrrar��!Invalid characters in your input.�`git -C %s config --local core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""r�r�z,git -C %s remote add origin git@%s:%s/%s.gitz0git -C %s remote set-url origin git@%s:%s/%s.gitr~rO)rrQrrsrtr5r�r�r�r�r�r?r�rVrUrBrW�
validateInputr*r�r(r�rRrMrNrr�r�)
r7rXrAr]r��
gitHostDomain�gitHostPortr�r��
possibleErrorr�r�r�r8r8r9�setupRemote-sr







�
��
	





��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)Nrer5r��
branchNamer.rBrr��*r�zAlready on this branch.)rB�
commandStatusr�zgit -C %s checkout %sr�zSwitched to branchzRefreshing page in 3 seconds..�rBr�zFailed to change branch�rBr�r�r~)rrQrrsrtr5r�r�r�r?r�r�rVrMrNr�FetchExternalAppr�r6r(rRr�r�)
r7rXrAr]r�r�r�r�r�r�r8r8r9�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)Nrer5r��
newBranchNamer.rBrr�zgit -C %s checkout -b "%s"r�r�zFailed to create branchr�r~)rrQrrsrtr5r�r�r�r?r�r�r�r�r(rRrVrMrNrr�r��
r7rXrAr]r�r�r�r�r�r�r8r8r9�createNewBranch�s>





	




��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)Nrer5r��
commitMessager.rBrzgit -C %s add -Azgit -C %s commit -m "%s"r�r!znothing to commitr�r�INFO�.Running commands after successful git commit..�rkr�r�r<�Running: %s�
Result: %s�Finished running commands.r�zNothing to commit.r�)rrQrrsrtr5r�r�r�r?r�r�r�r�r(rRr�rVr�rr�r�rUr�rMrNrr�r�)r7rXrAr]r�r�r�r�rir�r�r�r8r8r9�
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)Nrer5r�r.rBrr��git -C %s pull�Already up to dater�r��Pull not required.r�r~)rrQrrsrtr5r�r�r?r�r�r�r*r�r(r�rRrVrMrNrr�r�r�r8r8r9�gitPullWs>



�

	




��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)Nrer5r�r.rBrr�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.)rrQrrsrtr5r�r�r?r�r�r�r*r�r(r�rRrVr[rMrNrr�r�)r7rXrAr]r�r�r��
currentBranchr�r�r�r8r8r9�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)Nrer5r�r�r�r��overrideDataFr.rBrrar�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~)"rrQrrsrtr5r�r�r�r�r�r�r?r�rVrUrBrWr�r�r�r(r�r*r�rRrrVrWrMrNrr�r�)r7rXrAr]r�r�r�r�r�r�r�r�r8r8r9�
attachRepoGIT�sv








� 


	


��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)Nrer5r�r.rBrzrm -rf %s/.gitr�r�r�r�r�r~)rrQrrsrtr5r�r�r?r�r�r�r(r�r*rUrRrMrNrr�r�)r7rXrAr]r�r�r�r�r�r�r�r�r8r8r9�removeTracking.s8




	


��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)
Nrer5r�r.rBrzcat %s/.gitignorer�r�zFile is currently empty.)rB�gitIgnoreContentr~)rrQrrsrtr5r�r�r?r�r(rRr�rVrMrNrr�r�)
r7rXrAr]r�r�rr�r�r�r8r8r9�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)Nrer5r�rr�r�r�r.rBrrzmv %s %s/.gitignorer~)rrQrrsrtr5r�rr�rr�r?r�r	r
r�r�r�r(r�rMrNrr�)r7rXrAr]r�rr�r�r�r�r�r8r8r9�
saveGitIgnores8





	


��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)Nrer5r�r.rBrz'log --pretty=format:"%h|%s|%cn|%cd" -50zgit -C %s %sr<r��|r�rir2r3)r��commitr�r>�dater�r�)rB�commitszNo commits found.r~)rrQrrsrtr5r�r�r?r�r�r�r(rRrUr�r�rMrNr�
IndexErrorr�)r7rXrAr]r��initCommandr�rr�r�r�r�cmrmr�r�r8r8r9�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)Nrer5r�rr.rBrr�z4git -C %s diff-tree --no-commit-id --name-only -r %sr<r!)rBr�r~)rrQrrsrtr5r�rr�r?r�r�r�r�r(rRrUrwr[r[rMrNrr�r�)r7rXrAr]r�r�r��
FinalFilesrer�r�r�r8r8r9�
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)"Nrer5r�r�rr.rBrrUr�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>rz<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>)rB�fileChangedContent�Not a text file.r~)rrQrrsrtr5r�r�rr�r?r�r�rVr�r�r6r(rRrUrrrWr�r�r�rMrNrr	r�)r7rXrAr]r�r�r�
initialNumberre�
lineNumber�fileLen�finalConentr�r�r�r�r�r8r8r9�fetchChangesInFiles�





�

$"� ���
��
�






��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)Nrer5r�r�r�r�r�Fr�rr�r.rBrr�r�r�r�rr~)rrQrrsrtr5r�r�r?r�r�r*r�rr�rYr�rZr�r	r
rMrNr�rr�)r7rXrAr]r�rmr�r�r�r�r�r�r8r8r9�saveGitConfigurationsxsf















��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�rr�r�r�)r�rr�r�rMrN)r7�logsr�r�r|rermr8r8r9�
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)Nrer5r�rwrfr.rBrr�)�	S3Backups)rBrr"rr~)rrQrrsrtr5r�rWr�r?r�r��gitlogs_setr<r��s3Backups.s3BackupsrryrrrxrrMrNrr	r�r�)r7rXrAr]r�rwrfrrr"r{r|�jsonDatar�r�r�r8r8r9�fetchGitLogs�s>








��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)NrTr�r�r�r�zebhook Fired] Status: %s.r�r�rr�r�r.r�r�r�r�rr�r<r�r�r�r��ERRORr�r�r~) r5r	rsrtr�r�r*r
r�r�rr�r�r(rRrVrr�rYrZr�r�rrrMrur	r�rUrNrr�r�)r7r5rAr�r�r�r��foundr�r�r�r�r�r�r�rir�r�r�r8r8r9�webhook�s�







�
�����	
�
����
	




��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)Nrer5rTr.rBr�/home/%s/.ssh/authorized_keysr�r<r�zssh-rsar�r�zssh-rsa �2z  ..  r2rr!)r�r�r�r�rM)rBr�rAr~)rrQrrsrtr	r�r?r(rRr�rUrVr
rMrNrr�r�)r7rXrAr]r�r5r��
pathToKeyFile�catr�r�re�keydatar�r�rmrbr�rcr8r8r9�
getSSHConfigsgsV

 
���

��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)Nrer5r.rBrr�r&rTzchown rar�r4�/plogical/firewallUtilities.pyz" deleteSSHKey --key '%s' --path %sr�r�)rB�
delete_status)rBr-�error_mssage)rrQrrsrtr�r?r	r�r(rRrrHrVrMrNrr�r�)r7rXrAr]r�r5r�r(r�r�rPr�rcrbr�r8r8r9�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)Nrer5rTr.rBrr�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 %sr�r�)rB�
add_status)rBr0r.)rrQrrsrtr	r�r?r(r�r�r�rr	r
r�rrHrRrVrMrNrr�)r7rXrAr]r�r5r�r�r(r�rr�rPr�rcrbr�r8r8r9�	addSSHKey�sD











��zWebsiteManager.addSSHKeyc
Cszt�|�}tjj|d�}t�|j||�dkrnt��St�	�}t�
�}t�d�r+d}nd}t|d|j|||d��}	|	�
�S)Nrer.r<rz#websiteFunctions/ApacheManager.html)rrF�
apachemanager�
apachePHPs)rrQrrsrtr�r5r�r*rT�findApachePHPVersionsr�rr)
r7rWrXrAr]r�rFr3r2rbr8r8r9�
ApacheManager�s

�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�rrSr4r5z  saveApacheConfigsToFile --path r�r�r�rBr~)rrQr?r5rr�r�rr	r
r�r+rZrrHr(rRrVrMrNr)
r7rXrAr]r�rr�r�rPr�rBrbrcr8r8r9�saveApacheConfigsToFile
s*







z&WebsiteManager.saveApacheConfigsToFilec	Csti}t�|�}|ddkrnt��Sz|dkr"tjj|d�}|��WnYtj��|d<t|d|d�}|�	�S)Nr�r.rer3z)websiteFunctions/CreateDockerPackage.htmlrI)
rrQr�rrsrtr�r<rr)	r7rWrXrAr�rar]�DockerPackagesDeleterbr8r8r9�CreateDockerPackage2s"
��z"WebsiteManager.CreateDockerPackagecCs�t�|�}|ddkrnt��Sz|dkr tjj|d�}|��WnYt�|�}tj�	�}tj�	�}	|||	d�}
t
|d|
d�}|��S)Nr�r.re)r^r�
assignpackagez#websiteFunctions/assignPackage.htmlrI)rrQr�rrsrtr�rRrr<rr)r7rWrXrAr�r]r7r^�dockerpackagesr9rarbr8r8r9�
AssignPackageIs&
�


�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)Nr;�docker-managerr=rr@rBr.r^rdr2ir-r!�r��CPUsr��	Bandwidth�	DiskSpacer�re�r�rz&websiteFunctions/CreateDockerSite.htmlrIrorq)rrJrKrLrMrNr(rOrPrRrrsr<r�rr�rrtrrryrpr)r7rWrXrArYrKrZr[r^rar>�cpu�Memoryr?�disk�saveobjr{�svrbrpr8r8r9�CreateDockersiteas6�
�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.rer>rBrCr?rDr!r=r~r)
rrQr�rrsrtrr�rMrNrr�r�)r7rXrAr]r�r>rBrCr?rDrErBrbr�rcr8r8r9�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.rer�)r�r�rCr?r@rr~r)rrQr�rrsrtrr�r>r�r?r@rMrNrr�r�)
r7rXrAr]r�r��docker_package�package_data�rdatarBrbr�rcr8r8r9�
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.rer�r��RAMr?r@r~r)rrQr�rrsrtrr>r�r?r@r�rMrNrr�r�)r7rXrAr]r�r�r�rMr?r@rIrBrbr�rcr8r8r9�
Updatepackage�s4





��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.rerr�r*r�rAr~r)rrQr�rrsrtrr�rrWr�rMrNrr�r�)r7rXrAr]r�rr�r{�delasgrIrFrBrbr�rcr8r8r9�
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).Nre�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.rIr�r+r�r�r�r��JobIDrXr!r/r0r��SubmitDockersiteCreationr2r.rMr�)rrsrtrrQrWrMrNrrErrr�rrr�r>r�r>r?r@rArrDrFrr�r�r�r�) r7rXrAr�r]rQrRr�rSrTrUrVrWrXrYrZrcrbr-rMrN�pkaobj�Dpkgobj�pkg_cpu�pkg_Ram�totalcup�totalRamr�r�r�r�r�r8r8r9�submitDockerSiteCreations�
















,

�


��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)Nrer.r5r\r>�Deleted�LPError�	LPMessager"z$websiteFunctions/ListDockersite.html)rrsrtrrQrr�r�r5r��SiteNamer�DeleteDockerAppr�r�r�rtrr)
r7rWrXrAr�r�r]�fdata�DockerSitesDelete�passdatar�r�rbr8r8r9�ListDockerSitesys8



����zWebsiteManager.ListDockerSitesc
Cs�zLt�|�}t|d�}t|d�}|�||�\}}t�||�}|�t|�|�}	tj�	dt
|��|�|||��}
ddd|
|	d�}t�
|�}t|�WStyo}
zddt
|
�d�}t�
|�}t|�WYd}
~
Sd}
~
ww)	NrfrwzOur dockersiter.rMrgrri)rrQrWrx�findDockersiteObjectsryrrr�rr�r�r�rMrNrr�)r7rXrAr]rvrwr{r|�dockersitesr"r�rcrbr�r8r8r9�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)
Nr;r<r=rr@rBr.rez$websiteFunctions/DockerSiteHome.html�
dockerSiterorq)rrJrKrLrMrNr(rOrPrQrrsrtrr5r�r�r�rrryrpr)r7rWrXrAr�rYrKrZr[r]r��dsrbrpr8r8r9�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)Nrer5rTr.r^rrjr�r1Tr2r3cSr4r8r5r7r8r8r9r:�r;z8WebsiteManager.fetchWPSitesForDomain.<locals>.<listcomp>r<)zhttp://r<r<r>r?r�r@rArBzhttps://api.microlink.io/?url=z0&screenshot=true&meta=false&embed=screenshot.url)r�r�rYr�rCrLrJrKrErFrG�
screenshotrM)rBr^r�r�r_)#rrQrrsrtr	r�r?r
rxr�r�r�r�r(rRrSrTr6rrrUr�r�rVrWrXrwr�r�rkrMrNrr�r�)r7rXrAr]r�r5r�r�r�r^r_r�r�r�r�rCrarbrc�site_urlrdrErerfrgrhrirGr�r�r�r8r8r9�fetchWPSitesForDomain�s�

�
��

�
��
�


�


��z$WebsiteManager.fetchWPSitesForDomaincCs�z�t�|�}tjj|d�}|d}tjj|d�}|ddkr2|j|kr2ddd�}t�|�}t	|�WSt
jj|d��d	�}	g}
|	D]t}zUt�
|j�}|�d
d�}
d}d|
vr�z&|
�d
�d}|�d�}t|�dkrz|d�dd�d|d�d
d�}Wn|
}Y|
�|j|
||�dd�|�dd�d��Wq@ty�}ztj�dt|����WYd}~q@d}~wwd|
d�}t�|�}t	|�WSty�}zdt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrer�r�r.rz(Not authorized to view this site backupsr~)r�r�r>r�zbackup-rr��_r2r�r�r�rar�zFull Backupr�r2)r�r>rr�r�zError parsing backup config: )rB�backups)rrQrrsrtr
rkrMrNrrrxr�rur�rUrrr�rwr�r�r�rr�r�r�)r7rXrAr]r�r�r�r�r�rx�backup_list�backupr��backup_name�date_str�	date_part�date_componentsr�r�r8r8r9�fetchWPBackups/s^





$�

���



��zWebsiteManager.fetchWPBackups)NN)NNN)NNNNr4)��__name__�
__module__�__qualname__r�r�r�r:rIr~r�r�r�rr�r�r�r�r�r�r�r�r�rr	rrrrr!r$r%r'r0rnrrrur|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr%rQr]rdrnrtrkr}r�rzr�r�rqrxryr�r�r/r;r<rJr�r�r�r�r�r�r�r�r�r�r�r	rrrrrr!r#r&r+r7r8r;rErKrNrQrSrTrUrZr[r]rarnrjrur#rtr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr"r%r+r/r1r5r6r8r;rGrHrLrNrPrdrmrprsrvrr8r8r8r9r12sX5)4#1$#E; +	0	
u&&<8-%5:G-8,'000-3,#
2kd&2y/2+C4GcUH'#?'1,0J@2*B3*(+-,7'!"/47;@)Ff&07"`5^<8X6<e/"3:1[I)k8'/(%!"&m!]r1)WrSrY�os.path�sys�django�databases.modelsr�plogical.DockerSitesr�plogical.httpProcrr�rw�environ�
setdefault�setuprM�plogical.aclrr�rr�r�r	r
rrr
rrrrrrrr�plogical.virtualHostUtilitiesrrr3�plogical.installUtilitiesrryrrr�loginSystem.modelsrr�packages.modelsr�plogical.mailUtilitiesr�randomrr�rEr��plogical.childDomainr �mathr!�plogical.aliasr"�plogical.applicationInstallerr#�plogicalr$r%�emailMarketing.emACLr&r�r(r�r*�ApachController.ApacheVhostsr+�plogical.vhostConfsr,�plogical.cronUtilr-r/rB�django.httpr0r�r1r8r8r8r9�<module>sX<