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/IncBackups/__pycache__/IncBackupsControl.cpython-310.pyc
o

��h���@sddlZddlZddlZddlZddlZddlZej�d�ej�	dd�ddl
Z
ze
��WnYddlZ
ddlmZddlmZmZddlmZddlmZdd	lmZddlmZddlZdd
lmZzddlm Z ddl!m"Z"WnYGd
d�de
j#�Z$dS)�Nz/usr/local/CyberCP�DJANGO_SETTINGS_MODULEzCyberCP.settings)�ProcessUtilities�)�IncJob�JobSnapshots)�Websites)�CyberCPLogFileWriter)�HttpResponse)�virtualHostUtilities)�
mailUtilitiesc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd0dd�Z	d1dd�Z
d1dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd
S)2�IncJobscCsRtj�|�||_||_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_
dS)N�r)�multi�Thread�__init__�function�	extraArgs�repoPath�passwordFile�
statusPath�website�backupDestinations�jobid�metaPath�path�reconstruct)�selfrr�r�2/usr/local/CyberCP/IncBackups/IncBackupsControl.pyr$s
zIncJobs.__init__cCsF|jdkr|��dS|jdkr|��dS|jdkr!|��dSdS)N�createBackup�restorePoint�
remoteRestore)rrr �rrrr�run2s


�zIncJobs.runcCsv|jdd�dkr!d|j}d|j|j|f}t�||j��d�S|��\}}d|j|||jf}t�||j��d�S)N��sftp�/home/backup/%szLexport RESTIC_PASSWORD=%s PATH=${PATH}:/usr/bin && restic -r %s:%s snapshots�
zvexport RESTIC_PASSWORD=%s AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s  && restic -r s3:s3.amazonaws.com/%s snapshots)rrrr�outputExecutioner�externalApp�split�
getAWSData)rr�command�key�secretrrr�getRemoteBackups;s

��zIncJobs.getRemoteBackupsc
Cszg|jd|_|jd|_|jd|_|��}d}g}|d�d�dkrZt|�D]1}|�d�dkr:|dkr8d}q(d}|rY|�d	�}|�|dd
|d|df|d
|dd��q(t	�
dd|d��}t|�WSty�}zt
�t|��WYd}~dSd}~ww)Nrr�passwordrzunable to open config file���z---------------r� z%s %s���)�id�date�hostr�None)�status�
error_message�data)rrrrr/�find�reversedr*�append�json�dumpsr	�
BaseException�logging�writeToFile�str)r�result�	activator�	json_data�items�entry�
final_json�msgrrr�fetchCurrentBackupsGs8

��
��zIncJobs.fetchCurrentBackupscCs�t��tjkst��tjkst��tjkrd|_dS|jjdd�dkr)d|_dS|jjdd�dkr8d|_dS|jjdd	�d
krGd|_dS|jjdd�dkrYd
|j|_dSdS)N�/r��databasez/usr/local/CyberCP/tmp/r$r<z/home/r5�emailz/home/vmail/�metaz	/home/%s/)	r�decideDistro�centos�cent8�ubuntu20�
restoreTargetr�typerr"rrr�findRestorePathjs


�zIncJobs.findRestorePathcCs.|j�d�d}d|}t|d���}||fS)NrNr1z/home/cyberpanel/aws/%s�r)rr*�open�read)rr-rr.rrrr+|szIncJobs.getAWSDataNc
Cs�z^|dkr�|��\}}d|jj}d|}	d|jj�d�|||jj||j|jj|jjf}
tj�|�r8|
|	}
t�|
|j	�}|�
d�dkrSt�|j
d|d	�Wd
S|�d�d}tj�tj�rmt�d
|�d|�d��|dkr�t|jd||�d�d�d�f||jd�}
nt|jd||f||jd�}
|
��Wd	S|jdkr�|j|_|��\}}d|j|||j||jf}
t�|
|j	�}|�
d�dkr�t�|j
d|d	�Wd
SWd	S|�r)|jj|_|��\}}d|||j||jf}
t�|
|j	�}|�
d�dk�s|�
d�dk�rn
t�|j
d|d	�Wd
Sd|||j|jf}
t�|
|j	�Wd	S|jj|_|��\}}d|||j||j|jf}
t�|
|j	�}|�
d�dk�r]t�|j
d|d	�Wd
SWd	St�y}zt�|j
dt|�d	�WYd}~d
Sd}~ww)N�backup�/home/%s/backup-exclude.conf� --exclude-file=%sz|AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s restic -r s3:s3.amazonaws.com/%s backup %s --password-file %s --exclude /home/z</logs --exclude /home/%s/backup --exclude /home/%s/incbackup�savedr1�%s. [5009].rrr2���zSnapshot id z
 from result �.rP�%s:%srN�.sql��jobrX�
snapshotid�destination�remotez�export RESTIC_PASSWORD=%s AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s  && restic -r s3:s3.amazonaws.com/%s restore %s --target %s�	restoring�Failed: %s. [5009]zkAWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s restic -r s3:s3.amazonaws.com/%s forget %s --password-file %s�removed snapshot�deletedzgAWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s restic -r s3:s3.amazonaws.com/%s prune --password-file %szxAWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s restic -r s3:s3.amazonaws.com/%s restore %s --password-file %s --target %sz
%s [88][5009])r+r�domainr�osr�isfilerr(r)r=rC�statusWriterrr*�exists�	debugPathrDrr�rstripr�saverrWrirBrE)r�fType�
backupPath�
snapshotID�bType�deleter-r.�backupExcludesFile�resticBackupExcludeCMDr,rF�
snapShotid�newSnapshotrLrrr�awsFunction�s����
�$�
� �
����zIncJobs.awsFunctioncCs�|dkrvd|jj}d|}d|j||j|j|jjf}tj�|�r&||}t�||j	�}|�
d�dkr@t�|j
d|d�dS|�d	�d
}	|dkrbt|jd||�d
�d�d�f|	|jd�}
nt|jd||f|	|jd�}
|
��dS|r�d|j}d||jj|jf}t�||j	�}|�
d�dks�|�
d�dkr�nt�|j
d|d�dSd||jf}t�||j	�dSd|j}d||jj|j|jf}t�||j	�}|�
d�dkr�t�|j
d|d�dSdS)Nr^r_zPrestic -r %s backup %s --password-file %s --exclude %s --exclude /home/%s/backupr`r1rarrr2rbrPrdrNrerf�/home/%s/incbackupz)restic -r %s forget %s --password-file %srmrnrlz%restic -r %s prune --password-file %sz6restic -r %s restore %s --target %s --password-file %srk)rrorrrprrqrr(r)r=rCrrrr*rrrurrvrhrW)rrxrX�restorer{r|r}r,rFr~r�repoLocationrrr�
localFunction�sX���

�zIncJobs.localFunctionc
CsdS)Nr)rrorrrrprrqrr(r)r=rCrrrr*rrrurvrirhrrW)
rrxrXr�r{r|r}�
remotePathr,rFr~rr�rrr�sftpFunction!szIncJobs.sftpFunctionc
Cs�zR|jdkr)|jdd�dkr|�ddd�WdS|�dd|j�dkr&WdSWdS|jjd	kr7|�ddd�WS|jjdd�dkrI|�ddd�WS|�dd|jj�WStyq}zt	�
|jd
t|�d�WYd}~dSd}~ww)Nrjr$r%�nonerr�r
r�localz%s [138][5009]�
rrr�r�rrir�rhrBrCrrrrE�rrLrrr�restoreDatabs$
�	���zIncJobs.restoreDatac
Cs0z�|jdkrN|jdd�dkr|�ddd�dkrWdSn
|�dd|j�dkr)WdSd	}t�|�d
}t�|�tj�|j	�
d�d�d
�ddd�dkrMt�nT|jj
dkra|�ddd�dkr`WdSn%|jj
dd�dkrx|�ddd�dkrwWdSn|�dd|jj�dkr�WdStj�|jj�
d�d�d
�d|jdd�dkr�td��z:|jdkr�t�d|j	�
d�d�WWdSt�d|jj�
d�d�t�d|jj|jj�
d�df�WWdSty�}zt�t|��WYd}~WdSd}~wwt�y}zt�|jdt|�d�WYd}~dSd}~ww)Nrjr$r%r�rrr�r
z,chown cyberpanel:cyberpanel /home/cyberpanelzchmod 755 /home/cyberpanelrNr1re�/usr/local/CyberCP/tmp�dummyr��:�/home/%sz Can not restore database backup.z/usr/local/CyberCP/tmp/%s�/usr/local/CyberCP/tmp/%s.sql�/home/%s/%s.sqlz%s [160][5009])rrr�r�rr�executioner�mysqlUtilities�restoreDatabaseBackuprr*rurBrir�rhrXrrp�removerorCrDrErrr)rr,rLrrr�restoreDatabaseysh
�

�������
�&�����zIncJobs.restoreDatabasec
Cs�zW|jdkr.|jdd�dkr|�ddd�dkrWdSWdS|�dd|j�dkr+WdSWdS|jjd	kr<|�ddd�WS|jjdd�dkrN|�ddd�WS|�dd|jj�WStyv}zt	�
|jd
t|�d�WYd}~dSd}~ww)Nrjr$r%r�rrr�r
r��
%s [46][5009]r�r�rrr�restoreEmail�s&
�	���zIncJobs.restoreEmailc
Cshz�|jdkr*|jdd�dkr|�ddd�dkrWdSnF|�dd|j�dkr)WdSn8|jjd	kr=|�ddd�dkr<WdSn%|jjdd�dkrT|�ddd�dkrSWdSn|�dd|jj�dkrbWdSd
|j}dt	j
d}|d
||jf}t�
|�}t�|j|d�z	t�|�WWdSYWdSty�}zt�|jdt|�d�WYd}~dSd}~ww)Nrjr$r%r�rrr�r
r��/home/%s/meta.xmlz)nice -n 10 /usr/local/CyberCP/bin/python z/plogical/restoreMeta.pyz, submitRestore --metaPath %s --statusFile %sr�)rrr�r�rrir�rhrr
�
cyberPanelrrr(rCrrrpr�rBrE)r�metaPathNew�execPathrFrLrrr�reconstructWithMeta�sF
����

���zIncJobs.reconstructWithMetac
Cs��z�|jd|_|jd|_|jd}|jd|_tjj|jd�}|j|_|jdkr�|��|jd|_	|jd|_
|jd|_|jd	|_|j�
d
�dkrmd}t�|j|d
�|��dkraWdSd}t�|j|d
��n.|jd|jkr�d}t�|j|d
�|��dkr�WdSd}t�|j|d
��n|j�
d�dkr�d}t�|j|d
�|��dkr�WdSd}t�|j|d
�n�|j�
d�dkr�d}t�|j|d
�|��dkr�WdSd}t�|j|d
�n�tjj|d�|_	|��d|j	j|jf}t�|j|d
�d|j|jf|_|j	jdd�dk�r*d}t�|j|d
�|��d}t�|j|d
�nq|j	jdd�dk�rTd}t�|j|d
�|��dk�rIWdSd }t�|j|d
�nG|j	jdd!�d"k�rxd}t�|j|d
�|��d}t�|j|d
�n#|j	jdd�d#k�r�d}t�|j|d
�|��d}t�|j|d
�t�|jd$d
�WdSt�y�}zt�|jdt|�d
�WYd}~dSd}~ww)%N�tempPathrrr�rorjrr0rrer1zRestoring database..rrzDatabase restored.r�zRestoring data..zData restored..�vmailzRestoring email..zEmails restored.zmeta.xmlzReconstructing with meta..�
Reconstructed)�pkzStarting restore of %s for %s.�/home/%s/%srOrPr$r<zData restored.r5rQrR�	Completed)rrrrr�objects�getr)rYrrrrr=rCrrr�r�r�r�rrhrXrBrE)rr�
WebsiteObject�messagerLrrrr �s�

�&��zIncJobs.restorePointc
Cszatj�tj�rt�d|jj�ddl	m
}|�|jjdddd�\}}}|dkrUt�|j
dd�d|jj}d|j|j|f}t�|�d||f}t�||j�WdSt�|j
d	|d�WdSty�}zt�|j
d
t|�d�WYd}~dSd}~ww)Nz,Creating meta for %s. [IncBackupsControl.py]r)�backupUtilitiesrzMeta data is ready..r�zchown %s:%s %szmv %s %sz%s [544][5009]z%s [548][5009])rprrsrrtrCrDrro�plogical.backupUtilitiesr��prepareBackupMetarrrr)r�rBrE)rr�r:r�rr�r,rLrrrr�Ks(
��zIncJobs.prepareBackupMetac
C��zSt�|jdd�d|jj}|jdkr |�|d�dkrWdSn"|jdd�dkr5|�|d�dkr4WdSn
|�d	|d
d�dkrBWdSt�|jd|jj|jfd�WdSt	yr}zt�|jdt
|�d�WYd}~dSd}~ww)
NzBacking up data..rr�r�r<rr$r%r]r
zData for %s backed to %s.z"%s. [IncJobs.backupData.223][5009]�rCrrrrrorr�r�r�rBrE�rrxrLrrr�
backupDatajs,
�����zIncJobs.backupDatacCs�z�t�|jdd�|jj��}|D]�}d}tj�|�s$d|}t	�
|�d|}t	�
|�d|}t	�
|�tj�|j
|�dkrDWdStj�t	j�rPt�d�d	||j
f}d
|jj|j
f}d||f}t	�
||j�|jdkr|�|d
�dkr~WdSn$|jdd�dkr�|�|d
�dkr�WdSn|�d|dd
�dkr�WdSzd|j
}d|}t	�
||j�Wqty�}zt�|jdt|�d�WYd}~qd}~wwWdSty�}zt�|jdt|�d�WYd}~dSd}~ww)NzBacking up databases..rr�zmkdir %szchown cyberpanel:cyberpanel %szchmod 711 %srz2Backup created for DB Incscheduler.backupDatabasesz	%s/%s.sqlr�zcp %s %sr�rPr$r%r]r
r��rm -f %sz<Failed to delete database: %s. [IncJobs.backupDatabases.456]z'%s. [IncJobs.backupDatabases.269][5009])rCrrrr�
databases_set�allrprrsrr�r��createDatabaseBackup�dbNamertrDror)rr�r�r�rBrE)r�	databasesrI�
UploadPathr,�dbPath�	dbPathNewrLrrr�backupDatabases�s\




��
�����zIncJobs.backupDatabasesc
Cs�zYt�|jdd�d|jj}tj�|�rH|jdkr&|�	|d�dkr%WdSn"|jdd�dkr;|�
|d�dkr:WdSn
|�d	|d
d�dkrHWdSt�|jd|jj|jfd�WdStyx}zt�|jdt
|�d�WYd}~dSd}~ww)
NzBacking up emails..rz/home/vmail/%sr�rQrr$r%r]r
zEmails for %s backed to %s.z#%s. [IncJobs.emailBackup.269][5009])rCrrrrrorprrsrr�r�r�rBrEr�rrr�emailBackup�s.
�����zIncJobs.emailBackupc
Cr�)
NzBacking up meta..rr�r�rRrr$r%r]r
zMeta for %s backed to %s.z"%s. [IncJobs.metaBackup.269][5009]r�r�rrr�
metaBackup�s,
�����zIncJobs.metaBackupc
Cs�z�t�|jdd�|jdkr9d|j|jf}t�||j�}t	j
�tj�r)t�
|�|�d�dkr8t�|j|d�nn|jdd�dkrtd	|jj}d
|j||jf}t�||j�}t	j
�tj�rdt�
|�|�d�dkrst�|j|d�n3|��\}}d|||jj|jf}t�||j�}t	j
�tj�r�t�
|�|�d�dkr�t�|j|d�t�|jd|j|jjfd�WdSty�}zt�|jd
t|�d�WYd}~dSd}~ww)Nz!Will first initiate backup repo..rr�z(restic init --repo %s --password-file %szconfig file already existsr1r$r%r&zKexport PATH=${PATH}:/usr/bin && restic init --repo %s:%s --password-file %szfAWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s restic -r s3:s3.amazonaws.com/%s init --password-file %szRepo %s initiated for %s.z#%s. [IncJobs.initiateRepo.47][5009]r)rCrrrrrrrr(r)rprrsrtrDr=rror+rBrE)rr,rFr�r-r.rLrrr�initiateRepo�sN

�
�
��
���zIncJobs.initiateRepocCsRd|jj}d|}d|jj}|jjg}d|d�|�||f}t�|||�dS)Nz!Backup Repository password for %sz�Password: %s
This is password for your incremental backup repository, please save it in safe place as it will be required when you want to restore backup for this site on remote server.
z
cyberpanel@%sz From: %s
To: %s
Subject: %s

