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: //proc/676643/root/usr/local/CyberCP/cloudAPI/__pycache__/cloudManager.cpython-310.pyc
o

��h(�@sxddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZddlmZddlmZddlmZdd	lmZdd
lmZmZmZddlmZddlmZdd
l m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+ddl,m-Z-ddlm.Z.ddl/m0Z1ddl2m3Z3ddl4m5Z5m6Z6ddl7Tej8�9d�ej:�;dd�Gdd�d�Z<dS)�N)�
BackupManager)�DatabaseManager)�
DNSManager)�FirewallManager)�
FTPManager)�	HAManager��
Administrator)�MailServerManager)�issueSSL�obtainHostNameSSL�obtainMailServerSSL)�PackagesManager��mysqlUtilities)�virtualHostUtilities��WebsiteManager)�	S3Backups)�getLogsFromFile)�topProcessesStatus�killProcess�switchTOLSWSStatus)�hashPassword)�ACL��CyberCPLogFileWriter)�
PHPManager)�submitExtensionRequest�getRequestStatusApache)�*z/usr/local/CyberCP�DJANGO_SETTINGS_MODULEzCyberCP.settingsc@s�eZdZ�d�dd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNdO�Z)dPdQ�Z*dRdS�Z+dTdU�Z,dVdW�Z-dXdY�Z.dZd[�Z/d\d]�Z0d^d_�Z1d`da�Z2dbdc�Z3ddde�Z4dfdg�Z5dhdi�Z6djdk�Z7dldm�Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Z<dvdw�Z=dxdy�Z>dzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�dÄZcd�dńZdd�dDŽZed�dɄZfd�d˄Zgd�d̈́Zhd�dτZid�dфZjd�dӄZkd�dՄZld�dׄZmd�dلZnd�dۄZod�d݄Zpd�d߄Zqd�d�Zrd�d�Zsd�d�Ztd�d�Zud�d�Zvd�d�Zwd�d�Zxd�d�Zyd�d�Zzd�d�Z{d�d��Z|d�d��Z}d�d��Z~d�d��Zd�d��Z�d�d��Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d	�Z��d
�d�Z��d�d
�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d�d�Z��d �d!�Z��d"�d#�Z��d$�d%�Z��d&�d'�Z��d(�d)�Z��d*�d+�Z��d,�d-�Z��d.�d/�Z��d0�d1�Z��d2�d3�Z��d4�d5�Z��d6�d7�Z��d8�d9�Z��d:�d;�Z��d<�d=�Z��d>�d?�Z��d@�dA�Z��dB�dC�Z��dD�dE�Z��dF�dG�Z��dH�dI�Z��dJ�dK�Z��dL�dM�Z��dN�dO�Z��dP�dQ�Z��dR�dS�Z��dT�dU�Z��dV�dW�Z��dX�dY�Z��dZ�d[�Z��d\�d]�Z��d^�d_�Z��d`�da�Z��db�dc�Z��dd�de�Z��df�dg�Z��dh�di�Z��dj�dk�Z��dl�dm�Z��dn�do�Z��dp�dq�Z��dr�ds�Z��dt�du�Z��dv�dw�Z��dx�dy�Z��dz�d{�Z��d|�d}�Z��d~�d�Z��d��d��Zd��d��ZÐd��d��ZĐd��d��ZŐd��d��ZƐd��d��Zǐd��d��Z�	�d��d��d��Zɐd��d��Zʐd��d��Zːd��d��Z̐d��d��Z�dS(��CloudManagerNcCs||_||_dS�N)�data�admin)�selfr$r%�r'�+/usr/local/CyberCP/cloudAPI/cloudManager.py�__init__#s
zCloudManager.__init__cCs||d�}t�|�}t|�S)N��status�
error_message)�json�dumps�HttpResponse)r&r+�errorMessage�	final_dic�
final_jsonr'r'r(�ajaxPre's

zCloudManager.ajaxPrec
Cslz|jd|jjkrd|�dd�fWSd|�dd�fWSty5}z|�dt|��WYd}~Sd}~ww)N�HTTP_AUTHORIZATION�rzInvalid login information.)�METAr%�tokenr3�
BaseException�str�r&�request�msgr'r'r(�verifyLogin,s��zCloudManager.verifyLoginc
C�Pz
t�}|�|jj|j�WSty'}z|�dt|��WYd}~Sd}~ww�Nr)r�getFurtherAccountsr%�pkr$r8r3r9�r&�wmr<r'r'r(�
fetchWebsites6���zCloudManager.fetchWebsitesc
C�^z|jj|jd<t�}|�|jj|j�WSty.}z|�dt|��WYd}~Sd}~ww�N�userIDr)	r%rA�sessionr�submitWebsiteDeletionr$r8r3r9�r&r;rCr<r'r'r(rJ=���z"CloudManager.submitWebsiteDeletionc
Cs�z�z�|jd}|jd}|jd}t�||�}t�|�}z	t|jd�}Wnd}Yz|jd}tjj|d�}Wntjjdd�}Yz	t|jd	�}	Wnd}	Yzt|d
|jdd|||d
|||	d�}
|
�	�Wn*t
y�}zt�t
|��tjj|d�}||_||_|�	�WYd}~nd}~wwWnt
y�}z
t�t
|��WYd}~nd}~wwt�}
|
�|jj|j�WSt
y�}z|�dt
|��WYd}~Sd}~ww)N�UserAccountName�UserPassword�FullName�
websitesLimit�
�acl��name�user�api��
adminEmail�r5��	firstName�lastName�email�type�userName�password�initWebsitesLimit�ownerrRr7rV�r_r)r$r�
generateToken�
hash_password�intr�objects�getr	�saver8�logging�writeToFiler9r7r`r�submitWebsiteCreationr%rAr3)r&rMrNrOr7r`rarR�selectedACL�	apiAccess�newAdminr<r%rCr'r'r(rlEsj




��������z"CloudManager.submitWebsiteCreationc
Cr>r?)r�fetchWebsiteDataJSONr%rAr$r8r3r9rBr'r'r(rp}rEz!CloudManager.fetchWebsiteDataJSONc
Cs@z�t�|jj�}tjj|jdd�}tjj|jjd�}t�	|jd||�dkr(nt�
�WSi}|jj|d<|j
����|d<|j����|d<|jj|d<t�|�\}}}}|jj|d	<||d
<||d<|dkrjd}||d
<||d<|jj|d<d|d<t�|�}	t|	�WSty�}
z|�dt|
��WYd}
~
Sd}
~
ww)N�
domainName��domain�rAr5�
ftpAllowed�ftpUsed�dbUsed�	dbAllowed�bwInMBTotal�bwInMB�bwUsage�d�	diskUsage�diskInMB�
diskInMBTotalr+r)�
ACLManager�	loadedACLr%rA�Websitesrgrhr$r	�checkOwnership�
loadErrorJson�package�ftpAccounts�	users_set�all�count�
databases_set�	dataBasesr�	FindStats�	bandwidth�	diskSpacer-r.r/r8r3r9)r&�
currentACL�websiter%�Data�	DiskUsage�DiskUsagePercentagerzr{r2r<r'r'r(�fetchWebsiteData�s8


��zCloudManager.fetchWebsiteDatac
Cr>r?)r�submitWebsiteModifyr%rAr$r8r3r9rBr'r'r(�fetchModifyData�rEzCloudManager.fetchModifyDatac
Cr>r?)r�saveWebsiteChangesr%rAr$r8r3r9rBr'r'r(�saveModifications�rEzCloudManager.saveModificationsc
CsRzt�}|�|jj|jd�WSty(}z|�dt|��WYd}~Sd}~ww)Nr5r)r�submitDBCreationr%rAr$r8r3r9�r&�dmr<r'r'r(r��s��zCloudManager.submitDBCreationc
Cr>r?)r�fetchDatabasesr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.fetchDatabasesc
Cr>r?)r�submitDatabaseDeletionr%rAr$r8r3r9r�r'r'r(r��rEz#CloudManager.submitDatabaseDeletionc
Cr>r?)r�changePasswordr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.changePasswordc
Cr>r?)r�getCurrentRecordsForDomainr%rAr$r8r3r9r�r'r'r(r��rEz'CloudManager.getCurrentRecordsForDomainc
Cr>r?)r�deleteDNSRecordr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.deleteDNSRecordc
Cr>r?)r�addDNSRecordr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.addDNSRecordc
C�Vz|jj|jd<t|�}|��WSty*}z|�dt|��WYd}~Sd}~wwrG)r%rArIr
�submitEmailCreationr8r3r9�r&r;�msmr<r'r'r(r���
��z CloudManager.submitEmailCreationc
Cr�rG)r%rArIr
�getEmailsForDomainr8r3r9r�r'r'r(r��r�zCloudManager.getEmailsForDomainc
Cr�rG)r%rArIr
�submitEmailDeletionr8r3r9r�r'r'r(r��r�z CloudManager.submitEmailDeletionc
Cr�rG)r%rArIr
�submitPasswordChanger8r3r9r�r'r'r(r�r�z!CloudManager.submitPasswordChangec
Cr�rG)r%rArIr
�fetchCurrentForwardingsr8r3r9r�r'r'r(r�r�z$CloudManager.fetchCurrentForwardingsc
Cr�rG)r%rArIr
�submitForwardDeletionr8r3r9r�r'r'r(r�r�z"CloudManager.submitForwardDeletionc
Cr�rG)r%rArIr
�submitEmailForwardingCreationr8r3r9r�r'r'r(r�r�z*CloudManager.submitEmailForwardingCreationc
Cr�rG)r%rArIr
�
fetchDKIMKeysr8r3r9r�r'r'r(r�'r�zCloudManager.fetchDKIMKeysc
Cr�rG)r%rArIr
�generateDKIMKeysr8r3r9r�r'r'r(r�/r�zCloudManager.generateDKIMKeysc
Cr�rG)r%rArIr�submitFTPCreationr8r3r9�r&r;�fmr<r'r'r(r�7r�zCloudManager.submitFTPCreationc
Cr�rG)r%rArIr�getAllFTPAccountsr8r3r9r�r'r'r(r�?r�zCloudManager.getAllFTPAccountsc
Cr�rG)r%rArIr�submitFTPDeleter8r3r9r�r'r'r(r�Gr�zCloudManager.submitFTPDeletec
Cr�rG)r%rArIrr�r8r3r9r�r'r'r(�changeFTPPasswordOr�zCloudManager.changeFTPPasswordc
C�Nz|jj|jd<t|�WSty&}z|�dt|��WYd}~Sd}~wwrG)r%rArIrr8r3r9r:r'r'r(rW�
��zCloudManager.issueSSLc
Cs�z�|jd}t�|�rnddddd�}t�|�}t|�WSt|d���}zj|d}|�d	�dkrKd
|}t	�
|�ddd|d�}t�|�}t|�WWS|�d�dkrdddd
|d�}t�|�}t|�WWS|�d�}|d}z	|d�d�}	Wnd}	Ydd|	|d�}t�|�}t|�WWSt
y�ddddd�}t�|�}t|�YWSwty�}
zddd
t|
�d�}t�|�}t|�WYd}
~
Sd}
~
ww)N�
statusFiler5r�100zInvalid status file.)�abort�
installStatus�installationProgress�
currentStatus�r����[200]�rm -f )r+r�r�r��[404]�0)r+r�r�r,�,�
z	Working..�r+r�r�r0)r$r��CheckStatusFilleLocr-r.r/�open�	readlines�find�ProcessUtilities�executioner�split�rstrip�
IndexErrorr8r9)r&r��data_ret�	json_data�
statusData�lastLine�command�progressr�r�r<r'r'r(�
statusFunc^s\

�





�
�
�
��zCloudManager.statusFuncc
Cr>r?)r�submitDomainCreationr%rAr$r8r3r9rBr'r'r(r��rEz!CloudManager.submitDomainCreationc
Cr>r?)r�fetchDomainsr%rAr$r8r3r9rBr'r'r(r��rEzCloudManager.fetchDomainsc
Cr>r?)r�submitDomainDeletionr%rAr$r8r3r9rBr'r'r(r��rEz!CloudManager.submitDomainDeletionc
Cr>r?)r�changeOpenBasedirr%rAr$r8r3r9rBr'r'r(r��rEzCloudManager.changeOpenBasedirc
Cr>r?)r�	changePHPr%rAr$r8r3r9rBr'r'r(r��rEzCloudManager.changePHPc
Csdz
t�}|�|jj|j�WSty1}zdddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrr�r�)
r�backupStatusr%rAr$r8r9r-r.r/)r&�bmr<r�r�r'r'r(�backupStatusFunc�s
��zCloudManager.backupStatusFuncc
Cr>r?)r�submitBackupCreationr%rAr$r8r3r9�r&r�r<r'r'r(r��rEz!CloudManager.submitBackupCreationc
Cr>r?)r�getCurrentBackupsr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.getCurrentBackupsc
Cr>r?)r�deleteBackupr%rAr$r8r3r9r�r'r'r(r��rEzCloudManager.deleteBackupc

Cs�zd|jj}t�|�}|ddkrt��}n|ddkr t��}n|ddkr*dg}nt��WSd}d}|D]}d|i}|dkrI|t�|�}d}q5|d	t�|�}q5|d
}t�dd|d��}t|�WSt	y~}	z|�
dt|	��WYd}	~	Sd}	~	ww)
Nr%r5�
changeUserACL�
createNewUserrU�[rrRr��]�None�r+r,r$)r%rAr�r��unFileteredACLs�	loadErrorr-r.r/r8r3r9)
r&rHr��aclNamesr��checker�items�dicr2r<r'r'r(�	fetchACLs�s2




��zCloudManager.fetchACLsc
C�Pz
|jj|jd<t�|�WSty'}z|�dt|��WYd}~Sd}~wwrG)r%rArI�um�submitUserCreationr8r3r9r:r'r'r(r�����zCloudManager.submitUserCreationc	
Cs�zM|jj}t�|�}d}d}|D]+}|j|j|j|j|j|j	j
|jd�}|dkr2|t�
|�}d}q|dt�
|�}q|d}t�
dd|d��}t|�WStyg}z|�dt|��WYd}~Sd}~ww)	Nr�r)�idr_r[r\r]rRrPr5r�r�r�r�)r%rAr��loadUserObjectsr�r_r[r\r]rRrTrar-r.r/r8r3r9�	r&rH�allUsersr�r�rUr�r2r<r'r'r(�
fetchUsers�s2
�

��zCloudManager.fetchUsersc
Cr�rG)r%rArIr��submitUserDeletionr8r3r9r:r'r'r(r�r�zCloudManager.submitUserDeletionc
Cr�rG)r%rArIr�r�r8r3r9r:r'r'r(�saveModificationsUserr�z"CloudManager.saveModificationsUserc	
Cs�z?|jj}t�|�}d}d}|D]}d|i}|dkr$|t�|�}d}q|dt�|�}q|d}t�dd|d��}t|�WStyY}z|�dt	|��WYd}~Sd}~ww)	Nr�rr_r5r�r�r�r�)
r%rAr��userWithResellerPrivr-r.r/r8r3r9r�r'r'r(r�%s&
�
��z!CloudManager.userWithResellerPrivc
Cr�rG)r%rArIr��saveResellerChangesr8r3r9r:r'r'r(r�>r�z CloudManager.saveResellerChangesc
Cr�rG)r%rArIr��
changeACLFuncr8r3r9r:r'r'r(r�Er�zCloudManager.changeACLFuncc
Cr�rG)r%rArIr��
createACLFuncr8r3r9r:r'r'r(r�Lr�zCloudManager.createACLFuncc
Cs�zO|jj}t�|�}|ddkrt��}nt��WSd}d}|D]}d|i}|dkr4|t�|�}d}q |dt�|�}q |d}t�dd|d	��}	t|	�WSt	yi}
z|�
dt|
��WYd}
~
Sd}
~
ww)
Nr%r5r�rrRr�r�r�r�)r%rAr�r��findAllACLsr�r-r.r/r8r3r9)r&r;rHr�r�r�r�r�r�r2r<r'r'r(r�Ss*



��zCloudManager.findAllACLsc
Cr�rG)r%rArIr��
deleteACLFuncr8r3r9r:r'r'r(r�or�zCloudManager.deleteACLFuncc
Cr�rG)r%rArIr��fetchACLDetailsr8r3r9r:r'r'r(rvr�zCloudManager.fetchACLDetailsc
Cr�rG)r%rArIr��submitACLModificationsr8r3r9r:r'r'r(r}r�z#CloudManager.submitACLModificationsc
Cr�rG)r%rArIr�
submitPackager8r3r9�r&r;�pmr<r'r'r(r�r�zCloudManager.submitPackagec
Cs�z_|jj}t�|�}t�|d�dkrt��WSt�||�}d}d}|D]*}|j|j|j	|j
|j|j|j
d�}|dkrD|t�|�}d}q#|dt�|�}q#|d}t�dd|d	��}	t|	�WStyy}
z|�dt|
��WYd}
~
Sd}
~
ww)
N�
deletePackagerr�)�packageName�allowedDomainsr�r��
emailAccountsr�r�r5r�r�r�r�)r%rAr�r��currentContextPermissionr��loadPackageObjectsrrr�r�rr�r�r-r.r/r8r3r9)r&r;rHr��packageListr�r�r�r�r2r<r'r'r(�
fetchPackages�s8

�

��zCloudManager.fetchPackagesc
Cr�rG)r%rArIr�submitDeleter8r3r9rr'r'r(�submitPackageDelete�r�z CloudManager.submitPackageDeletec
Cr�rG)r%rArIr�saveChangesr8r3r9rr'r'r(�submitPackageModify�r�z CloudManager.submitPackageModifyc
C�Pz
t�}|�|jj|j�WSty'}z|�dt|��WYd}~Sd}~wwr?)r�getDataFromLogFiler%rAr$r8r3r9rKr'r'r(r�rEzCloudManager.getDataFromLogFilec
Crr?)r�fetchErrorLogsr%rAr$r8r3r9rKr'r'r(r�rEzCloudManager.fetchErrorLogsc
Cs�z@|jj|jd<t�}|jddkr|�|jj|j�WS|jddkr-|�|jj|j�WS|jddkr>|�|jj|j�WSWdStyZ}z|�	dt
|��WYd}~Sd}~ww)NrH�selectedApplicationzWordPress with LSCache�
Prestashop�Joomlar)r%rArIrr$�installWordpress�prestaShopInstall�
installJoomlar8r3r9rKr'r'r(�submitApplicationInstall�s���z%CloudManager.submitApplicationInstallc
Csfz|jj|jd<dt��d�}t�|�}t|�WSty2}z|�	dt
|��WYd}~Sd}~ww)NrHr5)r+�serverStatusr)r%rArIr��decideServerr-r.r/r8r3r9)r&r;r�r�r<r'r'r(�obtainServer�s

��zCloudManager.obtainServerc
Cr>r?)r�
getSSHConfigsr%rAr$r8r3r9�r&r�r<r'r'r(r�rEzCloudManager.getSSHConfigsc
Cr>r?)r�saveSSHConfigsr%rAr$r8r3r9rr'r'r(r �rEzCloudManager.saveSSHConfigsc
Cr>r?)r�deleteSSHKeyr%rAr$r8r3r9rr'r'r(r!�rEzCloudManager.deleteSSHKeyc
Cr>r?�r�	addSSHKeyr%rAr$r8r3r9rr'r'r(r#�rEzCloudManager.addSSHKeyc
CsLzt�}|�|jj�WSty%}z|�dt|��WYd}~Sd}~wwr?)r�getCurrentRulesr%rAr8r3r9rr'r'r(r$s��zCloudManager.getCurrentRulesc
Cr>r?)r�addRuler%rAr$r8r3r9rr'r'r(r%	rEzCloudManager.addRulec
Cr>r?)r�
deleteRuler%rAr$r8r3r9rr'r'r(r&rEzCloudManager.deleteRulec
Cr�rG)r%rArIrr8r3r9r:r'r'r(rr�zCloudManager.getLogsFromFilec
Csfz|jj|jd<|jddkrt|�WSt|�WSty2}z|�dt|��WYd}~Sd}~ww)NrHr^�hostnamer)	r%rArIr$rr
r8r3r9r:r'r'r(�	serverSSLs

��zCloudManager.serverSSLc
Cs�z3|jj|jd<dttdd��}||jd<t||jd�}|��i}||d<t|d�}|�	dd|�WSt
yM}z|�dt|��WYd}~Sd}~ww)	NrH�/home/cyberpanel/���'�tempStatusPath�	setupNoder5r)r%rArIr9�randintr$r�start�httpProc�ajaxr8r3)r&r;r,�hamr$�procr<r'r'r(�setupManager(s