%s
z, )rro�
adminEmail�joinr�	SendEmail)rr0�SUBJECT�text�sender�TOr�rrr�	sendEmails�
�zIncJobs.sendEmailc
Cs��zF|jd|_|jd}|jd|_|jd}|jd}|jd}d}t�|��d�d	krqz3d
}tj�|�rPd}t�	|�d}t�	|�d
}t�	|�WWdSd}t�	|�d}t�	|�WWdSt
�|jdd�YWdStj
j|d�|_|jj|_t|jd�|_|j��d|jj|jjf|_d|jj|_d|j}t�||j�}|�d�d	kr�t��}d||jf}t�	||jd�d|j}t�	||j�|�|�|��dkr�WdS|��dkr�WdS|r�|��dkr�WdS|r�|��dkr�WdS|�r|��dk�rWdS|��d|jj}	zd|	}t�	|�Wnt �y<}
zt
�|jdt!|
�d�WYd}
~
nd}
~
wwt
�|jdd�WdSt �yg}
zt
�|jd t!|
�d�WYd}
~
dSd}
~
ww)!Nr�rr�websiteData�
websiteEmails�websiteDatabases�resticz restic is a backup program whichr1z/etc/redhat-releasezyum install -y yum-plugin-coprz yum copr enable -y copart/resticzyum install -y resticzapt-get update -yzapt-get install restic -yz�It seems restic is not installed, for incremental backups to work restic must be installed. You can manually install restic using this guide -> https://go.cyberpanel.net/restic. [5009]rrr�)rr�r�z	ls -la %szNo such file or directoryzecho "%s" > %sTzchmod 600 %sr�r�z:Failed to delete meta file: %s. [IncJobs.createBackup.591]r�zIFailed to create incremental backup: %s. [5009][IncJobs.createBackup.913])"rrrrr(r=rprrsr�rCrrrr�r�rr)rrrvrorr�randomPassword�
generate_passr�r�r�r�r�r�r�rBrE)rrr�r�r�r,�
CentOSPath�outputr0r�rLrrrr)s�





�
	��




������zIncJobs.createBackupc
Cs�zZtj|_|j��}|djjj|_|djjj|_d|j|jf|_	|D]2}||_
|j
jdkr9|�dddd�q%|j
jdd�dkrL|�
dddd�q%|�dd	|j
jdd�q%WdStyy}zt�|jd
t|�d�WYd}~dSd}~ww)Nrr�r�r�rr$r%r�r
z%s [903:DeleteSnapShot][5009])rC�fileNamer�jobsnapshots_setr�rgrror)rrrir�r�r�rhrBrrrE)r�inc_job�
job_snapshots�job_snapshotrLrrr�DeleteSnapShot�s&
��zIncJobs.DeleteSnapShot)NNNN)NN)�__name__�
__module__�__qualname__rr#r/rMrYr+r�r�r�r�r�r�r�r r�r�r�r�r�r�r�rr�rrrrr"s0	#

_
>A8%]<,or)%rp�os.path�shlex�
subprocess�sys�requestsrr?�environ�
setdefault�django�setup�	threadingr�plogical.processUtilitiesr�modelsrr�websiteFunctions.modelsr�plogical.randomPasswordr��plogical.CyberCPLogFileWriterrrC�plogical.mysqlUtilitiesr�r@�django.shortcutsr	�plogical.virtualHostUtilitiesr
�plogical.mailUtilitiesrrrrrrr�<module>s8