��zCloudManager.setupManagerc
C�\z|jj|jd<t||jd�}|��WSty-}z|�dt|��WYd}~Sd}~ww�NrH�fetchManagerTokensr)	r%rArIrr$r7r8r3r9�r&r;r2r<r'r'r(r7:�
��zCloudManager.fetchManagerTokensc
Cr5r6)	r%rArIrr$�	addWorkerr8r3r9r8r'r'r(r:Cr9zCloudManager.addWorkerc
Csxz!tj�ddd�}d|}t�|�}dd|d�}t�|�}t|�WSty;}z|�	dt
|��WYd}~Sd}~ww)	Nz/rootz.sshzcyberpanel.pub�	sudo cat r5r�)r+r,�pubKeyr)�os�path�joinr��outputExecutionerr-r.r/r8r3r9)r&r;r<�execPathr$r�r�r<r'r'r(�fetchSSHKeyLs
�

��zCloudManager.fetchSSHKeyc
CsRzt|�}|�|jj|j�WSty(}z|�dt|��WYd}~Sd}~wwr?r"r�r'r'r(�
putSSHkeyFunc\s��zCloudManager.putSSHkeyFuncc
Cr5)NrH�
leaveSwarmr)	r%rArIrr$rDr8r3r9r8r'r'r(rDc�
��zCloudManager.leaveSwarmc
Cr5)NrH�
setUpDataNoder)	r%rArIrr$rFr8r3r9r8r'r'r(rFkrEzCloudManager.setUpDataNodec
Cr5)NrH�submitEditClusterr)	r%rArIrr$rGr8r3r9r8r'r'r(rGsrEzCloudManager.submitEditClusterc
Cr5)NrH�connectAccountr)	r%rArIrr$rHr8r3r9�r&r;�s3r<r'r'r(rH{rEzCloudManager.connectAccountc
Cr5)NrH�fetchBucketsr)	r%rArIrr$rKr8r3r9rIr'r'r(rK�rEzCloudManager.fetchBucketsc
Cr5)NrH�
createPlanr)	r%rArIrr$rLr8r3r9rIr'r'r(rL�rEzCloudManager.createPlanc
Cr5)NrH�fetchBackupPlansr)	r%rArIrr$rMr8r3r9rIr'r'r(rM�rEzCloudManager.fetchBackupPlansc
Cr5)NrH�
deletePlanr)	r%rArIrr$rNr8r3r9rIr'r'r(rN�rEzCloudManager.deletePlanc
Cr5)NrH�fetchWebsitesInPlanr)	r%rArIrr$rOr8r3r9rIr'r'r(rO�rEz CloudManager.fetchWebsitesInPlanc
Cr5)NrH�deleteDomainFromPlanr)	r%rArIrr$rPr8r3r9rIr'r'r(rP�rEz!CloudManager.deleteDomainFromPlanc
Cr5)NrH�savePlanChangesr)	r%rArIrr$rQr8r3r9rIr'r'r(rQ�rEzCloudManager.savePlanChangesc
Cr5)NrH�fetchBackupLogsr)	r%rArIrr$rRr8r3r9rIr'r'r(rR�rEzCloudManager.fetchBackupLogsc
Csjz|jj|jd<d|jd}t�|�|�dd�WSty4}z|�dt|��WYd}~Sd}~ww)NrHzi/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py forceRunAWSBackup --planName %s�planNamer5r)	r%rArIr$r��popenExecutionerr3r8r9)r&r;rAr<r'r'r(�forceRunAWSBackup�s�
��zCloudManager.forceRunAWSBackupc
Cr�rG)r%rArIrr8r3r9r:r'r'r(�systemStatus�r�zCloudManager.systemStatusc
Cr�rG)r%rArIrr8r3r9r:r'r'r(r�r�zCloudManager.killProcessc
Cr5)NrH�connectAccountDOr)	r%rArIrr$rWr8r3r9rIr'r'r(rW�rEzCloudManager.connectAccountDOc
Cr5)NrH�fetchBucketsDOr)	r%rArIrr$rXr8r3r9rIr'r'r(rX�rEzCloudManager.fetchBucketsDOc
Cr5)NrH�createPlanDOr)	r%rArIrr$rYr8r3r9rIr'r'r(rY�rEzCloudManager.createPlanDOc
Cr5)NrH�fetchBackupPlansDOr)	r%rArIrr$rZr8r3r9rIr'r'r(rZ�rEzCloudManager.fetchBackupPlansDOc
Cr5)NrH�deletePlanDOr)	r%rArIrr$r[r8r3r9rIr'r'r(r[�rEzCloudManager.deletePlanDOc
Cr5)NrH�fetchWebsitesInPlanDOr)	r%rArIrr$r\r8r3r9rIr'r'r(r\rEz"CloudManager.fetchWebsitesInPlanDOc
Cr5)NrH�fetchBackupLogsDOr)	r%rArIrr$r]r8r3r9rIr'r'r(r]rEzCloudManager.fetchBackupLogsDOc
Cr5)NrH�deleteDomainFromPlanDOr)	r%rArIrr$r^r8r3r9rIr'r'r(r^rEz#CloudManager.deleteDomainFromPlanDOc
Cr5)NrH�savePlanChangesDOr)	r%rArIrr$r_r8r3r9rIr'r'r(r_rEzCloudManager.savePlanChangesDOc
C�hz|jj|jd<t||jd�}|��|�dd�WSty3}z|�dt|��WYd}~Sd}~ww)NrH�forceRunAWSBackupDOr5r�	r%rArIrr$r/r3r8r9rIr'r'r(ra&���z CloudManager.forceRunAWSBackupDOc
C�z)|jj|jd<t�|jj�}|ddkr|�dd�WSt��}t�	|�}t
|�WStyC}z|�dt|��WYd}~Sd}~ww�NrHr%r�)Only administrators can see MySQL status.)
r%rArIr�r�r3r�
showStatusr-r.r/r8r9�r&r;r��	finalDatar<r'r'r(rg/�

��zCloudManager.showStatusc
Cs�zJddlm}ddl}i}|�}|�t|j�td��}||d<t��tjks.t��tj	kr6t�
d�|d<nt�
d�|d<d|d	<t�|�}t
|�WStyd}z|�dt|��WYd}~Sd}~ww)
Nr)�virtual_memoryi@�ramInGBzsudo cat /etc/my.cnf�confzsudo cat /etc/mysql/my.cnfr5r+)�psutilrk�math�ceil�float�totalr��decideDistro�centos�cent8r@r-r.r/r8r3r9)r&r;rkrori�mem�inGBr<r'r'r(�fetchRam>s"


��zCloudManager.fetchRamc
Cs�z7|jj|jd<t�|jj�}|ddkr|�dd�WSt�|j�}|ddkr1|�d|d�WS|�dd�WSt	yQ}z|�dt
|��WYd}~Sd}~ww)NrHr%rrfr5)r%rArIr�r�r3r�applyMySQLChangesr$r8r9)r&r;r��resultr<r'r'r(ry]s��zCloudManager.applyMySQLChangesc
Crdre)
r%rArIr�r�r3r�restartMySQLr-r.r/r8r9rhr'r'r(r{orjzCloudManager.restartMySQLc
Crdre)
r%rArIr�r�r3rr�r-r.r/r8r9rhr'r'r(�fetchDatabasesMYSQL~rjz CloudManager.fetchDatabasesMYSQLc
C�z+|jj|jd<t�|jj�}|ddkr|�dd�WSt�|j�}t	�
|�}t|�WStyE}z|�dt
|��WYd}~Sd}~wwre)r%rArIr�r�r3r�fetchTablesr$r-r.r/r8r9rhr'r'r(r~��

��zCloudManager.fetchTablesc
Cr}re)r%rArIr�r�r3r�deleteTabler$r-r.r/r8r9rhr'r'r(r��rzCloudManager.deleteTablec
Cr}re)r%rArIr�r�r3r�fetchTableDatar$r-r.r/r8r9rhr'r'r(r��rzCloudManager.fetchTableDatac
Cr}re)r%rArIr�r�r3r�fetchStructurer$r-r.r/r8r9rhr'r'r(r��rzCloudManager.fetchStructurec
Cr5)NrH�addMINIONoder)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEzCloudManager.addMINIONodec
Cr5)NrH�fetchMINIONodesr)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEzCloudManager.fetchMINIONodesc
Cr5)NrH�deleteMINIONoder)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEzCloudManager.deleteMINIONodec
Cr5)NrH�createPlanMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEzCloudManager.createPlanMINIOc
Cr5)NrH�fetchBackupPlansMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEz"CloudManager.fetchBackupPlansMINIOc
Cr5)NrH�deletePlanMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEzCloudManager.deletePlanMINIOc
Cr5)NrH�savePlanChangesMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r��rEz!CloudManager.savePlanChangesMINIOc
Cr`)NrH�forceRunAWSBackupMINIOr5rrbrIr'r'r(r�rcz#CloudManager.forceRunAWSBackupMINIOc
Cr5)NrH�fetchWebsitesInPlanMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r�
rEz%CloudManager.fetchWebsitesInPlanMINIOc
Cr5)NrH�fetchBackupLogsMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r�rEz!CloudManager.fetchBackupLogsMINIOc
Cr5)NrH�deleteDomainFromPlanMINIOr)	r%rArIrr$r�r8r3r9rIr'r'r(r�rEz&CloudManager.deleteDomainFromPlanMINIOc
CrFrG)	r%rArIr�submitWebsiteStatusr$r8r3r9rKr'r'r(r�"rLz CloudManager.submitWebsiteStatusc
CrFrG)	r%rArIrr�r$r8r3r9rKr'r'r(�submitChangePHP*rLzCloudManager.submitChangePHPc
CrFrG)	r%rArIr�getSwitchStatusr$r8r3r9rKr'r'r(r�2rLzCloudManager.getSwitchStatusc
CrFrG)	r%rArIr�switchServerr$r8r3r9rKr'r'r(r�:rLzCloudManager.switchServerc
CrFrG)	r%rArIr�tuneSettingsr$r8r3r9rKr'r'r(r�BrLzCloudManager.tuneSettingsc
C�Vz|jj|jd<t�|jd�WSty*}z|�dt|��WYd}~Sd}~ww�NrH�phpSelectionr)	r%rArIr�getCurrentPHPConfigr$r8r3r9r:r'r'r(r�J���z CloudManager.getCurrentPHPConfigc
C�Rz|jj|jd<t�|j�WSty(}z|�dt|��WYd}~Sd}~wwrG)	r%rArIr�savePHPConfigBasicr$r8r3r9r:r'r'r(r�Q���zCloudManager.savePHPConfigBasicc
Cr�r�)	r%rArIr�fetchPHPSettingsAdvancer$r8r3r9r:r'r'r(r�Xr�z$CloudManager.fetchPHPSettingsAdvancec
Cr�rG)	r%rArIr�savePHPConfigAdvancer$r8r3r9r:r'r'r(r�_r�z!CloudManager.savePHPConfigAdvancec
Cr�rG)	r%rArIr�fetchPHPExtensionsr$r8r3r9r:r'r'r(r�fr�zCloudManager.fetchPHPExtensionsc
CsZz|jj|jd<t|�|�dd�WSty,}z|�dt|��WYd}~Sd}~ww)NrHr5r�r)r%rArIrr3r8r9r:r'r'r(rms��z#CloudManager.submitExtensionRequestc
Cr�rG)r%rArIrr8r3r9r:r'r'r(�getRequestStatusur�zCloudManager.getRequestStatusc
Cs~z$|jj|jd<i}d|d<t��sd|d<nd|d<t�|�}t|�WSty>}z|�	dt
|��WYd}~Sd}~ww)NrHr5r+�notInstalledr)r%rArIr��containerCheckr-r.r/r8r3r9)r&r;rir<r'r'r(�getContainerizationStatus|s


��z&CloudManager.getContainerizationStatusc
Cs�z3|jj|jd<t�|jj�}|ddkrnt��WSt|dd�}|��ddd�}t�	|�}t
|�WStyM}z|�dt
|��WYd}~Sd}~ww)NrHr%r5�submitContainerInstallr�r*r)r%rArIr�r�r��ContainerManagerr/r-r.r/r8r3r9)r&r;r��cr�r�r<r'r'r(r��s



��z#CloudManager.submitContainerInstallc
Cr�rG)r%rArIrr8r3r9r:r'r'r(r�r�zCloudManager.switchTOLSWSStatusc
Cr�rG)r%rArI�fetchWebsiteLimitsr8r3r9r:r'r'r(r��r�zCloudManager.fetchWebsiteLimitsc
Cr�rG)r%rArI�saveWebsiteLimitsr8r3r9r:r'r'r(r��r�zCloudManager.saveWebsiteLimitsc
Cr�rG)r%rArI�getUsageDatar8r3r9r:r'r'r(r��r�zCloudManager.getUsageDatac
Cs�z1dttdd��}dttdd��}||d�}tdd|�}|��d||d�}t�|�}t|�WStyK}z|�dt|��WYd}~Sd}~ww)	Nr)r*r+)r,�
reportFile�RunServerLevelEmailChecksr5)r+r,r�r)	r9r.r
r/r-r.r/r8r3)r&r,r��	extraArgs�
backgroundr1r2r<r'r'r(r��s


��z&CloudManager.RunServerLevelEmailChecksc
Cs�z|jd}t|d���}d|d�}t�|�}t|�WSty?}zdddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr�r�r5)r+�
reportContentrr�r�)r$r��readr-r.r/r8r9)r&r�r�r�r�r<r'r'r(�
ReadReport�s




��zCloudManager.ReadReportc
C�z8dttdd��}t|d�}|�d�|��dtjd}|d|}t�|�d	|d
�}t	�
|�}t|�WStyR}z|�
dt|��WYd}~Sd}~ww)Nr)r*r+�w�Starting..,0�/usr/local/CyberCP/bin/python z/plogical/mailUtilities.pyz- ResetEmailConfigurations --tempStatusPath %sr5�r+r,r�r9r.r��write�closer�
cyberPanelr�rTr-r.r/r8r3�r&r,rkrAr1r2r<r'r'r(�ResetEmailConfigurations��





��z%CloudManager.ResetEmailConfigurationsc
Csrzt�|jj�}t�||jj�}d|d�}t�|�}t|�WSty8}z|�	dt
|��WYd}~Sd}~ww)Nr5)r+�websitesr)r�r�r%rA�findAllWebsitesr-r.r/r8r3r9)r&r�r�r1r2r<r'r'r(�
fetchAllSites�s


��zCloudManager.fetchAllSitesc
Cs�z4|jd}tddd��|�}|dr$|ddd�}t�|�}t|�WS|ddd�}t�|�}t|�WStyN}z|�dt|��WYd}~Sd}~ww)N�websiteName�debugEmailForSiterr5)r,r+)	r$r
r�r-r.r/r8r3r9)r&r�rzr1r2r<r'r'r(r��s




��zCloudManager.debugEmailForSitec
CsZz|jj|jd<t|�}|�|j�WSty,}z|�dt|��WYd}~Sd}~wwrG)	r%rArIr
�
fixMailSSLr$r8r3r9)r&r;�msMr<r'r'r(r�s��zCloudManager.fixMailSSLc
C�z!d}t�|�}d}|�d�dkrd}d|d�}t�|�}t|�WStyE}zdddt|�d�}t�|�}t|�WYd}~Sd}~ww)	N�ps auxr5z	pure-ftpdr�r)r+�FTPr�r��r�r@r�r-r.r/r8r9)r&r�rzr�r�r�r<r'r'r(�
ReadReportFTP�




��zCloudManager.ReadReportFTPc
Cr�)Nr)r*r+r�r�r�z/ftp/ftpManager.pyz+ ResetFTPConfigurations --tempStatusPath %sr5r�rr�r�r'r'r(�ResetFTPConfigurations+r�z#CloudManager.ResetFTPConfigurationsc
Cr�)	Nr�r5zpdns_server --guardian=nor�r)r+�DNSr�r�r�)r&r�rzr�r�r�r<r'r'r(�
ReadReportDNS@r�zCloudManager.ReadReportDNSc
Cr�)Nr)r*r+r�r�r�z/dns/dnsManager.pyz+ ResetDNSConfigurations --tempStatusPath %sr5r�rr�r�r'r'r(�ResetDNSConfigurationsRr�z#CloudManager.ResetDNSConfigurationscCs�z�dttdd��}t|d�}|�d�|��ztt|jd��}Wnd}Yztt|jd��}Wnd}Yztt|jd	��}Wnd}Yz	t|jd
�}Wnd}Yz	t|jd�}Wnd}Yz|jd}Wnd
}Yddl}	d|jd|jdd|	�d�}
dt	j
d}|d|jd|||||
|||f	}t�|�d|d|
d�}t
�|�}
t|
�WSty�}z|�dt|��WYd}~Sd}~ww)Nr)r*r+r�r�r$r��emails�	databases�port�ip�destinationDomainr�rz#/home/cyberpanel/backups/%s/backup-rs�-z%m.%d.%Y_%H-%M-%Sr��/plogical/backupUtilities.pyz� CloudBackup --backupDomain %s --data %s --emails %s --databases %s --tempStoragePath %s --path %s --port %s --ip %s --destinationDomain %sr5z	%s.tar.gz)r+r,r>)r9r.r�r�r�rfr$�time�strftimerr�r�rTr-r.r/r8r3)r&r,rkr$r�r�r�r�r�r��
BackupPathrAr1r2r<r'r'r(�SubmitCloudBackupgsf

�����


��zCloudManager.SubmitCloudBackupc

Cs(zp|jd}d|}zt�|�}|��Wng}Yd}d}d}|D]9}ttttj�d||f��td���}||d|d	�}	|d}|dkrT|t�	|	�}d}q$|d
t�	|	�}q$|d}t�	ddd|d
��}
t
|
�WSty�}zddt|�d�}t�	|�}
t
|
�WYd}~Sd}~ww)Nrqz/home/cyberpanel/backups/%s/r�rr5z%s/%siz%s MBs�r��file�sizer�r�r��r+�fetchStatusr,r$�r+r�r,)r$r=�listdir�reverser9rfr>�getsizer-r.r/r8)
r&�backupDomain�backupsPath�backupsr�r��counterr�r�r�r2r<r1r'r'r(�getCurrentCloudBackups�s>

(�

��z#CloudManager.getCurrentCloudBackupsc
Cs�zHddlm}tj�|j�r)t�t|jd��	��}|d|_
|d|_|d|_n|j
|_
|j|_|j|_d|j
|j|jd�}t�|�}t|�WStyl}zddd	t|�d
�}t�|�}t|�WYd}~Sd}~ww)Nr��backupUtilitiesr��nice�cpur�r5)r+r�r�r�r�r�)�plogical.backupUtilitiesr�r=r>�exists�CloudBackupConfigPathr-�loadsr�r�r�r�r��NiceDefault�
CPUDefaultr.r/r8r9)r&r�rzr�r�r<r'r'r(�fetchCloudBackupSettings�s&




��z%CloudManager.fetchCloudBackupSettingsc
Cs�z'ddlm}t|jd�}|�t�|j��|��ddi}t�|�}t	|�WSt
yK}zdddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nrr�r�r+r5r�r�)r�r�r�r�r�r-r.r$r�r/r8r9)r&r�rkr�r�r<r'r'r(�saveCloudBackupSettings�s


��z$CloudManager.saveCloudBackupSettingsc
Cs�z'|jd}|jd}d||f}d|}t�|�t�dddd��}t|�WStyJ}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)	Nrq�
backupFilez/home/cyberpanel/backups/%s/%szrm -f %sr5r�r�r�r$r�r�r-r.r/r8r9)r&r�r��backupsPathCompleter�r2r<r1r'r'r(�deleteCloudBackup�s




��zCloudManager.deleteCloudBackupc
Cs�zPdttdd��}t|d�}|�d�|��z|jd}Wnd}Ydtjd	}|d
|jd|jd||f}t�	|�d
|d�}t
�|�}t|�WSt
yj}z|�dt|��WYd}~Sd}~ww)Nr)r*r+r�r��sourceDomainr�r�r�zb SubmitCloudBackupRestore --backupDomain %s --backupFile %s --sourceDomain %s --tempStoragePath %srsr�r5r�r)r9r.r�r�r�r$rr�r�rTr-r.r/r8r3)r&r,rkr�rAr1r2r<r'r'r(�SubmitCloudBackupRestore�s*

�



��z%CloudManager.SubmitCloudBackupRestorecCs~d}|d}t|d���}|d�d�d�d��d�}|d�d�d�d��d�}|d�d�d�d��d�}|||fS)	Nz/home/cyberpanel/.awsz/credentialsr�r5� �r�rY)r�r�r��strip)r&r>�credentialsr$�aws_access_key_id�aws_secret_access_key�regionr'r'r(�fetchAWSKeyss
zCloudManager.fetchAWSKeysc
Cs�z�ddl}ddlm}m}|jj|jdd�}|��\}}}|�d�dkr/|j	d|||d�}n|j	d||d	�}|�
|j�}	d
|j|jdf}
g}|	jj
|
d�D]}|�|j|jd
��qPd}
d}d}|D]'}||d|dd�}|d}|dkr�|
t�|�}
d}qe|
dt�|�}
qe|
d}
t�ddd|
d��}t|�WSty�}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr��
BackupPlan�
BackupLogsrSrS�httpr�rJ�r�r��endpoint_url�r�r�z%s/%s/rq)�Prefix)�keyr�r�r5rr�r�r�r�r�r�r�)�boto3�s3Backups.modelsrrrgrhr$r�r��resource�Bucket�bucketrT�filter�appendrr�r-r.r/r8r9)r&rrr�planr�r�r�rJrrr�r�r�r�r�r�r�r2r<r1r'r'r(�getCurrentS3Backups$sX���

��z CloudManager.getCurrentS3Backupsc
Cs�zPddl}ddlm}m}|jj|jdd�}|��\}}}|�d�dkr/|j	d|||d�}n|j	d||d	�}|�
|j|jd
���t
�dddd
��}	t|	�WStys}
zddt|
�d
�}t
�|�}	t|	�WYd}
~
Sd}
~
ww)Nrr�rSrSrr�rJrrr�r5r�r�)rr	rrrgrhr$r�r�r
�Objectr�deleter-r.r/r8r9)r&rrrrr�r�r�rJr2r<r1r'r'r(�deleteS3Backup\s4��

��zCloudManager.deleteS3Backupc
Cs�zEdttdd��}t|d�}|�d�|��dtjd}|d|jd	|jd
||jdf}t�	|�d|d
�}t
�|�}t|�WSt
y_}z|�dt|��WYd}~Sd}~ww)Nr)r*r+r�r�r�r�z] SubmitS3BackupRestore --backupDomain %s --backupFile '%s' --tempStoragePath %s --planName %srsr�rSr5r�r�r9r.r�r�r�rr�r$r�rTr-r.r/r8r3r�r'r'r(�SubmitS3BackupRestore|s"

�



��z"CloudManager.SubmitS3BackupRestorecCs$zwdttdd��}t|d�}|�d�|��dtjd}|d||jd	|jd
|jd|jd|jd
|jd|jd|jd|jd|jdt|jd�f}zd||jdf}WnYt�	|�d|d�}t
�|�}t|�WSt
y�}z|�dt|��WYd}~Sd}~ww)Nr)r*r+r�r�r�z!/plogical/applicationInstaller.pyz� DeployWordPress --tempStatusPath %s --appsSet '%s' --domain '%s' --email '%s' --password '%s' --pluginUpdates '%s' --themeUpdates '%s' --title '%s' --updates '%s' --userName '%s' --version '%s' --createSite %s�appsSetrsr]�passwordByPass�
pluginUpdates�themeUpdates�title�updatesr_�version�
createSitez%s --path %sr>r5r�rrr�r'r'r(�DeployWordPress�s4

��	



��zCloudManager.DeployWordPressc
Cs�zci}|jd}d|d<d|d<d|d<tjj|d�}z dd	lm}|jj|d
�}t�|j�d}d|jd|f}Wnd
|jd}Yd|}t	t
�||jd��|d<d|}t	t
�||j��}|�
d�dkrqd|d<nd|d<z-d|}t
�||j��d�}d|d<|D]}	|	�
d�dkr�|	�
d�dkr�d|d<nq�Wnty�}
zd|d<t�d|j�WYd}
~
nd}
~
wwzd|}tt
�||j���d�|d<Wnty�}
zt�d|j�d|d<WYd}
~
nd}
~
wwz"d|}t
�||j���d}|�
d�dk�rd|d<nd|d<Wnt�y6}
zt�d |j�d|d<WYd}
~
nd}
~
wwzd!|}t
�||j���d|d"<Wnt�d#|j�d$|d"<Yt�|�}t|�WSt�y}
z|�dt	|
��WYd}
~
Sd}
~
ww)%Nrsr5r+�maintenanceModez7.4�phprrr��
WPDeployments�rbr>�/home/%s/public_html/%s�/home/%s/public_htmlzBwp core version --skip-plugins --skip-themes --path=%s 2>/dev/nullTrzGwp plugin status litespeed-cache --skip-plugins --skip-themes --path=%s�Status: Activer��lscachez5wp config list --skip-plugins --skip-themes --path=%sr��	debugging�WP_DEBUG�1z1Error fetching WordPress debug mode for %s. [404]z@wp option get blog_public --skip-plugins --skip-themes --path=%s�searchIndexz7Error fetching WordPress searchIndex mode for %s. [404]zAwp maintenance-mode status --skip-plugins --skip-themes --path=%sz
not activez;Error fetching WordPress maintenanceMode mode for %s. [404]z=wp option get blogname --skip-plugins --skip-themes --path=%srz,Error fetching WordPress Title for %s. [404]�
CyberPanel)r$r�rgrh�cloudAPI.modelsr"r-r��configr9r�r@�externalAppr�r�r8rjrkrsrf�
splitlinesr.r/r3)r&�finalDicrsr�r"�wpdr>r�rzr�r<r2r'r'r(�FetchWordPressDetails�s�

������
���


��z"CloudManager.FetchWordPressDetailsc
Cs
zjtjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Yddl	m
}|�d	�}d
||f}t�
||j�d||f}t�
||j�d|d
�}t�|�}	t|	�WSty�}
z|�dt|
��WYd}
~
Sd}
~
ww)Nrsrrrr!r#r>r$r%� zwp user create cyberpanel support@cyberpanel.cloud --role=administrator --user_pass="%s" --path=%s --skip-plugins --skip-themeszQwp user update cyberpanel --user_pass="%s" --path=%s --skip-plugins --skip-themesr5)r+r`)r�rgrhr$r-r"r-r�r.�plogical.randomPassword�randomPassword�
generate_passr�r�r/r.r/r8r3r9)r&r�r"r2r>r6r`r�r1r2r<r'r'r(�	AutoLogin
s4
��


��zCloudManager.AutoLoginc

Cs�zntjj|jdd�}|jd}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Y|jd	d
kr�|jdrnd|}t	�
||j�d
|}t	�
||j�ddd�}t�|�}t
|�WSd|}t	�
||j�ddd�}t�|�}t
|�WS|jd	dkr�d|}t	�
||j�|jdr�d|}t	�
||j�ddd�}t�|�}t
|�WSd|}t	�
||j�ddd�}t�|�}t
|�WS|jd	dk�r d|}t	�
||j�|jd�rd|}t	�
||j�ddd�}t�|�}t
|�WSd|}t	�
||j�ddd�}t�|�}t
|�WS|jd	dk�rmd|}t	�
||j�|jd�rSd|}t	�
||j�dd d�}t�|�}t
|�WSd!|}t	�
||j�dd"d�}t�|�}t
|�WSWdSt�y�}	z|�dt|	��WYd}	~	Sd}	~	ww)#Nrsrrrr!r#r>r$r%�settingr'�settingValuezHwp plugin install litespeed-cache --path=%s --skip-plugins --skip-themeszIwp plugin activate litespeed-cache --path=%s --skip-plugins --skip-themesr5z-LSCache successfully installed and activated.�r+�messagezKwp plugin deactivate litespeed-cache --path=%s --skip-plugins --skip-themesz!LSCache successfully deactivated.r(z=wp litespeed-purge all --path=%s --skip-plugins --skip-themeszBwp config set WP_DEBUG true --path=%s --skip-plugins --skip-themeszWordPress is now in debug mode.zCwp config set WP_DEBUG false --path=%s --skip-plugins --skip-themesz WordPress debug mode turned off.r+zEwp option update blog_public 1 --path=%s --skip-plugins --skip-themeszSearch Engine Indexing enabled.zEwp option update blog_public 0 --path=%s --skip-plugins --skip-themesz Search Engine Indexing disabled.rzCwp maintenance-mode activate --path=%s --skip-plugins --skip-themesz%WordPress Maintenance mode turned on.zEwp maintenance-mode deactivate --path=%s --skip-plugins --skip-themesz&WordPress Maintenance mode turned off.)r�rgrhr$r-r"r-r�r.r�r�r/r.r/r8r3r9)
r&r�rsr"r2r>r�r1r2r<r'r'r(�UpdateWPSettings1s�


























���zCloudManager.UpdateWPSettingsc

C��zTtjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Yd	|}t	�
||j���d
}t�
ddd|d
��}t|�WStyw}zddt|�d�}	t�
|	�}t|�WYd}~Sd}~ww)Nrsrrrr!r#r>r$r%zCwp plugin list --skip-plugins --skip-themes --format=json --path=%sr�r5r�r�r��r�rgrhr$r-r"r-r�r.r�r@r/r0r.r/r8r9�
r&r�r"r2r>r�r�r2r<r1r'r'r(�GetCurrentPlugins�s&

��zCloudManager.GetCurrentPluginsc
C��z�tjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Y|jd	d
krWd|}t	�
||j�t�ddd
d��}t
|�WS|jd	dkr�|jdr|d|}t	�
||j�t�ddd
d��}t
|�WSd}|jdD]}d||f}q�d||f}t	�
||j�t�ddd
d��}t
|�WSd|jd	|f}t	�
||j�t�ddd
d��}t
|�WSty�}	zddt|	�d�}
t�|
�}t
|�WYd}	~	Sd}	~	ww)Nrsrrrr!r#r>r$r%�pluginr�z=wp plugin update --all --skip-plugins --skip-themes --path=%sr5z)Plugin updates started in the background.�r+r�r<�selected�allPluginsCheckedrW�plugins�%s %sz:wp plugin update %s --skip-plugins --skip-themes --path=%sr��r�rgrhr$r-r"r-r�r.r�rTr/r.r/r8r9�r&r�r"r2r>r�r2�pluginsListrCr<r1r'r'r(�
UpdatePlugins��Z
�


�

�

�

��zCloudManager.UpdatePluginsc

C�Zz�tjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Yd	|jd
|f}t	�
||j�}|�d�dkrld
|jd
|f}t	�
||j�t�dddd��}t|�WSd|jd
|f}t	�
||j�t�dddd��}t|�WSty�}zddt|�d�}	t�|	�}t|�WYd}~Sd}~ww)Nrsrrrr!r#r>r$r%z:wp plugin status %s --skip-plugins --skip-themes --path=%srCr&r�z>wp plugin deactivate %s --skip-plugins --skip-themes --path=%sr5z Plugin successfully deactivated.rDz<wp plugin activate %s --skip-plugins --skip-themes --path=%szPlugin successfully activated.r��r�rgrhr$r-r"r-r�r.r�r@r/r�r�r.r/r8r9�
r&r�r"r2r>r�rzr2r<r1r'r'r(�ChangeState�s@
�

�
�

��zCloudManager.ChangeStatec
CsTz�tjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Y|jd	d
krid}|jdD]}d
||f}qEd||f}t	�
||j�t�dddd��}t
|�WSd|jd	|f}t	�
||j�t�dddd��}t
|�WSty�}	zddt|	�d�}
t�|
�}t
|�WYd}	~	Sd}	~	ww)Nrsrrrr!r#r>r$r%rCrErWrGrHz:wp plugin delete %s --skip-plugins --skip-themes --path=%sr5z*Plugin deletion started in the background.rDr�rI�r&r�r"r2r>rKrCr�r2r<r1r'r'r(�
DeletePlugins��>
�

�

��zCloudManager.DeletePluginsc

Cr>)Nrsrrrr!r#r>r$r%zBwp theme list --skip-plugins --skip-themes --format=json --path=%sr�r5r�r�r�r?r@r'r'r(�GetCurrentThemes#	s&

��zCloudManager.GetCurrentThemesc
CrB)Nrsrrrr!r#r>r$r%rCr�z<wp theme update --all --skip-plugins --skip-themes --path=%sr5z(Theme updates started in the background.rDrErFrWrGrHz9wp theme update %s --skip-plugins --skip-themes --path=%sr�rIrJr'r'r(�UpdateThemes:	rMzCloudManager.UpdateThemesc

CrN)Nrsrrrr!r#r>r$r%z9wp theme status %s --skip-plugins --skip-themes --path=%srCr&r�z=wp theme deactivate %s --skip-plugins --skip-themes --path=%sr5zTheme successfully deactivated.rDz;wp theme activate %s --skip-plugins --skip-themes --path=%szTheme successfully activated.r�rOrPr'r'r(�ChangeStateThemesk	sD
�
�

�
�

��zCloudManager.ChangeStateThemesc
CsTz�tjj|jdd�}z ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd|jd}Y|jd	d
krid}|jdD]}d
||f}qEd||f}t	�
||j�t�dddd��}t
|�WSd|jd	|f}t	�
||j�t�dddd��}t
|�WSty�}	zddt|	�d�}
t�|
�}t
|�WYd}	~	Sd}	~	ww)Nrsrrrr!r#r>r$r%rCrErWrGrHz9wp theme delete %s --skip-plugins --skip-themes --path=%sr5z'Plugin Theme started in the background.rDz)Theme deletion started in the background.r�rIrRr'r'r(�DeleteThemes�	rTzCloudManager.DeleteThemesc
Cs|zd}d|}t�|�}d|d�}t�|�}t|�WSty=}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nz/root/.ssh/cyberpanel.pub�cat %sr5)r+rrr�)r�r@r-r.r/r8r9)r&r>r�rr1r2r<r'r'r(�GetServerPublicSSHkey�	s




��z"CloudManager.GetServerPublicSSHkeyc
Cs�z>t�}|�|jj|j�zd|jd}d|}t�|d�WnYddlm}|�	�d|j
d�}t�|�}t
|�WStya}zddt|�d	�}t�|�}t
|�WYd}~Sd}~ww)
Nz/home/cyberpanel/backups/%srszmkdir -p %s�
cyberpanelr)�	SSHServerr5)r+r�r�)rr#r%rAr$r�r��WebTerminal.CPWebSocketr\�findSSHPort�DEFAULT_PORTr-r.r/r8r9)r&r�r�r�r\r1r2r<r'r'r(�SubmitPublicKey�	s(


��zCloudManager.SubmitPublicKeyc
CrFrG)	r%rArIr�startCloningr$r8r3r9rKr'r'r(�
CreateStaging�	rLzCloudManager.CreateStagingc
CrFrG)	r%rArIr�	startSyncr$r8r3r9rKr'r'r(rc�	rLzCloudManager.startSyncc
Cs�z�tjj|jdd�}|jd}ddlm}z|jj|d�}t�|j�}Wn||d�}i}Yz ddlm}|jj|d�}t�|j�d}d|jd|f}Wnd	|jd}Y|jd
|d<|jd|d
<|jd|d<t�	|�|_|�
�|jd
dkr�d|}t�||j
�n|jd
dkr�d|}t�||j
�nd|}t�||j
�t�	ddd��}t|�WSty�}	zddt|	�d�}
t�	|
�}t|�WYd}	~	Sd}	~	ww)Nrqrrrr!r#r>r$rsr%�wpCorerrGr�themesr�DisabledzTwp config set WP_AUTO_UPDATE_CORE false --skip-plugins --skip-themes --raw --path=%szMinor and Security Updatesz[wp config set WP_AUTO_UPDATE_CORE minor --skip-plugins --skip-themes --allow-root --path=%szCwp config set WP_AUTO_UPDATE_CORE true --raw --allow-root --path=%sr5zAutoupdates configured.r;r�)r�rgrhr$r-r"r-r�r.r.rir�r�r/r/r8r9)r&r�rqr"r2r.r>r�r2r<r1r'r'r(�SaveAutoUpdateSettings�	sX

���

��z#CloudManager.SaveAutoUpdateSettingsc	
Cs�zRt�d�}|�d�dkrd}t��tjkst��tjkr d}nd}t�d|��d�}d	}|D]}|�d
�dkr;|}q0|�d
�dkrEd}t�d||d
��}t	|�WSt
yu}zddt|�d�}t�|�}t	|�WYd}~Sd}~ww)Nzwp --version --allow-root�	not foundr�zWP CLI Not installed.z/var/spool/cron/rootz/var/spool/cron/crontabs/rootrYr�rWzWPAutoUpdates.pyzNot Setr5)r+�
cliVersion�	finalCronrr�)r�r@r�rsrtrur�r-r.r/r8r9)	r&ri�
localCronPath�cronDatarj�cronLiner2r<r1r'r'r(�fetchWPSettings!
s2
�
�

��zCloudManager.fetchWPSettingsc
C�nzd}t�|�t�ddi�}t|�WSty6}zddt|�d�}t�|�}t|�WYd}~Sd}~ww�Nz
wp cli updater+r5rr��r�r�r-r.r/r8r9�r&r�r2r<r1r'r'r(�updateWPCLI@
�


��zCloudManager.updateWPCLIc
Crorprqrrr'r'r(�saveWPSettingsM
rtzCloudManager.saveWPSettingsc
Cs�z5d|jd}d|}t�|dd�}|�d�dkr*dddd	�}t�|�}t|�WSt�d
di�}t|�WStyX}zddt|�d	�}t�|�}t|�WYd}~Sd}~ww)Nr%rqzOwp core version --allow-root --skip-plugins --skip-themes --path=%s 2>/dev/nullTzError:r�rz1This does not seem to be a WordPress installationr�r+r5)	r$r�r@r�r-r.r/r8r9)r&r>r�rzr1r2r<r'r'r(�WPScanZ
s$�



��zCloudManager.WPScanc
Cs�zRztt|jd��}Wnd}Yztt|jd��}Wnd}Yztt|jd��}Wnd}Yd|jd|||f}t�|�t�ddi�}t|�WStyu}zd	d	t|�d
�}t�|�}t|�WYd}~Sd}~ww)N�mailr��dns�ftpzv/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/CyberPanelUpgrade.py --branch %s --mail %s --dns %s --ftp %s�CyberPanelBranchr+r5rr�)	r9rfr$r�r�r-r.r/r8)r&rwrxryrAr2r<r1r'r'r(�SubmitCyberPanelUpgradep
s2�


��z$CloudManager.SubmitCyberPanelUpgradec
C�z|jd}dd|f}t�|�t�ddi�}t|�WSty?}zddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nr^�c/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function %s --type %s�
DetachClusterr+r5rr�r��r&r^rAr2r<r1r'r'r(r~�
�
�


��zCloudManager.DetachClusterc
Cs�z,d}t|d�}|�t�|j��|��d|jd}t�|�t�ddi�}t|�WSt	yO}zddt
|�d�}t�|�}t|�WYd}~Sd}~ww)	Nz/home/cyberpanel/clusterr�zm/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function SetupCluster --type %sr^r+r5rr��r�r�r-r.r$r�r�r�r/r8r9)r&�ClusterConfigPathrkrAr2r<r1r'r'r(�SetupCluster�
s"
�


��zCloudManager.SetupClusterc
CsJz�ddlm}i}d|d<|jdd|d<|jdd|d	<|jdd
|d<|jdd|d
<|jdd|d<|jdd|d<|jdd|d<|jdd
|d<d}t�|�}|�d�dkrhd|d<n|�d�dkrtd|d<nd|d<t�|�}t|�WSt	y�}zddt
|�d�}t�|�}t|�WYd}~Sd}~ww)Nr)�settingsr5r+�default�NAME�dbName�USER�dbUser�PASSWORDr`�HOST�host�PORTr��rootdb�
rootdbName�rootdbdbUser�rootdbpassword�cat /var/lib/mysql/grastate.dat�No such file or directoryr��safezsafe_to_bootstrap: 1r�)�CyberCPr��	DATABASESr�r@r�r-r.r/r8r9)r&r�r$r��outputr2r<r1r'r'r(�FetchMasterBootStrapStatus�
s6





��z'CloudManager.FetchMasterBootStrapStatusc
Cs�z3i}d|d<d}t�|�}|�d�dkrd|d<n|�d�dkr&d|d<nd|d<t�|�}t|�WStyV}zddt|�d	�}t�|�}t|�WYd}~Sd}~ww)
Nr5r+r�r�r�r�zsafe_to_bootstrap: 0rr�r�)r&r$r�r�r2r<r1r'r'r(�FetchChildBootStrapStatus�
s$





��z&CloudManager.FetchChildBootStrapStatusc
Cro)Nzo/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function BootMaster --type Masterr+r5rr�rq�r&rAr2r<r1r'r'r(�
BootMaster�
�


��zCloudManager.BootMasterc
Cs�z'd}t|d�}|�t�|j��|��d}t�|�t�ddi�}t|�WSt	yJ}zddt
|�d�}t�|�}t|�WYd}~Sd}~ww)Nz/home/cyberpanel/childaatar�zm/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function BootChild --type Childr+r5rr�r�)r&�	ChildDatarkrAr2r<r1r'r'r(�	BootChild�
s



��zCloudManager.BootChildc
Cro)Nz}/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function CreatePendingVirtualHosts --type Childr+r5rr�)r�rTr-r.r/r8r9r�r'r'r(�CreatePendingVirtualHostsr�z&CloudManager.CreatePendingVirtualHostscCs�z\d}t�|�d}t�|�d}t�|dd�d}t|�}|��}|�dd�d}ddl}|j|jd	|jd
d�}|jjdd
id�}t	j
��D]q}	ddl}
|
j
dd�}||	j�}|jd|j}
|D]U}|
|dkr�zG|jjj|dd|	jid�}|D]4}|d}|d}|d}|d}|d}|d}|d}|||||||d�}|jjj|d||d�q~WqeYqeqeqJd}t�|�d}t�|�d}t�|dd�ddlm}|j
��D]s}	ddl}
|
j
dd�}||	j�}|jd|j}
|D]W}|
|dk�rPzH|jjj|dd|	jid�}|D]5}|d}|d}|d}|d}|d}|d}|d}|||||||d�}|jjj|d||d��qWq�Yq�q�q�t�ddi�}t|�WSt�y�}zt�t|��ddt|�d�}t�|�}t|�WYd}~Sd}~ww)Nzgchown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib/python3.8/site-packages/tldextract/.suffix_cache/zfchown cyberpanel:cyberpanel -R /usr/local/CyberCP/lib/python3.8/site-packages/tldextract/.suffix_cachezdchown cyberpanel:cyberpanel -R /usr/local/CyberCP/lib/python*/site-packages/tldextract/.suffix_cacheTz/etc/cyberpanel/machineIPr�r5r�cfemail�apikey)r]r7�per_pager|)�params)�	cache_dir�.rTr��zone_idr^�ttl�proxied)r�r�r^rT�contentr�r�)r$zfchown cyberpanel:cyberpanel -R /usr/local/CyberCP/lib/python3.6/site-packages/tldextract/.suffix_cache)�ChildDomainsr+r�)r�r�r�r�r��
CloudFlarer$�zonesrhr�rgr��
tldextract�
TLDExtractrs�suffix�dns_records�put�websiteFunctions.modelsr�r-r.r/r8rjrkr9)r&r��ipFile�f�ipData�	ipAddressr��cfr�r�r��no_cache_extract�
extractDomain�topLevelDomain�zoner��
dns_record�	r_zone_id�r_id�r_name�r_type�r_ttl�	r_proxied�
dns_record_id�new_dns_recordr�r2r<r1r'r'r(�	SwitchDNSs�


�
��� 


�
���

��zCloudManager.SwitchDNSc
Cr|)Nr^r}�DebugClusterr+r5rr�r�rr'r'r(r��r�zCloudManager.DebugClusterc
Cs�z:z|jd=|jd=|jd=WnYd}t|d�}|�t�|j��|��d}t�|�t�ddi�}t|�WSt	y]}zd	d	t
|�d
�}t�|�}t|�WYd}~Sd}~ww)N�
controller�serverUserName�serverPasswordz/home/cyberpanel/cloudr�zo/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function UptimeMonitor --type Allr+r5rr�)r$r�r�r-r.r�r�r�r/r8r9)r&�CloudConfigPathrkrAr2r<r1r'r'r(�
UptimeMonitor�s*



��zCloudManager.UptimeMonitorc
Cs�z#d}t�|�}|�d�dkrt�ddi�}nt�ddd��}t|�WStyF}zddt|�d	�}t�|�}t|�WYd}~Sd}~ww)
Nzsystemctl status mysqlzactive (running)r�r+r5rz"MySQL on Main node is not running.r*r�r�)r&r�rzr2r<r1r'r'r(�CheckMasterNode�s


��zCloudManager.CheckMasterNodec
Cro)Nzs/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/ClusterManager.py --function SyncToMaster --type Failoverr+r5rr�rqrrr'r'r(�SyncToMaster�r�zCloudManager.SyncToMasterc!
Cs��z+ddl}ddlm}ddlm}ddlm}ddl}ddl}ddl	m
}ddlm}ddl
m}	|j�d�}
|
sA|�dd	�WS|�d
|
�sN|�dd�WSdt|d
d��}|
|j�dd|
���d|j�d|j�dd��|j�dd�ddddd�	}|j�d|j�dd��}
|j�d|j�ddt|d
d����}|j�d|j�d|d��}|j�d |���}d}d}d}|
�d!d"��d#d"�dd$�}|	��}zWdd%lm}m}|jj|d&���}|�s|jjd'd(�}|d)|
��dd*�d+|dd,||d|jj|d+dd-�}|��|� d.|���||d<n|j!}|� d/|���||d<Wn#t"�yB}z|� d0t|����d}d|d<WYd}~nd}~wwzt#|d1�}|�$d2�|�%�|� d3|���Wn)t"�y�}z|� d4t|����|�dd5t|����WYd}~WSd}~wwzB|� d6|
���|� d7|j�d8|j�r�|jjnd9���|j&|j'|jj||
|
|||||||fd:�}d;|_(|�)�|� d<|
���Wn)t"�y�}z|� d=t|����|�dd>t|����WYd}~WSd}~wwddd9||
�d!d"�d?|
��|
||d@�	}d|jv�rd|jv�r||d<|dk�r#dAt*�v�r#||dB<t+�,|�}t-|�WSt.�yG} z|�dt| ��WYd} ~ Sd} ~ ww)CNr�r�)�Package�r.�r�r�r6rq�domainName is requiredz(^[a-zA-Z0-9][a-zA-Z0-9\-\.]*[a-zA-Z0-9]$zInvalid domain name formatr)r*r+rX�admin@zPHP 8.1�websiteOwner�Ownerr%r��Defaultr5)	rqrXr�r�r��ssl�	dkimCheck�openBasedir�
mailDomain�n8nUsername�
WPusername�n8nPassword�WPpasswd�changeme�n8nEmail�WPemalr�r��_r�r4)r	rrcrUrS�n8n_�2rWrYrZz[installN8N] Created new user: z"[installN8N] Using existing user: z$[installN8N] Failed to create user: r�zStarting n8n installation...,0
z%[installN8N] Created status file at: z+[installN8N] Failed to create status file: zFailed to create status file: z)[installN8N] Creating thread for domain: znstallN8N] Admin object: z, Admin PK: r�)�target�argsTz.[installN8N] Thread started successfully for: z%[installN8N] Failed to start thread: z%Failed to start installation thread: zn8n installation started for )	r+r�r,r,�domainIdentifierr<r��n8nPort�
systemUser�n8n_user_password�systemUserPassword)/r�r�r��packages.modelsr��randomr.�re�	threading�plogical.processUtilitiesr��plogical.CyberCPLogFileWriterr�plogicalr6r$rhr3�matchr9�_find_available_n8n_port�replacer7�loginSystem.modelsr	rrgr
�firstr%rArirkr_�	Exceptionr�r�r��Thread�_install_n8n_with_website�daemonr/�localsr-r.r/r8)!r&r�r�r�r.r�r�r�rjr6�domain_namer,�website_data�n8n_username�n8n_password�	n8n_email�n8n_port�db_name�db_user�db_password�n8n_system_userr�r	r�
existing_user�user_acl�new_user�erk�installation_threadr1r2r<r'r'r(�
installN8N�s��
��

���

$��(��$��
�


��zCloudManager.installN8Nc*Cs�ddlm}|�d|���|�d|���zt|d��
}
|
�d�Wd�n1s,wYWntyN}z|�dt|����WYd}~nd}~ww�z�|�d	�ddl}ddl}ddl	}ddl
}|�d
�ddlm}|�d�dd
l
m}|�d�ddlm}|�d�ddlm}ddlm}ddlm}ddlm}|�d�Gdd�d�}||�}|�d�z|�d|���|jj|d�}|�d|j���WnF|jy�|�d|���|�d|�d��YWdSt�y}z|�dt|����|�d t|��d!��WYd}~WdSd}~ww|�d"�|�d#|���|�}|�|j|�}|�|j �}|�d$|���|�d%d�d&k�rX|�d'|�d(d)��d!��WdS|�d*�} |�d+| ���| �r�|�d,�d}!	zPt| d.��@}
|
�!�}"d/|"v�r�|�d0�	Wd�Wnad1|"v�r�|�d2|"���|�d3|"�d!��	Wd�WWdSWd�n	1�s�wYWn#t�y�}z|!d4dk�r�|�d5|!�d6��WYd}~nd}~ww|!d&7}!|�"d&��qp|�d7|���z|jj|d8�}#|�d9|#j#���WnC|j�y#|�d:|���|�d;�YWdSt�yL}z|�d<t|����|�d=t|��d!��WYd}~WdSd}~ww|�d>�|�d?�|�d@�|�$||#�}$|$dk�ro|�dA�WdS|$\}}	}
}%|�dB|%���|�dC�|�dD�|�dE|���z|�%|#|||||||	|
|%||�|�dF�|�dG�WWdSt�y�}z|�dHt|����|�dIt|��d!���d}~wwt&�yV}&zyt|&��r�t|&�ndJ}'|�dK|'���ddl'}(|(�(�})|�dL|)���z|�dM|'�d!��WnCz!t|dN��}
|
�dM|'�dO��Wd�n	1�s&wYWnt�yI}z|�dPt|����WYd}~nd}~wwYWYd}&~&dSd}&~&ww)QzC
        Create website and install n8n in a single thread
        rrz7[_install_n8n_with_website] Thread started for domain: z.[_install_n8n_with_website] Status file path: r�zThread started...,1
Nz<[_install_n8n_with_website] Failed to write initial status: z3[_install_n8n_with_website] Entering main try blockz3[_install_n8n_with_website] About to import modulesr�z5[_install_n8n_with_website] Imported ProcessUtilitiesr�z-[_install_n8n_with_website] Imported Websitesrz3[_install_n8n_with_website] Imported WebsiteManager��	Databasesr�rrz0[_install_n8n_with_website] All imports completec@�eZdZdd�Zdd�ZdS)z<CloudManager._install_n8n_with_website.<locals>.StatusWritercS�
||_dSr#�r>�r&r>r'r'r(r)��
zECloudManager._install_n8n_with_website.<locals>.StatusWriter.__init__cS�@t|jd��}|�|d�Wd�dS1swYdS�N�ar��r�r>r��r&r<r�r'r'r(rk��"�zHCloudManager._install_n8n_with_website.<locals>.StatusWriter.writeToFileN��__name__�
__module__�__qualname__r)rkr'r'r'r(�StatusWriter�srz3Starting website creation and n8n installation...,5z<[_install_n8n_with_website] Attempting to get admin with pk=rtz)[_install_n8n_with_website] Found admin: z<[_install_n8n_with_website] Administrator.DoesNotExist - pk=zAdministrator with pk=z not found [404]z1[_install_n8n_with_website] Error getting admin: zError getting administrator: � [404]zCreating website...,10z1[_install_n8n_with_website] Creating website for z5[_install_n8n_with_website] Website creation result: �createWebSiteStatusr5zFailed to create website: r,z
Unknown errorr,z:[_install_n8n_with_website] Website creation status path: z>Waiting for website creation to complete (including SSL)...,15Tr�r�zC[_install_n8n_with_website] Website creation completed successfullyr�z5[_install_n8n_with_website] Website creation failed: zWebsite creation failed: rQzJ[_install_n8n_with_website] Still waiting for website creation... (check #�)z7[_install_n8n_with_website] Getting website object for rrz2[_install_n8n_with_website] Found website object: z9[_install_n8n_with_website] Website object not found for z=Website creation succeeded but website object not found [404]z:[_install_n8n_with_website] Error getting website object: zError getting website object: z"Website created successfully...,20z;[_install_n8n_with_website] Website creation phase completez(Creating database using CyberPanel...,25z4[_install_n8n_with_website] Database creation failedz8[_install_n8n_with_website] Database created with type: z#Database created successfully...,30z=[_install_n8n_with_website] About to call _install_n8n_customz/[_install_n8n_with_website] Parameters: domain=z9[_install_n8n_with_website] _install_n8n_custom completedz-n8n installation completed successfully [200]z?[_install_n8n_with_website] Error calling _install_n8n_custom: zError during n8n installation: zUnknown error occurredz2[_install_n8n_with_website] BaseException caught: z'[_install_n8n_with_website] Traceback: zError in installation: r� [404]
zB[_install_n8n_with_website] Failed to write error to status file: ))r�rrkr�r�r�r9r=�sysr�r-r�r�r�r��websiteFunctions.websiter�databases.modelsrr�r6�plogical.mysqlUtilitiesrr�r	rgrhr_�DoesNotExistrlrAr�r�r��sleeprs�_createDatabaseForN8N�_install_n8n_customr8�	traceback�
format_exc)*r&�admin_pkr�r�rrrrrrr�status_file_pathrjr�rr=r$r�r-r�r�rrr6rr	r�statusWriterr%rCrz�result_data�creation_status_path�check_countr+r��	db_result�db_typer<�	error_msgr,�tbr'r'r(r�ms"�� ��






��




�
���	��
�
��






�
���� �����z&CloudManager._install_n8n_with_websitec+Cs��z;ddlm}ddlm}ddl}ddl}|�dd�}t�d|�d��|r6d	|vs6d
|vs6|�	�dk�r1t�d�|�
�}t�d
|�d|j�d|j�d|j
�d|j��
�||jksf||jksf||j
krkgd�}nddg}|�dd�}|r�d|vr�t�d�ddg}|D]8}	t�d|	���|j|	dddd�\}
}|
dkr�t�d|	�d|���ddd|��fWSt�d|	�d ��q�|�dd�}t�d!|�d��|r�d	|vr�gd"�}
|
D]}|�d#|�d$�d�}|r�d	|vr�|}t�d%|���nq�|�rd	|v�r'd&|v�r'|�d'd�}|�rd	|v�r|}t�d(|���nt�d)�Wd*St�d+|�	����d,}d}|j�|��rjz)t|d-��}|�|���}|�d.�}t�d/�Wd�n	1�s_wYWnY|�s�|�d0�}|d1d2d3�}|�d4dd�d5|��dd6��d7�}zFt|d8��}|j||d9d:�Wd�n	1�s�wY|�d;|�d<|��dd�|�d=|��dd�|�d>|��dd�t�d?�Wn$t�y�}zt�d@t|����|j�|��r�|�|��d}~wwgdA�}d}|D] }d#|�dB�}|�|d�}
|
�r|
�d&�dCk�s|
�	�}n�q�|�rpt�dD|���dE|��}|�|dd�dF|��}|�|dd�|�dGdH�}|j�|��rot�dI|���dJ|��}|�|dd�dK|��}|�|dd�nt�dL�gdM�}d} |D]!}!|�dN|!�dO�d�}"|"�r�|!|"v�r�|!} t�dP|!���n�q}| �s�dQ} t�dR�|�dS| ��dd�}#|�dT| ��dd�}$|$dk�r�t�dU| �dV��dddW| ��fWSddl}%|%�dX�|�dY| ��d�}&dZ|&v�r�t�d[|&���Wd\Sd]|�d^�}'|j|'dddd�\}(})|(dk�r-t�d_�d`|�d^�}'|j|'dddd�\}(})|(dk�r,t�da�nt�db�t�dc�d|dfWSt�yc}zddt|���}*t�de|*���dd|*fWYd}~Sd}~ww)fz�
        Setup PostgreSQL for n8n if not already installed
        Returns: (success, postgres_password, error_message)
        rr�r�Nz
which psql�rootz3[_setupPostgreSQLForN8N] PostgreSQL check result: '�'�psqlrhrWz<[_setupPostgreSQLForN8N] PostgreSQL not found, installing...z*[_setupPostgreSQLForN8N] Detected distro: z	, centos=z, cent8=z, cent9=z	, ubuntu=)zyum install -y epel-releasez>yum install -y postgresql postgresql-server postgresql-contribzpostgresql-setup initdbz-DEBIAN_FRONTEND=noninteractive apt-get updatezODEBIAN_FRONTEND=noninteractive apt-get install -y postgresql postgresql-contribz
which apt-getzapt-getzD[_setupPostgreSQLForN8N] Found apt-get, using Ubuntu/Debian commandsz"[_setupPostgreSQLForN8N] Running: T��shell�retRequiredr5z"[_setupPostgreSQLForN8N] Command 'z' failed with output: FzFailed to install PostgreSQL: z' succeededz:[_setupPostgreSQLForN8N] PostgreSQL verification result: ')z
/usr/bin/psqlz/usr/local/bin/psqlz/usr/pgsql-*/bin/psqlzls z 2>/dev/nullz([_setupPostgreSQLForN8N] Found psql at: zNo suchz2find /usr -name psql -type f 2>/dev/null | head -1z0[_setupPostgreSQLForN8N] Found psql using find: zD[_setupPostgreSQLForN8N] PostgreSQL installation verification failed)FNz/PostgreSQL installation failed - psql not foundzK[_setupPostgreSQLForN8N] PostgreSQL installed successfully, psql found at: z"/etc/cyberpanel/postgresqlPasswordr��postgrespasswordz?[_setupPostgreSQLForN8N] Loaded existing PostgreSQL credentialsr4�5433�	localhost)r>�postgresport�postgreshostzmkdir -p /etc/cyberpanelz/tmp/postgres_pass_�z.jsonr�r�)�indentzmv r��
chmod 600 zchown root:root z=[_setupPostgreSQLForN8N] Generated new PostgreSQL credentialsz3[_setupPostgreSQLForN8N] Error saving credentials: )z&/etc/postgresql/*/main/postgresql.confz#/var/lib/pgsql/data/postgresql.confz%/var/lib/pgsql/*/data/postgresql.confz 2>/dev/null | head -1r�z5[_setupPostgreSQLForN8N] Found PostgreSQL config at: z%sed -i 's/^#*port = .*/port = 5433/' zDsed -i "s/^#*listen_addresses = .*/listen_addresses = 'localhost'/" zpostgresql.confzpg_hba.confz2[_setupPostgreSQLForN8N] Updating pg_hba.conf at: z�sed -i 's/local   all             all                                     peer/local   all             all                                     md5/g' z�sed -i 's/host    all             all             127.0.0.1\/32            ident/host    all             all             127.0.0.1\/32            md5/g' zU[_setupPostgreSQLForN8N] Warning: PostgreSQL config not found, using default settings)�
postgresqlz
postgresql-12z
postgresql-13z
postgresql-14z
postgresql-15z!systemctl list-unit-files | grep �.servicez3[_setupPostgreSQLForN8N] Found PostgreSQL service: rFz>[_setupPostgreSQLForN8N] Using default PostgreSQL service namezsystemctl enable zsystemctl restart z)[_setupPostgreSQLForN8N] Failed to start z servicez#Failed to start PostgreSQL service �zsystemctl is-active �activez8[_setupPostgreSQLForN8N] PostgreSQL service not active: )FNz"PostgreSQL service failed to startz8sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'z';" z@[_setupPostgreSQLForN8N] Configuring authentication on port 5433z@sudo -u postgres psql -p 5433 -c "ALTER USER postgres PASSWORD 'zM[_setupPostgreSQLForN8N] Warning: Could not configure postgres authenticationzH[_setupPostgreSQLForN8N] Successfully configured postgres authenticationz3[_setupPostgreSQLForN8N] PostgreSQL setup completedzPostgreSQL setup error: z[_setupPostgreSQLForN8N] )r�r�r�r6r-r=r@rjrkr�rsrtru�cent9�ubuntur>r�r�r�r�rhr7r��dumpr�r9�remover�r�r�r))+r&r�r6r-r=�check_postgres�distro�install_commands�	apt_check�cmdrzr��verify_postgres�common_pathsr>�
check_path�	find_psql�postgres_pass_file�postgres_passwordr��
postgres_data�	temp_filer�pg_config_paths�postgres_config�	check_cmd�update_port_cmd�update_listen_cmd�pg_hba_path�hba_cmd�hba_cmd2�
service_names�postgres_service�service�
check_service�
enable_result�start_resultr��status_check�set_pass_cmd�pass_result�pass_outputr6r'r'r(�_setupPostgreSQLForN8N
s("
0
�
��

��
��
���



�
�







�

��z#CloudManager._setupPostgreSQLForN8Nc
Cs��z�ddlm}ddlm}ddlm}ddl}d|��dd�����}|}|��}	t	�
d�|��\}
}}|
sVt	�
d	|���t|d
�}
|
�
d|�d��|
��WdS|jj|d
���sh|jj|d���ryt|d
�}
|
�
d�|
��WdSz�t	�
d�d|�d|	�d�}|j|dddd�\}}|dkr�t	�
d|���t|d
�}
|
�
d|�d��|
��WWdSd|�d|�d�}|j|dddd�\}}|dkr�t	�
d|���t|d
�}
|
�
d|�d��|
��WWdSd|�d |�d�}|j|dddd�\}}|}|dk�rXt	�
d!�d"|�d�}|j|dddd�\}}|dk�r>||v�r>t	�
d#�||||d$�}|��|||	d%fWWSt	�
d&|���t|d
�}
|
�
d'�|
��WWdSt	�
d(|���t|d
�}
|
�
d)�|
��WWdSt�y�}z&t	�
d*t|����t|d
�}
|
�
d+t|��d��|
��WYd}~WdSd}~wwt�y�}zt	�
t|�d,�WYd}~dSd}~ww)-zi
        Create PostgreSQL database for n8n
        Always uses PostgreSQL for n8n installations
        rrr�r�Nr��z5[_createDatabaseForN8N] Setting up PostgreSQL for n8nz1[_createDatabaseForN8N] PostgreSQL setup failed: rzPostgreSQL setup failed: r#)r�)r�z.This database or user is already taken. [404]
z3[_createDatabaseForN8N] Creating database with userzpsql -p 5433 -c "CREATE USER z WITH PASSWORD 'z';"�postgresTr;r5z7[_createDatabaseForN8N] Failed to create user. Output: z"Failed to create PostgreSQL user: z!psql -p 5433 -c "CREATE DATABASE z OWNER z;"z;[_createDatabaseForN8N] Failed to create database. Output: z&Failed to create PostgreSQL database: z2psql -p 5433 -c "GRANT ALL PRIVILEGES ON DATABASE z TO zE[_createDatabaseForN8N] PostgreSQL database creation command executedzBpsql -p 5433 -c "SELECT datname FROM pg_database WHERE datname = 'zA[_createDatabaseForN8N] PostgreSQL database verified successfully)r�r�r�rFzI[_createDatabaseForN8N] PostgreSQL database verification failed. Output: z4Failed to verify PostgreSQL database creation [404]
zK[_createDatabaseForN8N] PostgreSQL database creation failed. Grant output: z+Failed to create PostgreSQL database [404]
z*[_createDatabaseForN8N] PostgreSQL error: zPostgreSQL database error: z#[CloudManager.createDatabaseForN8N])r&rr�r6r�r�r-r7�lowerrjrkrmr��
writelinesr�rgr
r�r@rir�r9r8)r&r,r�rr6r�r-r�r��
dbPassword�postgres_successrX�postgres_errorr��create_user_cmd�user_result�user_output�
create_db_cmdr4�	db_output�	grant_cmd�grant_result�grant_outputrz�
verify_cmd�
verify_result�
verify_output�dbrr<r'r'r(r*�
s�

$












����z"CloudManager._createDatabaseForN8Nc	
Cs�d}d}d}t|�D]l}t�||�}t�tjtj�}zPz-|�d|f�}|��d|��}tj	�
|�sGt|�WWz|��WSYSWnty]YWz|��Wq
Yq
wWz|��Wq
Yq
z|��WwYwtt�||��S)z=Find an available port for n8n installation between 8000-9999i@r+rQz	127.0.0.1z%/usr/local/lsws/conf/vhosts/n8n_port_)
�ranger�r.�socket�AF_INET�SOCK_STREAM�bindr�r=r>r�r9�OSError)	r&�port_range_start�port_range_end�max_attemptsr�r��sockrz�vhost_config_pathr'r'r(r�csD

����z%CloudManager._find_available_n8n_portc
UCs�z�ddlm}
|
�d|���ddlm}ddlm}ddlm}ddl	}|dur:Gdd	�d	�}||�}|�d
�d|j
��}|�d�}|�d
�}|j}�zZ|�d�|�d�|�d�|�d�|�d�|�d�g}|D]
}d|��}|�||�ql|
�d�|�d�|�d�|
�d|���|�d�}d|�d�}|
�d��z;|j
||dd�}t|t�r�|\}}|
�d|�d |dd!����|d"kr�|�d#|�d$��WWWdSn|
�d%|dd!����|j�|�s�|
�d&|���|�d'�WWWdS|�d(|��|�d)|��}|
�d*�|j
||dd�} t| t��rB| \}}|
�d+|�d |dd,����|d"k�rA|�d-|�d$��WWWdSn|
�d.| dd,����|�d/�}!d0}"d1|!�d2�}#|j
|#|dd�}$t|$t��rxt|$�d3k�rt|$d"nt|$�}$d4t|$�v�r�d5|!��}%|j|%|dd�|
�d6�n<d7|!�d8�}&|j
|&|dd�}'t|'t��r�t|'�d3k�r�|'d"nt|'�}'d9t|'�v�r�d:|!��}(|j|(|dd�|
�d;�|�d<|��|�|
�d=�Wn+t�y})z|
�d>t|)����|�d-t|)��d$��WYd})~)WWdSd})~)ww|�d?�}*d@}+dA|�dB�},t|,dC��
}-|-�|+�Wd�n	1�s,wY|�dD|,�dE|*��|�|�|,�zE|�d(|*��|�|
�dF�|j
d)|*��|d|dG�}.t|.t��rxt|.�d3k�rx|.\}/}0|0}.|
�dH|/���|
�dIt|.�dd,����Wn+t�y�})z|
�dJt|)����|�dKt|)��d$��WYd})~)WWdSd})~)wwz|�d<|*��|�WnY|�dL�dM}1dN}2zu|j
|1|d|dG�}3|j
|2|d|dG�}4t|3t��r�t|3�d3k�r�|3d"nt|3�}3t|4t��r	t|4�d3k�r|4d"nt|4�}4|
�dO|3���|
�dP|4���|3�r#dQt|3�v�r5|
�dR|3���|�dS�WWWdS|�dT|3���dU��Wn+t�yl})z|
�dVt|)����|�dWt|)��d$��WYd})~)WWdSd})~)ww|�dX�|
�dY�dZ}5d[}6zh|j
|5|d|dG�}7|j
|6|d|dG�}8t|7t��r�t|7�d3k�r�|7d"n|7}7t|8t��r�t|8�d3k�r�|8d"n|8}8|
�d\|7�d]|8���|7�r�d9t|7�v�s�|8�r�d9t|8�v�r�|
�d^�|�d_�WWWdSWn+t�y})z|
�d`t|)����|�dWt|)��d$��WYd})~)WWdSd})~)ww|�d�}9|
�da|9���db}:|j
|:|d|9dG�};|
�dc|;dd!����|�dd�|
�de|9���df}|j
||d|9dG�} |
�dg| dd,����dh}<|j
|<|d|9dG�}=|
�di|=���dj|=v�stdk|=v�r�|�dl�|
�dm�WWdS|�dn�|�do�|
�dp�|
�dq�|�dr�}>|
�ds�|
dtk�r�du|�dv|�dw|	��}?|
�dx�ndy|�dz|�d{|	�d|�}?|
�d}�d~|�d|�d�|�d�|?�d�|�d�|�d�|�d�|�d�|�d�|>�d�|�d��}@|�d��}A|
�d�|A���d�|�d�|�d��}BzCt|BdC��
}-|-�|@�Wd�n	1�swY|�dD|B�dE|A��|�|�|B�d�|A��}|
�d��|�||�|
�d��Wn7t�y{})z*|
�d�t|)����|j�|B��rc|�|B�|�d�t|)��d$��WYd})~)WWdSd})~)ww|�d��}C|
�d�|C���d�|�d�|�d��}DzBt|DdC��}-|-�d�|>�d���Wd�n	1�s�wY|�dD|D�dE|C��|�|�|D�d�|C��}|�||�|
�d��Wn7t�y})z*|
�d�t|)����|j�|D��r�|�|D�|�d�t|)��d$��WYd})~)WWdSd})~)ww|�d��|�d��|
�d��d�|�d�d����}E|
�d�|E���d��gd��|��d��|��d��|��d��|��d��|��d��|��d��|��d��|��dE�|��d��|��d��|��d��|��d��|��d��|��d��|��d��|��d��|E��d���}Fd�|E�d��}G|
�d�|G���d�|�d�|�d��}HzDt|HdC��
}-|-�|F�Wd�n	1�s�wYd�|H�dE|G��}|�|�|�d�|G���|�d�|G���|�|H�|
�d��Wn7t�y})z*|
�d�t|)����|j�|H��r|�|H�|�d�t|)��d$��WYd})~)WWdSd})~)ww|
�d��d�d�|E��d�|E��g}I|ID]}|
�d�|���|�|�|
�d�|����q-|�dơ|�dǡ|
�dȡd�|�dʝ}J|
�d�|J���d�|J��}|�
|�}K|K�d͡d�k�s}|K�dϡd�k�r�|�d�|K�d$��WWdSd�|��|Kv�r d�|�d�|�d�|�d�|�d�|�d�|�d�|�dٝ}L|K��|L}Md�|�d�|�d۝}N|
�d�|N���t|NdC��
}-|-�|M�Wd�n	1�s�wYd�|J�dE|J�dݝ}O|
�dޡ|�|O�d�|N�dE|J��}|
�dߡ|�|�d�|J��}P|
�d�|�|P�|�|N�|
�d�|�d�n
|
�d�|�d�d�}|
�d�|�|�|�d�|�d�|�d�ddl}Q|Q�d�d�|E��}|�
|�}R|R��d�k�r�|�d�|�d��d�|�d�|�d�|�d�|�d�|E�d�|�d�|�d�|�d�|E�d�|E�d�|E�d�|E�d�|E�d��}S|�|S�n
|�d�|E�d���WWdSWWdSt�y�})z#ddl }T|��dt|)����|��d|T�!��d$��WYd})~)WdSd})~)wwt�	y})z!ddl }T|
��dt|)����|
��d|T�!����WYd})~)dSd})~)ww(z_
        Install n8n using native installation method with MySQL/MariaDB or PostgreSQL
        rrz0[_install_n8n_custom] Starting installation for r�rr�Nc@r)z6CloudManager._install_n8n_custom.<locals>.StatusWritercSrr#rrr'r'r(r)�rz?CloudManager._install_n8n_custom.<locals>.StatusWriter.__init__cSrrrrr'r'r(rk�rzBCloudManager._install_n8n_custom.<locals>.StatusWriter.writeToFileNrr'r'r'r(r�srzStarting n8n installation...z/home/z/public_htmlz/n8nz"Creating directory structure...,10z/appz/dataz/logsz/configz/backupz	mkdir -p z6[_install_n8n_custom] Directories created successfullyzDatabase setup complete...,30z!Installing Node.js for user...,35z.[_install_n8n_custom] Installing nvm for user z/nvm_install.shzcurl -o z@ https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.shz4[_install_n8n_custom] Downloading nvm install scriptT)r<z+[_install_n8n_custom] nvm download status: z
, output: ��r5zFailed to download nvm script: r z+[_install_n8n_custom] nvm download output: z.[_install_n8n_custom] nvm script not found at z+Failed to download nvm install script [404]z	chmod +x zbash z0[_install_n8n_custom] Running nvm install scriptz*[_install_n8n_custom] nvm install status: i�zFailed to install nvm: z*[_install_n8n_custom] nvm install output: z/.bashrczMexport NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
ztest -f z& && echo 'exists' || echo 'not exists'r�z
not existszVecho 'export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' > z;[_install_n8n_custom] Created .bashrc with nvm source lineszgrep -q 'NVM_DIR' z$ && echo 'found' || echo 'not found'rhzXecho '
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> z:[_install_n8n_custom] Appended nvm source lines to .bashrcr�z=[_install_n8n_custom] nvm installation completed successfullyz,[_install_n8n_custom] Error installing nvm: z/setup_node.shz�#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 22
nvm use 22
nvm alias default 22
z/tmp/setup_node_z.shr�zcp r�z3[_install_n8n_custom] Installing Node.js 22 via nvm)r<�dirz0[_install_n8n_custom] node install status code: z+[_install_n8n_custom] Node install output: z0[_install_n8n_custom] Error installing Node.js: zFailed to install Node.js: z$Verifying Node.js installation...,38z0bash -c "source ~/.nvm/nvm.sh && node --version"z/bash -c "source ~/.nvm/nvm.sh && npm --version"z$[_install_n8n_custom] Node version: z#[_install_n8n_custom] NPM version: �vz3[_install_n8n_custom] Invalid node version output: z.Node.js installation verification failed [404]zNode.js z installed successfully...,39z/[_install_n8n_custom] Error verifying Node.js: z'Failed to verify Node.js installation: zInstalling n8n via npm...,40z/[_install_n8n_custom] About to run npm commandsz,bash -c "source ~/.nvm/nvm.sh && which node"z+bash -c "source ~/.nvm/nvm.sh && which npm"z![_install_n8n_custom] node path: z, npm path: z;[_install_n8n_custom] Node/npm not found after installationz6Node.js installation failed - node/npm not found [404]z/[_install_n8n_custom] Error checking node/npm: z/[_install_n8n_custom] Running npm init in dir: z-bash -c "source ~/.nvm/nvm.sh && npm init -y"z'[_install_n8n_custom] npm init output: z8Installing n8n via npm (this may take 2-5 minutes)...,45z7[_install_n8n_custom] Starting npm install n8n in dir: z>bash -c "source ~/.nvm/nvm.sh && npm install n8n --production"z*[_install_n8n_custom] npm install output: z5bash -c "source ~/.nvm/nvm.sh && ls node_modules/n8n"z/[_install_n8n_custom] Check n8n module output: r�z
cannot accessz0n8n installation failed - module not found [404]z8[_install_n8n_custom] n8n module not found after installz n8n installed successfully...,50z Creating n8n configuration...,60z5[_install_n8n_custom] Creating n8n configuration filez/[_install_n8n_custom] Generating encryption keyr4z.[_install_n8n_custom] Encryption key generatedrFzP# Database Configuration (PostgreSQL)
DB_TYPE=postgresdb
DB_POSTGRESDB_DATABASE=zI
DB_POSTGRESDB_HOST=127.0.0.1
DB_POSTGRESDB_PORT=5433
DB_POSTGRESDB_USER=z
DB_POSTGRESDB_PASSWORD=z4[_install_n8n_custom] Using PostgreSQL configurationzM# Database Configuration (MySQL/MariaDB)
DB_TYPE=mysqldb
DB_MYSQLDB_DATABASE=z@
DB_MYSQLDB_HOST=127.0.0.1
DB_MYSQLDB_PORT=3306
DB_MYSQLDB_USER=z
DB_MYSQLDB_PASSWORD=zC
DB_MYSQLDB_CHARSET=utf8mb4
DB_MYSQLDB_COLLATION=utf8mb4_unicode_ciz7[_install_n8n_custom] Using MySQL/MariaDB configurationz# n8n Configuration for z&

# Application Paths
N8N_USER_FOLDER=z/data
N8N_LOG_FILE_LOCATION=z/logs/n8n.log

z2

# n8n Configuration
N8N_HOST=127.0.0.1
N8N_PORT=z(
N8N_PROTOCOL=https
WEBHOOK_URL=https://z
N8N_EDITOR_BASE_URL=https://z<

# Security
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=z
N8N_BASIC_AUTH_PASSWORD=z
N8N_ENCRYPTION_KEY=a%

# Execution Settings
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_MAX_AGE=336

# Performance
NODE_OPTIONS=--max-old-space-size=2048

# Timezone
GENERIC_TIMEZONE=UTC

# File Storage
N8N_DEFAULT_BINARY_DATA_MODE=filesystem
N8N_BINARY_DATA_STORAGE_PATH=z�/data/files

# Log Settings
N8N_LOG_LEVEL=info

# Push Backend Configuration (Use SSE for OpenLiteSpeed compatibility)
N8N_PUSH_BACKEND=sse
z/config/n8n.envz([_install_n8n_custom] Writing config to z/tmp/n8n_config_r�z.envrEz5[_install_n8n_custom] Setting config file permissionsz6[_install_n8n_custom] Config file written successfullyz1[_install_n8n_custom] Error writing config file: z#Failed to write n8n configuration: z/config/encryption.keyz/[_install_n8n_custom] Saving encryption key to z/tmp/n8n_encryption_z.keyzN8N_ENCRYPTION_KEY=r�z7[_install_n8n_custom] Encryption key saved successfullyz3[_install_n8n_custom] Error saving encryption key: zFailed to save encryption key: zConfiguration created...,70zCreating systemd service...,80z.[_install_n8n_custom] Creating systemd servicezn8n-r�r�z$[_install_n8n_custom] Service name: rWz6[Unit]
Description=n8n - Workflow Automation Tool for zW
After=network.target mysql.service
Requires=mysql.service

[Service]
Type=simple
User=z
Group=z
WorkingDirectory=z/app
EnvironmentFile=z`/config/n8n.env

# Create log directory if it doesn't exist
ExecStartPre=/bin/bash -c 'mkdir -p z/logs && chown �:z/logs'

# Start command - source nvm and environment file first, with detailed logging
ExecStart=/bin/bash -c 'exec > >(tee -a z/logs/n8n.log) 2> >(tee -a zO/logs/n8n-error.log >&2) && echo "[$(date)] Starting n8n service..." && source zD/.nvm/nvm.sh && echo "[$(date)] NVM sourced successfully" && source z�/config/n8n.env && echo "[$(date)] Environment variables loaded:" && env | grep -E "^(N8N_|DB_)" | sort && echo "[$(date)] Starting n8n on port $N8N_PORT..." && zy/app/node_modules/.bin/n8n start'

# Restart configuration
Restart=always
RestartSec=10

# Logging
StandardOutput=append:z#/logs/n8n.log
StandardError=append:z%/logs/n8n-error.log
SyslogIdentifier=z}

# Security
NoNewPrivileges=true
PrivateTmp=true

# Resource limits
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
z/etc/systemd/system/rGz.[_install_n8n_custom] Writing service file to z/tmp/n8n_service_zsudo cp zsudo chmod 644 zsudo chown root:root z7[_install_n8n_custom] Service file written successfullyz2[_install_n8n_custom] Error writing service file: z"Failed to create systemd service: z3[_install_n8n_custom] Enabling and starting servicezsudo systemctl daemon-reloadzsudo systemctl enable zsudo systemctl start z[_install_n8n_custom] Running: z([_install_n8n_custom] Command executed: z!Service created and started...,85zConfiguring web server...,90z=[_install_n8n_custom] Configuring OpenLiteSpeed reverse proxyz/usr/local/lsws/conf/vhosts/z/vhost.confz)[_install_n8n_custom] Vhost config path: r;z[Errnor�zNo such filez$Could not read vhost configuration: zextprocessor n8nz,

# n8n Proxy Configuration
extprocessor n8nzG {
  type                    proxy
  address                 127.0.0.1:z�
  maxConns                100
  pcKeepAliveTimeout      3600
  initTimeout             300
  retryTimeout            0
  respBuffer              0
}

context / {
  type                    proxy
  handler                 n8nz�
  addDefaultCharset       off
  websocket               1
  
  extraHeaders            <<<END_extraHeaders
  RequestHeader set X-Forwarded-For $ip
  RequestHeader set X-Forwarded-Proto https
  RequestHeader set X-Forwarded-Host "z"
  RequestHeader set Origin "z, z"
  RequestHeader set Host "z"
  END_extraHeaders
}
z/tmp/n8n_vhost_z.confz:[_install_n8n_custom] Writing updated vhost to temp file: z.n8n_backupz/[_install_n8n_custom] Backing up original vhostz+[_install_n8n_custom] Copying updated vhostzsudo chown lsadm:lsadm z-[_install_n8n_custom] Setting vhost ownershipz*[_install_n8n_custom] Temp file cleaned upz(Proxy configuration added to vhost...,92z1[_install_n8n_custom] Proxy config already existsz(Proxy configuration already exists...,92z)sudo /usr/local/lsws/bin/lswsctrl restartz.[_install_n8n_custom] Restarting OpenLiteSpeedzOpenLiteSpeed restarted...,94zWeb server configured...,95zVerifying installation...,98rHzsudo systemctl is-active rIz&n8n successfully installed at https://�/ [200]z!
Installation Details:
- Domain: z
- n8n URL: https://z/
- n8n Username: z
- n8n Port: z
- Service Name: z
- Installation Directory: z
- Database Name: z
- Database User: z*

To manage n8n:
- Start: systemctl start z
- Stop: systemctl stop z
- Restart: systemctl restart z
- Status: systemctl status z
- Logs: journalctl -u z -f
z7n8n service failed to start. Check logs: journalctl -u r#zInstallation failed: �Traceback: z:[_install_n8n_custom] Critical error in n8n installation: z0[_install_n8n_custom] Critical error traceback: )"r�rrkr�r�r'rr�r6r=rsr/r�r@�
isinstance�tupler>r��lenr9r�r�r�rMr�r7r�r?r�r�r�r)r,r-)Ur&r�r�rrrrrrrr5r/r0rjr�rr6r=r�website_home�public_html�n8n_dir�website_user�directories�	directoryr��
nvm_script�download_cmd�download_resultr+r��install_cmd�install_output�bashrc_path�nvm_source_line�check_bashrc_cmd�
bashrc_exists�create_bashrc_cmd�
check_nvm_cmd�
nvm_in_bashrc�
append_cmdr�node_setup_script�script_content�temp_scriptr��node_install_output�status_code�
actual_output�verify_node_cmd�verify_npm_cmd�node_version�npm_version�check_node_cmd�
check_npm_cmd�
node_check�	npm_check�app_dir�init_cmd�init_outputr]�check_output�encryption_key�	db_config�config_content�config_file�temp_config�encryption_file�temp_encryption�service_name�service_content�service_file�temp_service�commands�vhost_conf_path�
vhost_content�proxy_config�new_vhost_contentrZ�backup_command�
chown_commandr�rz�detailsr,r'r'r(r+�sj	



�







�





�
��
��
�

 ��


��

(


���










������
	���
��
����"�
+�



��
�


��



���	�
�
�
�
�
���������&�


��

�





 ��������


















�������	��
����
��(��$��z CloudManager._install_n8n_customc!
s&	z*t�d��}|�d�|�d|�d��|�d�Wd�n1s$wYWntyG}ztd��d|���WYd}~dSd}~ww�z�t�d��
}|�d	�Wd�n1s_wYd
dlm}t�d��}|�d�|�d
�Wd�n1s�wYd
dlm}t�d��}|�d�|�d�Wd�n1s�wYd
dl}t�d��
}|�d�Wd�n1s�wYz�t�d��
}|�d�Wd�n1s�wY|�d��t�d��
}|�d�Wd�n	1�swY��	d�t�d��
}|�d�Wd�n	1�s"wY��	d���	d|�����	d|j
���t�d��
}|�d�Wd�n	1�sSwYWn;t�y�}z.t�d��}|�dt|��d��|�d�Wd�n	1�s�wYd�WYd}~nd}~ww��fdd�}	|	d�|j
�d|�
d d!��
d"d!�dd#��}
|j
�d$|j
�d%|�
d d!���}t|j
�d&d'��}t|j
�d(d)��}
t|j
�d*d'��}t|j
�d+d)��}|j
�d,d-�}|j
�d.d/�}|j
�d0|j
�d1d2|����}|j
�d3|j
�d4d5��}|j
�d6d7�}|j
�d8d'�}|	d9|
�d:|�d;|�d<|���d
d=lm}d>t|d?d@��}idA|�dB|�d0|�d$|�d8|�d&|�d(|
�d*|�d+|�d|
�d.|�d3|�dCd!�|�
d d!��
d"d!�ddD��t|d?d@���d,|�dE|�d6|�dF|
�
dGd"��dH|�dI�dH|�dJ�|j
�dKdL�dM|
��dM|
��|j
�dKdL�|
|||dN�
�}|	dO|����z,|	dP�z&|	dQ�|	dR�|	dSt|������|dT|�}|	dU�|	dV|j���Wn,t�y}z|	dWt|����d
dl}|	dX|�����WYd}~WWdSd}~wwz|	dY�|��|	dZ�Wn,t�yK}z|	d[t|����d
dl}|	d\|�����WYd}~WWdSd}~wwz|	d]�|��|	d^�Wn,t�y�}z|	d_t|����d
dl}|	d`|�����WYd}~WWdSd}~wwz9|	da�t�db��}|��}Wd�n	1�s�wY|	dc|���dd|v�r�|	de|�df��n|	dg�Wnt�y�}z|	dht|��di��WYd}~n	d}~wwWWdSWWdSt�y}zd
dl}|	djt|��di��|	dk|�����WYd}~WdSd}~wwt�y�}ztz7d
dl}t�d��#}|�dlt|��d��|�dm|���d��|�dn�Wd�n	1�sKwYWn.t�y} z!tdo| ���tdp|���d
dl}tdk|�����WYd} ~ nd} ~ wwWYd}~dSWYd}~dSd}~ww)qzf
        Perform the actual n8n installation process
        This runs in a background thread
        rz'Background thread started successfully
zFunction called with domain: r�z(About to start try block for imports...
Nz&CRITICAL: Cannot write to status file z: z?Inside try block, attempting to import CyberCPLogFileWriter...
rrz'CyberCPLogFileWriter import successful
z%Attempting to import Docker_Sites...
)�Docker_SiteszDocker_Sites import successful
zImporting time module...
z6All imports successful, initializing status writer...
z*Creating CyberCPLogFileWriter instance...
z>CyberCPLogFileWriter instance created, testing writeToFile...
z-CyberCPLogFileWriter initialized successfullyzFirst writeToFile successful
z$Starting n8n installation process...zDomain: zData received: z/All CyberCPLogFileWriter operations successful
zCyberCPLogFileWriter error: z+Continuing without CyberCPLogFileWriter...
csR�r	��|�dSt�d��}|�|�d��Wd�dS1s"wYdSr)rkr�r�)r<r��r/�
status_writerr'r(�write_status5s
"�zGCloudManager._perform_n8n_installation_OLD_REMOVE.<locals>.write_statuszPreparing Docker deployment...�sitenamer�rWr�rCr�r��MysqlCPUr5�MYsqlRami�SiteCPU�SiteRam�App�N8Nr�r%r�rXr�r�r�z
auto-generater��8080rHz!Extracted parameters - sitename: z	, Owner: z, CPU: z, RAM: r�r)r*r+�JobID�Domainr/rH�finalURL�ServiceNamer�z
/home/docker/z/docker-compose.ymlz/dbrrzauto-generatedr�)
�ComposePath�	MySQLPath�
MySQLRootPass�MySQLDBName�MySQLDBUser�
MySQLPassword�MemoryMySQL�	CPUsMySQL�
MemorySite�CPUsSitez0Docker data prepared following working pattern: z#Starting Docker_Sites deployment...z!Creating Docker_Sites instance...z6Calling Docker_Sites with function: DeployN8NContainerzData keys: �DeployN8NContainerz*Docker_Sites instance created successfullyz&Docker_Sites attributes: function_run=zDocker_Sites creation failed: z!Docker_Sites creation traceback: zStarting Docker_Sites thread...z-Docker deployment thread started successfullyzDocker_Sites start failed: zDocker_Sites start traceback: z+Waiting for Docker deployment completion...z"Docker deployment thread completedzDocker_Sites join failed: zDocker_Sites join traceback: zReading deployment results...r�zFinal status content: r�z3n8n successfully installed and deployed at https://r�z4Container deployment completed but with issues [404]z$Unable to verify deployment status: r zContainer deployment failed: r�z-MAIN EXCEPTION in _perform_n8n_installation: zFull traceback: zInstallation failed [404]
z.Critical error - cannot write to status file: zOriginal error: )r�r�r��printr�r�plogical.DockerSitesr�r�rkr$r9rhr�rfr�r.r?�list�keys�function_runr,r-r/r�)!r&r�r/r�rrjr�r��writer_errorr�r�r�r�r�r�r�r�r�r�r�r�rHr.r,�docker_data�docker_sites�docker_init_errorr,�start_error�
join_error�final_status�
read_error�	log_errorr'r�r(�$_perform_n8n_installation_OLD_REMOVE�s�
�����
�
���
�
�
�����&  ��������	�
���0
�����

�
������
�
� �
���������z1CloudManager._perform_n8n_installation_OLD_REMOVEc

Cszi|j�d�}|s`|j�d�}|rWddl}ddl}|�d�}|D]6}z/t|d�� }|��}|�dd�|vrA|}	Wd�WnWd�n1sKwYWq Yq |s`|�dd�WS||jd<|��WSt	y�}	z|�dt
|	��WYd}	~	Sd}	~	ww)	Nr�r�rz/home/cyberpanel/*r�r�r�z*statusFile or domainIdentifier is required)r$rhr=�globr�r�r�r3r�r8r9)
r&r��domain_identifierr=r��possible_filesr�r�r�r<r'r'r(�getN8NInstallStatus�s:
���

��z CloudManager.getN8NInstallStatusc	
Cs�zSddlm}g}z%|j��}|D]}t|d�r,|jdkr,|�|jdt|j	�|j
d��qWnty@}zWYd}~nd}~wwdd|t|�d	�}t
�|�}t|�WStym}z|�dt|��WYd}~Sd}~ww)
Nrr��applicationInstaller�n8n�running)rsr+�createdr>r5r�)r+r,�
installationsr�)r�r�rgr��hasattrr�rrsr9�dater>r�r�r-r.r/r8r3)	r&r��	n8n_sitesr�r�rr1r2r<r'r'r(�listN8NInstallations�s<
���
���

��z!CloudManager.listN8NInstallationsc
CsJz�ddlm}ddlm}ddl}|j�d�}|s |�dd�WSz	|jj|d�}Wn|j	y>|�dd|�d��YWSw|�}|�
|jjd	|i�}|d
dkr[|�d|d�WSd|�
d
d��d�}z
|j�|�rq|�|�WnYddd|�d�d�}	t�|	�}
t|
�WSty�}z|�dt|��WYd}~Sd}~ww)Nrr�rrqr�rrzWebsite z
 not foundr�r+r,z/home/cyberpanel/n8n_install_r�r��_statusr5r�zn8n installation z removed successfully)r+r,r<)r�r�r%rr=r$rhr3rgr(rJr%rAr�r>r�rMr-r.r/r8r9)r&r�rr=r�r��website_manager�
delete_resultr/r1r2r<r'r'r(�removeN8NInstallationsB�
�
�

��z"CloudManager.removeN8NInstallation)NNr#)�rrrr)r3r=rDrJrlrpr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrrrr r!r#r$r%r&rr(r4r7r:rBrCrDrFrGrHrKrLrMrNrOrPrQrRrUrVrrWrXrYrZr[r\r]r^r_rargrxryr{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�rr�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr3r8r=rArLrQrSrUrVrWrXrZr`rbrcrgrnrsrurvr{r~r�r�r�r�r�r�r�r�r�r�r�r
r�rmr*r�r+r�r�rrr'r'r'r(r""s�
8,/
! $	
		
		
9'8 ![$c1#$1%$0

&x.ai!�tN""r")=r$r�r�r=r-�userManagment.views�viewsr��backup.backupManagerr�databases.databaseManagerr�dns.dnsManagerr�firewall.firewallManagerr�ftp.ftpManagerr�highAvailability.haManagerrr�r	�mailServer.mailserverManagerr
�manageSSL.viewsrrr
�packages.packagesManagerrr'r�plogical.virtualHostUtilitiesrr%r�s3Backups.s3Backupsr�serverLogs.viewsr�serverStatus.viewsrrrr�rrr�rrj�managePHP.phpManagerr�managePHP.viewsrr�containerization.viewsr>r�environ�
setdefaultr"r'r'r'r(�<module>s>