From 58cf02a25c290cfdc48774ea5e95a647b29065a7 Mon Sep 17 00:00:00 2001 From: Luke S Thompson <73861168+lsthompson@users.noreply.github.com> Date: Tue, 24 May 2022 14:21:10 +1000 Subject: [PATCH 01/30] Refine wording on successful creation of mailbox --- mailServer/templates/mailServer/createEmailAccount.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mailServer/templates/mailServer/createEmailAccount.html b/mailServer/templates/mailServer/createEmailAccount.html index 36aa26162..712860ad5 100755 --- a/mailServer/templates/mailServer/createEmailAccount.html +++ b/mailServer/templates/mailServer/createEmailAccount.html @@ -108,8 +108,8 @@
-

{% trans "Email with id :" %} {$ createdID - $}{% trans " is successfully created." %}

+

{% trans "Mailbox with username:" %} {$ createdID + $}{% trans " has been successfully created." %}

{% trans "Could not connect to server. Please refresh this page." %}

From 16c33e932335f472b07e0447c19bf18a5fe9e1d0 Mon Sep 17 00:00:00 2001 From: Luke S Thompson <73861168+lsthompson@users.noreply.github.com> Date: Tue, 24 May 2022 14:22:36 +1000 Subject: [PATCH 02/30] Refine wording on successful deletion of mailbox --- mailServer/templates/mailServer/deleteEmailAccount.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mailServer/templates/mailServer/deleteEmailAccount.html b/mailServer/templates/mailServer/deleteEmailAccount.html index 793bc0f40..942662540 100755 --- a/mailServer/templates/mailServer/deleteEmailAccount.html +++ b/mailServer/templates/mailServer/deleteEmailAccount.html @@ -92,7 +92,7 @@
-

{% trans "Email with id : {$ deletedID $} is successfully deleted." %}

+

{% trans "Mailbox with username: {$ deletedID $} has been successfully deleted." %}

{% trans "Could not connect to server. Please refresh this page." %}

From 1a6521b89837c734a757919afb67359ce4cb46ee Mon Sep 17 00:00:00 2001 From: Luke S Thompson <73861168+lsthompson@users.noreply.github.com> Date: Thu, 23 Jun 2022 15:40:17 +1000 Subject: [PATCH 03/30] Change update wording to check; minor tidy-up --- .../baseTemplate/versionManagment.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/baseTemplate/templates/baseTemplate/versionManagment.html b/baseTemplate/templates/baseTemplate/versionManagment.html index a048a8066..a6cefa56b 100755 --- a/baseTemplate/templates/baseTemplate/versionManagment.html +++ b/baseTemplate/templates/baseTemplate/versionManagment.html @@ -8,11 +8,11 @@

{% trans "Version Management" %}

-

{% trans "On this page you can manage versions and or upgrade to latest version of CyberPanel" %}

+

{% trans "Here you can manage versions and check for updates to CyberPanel" %}

{% if Notecheck %}
-

{% trans "Note: Latest commit does not match, please upgrade." %}

+

{% trans "Note: Latest commit does not match, please upgrade CyberPanel." %}

{% endif %} @@ -28,7 +28,7 @@
- +
{{ currentVersion }}
@@ -36,9 +36,9 @@
- +
{{ build }}
- +
{{ Currentcomt }}
@@ -46,7 +46,7 @@
- +
{{ latestVersion }}
@@ -54,9 +54,9 @@
- +
{{ latestBuild }}
- +
{{ latestcomit }}
@@ -84,4 +84,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} From b13e510f2475eaf6dd5186478282751eaf9e1da7 Mon Sep 17 00:00:00 2001 From: Luke S Thompson <73861168+lsthompson@users.noreply.github.com> Date: Thu, 23 Jun 2022 15:51:03 +1000 Subject: [PATCH 04/30] Server IP: Change colour to green; Ram to RAM --- baseTemplate/templates/baseTemplate/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/baseTemplate/templates/baseTemplate/index.html b/baseTemplate/templates/baseTemplate/index.html index b84d941e8..00f6ca4c2 100755 --- a/baseTemplate/templates/baseTemplate/index.html +++ b/baseTemplate/templates/baseTemplate/index.html @@ -145,7 +145,7 @@
  • {$ ramUsage $}%
    - {% trans "Ram Usage" %} + {% trans "RAM Usage" %}
    @@ -300,7 +300,7 @@ - {{ ipAddress }} + {{ ipAddress }} From 9c695374d362e19363f12e6b3c0715a429efbc54 Mon Sep 17 00:00:00 2001 From: Luke S Thompson <73861168+lsthompson@users.noreply.github.com> Date: Thu, 23 Jun 2022 16:34:05 +1000 Subject: [PATCH 05/30] Minor wording tweaks to cyberpanel_upgrade.sh --- cyberpanel_upgrade.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cyberpanel_upgrade.sh b/cyberpanel_upgrade.sh index 1f710bae8..7bd7de517 100644 --- a/cyberpanel_upgrade.sh +++ b/cyberpanel_upgrade.sh @@ -20,7 +20,7 @@ export LC_CTYPE=en_US.UTF-8 echo -e "\nFetching latest data from CyberPanel server...\n" echo -e "This may take few seconds..." -Server_Country="Unknow" +Server_Country="Unknown" Server_OS="" Server_OS_Version="" Server_Provider='Undefined' @@ -64,18 +64,18 @@ echo -e "\n${1}" >> /var/log/upgradeLogs.txt Check_Root() { echo -e "\nChecking root privileges..." if echo "$Sudo_Test" | grep SUDO >/dev/null; then - echo -e "\nYou are using SUDO , please run as root user...\n" + echo -e "\nYou are using SUDO, please run as root user...\n" echo -e "\nIf you don't have direct access to root user, please run \e[31msudo su -\e[39m command (do NOT miss the \e[31m-\e[39m at end or it will fail) and then run installation command again." exit fi if [[ $(id -u) != 0 ]] >/dev/null; then - echo -e "\nYou must run on root user to install CyberPanel...\n" - echo -e "or run following command: (do NOT miss the quotes)" + echo -e "\nYou must run as root user to install CyberPanel...\n" + echo -e "or run the following command: (do NOT miss the quotes)" echo -e "\e[31msudo su -c \"sh <(curl https://cyberpanel.sh || wget -O - https://cyberpanel.sh)\"\e[39m" exit 1 else - echo -e "\nYou are runing as root...\n" + echo -e "\nYou are running as root...\n" fi } @@ -84,7 +84,7 @@ echo -e "Checking server location...\n" Server_Country=$(curl --silent --max-time 10 -4 https://cyberpanel.sh/?country) if [[ ${#Server_Country} != "2" ]] ; then - Server_Country="Unknow" + Server_Country="Unknown" fi if [[ "$Debug" = "On" ]] ; then @@ -93,7 +93,7 @@ fi if [[ "$*" = *"--mirror"* ]] ; then Server_Country="CN" - echo -e "Force to use mirror server due to --mirror argument...\n" + echo -e "Forced to use mirror server due to --mirror argument...\n" fi if [[ "$Server_Country" = *"CN"* ]] ; then @@ -104,7 +104,7 @@ fi Check_OS() { if [[ ! -f /etc/os-release ]] ; then - echo -e "Unable to detect the operating system...\n" + echo -e "Unable to detect the Operating System...\n" exit fi @@ -459,7 +459,7 @@ for i in {1..50}; sleep 30 fi done -#special made function for Gitee.com , for whatever reason , sometimes it fails to download this file +#special made function for Gitee.com, for whatever reason sometimes it fails to download this file } @@ -475,12 +475,12 @@ else fi if [[ -f /usr/local/CyberPanel/bin/python2 ]]; then - echo -e "\nPython 2 dectected, doing resetup...\n" + echo -e "\nPython 2 dectected, doing re-setup...\n" rm -rf /usr/local/CyberPanel/bin virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel Check_Return elif [[ -d /usr/local/CyberPanel/bin/ ]]; then - echo -e "\nNo need to resetup virtualenv at /usr/local/CyberPanel...\n" + echo -e "\nNo need to re-setup virtualenv at /usr/local/CyberPanel...\n" else echo -e "\nNothing found, need fresh setup...\n" virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberPanel @@ -542,9 +542,9 @@ fi } Pre_Upgrade_Branch_Input() { - echo -e "\nPress Enter key to continue with latest version or Enter specific version such as: \e[31m1.9.4\e[39m , \e[31m1.9.5\e[39m ...etc" - echo -e "\nIf nothing is input in 10 seconds , script will proceed with latest stable. " - echo -e "\nPlease press Enter key , or specify a version number ,or wait for 10 seconds timeout: " + echo -e "\nPress the Enter key to continue with latest version, or enter specific version such as: \e[31m1.9.4\e[39m , \e[31m1.9.5\e[39m ...etc" + echo -e "\nIf nothing is input in 10 seconds, script will proceed with the latest stable version. " + echo -e "\nPlease press the Enter key or specify a version number, or wait for 10 seconds: " printf "%s" "" read -r -t 10 Tmp_Input if [[ $Tmp_Input = "" ]]; then @@ -563,7 +563,7 @@ if [[ -f /usr/local/CyberCP/bin/python2 ]]; then virtualenv -p /usr/bin/python3 /usr/local/CyberCP Check_Return elif [[ -d /usr/local/CyberCP/bin/ ]]; then - echo -e "\nNo need to resetup virtualenv at /usr/local/CyberCP...\n" + echo -e "\nNo need to re-setup virtualenv at /usr/local/CyberCP...\n" else virtualenv -p /usr/bin/python3 --system-site-packages /usr/local/CyberCP Check_Return @@ -731,7 +731,7 @@ if curl -I -XGET -k "https://127.0.0.1:${Panel_Port#*:}" | grep -q "200 OK" ; th echo " CyberPanel Upgraded " echo "###################################################################" else - echo -e "\nSeems something wrong with upgarde, please check...\n" + echo -e "\nSeems something wrong with upgrade, please check...\n" fi rm -rf /root/cyberpanel_upgrade_tmp } From 28082f5b81a25af5a2ccf6ef736754b145bada2b Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Thu, 23 Jun 2022 13:00:13 +0500 Subject: [PATCH 06/30] debug false --- CyberCP/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CyberCP/settings.py b/CyberCP/settings.py index f20c69b48..ef8b84ed8 100755 --- a/CyberCP/settings.py +++ b/CyberCP/settings.py @@ -24,7 +24,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = 'xr%j*p!*$0d%(-(e%@-*hyoz4$f%y77coq0u)6pwmjg4)q&19f' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False ALLOWED_HOSTS = ['*'] From 76d6284f4b143224737f137aae3ed1ed611b8f84 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Thu, 23 Jun 2022 22:54:58 +0500 Subject: [PATCH 07/30] phpmyadmin --- install/install.py | 2 +- plogical/upgrade.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/install/install.py b/install/install.py index eacaac681..85318a7a7 100755 --- a/install/install.py +++ b/install/install.py @@ -723,7 +723,7 @@ password="%s" preFlightsChecks.call(command, self.distro, '[download_install_phpmyadmin]', command, 1, 0, os.EX_OSERR) - command = 'unzip /usr/local/CyberCP/public/phpmyadmin.zip -d /usr/local/CyberCP/public/' + command = 'unzip /usr/local/CyberCP/public/phpmyadmin.zip -d /usr/local/CyberCP/public/phpmyadmin' preFlightsChecks.call(command, self.distro, '[download_install_phpmyadmin]', command, 1, 0, os.EX_OSERR) diff --git a/plogical/upgrade.py b/plogical/upgrade.py index e57004a08..9f8ca0cff 100755 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -276,7 +276,7 @@ class Upgrade: command = 'wget -O /usr/local/CyberCP/public/phpmyadmin.zip https://github.com/usmannasir/cyberpanel/raw/stable/phpmyadmin.zip' Upgrade.executioner(command, 0) - command = 'unzip /usr/local/CyberCP/public/phpmyadmin.zip -d /usr/local/CyberCP/public/' + command = 'unzip /usr/local/CyberCP/public/phpmyadmin.zip -d /usr/local/CyberCP/public/phpmyadmin' Upgrade.executioner(command, 0) command = 'mv /usr/local/CyberCP/public/phpMyAdmin-*-all-languages /usr/local/CyberCP/public/phpmyadmin' From c2d4a8f70615f18d9f43e98121b3e1ab73cabfd5 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Fri, 24 Jun 2022 14:23:26 +0500 Subject: [PATCH 08/30] phpmyadmin --- baseTemplate/templates/baseTemplate/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/baseTemplate/templates/baseTemplate/index.html b/baseTemplate/templates/baseTemplate/index.html index 82899a0bb..5f4e8c3b9 100755 --- a/baseTemplate/templates/baseTemplate/index.html +++ b/baseTemplate/templates/baseTemplate/index.html @@ -399,7 +399,7 @@
  • - {% trans "WordPresss" %} + {% trans "WordPress" %}
  • {% trans "Restore Backups" %}
  • +
  • {% trans "Remote Backup" %} +
  • diff --git a/websiteFunctions/models.py b/websiteFunctions/models.py index 34647f3e1..c9b1a8640 100755 --- a/websiteFunctions/models.py +++ b/websiteFunctions/models.py @@ -128,3 +128,22 @@ class WPSitesBackup(models.Model): WPSiteID = models.IntegerField(default=-1) WebsiteID = models.IntegerField(default=-1) config = models.TextField() + + +class RemoteBackupConfig(models.Model): + owner = models.ForeignKey(Administrator, on_delete=models.CASCADE) + configtype = models.CharField(max_length=255, default='') + config = models.TextField() + +class RemoteBackupSchedule(models.Model): + RemoteBackupConfig = models.ForeignKey(RemoteBackupConfig, on_delete=models.CASCADE) + Name = models.CharField(max_length=255, default='') + timeintervel = models.CharField(max_length=200) + fileretention = models.CharField(max_length=200) + lastrun = models.CharField(max_length=200) + config = models.TextField() + +class RemoteBackupsites(models.Model): + owner = models.ForeignKey(RemoteBackupSchedule, on_delete=models.CASCADE) + WPsites = models.IntegerField(null=True) + database = models.IntegerField(null=True) diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js index 61b512882..c743a525d 100755 --- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js +++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js @@ -521,7 +521,7 @@ app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $windo if (response.data.ret_data.maintenanceMode === 1) { $('#maintenanceMode').prop('checked', true); } - if(response.data.ret_data.wpcron === 1) { + if (response.data.ret_data.wpcron === 1) { $('#wpcron').prop('checked', true); } if (response.data.ret_data.passwordprotection == 1) { @@ -589,8 +589,7 @@ app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $windo PPPassword: $scope.PPPassword, } - } - else { + } else { var data = { WPid: $('#WPid').html(), setting: setting, @@ -633,7 +632,7 @@ app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $windo text: 'Successfully Updated!.', type: 'success' }); - if (setting === "PasswordProtection"){ + if (setting === "PasswordProtection") { location.reload(); } } else { @@ -642,7 +641,7 @@ app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $windo text: response.data.error_message, type: 'error' }); - if (setting === "PasswordProtection"){ + if (setting === "PasswordProtection") { location.reload(); } @@ -1955,6 +1954,217 @@ app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) { }); +//.......................................Remote Backup + +//........... delete DeleteBackupConfigNow + +function DeleteBackupConfigNow(url) { + window.location.href = url; +} +function DeleteRemoteBackupsiteNow(url) { + window.location.href = url; +} +function DeleteBackupfileConfigNow(url) { + window.location.href = url; +} + + +app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) { + $scope.RemoteBackupLoading = true; + $scope.SFTPBackUpdiv = true; + $scope.S3backupdiv = true; + $scope.SelectRemoteBackuptype = function () { + var val = $scope.RemoteBackuptype; + if (val == "SFTP") { + $scope.SFTPBackUpdiv = false; + $scope.S3backupdiv = true; + } else { + $scope.S3backupdiv = false; + $scope.SFTPBackUpdiv = true; + } + } + + $scope.SaveBackupConfig = function () { + $scope.RemoteBackupLoading = false; + var Hname = $scope.Hostname; + var Uname = $scope.Username; + var Passwd = $scope.Password; + var path = $scope.path; + var type = $scope.RemoteBackuptype; + + if (type == "SFTP") { + + var data = { + Hname: Hname, + Uname: Uname, + Passwd: Passwd, + path: path, + type: type + } + var url = "/websites/SaveBackupConfig"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { + new PNotify({ + title: 'Success!', + text: 'Successfully Saved!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', + text: response.data.error_message, + type: 'error' + }); + } + } + + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + } + + + } + +}); + + +app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { + $scope.BackupScheduleLoading = true; + $scope.SaveBackupSchedule = function () { + $scope.RemoteBackupLoading = false; + var FileRetention = $scope.Fretention; + var Backfrequency = $scope.Bfrequency; + + + var data = { + FileRetention: FileRetention, + Backfrequency: Backfrequency, + ScheduleName: $scope.ScheduleName, + RemoteConfigID : $('#RemoteConfigID').html(), + BackupType: $scope.BackupType + } + var url = "/websites/SaveBackupSchedule"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { + new PNotify({ + title: 'Success!', + text: 'Successfully Saved!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', + text: response.data.error_message, + type: 'error' + }); + } + } + + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + + + } + + + $scope.AddWPsiteforRemoteBackup = function () { + $scope.RemoteBackupLoading = false; + + + + var data = { + WpsiteID: $('#Wpsite').val(), + RemoteScheduleID : $('#RemoteScheduleID').html() + } + var url = "/websites/AddWPsiteforRemoteBackup"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { + new PNotify({ + title: 'Success!', + text: 'Successfully Saved!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', + text: response.data.error_message, + type: 'error' + }); + } + } + + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + + + } +}); /* Java script code to create account */ app.controller('createWebsite', function ($scope, $http, $timeout, $window) { diff --git a/websiteFunctions/templates/websiteFunctions/AddRemoteBackupSite.html b/websiteFunctions/templates/websiteFunctions/AddRemoteBackupSite.html new file mode 100644 index 000000000..583492b0a --- /dev/null +++ b/websiteFunctions/templates/websiteFunctions/AddRemoteBackupSite.html @@ -0,0 +1,87 @@ +{% extends "baseTemplate/index.html" %} +{% load i18n %} +{% block title %}{% trans "Backup Sites Configurations - CyberPanel" %}{% endblock %} +{% block content %} + + {% load static %} + {% get_current_language as LANGUAGE_CODE %} + + +
    +
    +

    {% trans "Backup Sites Configurations" %}

    +
    + + +
    +
    +

    + {% trans " Add WordPress Sites for Remote Backup" %} +

    + + + + + +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    + +

    + {% trans "Saved Sites For Remote Backup" %}

    + + + + + + + + + + + {% for sub in RemoteBackupsites %} + + + + + + {% endfor %} + +
    IDWordPress TitleAction
    {{ sub.id }}{{ sub.Title }} + + +
    + +
    +
    + + +
    + + +{% endblock %} diff --git a/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html new file mode 100644 index 000000000..ce8819d25 --- /dev/null +++ b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html @@ -0,0 +1,127 @@ +{% extends "baseTemplate/index.html" %} +{% load i18n %} +{% block title %}{% trans "File Config - CyberPanel" %}{% endblock %} +{% block content %} + + {% load static %} + {% get_current_language as LANGUAGE_CODE %} + + +
    +
    +

    {% trans "Backup File Configurations" %}

    +
    + + +
    +
    +

    + {% trans " Schedule Backups" %} +

    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    +

    + {% trans "Configure Backup Schedules" %}

    + + + + + + + + + + + + {% for sub in Backupschedule %} + + + + + + + {% endfor %} + +
    IDSchedule NameRemote Configuration + Action
    {{ sub.id }}{{ sub.Name }}{{ sub.RemoteConfiguration }} + + + Add WordPress Sites + +
    + +
    +
    + + +
    + + +{% endblock %} diff --git a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html new file mode 100644 index 000000000..5b18dc1f3 --- /dev/null +++ b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html @@ -0,0 +1,131 @@ +{% extends "baseTemplate/index.html" %} +{% load i18n %} +{% block title %}{% trans "Remote Backup Configurations - CyberPanel" %}{% endblock %} +{% block content %} + + {% load static %} + {% get_current_language as LANGUAGE_CODE %} + + +
    +
    +

    {% trans "Remote Backup Configurations" %}

    +
    + + +
    +
    +

    + {% trans "Configure Remote Backups" %} +

    +
    + +
    + +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    + +
    + S3 BAckups +
    + + +
    + +
    + + +
    +
    + + +
    + +
    +

    + {% trans "Saved Remote Configuration" %}

    + + + + + + + + + + + + {% for sub in backupconfigs %} + + + + + + + {% endfor %} + +
    Backup TypeHostNamePathAction
    {{ sub.Type }}{{ sub.HostName }}{{ sub.Path }} + + Schedule Backups +
    +
    +
    + + + +
    + + +{% endblock %} diff --git a/websiteFunctions/urls.py b/websiteFunctions/urls.py index 82253f0e5..9d812686a 100755 --- a/websiteFunctions/urls.py +++ b/websiteFunctions/urls.py @@ -23,6 +23,9 @@ urlpatterns = [ url(r'^RestoreBackups$', views.RestoreBackups, name='RestoreBackups'), url(r'^RestoreHome$', views.RestoreHome, name='RestoreHome'), url(r'^AutoLogin$', views.AutoLogin, name='AutoLogin'), + url(r'^RemoteBackupConfig$', views.RemoteBackupConfig, name='RemoteBackupConfig'), + url(r'^BackupfileConfig$', views.BackupfileConfig, name='BackupfileConfig'), + url(r'^AddRemoteBackupsite$', views.AddRemoteBackupsite, name='AddRemoteBackupsite'), ###WordPress Ajax @@ -44,9 +47,11 @@ urlpatterns = [ url(r'^DeploytoProduction', views.DeploytoProduction, name='DeploytoProduction'), url(r'^WPCreateBackup', views.WPCreateBackup, name='WPCreateBackup'), url(r'^RestoreWPbackupNow', views.RestoreWPbackupNow, name='RestoreWPbackupNow'), - url(r'^RestoreWPbackupNow', views.RestoreWPbackupNow, name='RestoreWPbackupNow'), url(r'^dataintegrity', views.dataintegrity, name='dataintegrity'), url(r'^installwpcore', views.installwpcore, name='installwpcore'), + url(r'^SaveBackupConfig', views.SaveBackupConfig, name='SaveBackupConfig'), + url(r'^SaveBackupSchedule', views.SaveBackupSchedule, name='SaveBackupSchedule'), + url(r'^AddWPsiteforRemoteBackup', views.AddWPsiteforRemoteBackup, name='AddWPsiteforRemoteBackup'), diff --git a/websiteFunctions/views.py b/websiteFunctions/views.py index 726dac42c..96bc48d33 100755 --- a/websiteFunctions/views.py +++ b/websiteFunctions/views.py @@ -65,6 +65,40 @@ def RestoreHome(request): return wm.RestoreHome(request, userID, BackupID) except KeyError: return redirect(loadLoginPage) + + +def RemoteBackupConfig(request): + try: + userID = request.session['userID'] + + DeleteID = request.GET.get('DeleteID') + wm = WebsiteManager() + return wm.RemoteBackupConfig(request, userID, DeleteID) + except KeyError: + return redirect(loadLoginPage) + +def BackupfileConfig(request): + try: + userID = request.session['userID'] + + ID = request.GET.get('ID') + DeleteID = request.GET.get('DeleteID') + wm = WebsiteManager() + return wm.BackupfileConfig(request, userID, ID, DeleteID) + except KeyError: + return redirect(loadLoginPage) + +def AddRemoteBackupsite(request): + try: + userID = request.session['userID'] + + ID = request.GET.get('ID') + DeleteSiteID = request.GET.get('DeleteID') + wm = WebsiteManager() + return wm.AddRemoteBackupsite(request, userID, ID,DeleteSiteID ) + except KeyError: + return redirect(loadLoginPage) + def RestoreBackups(request): try: userID = request.session['userID'] @@ -407,6 +441,67 @@ def RestoreWPbackupNow(request): return redirect(loadLoginPage) +def SaveBackupConfig(request): + try: + userID = request.session['userID'] + + result = pluginManager.preWebsiteCreation(request) + if result != 200: + return result + + wm = WebsiteManager() + coreResult = wm.SaveBackupConfig(userID, json.loads(request.body)) + + result = pluginManager.postWebsiteCreation(request, coreResult) + if result != 200: + return result + + return coreResult + + except KeyError: + return redirect(loadLoginPage) + +def SaveBackupSchedule(request): + try: + userID = request.session['userID'] + + result = pluginManager.preWebsiteCreation(request) + if result != 200: + return result + + wm = WebsiteManager() + coreResult = wm.SaveBackupSchedule(userID, json.loads(request.body)) + + result = pluginManager.postWebsiteCreation(request, coreResult) + if result != 200: + return result + + return coreResult + + except KeyError: + return redirect(loadLoginPage) + +def AddWPsiteforRemoteBackup(request): + try: + userID = request.session['userID'] + + result = pluginManager.preWebsiteCreation(request) + if result != 200: + return result + + wm = WebsiteManager() + coreResult = wm.AddWPsiteforRemoteBackup(userID, json.loads(request.body)) + + result = pluginManager.postWebsiteCreation(request, coreResult) + if result != 200: + return result + + return coreResult + + except KeyError: + return redirect(loadLoginPage) + + def installwpcore(request): try: userID = request.session['userID'] diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index 5aac1f113..7fb91ae6e 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -4,6 +4,7 @@ import os.path import sys import django +from databases.models import Databases from plogical.httpProc import httpProc sys.path.append('/usr/local/CyberCP') @@ -12,7 +13,7 @@ django.setup() import json from plogical.acl import ACLManager import plogical.CyberCPLogFileWriter as logging -from websiteFunctions.models import Websites, ChildDomains, GitLogs, wpplugins, WPSites, WPStaging, WPSitesBackup +from websiteFunctions.models import Websites, ChildDomains, GitLogs, wpplugins, WPSites, WPStaging, WPSitesBackup, RemoteBackupConfig,RemoteBackupSchedule, RemoteBackupsites from plogical.virtualHostUtilities import virtualHostUtilities import subprocess import shlex @@ -202,6 +203,100 @@ class WebsiteManager: else: return redirect("https://cyberpanel.net/cyberpanel-addons") + + def RemoteBackupConfig(self, request=None, userID=None, DeleteID=None ): + Data = {} + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + try: + if DeleteID != None: + BackupconfigDelete = RemoteBackupConfig.objects.get(pk=DeleteID) + BackupconfigDelete.delete() + except: + pass + + if ACLManager.CheckForPremFeature('wp-manager'): + + Data['WPsites'] = ACLManager.GetALLWPObjects(currentACL, userID) + allcon = RemoteBackupConfig.objects.all() + Data['backupconfigs'] =[] + for i in allcon: + configr = json.loads(i.config) + Data['backupconfigs'].append({ + 'id':i.pk, + 'Type': i.configtype, + 'HostName': configr['Hostname'], + 'Path': configr['Path'] + }) + proc = httpProc(request, 'websiteFunctions/RemoteBackupConfig.html', + Data, 'createWebsite') + return proc.render() + else: + return redirect("https://cyberpanel.net/cyberpanel-addons") + + + def BackupfileConfig(self, request=None, userID=None, RemoteConfigID=None, DeleteID=None ): + Data = {} + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + + Data['RemoteConfigID'] = RemoteConfigID + RemoteConfigobj = RemoteBackupConfig.objects.get(pk=RemoteConfigID) + try: + if DeleteID != None: + RemoteBackupConfigDelete = RemoteBackupSchedule.objects.get(pk=DeleteID) + RemoteBackupConfigDelete.delete() + except: + pass + + if ACLManager.CheckForPremFeature('wp-manager'): + Data['WPsites'] = ACLManager.GetALLWPObjects(currentACL, userID) + allsechedule = RemoteBackupSchedule.objects.filter(RemoteBackupConfig=RemoteConfigobj) + Data['Backupschedule'] = [] + for i in allsechedule: + Data['Backupschedule'].append({ + 'id': i.pk, + 'Name': i.Name, + 'RemoteConfiguration': i.RemoteBackupConfig.configtype + }) + proc = httpProc(request, 'websiteFunctions/BackupfileConfig.html', + Data, 'createWebsite') + return proc.render() + else: + return redirect("https://cyberpanel.net/cyberpanel-addons") + + + def AddRemoteBackupsite(self, request=None, userID=None, RemoteScheduleID=None , DeleteSiteID=None): + Data = {} + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + + Data['RemoteScheduleID'] = RemoteScheduleID + RemoteBackupScheduleobj= RemoteBackupSchedule.objects.get(pk=RemoteScheduleID) + + try: + if DeleteSiteID != None: + RemoteBackupsitesDelete = RemoteBackupsites.objects.get(pk=DeleteSiteID) + RemoteBackupsitesDelete.delete() + except: + pass + + if ACLManager.CheckForPremFeature('wp-manager'): + Data['WPsites'] = ACLManager.GetALLWPObjects(currentACL, userID) + allRemoteBackupsites = RemoteBackupsites.objects.filter(owner=RemoteBackupScheduleobj) + Data['RemoteBackupsites'] = [] + for i in allRemoteBackupsites: + wpsite = WPSites.objects.get(pk=i.WPsites) + Data['RemoteBackupsites'].append({ + 'id': i.pk, + 'Title': wpsite.title, + }) + proc = httpProc(request, 'websiteFunctions/AddRemoteBackupSite.html', + Data, 'createWebsite') + return proc.render() + else: + return redirect("https://cyberpanel.net/cyberpanel-addons") + def RestoreBackups(self, request=None, userID=None, DeleteID=None): Data = {} currentACL = ACLManager.loadedACL(userID) @@ -1033,6 +1128,118 @@ class WebsiteManager: return HttpResponse(json_data) + + def SaveBackupConfig(self, userID=None, data=None): + try: + + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + ConfigType = data['type'] + if ConfigType == 'SFTP': + Hname = data['Hname'] + Uname = data['Uname'] + Passwd = data['Passwd'] + path = data['path'] + config = { + "Hostname": Hname, + "Username": Uname, + "Password": Passwd, + "Path": path + } + mkobj = RemoteBackupConfig(owner=admin, configtype=ConfigType, config=json.dumps(config)) + mkobj.save() + + + time.sleep(1) + + data_ret = {'status': 1, 'error_message': 'None',} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + + def SaveBackupSchedule(self, userID=None, data=None): + try: + + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + FileRetention = data['FileRetention'] + Backfrequency = data['Backfrequency'] + ScheduleName = data['ScheduleName'] + RemoteConfigID = data['RemoteConfigID'] + BackupType = data['BackupType'] + config = { + 'BackupType': BackupType + } + + RemoteBackupConfigobj = RemoteBackupConfig.objects.get(pk=RemoteConfigID) + + svobj = RemoteBackupSchedule( RemoteBackupConfig=RemoteBackupConfigobj, Name=ScheduleName, + timeintervel=Backfrequency, fileretention=FileRetention, config=json.dumps(config), + lastrun=str(time.time())) + svobj.save() + + data_ret = {'status': 1, 'error_message': 'None',} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + + def AddWPsiteforRemoteBackup(self, userID=None, data=None): + try: + + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + WPid = data['WpsiteID'] + RemoteScheduleID = data['RemoteScheduleID'] + + wpsiteobj = WPSites.objects.get(pk=WPid) + WPpath = wpsiteobj.path + VHuser = wpsiteobj.owner.externalApp + PhpVersion = wpsiteobj.owner.phpSelection + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ####Get DB Name + + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ## Get DB obj + try: + DBobj = Databases.objects.get(dbName=Finaldbname) + except: + raise BaseException(str("DataBase Not Found")) + RemoteScheduleIDobj = RemoteBackupSchedule.objects.get(pk=RemoteScheduleID) + + svobj = RemoteBackupsites( owner=RemoteScheduleIDobj, WPsites = WPid, database = DBobj.pk) + svobj.save() + + data_ret = {'status': 1, 'error_message': 'None',} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + + def installwpcore(self, userID=None, data=None): try: From 6e28128f640a114af26731efb4bda53689b91d64 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Sat, 25 Jun 2022 20:01:33 +0500 Subject: [PATCH 10/30] resolve : https://github.com/usmannasir/cyberpanel/issues/900 --- plogical/upgrade.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plogical/upgrade.py b/plogical/upgrade.py index 9f8ca0cff..df0212473 100755 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -2769,7 +2769,7 @@ vmail command = execPath + " --function submitinstallImunifyAV" Upgrade.executioner(command, command, 1) - command = 'chmod +x /usr/local/CyberCP/bin/python /usr/local/CyberCP/CLManager/CageFS.py' + command = 'chmod +x /usr/local/CyberCP/public/imunifyav/bin/execute.py' Upgrade.executioner(command, command, 1) From 932faceef1fec64804028f03daac6d7d7e66c3a9 Mon Sep 17 00:00:00 2001 From: Hassan Hashmi <75794688+habbi-hb@users.noreply.github.com> Date: Mon, 27 Jun 2022 12:05:43 +0500 Subject: [PATCH 11/30] cron --- plogical/IncScheduler.py | 73 +++++++++++++++++++ plogical/applicationInstaller.py | 5 ++ .../websiteFunctions/BackupfileConfig.html | 2 +- 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index 8d1ef8da4..4caa198e3 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -960,6 +960,78 @@ Automatic backup failed for %s on %s. except BaseException as msg: logging.writeToFile('%s. [WPUpdates:767]' % (str(msg))) + @staticmethod + def RemoteBackup(): + from websiteFunctions.models import RemoteBackupSchedule, RemoteBackupsites, WPSites + from loginSystem.models import Administrator + import json + for config in RemoteBackupSchedule.objects.all(): + try: + RemoteBackupsiteobj = RemoteBackupsites.objects.filter(owner=config.pk) + backupsiteID=RemoteBackupsiteobj.WPsites + wpsite=WPSites.objects.get(pk=backupsiteID) + AdminID=wpsite.owner.admin_id + Admin = Administrator.objects.get(pk=AdminID) + + except: + continue + try: + configbakup=json.loads(config.config) + backuptype = configbakup['BackupType'] + if backuptype == 'Only DataBase': + Backuptype = "3" + elif backuptype == 'Only Website' + Backuptype = "2" + else: + Backuptype = "1" + except: + pass + + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + + Lastrun = config.lastrun + Currenttime = float(time.time()) + if config.timeintervel == "30 Minutes": + al = float(Currenttime) - float(1800) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="1 Hour": + al = float(Currenttime) - float(3600) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="6 Hours": + al = float(Currenttime) - float(21600) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="12 Hours": + al = float(Currenttime) - float(43200) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="1 Day": + al = float(Currenttime) - float(86400) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="3 Days": + al = float(Currenttime) - float(259200) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + elif config.timeintervel =="1 Week": + al = float(Currenttime) - float(604800) + if float(al) >= float(Lastrun): + background = ApplicationInstaller('WPCreateBackup', extraArgs) + background.start() + + def main(): parser = argparse.ArgumentParser(description='CyberPanel Installer') @@ -983,6 +1055,7 @@ def main(): ### IncScheduler.startBackup(args.function) + IncScheduler.RemoteBackup(args) IncScheduler.runGoogleDriveBackups(args.function) IncScheduler.git(args.function) IncScheduler.checkDiskUsage() diff --git a/plogical/applicationInstaller.py b/plogical/applicationInstaller.py index 2fcbe0a95..a6eefeca1 100755 --- a/plogical/applicationInstaller.py +++ b/plogical/applicationInstaller.py @@ -2272,6 +2272,8 @@ $parameters = array( php = PHPManager.getPHPString(PhpVersion) FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Website and Database Both === 1 if Backuptype == "1": logging.statusWriter(self.tempStatusPath, 'Getting database...,20') @@ -2435,6 +2437,7 @@ $parameters = array( logging.statusWriter(self.tempStatusPath, 'Completed.[200]') return 1, f"/home/backup/{config['name']}.tar.gz" + #### Only Website Data === 2 elif Backuptype == "2": ###Onlye website data ### Create secure folder @@ -2563,6 +2566,8 @@ $parameters = array( logging.statusWriter(self.tempStatusPath, 'Completed.[200]') return 1, f"/home/backup/{config['name']}.tar.gz" + + #### Only Database === 3 else: ###only backup of data base logging.statusWriter(self.tempStatusPath, 'Getting database...,20') diff --git a/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html index ce8819d25..c57fb4064 100644 --- a/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html +++ b/websiteFunctions/templates/websiteFunctions/BackupfileConfig.html @@ -58,7 +58,7 @@
    - +
    +
    @@ -86,6 +87,10 @@ ID Schedule Name + Backup Frequency + Backup File Retention + + Last Run Remote Configuration Action @@ -97,6 +102,9 @@ {{ sub.id }} {{ sub.Name }} + {{ sub.Frequency }} + {{ sub.Retention }} + {{ sub.LastRun }} {{ sub.RemoteConfiguration }} + Add WordPress Sites @@ -117,6 +130,68 @@ + + diff --git a/websiteFunctions/urls.py b/websiteFunctions/urls.py index 9d812686a..6a97fe0df 100755 --- a/websiteFunctions/urls.py +++ b/websiteFunctions/urls.py @@ -52,6 +52,7 @@ urlpatterns = [ url(r'^SaveBackupConfig', views.SaveBackupConfig, name='SaveBackupConfig'), url(r'^SaveBackupSchedule', views.SaveBackupSchedule, name='SaveBackupSchedule'), url(r'^AddWPsiteforRemoteBackup', views.AddWPsiteforRemoteBackup, name='AddWPsiteforRemoteBackup'), + url(r'^UpdateRemoteschedules', views.UpdateRemoteschedules, name='UpdateRemoteschedules'), diff --git a/websiteFunctions/views.py b/websiteFunctions/views.py index 96bc48d33..7c93504c0 100755 --- a/websiteFunctions/views.py +++ b/websiteFunctions/views.py @@ -502,6 +502,27 @@ def AddWPsiteforRemoteBackup(request): return redirect(loadLoginPage) +def UpdateRemoteschedules(request): + try: + userID = request.session['userID'] + + result = pluginManager.preWebsiteCreation(request) + if result != 200: + return result + + wm = WebsiteManager() + coreResult = wm.UpdateRemoteschedules(userID, json.loads(request.body)) + + result = pluginManager.postWebsiteCreation(request, coreResult) + if result != 200: + return result + + return coreResult + + except KeyError: + return redirect(loadLoginPage) + + def installwpcore(request): try: userID = request.session['userID'] diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index 30799a0eb..928e471c4 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -254,10 +254,15 @@ class WebsiteManager: allsechedule = RemoteBackupSchedule.objects.filter(RemoteBackupConfig=RemoteConfigobj) Data['Backupschedule'] = [] for i in allsechedule: + lastrun = i.lastrun + LastRun = time.strftime('%Y-%m-%d', time.localtime(float(lastrun))) Data['Backupschedule'].append({ 'id': i.pk, 'Name': i.Name, - 'RemoteConfiguration': i.RemoteBackupConfig.configtype + 'RemoteConfiguration': i.RemoteBackupConfig.configtype, + 'Retention': i.fileretention, + 'Frequency': i.timeintervel, + 'LastRun': LastRun }) proc = httpProc(request, 'websiteFunctions/BackupfileConfig.html', Data, 'createWebsite') @@ -1241,6 +1246,30 @@ class WebsiteManager: return HttpResponse(json_data) + def UpdateRemoteschedules(self, userID=None, data=None): + try: + + currentACL = ACLManager.loadedACL(userID) + admin = Administrator.objects.get(pk=userID) + ScheduleID = data['ScheduleID'] + Frequency = data['Frequency'] + FileRetention = data['FileRetention'] + + scheduleobj = RemoteBackupSchedule.objects.get(pk=ScheduleID) + scheduleobj.timeintervel = Frequency + scheduleobj.fileretention = FileRetention + scheduleobj.save() + + data_ret = {'status': 1, 'error_message': 'None',} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + def installwpcore(self, userID=None, data=None): try: From aa24855963dea34afaf65624812010f2e3523570 Mon Sep 17 00:00:00 2001 From: Hassan Hashmi <75794688+habbi-hb@users.noreply.github.com> Date: Wed, 29 Jun 2022 15:41:05 +0500 Subject: [PATCH 21/30] s3keysaved --- .../websiteFunctions/websiteFunctions.js | 159 ++++++++++++------ .../websiteFunctions/RemoteBackupConfig.html | 80 ++++++--- websiteFunctions/website.py | 63 ++++++- 3 files changed, 220 insertions(+), 82 deletions(-) diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js index 7b10360e8..7542b08a8 100755 --- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js +++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js @@ -1961,9 +1961,11 @@ app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) { function DeleteBackupConfigNow(url) { window.location.href = url; } + function DeleteRemoteBackupsiteNow(url) { window.location.href = url; } + function DeleteBackupfileConfigNow(url) { window.location.href = url; } @@ -1972,15 +1974,47 @@ function DeleteBackupfileConfigNow(url) { app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) { $scope.RemoteBackupLoading = true; $scope.SFTPBackUpdiv = true; - $scope.S3backupdiv = true; + + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; $scope.SelectRemoteBackuptype = function () { var val = $scope.RemoteBackuptype; if (val == "SFTP") { $scope.SFTPBackUpdiv = false; - $scope.S3backupdiv = true; - } else { - $scope.S3backupdiv = false; + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; + } else if (val == "S3") { + $scope.EndpointURLdiv = true; + $scope.Selectprovider = false; + $scope.S3keyNamediv = false; + $scope.Accesskeydiv = false; + $scope.SecretKeydiv = false; $scope.SFTPBackUpdiv = true; + } else { + $scope.RemoteBackupLoading = true; + $scope.SFTPBackUpdiv = true; + + $scope.EndpointURLdiv = true; + $scope.Selectprovider = true; + $scope.S3keyNamediv = true; + $scope.Accesskeydiv = true; + $scope.SecretKeydiv = true; + } + } + + $scope.SelectProvidertype = function () { + $scope.EndpointURLdiv = true; + var provider = $scope.Providervalue + if (provider == 'Backblaze') { + $scope.EndpointURLdiv = false; + } else { + $scope.EndpointURLdiv = true; } } @@ -1991,59 +2025,81 @@ app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) var Passwd = $scope.Password; var path = $scope.path; var type = $scope.RemoteBackuptype; - + var Providervalue = $scope.Providervalue; + var data; if (type == "SFTP") { - var data = { + data = { Hname: Hname, Uname: Uname, Passwd: Passwd, path: path, type: type } - var url = "/websites/SaveBackupConfig"; - - - var config = { - headers: { - 'X-CSRFToken': getCookie('csrftoken') + } else if (type == "S3") { + if (Providervalue == "Backblaze") { + data = { + S3keyname: $scope.S3keyName, + Provider: Providervalue, + AccessKey: $scope.Accesskey, + SecertKey: $scope.SecretKey, + EndUrl: $scope.EndpointURL, + type: type } - }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); - - - function ListInitialDatas(response) { - $scope.RemoteBackupLoading = true; - if (response.data.status === 1) { - new PNotify({ - title: 'Success!', - text: 'Successfully Saved!.', - type: 'success' - }); - location.reload(); - - - } else { - new PNotify({ - title: 'Error!', - text: response.data.error_message, - type: 'error' - }); + } else { + data = { + S3keyname: $scope.S3keyName, + Provider: Providervalue, + AccessKey: $scope.Accesskey, + SecertKey: $scope.SecretKey, + type: type } + } - function cantLoadInitialDatas(response) { - $scope.RemoteBackupLoading = true; + } + var url = "/websites/SaveBackupConfig"; + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.RemoteBackupLoading = true; + if (response.data.status === 1) { new PNotify({ - title: 'Operation Failed!', + title: 'Success!', + text: 'Successfully Saved!.', + type: 'success' + }); + location.reload(); + + + } else { + new PNotify({ + title: 'Error!', text: response.data.error_message, type: 'error' }); - - } } + function cantLoadInitialDatas(response) { + $scope.RemoteBackupLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + + } + } @@ -2062,7 +2118,7 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { FileRetention: FileRetention, Backfrequency: Backfrequency, ScheduleName: $scope.ScheduleName, - RemoteConfigID : $('#RemoteConfigID').html(), + RemoteConfigID: $('#RemoteConfigID').html(), BackupType: $scope.BackupType } var url = "/websites/SaveBackupSchedule"; @@ -2111,23 +2167,21 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { }; - - $scope.getupdateid = function (ID) { UpdatescheduleID = ID; } $scope.UpdateRemoteschedules = function () { - $scope.RemoteBackupLoading = false; - var Frequency = $scope.RemoteFrequency; - var fretention = $scope.RemoteFileretention; + $scope.RemoteBackupLoading = false; + var Frequency = $scope.RemoteFrequency; + var fretention = $scope.RemoteFileretention; - var data = { - ScheduleID:UpdatescheduleID, - Frequency: Frequency, - FileRetention: fretention - } - var url = "/websites/UpdateRemoteschedules"; + var data = { + ScheduleID: UpdatescheduleID, + Frequency: Frequency, + FileRetention: fretention + } + var url = "/websites/UpdateRemoteschedules"; var config = { @@ -2174,10 +2228,9 @@ app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) { $scope.RemoteBackupLoading = false; - var data = { - WpsiteID: $('#Wpsite').val(), - RemoteScheduleID : $('#RemoteScheduleID').html() + WpsiteID: $('#Wpsite').val(), + RemoteScheduleID: $('#RemoteScheduleID').html() } var url = "/websites/AddWPsiteforRemoteBackup"; diff --git a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html index 5b18dc1f3..d0c4c790c 100644 --- a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html +++ b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html @@ -30,6 +30,7 @@ @@ -68,8 +69,45 @@ -
    - S3 BAckups + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    @@ -93,30 +131,31 @@ Backup Type HostName - Path + Path / Key Name Action - + {% for sub in backupconfigs %} - - {{ sub.Type }} - {{ sub.HostName }} - {{ sub.Path }} - - + {{ sub.Type }} + {{ sub.HostName }} + {{ sub.Path }} + + + - Schedule Backups - - + type="button" class="btn btn-border btn-alt border-green btn-link font-green"> + Schedule Backups + + {% endfor %} @@ -124,7 +163,6 @@
    - diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index 928e471c4..ec7b08b9e 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -222,12 +222,30 @@ class WebsiteManager: Data['backupconfigs'] =[] for i in allcon: configr = json.loads(i.config) - Data['backupconfigs'].append({ - 'id':i.pk, - 'Type': i.configtype, - 'HostName': configr['Hostname'], - 'Path': configr['Path'] - }) + if i.configtype == "SFTP": + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': configr['Hostname'], + 'Path': configr['Path'] + }) + elif i.configtype == "S3": + Provider = configr['Provider'] + if Provider == "Backblaze": + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': Provider, + 'Path': configr['S3keyname'] + }) + else: + Data['backupconfigs'].append({ + 'id': i.pk, + 'Type': i.configtype, + 'HostName': Provider, + 'Path': configr['S3keyname'] + }) + proc = httpProc(request, 'websiteFunctions/RemoteBackupConfig.html', Data, 'createWebsite') return proc.render() @@ -1153,8 +1171,37 @@ class WebsiteManager: "Password": Passwd, "Path": path } - mkobj = RemoteBackupConfig(owner=admin, configtype=ConfigType, config=json.dumps(config)) - mkobj.save() + elif ConfigType == "S3": + Provider = data['Provider'] + if Provider == "Backblaze": + S3keyname = data['S3keyname'] + SecertKey = data['SecertKey'] + AccessKey = data['AccessKey'] + EndUrl = data['EndUrl'] + config = { + "Provider": Provider, + "S3keyname": S3keyname, + "SecertKey": SecertKey, + "AccessKey": AccessKey, + "EndUrl": EndUrl + + } + else: + S3keyname = data['S3keyname'] + SecertKey = data['SecertKey'] + AccessKey = data['AccessKey'] + config = { + "Provider": Provider, + "S3keyname": S3keyname, + "SecertKey": SecertKey, + "AccessKey": AccessKey, + + } + + + + mkobj = RemoteBackupConfig(owner=admin, configtype=ConfigType, config=json.dumps(config)) + mkobj.save() time.sleep(1) From 8f4ebed722fea87ada49e5e1674ac7ece09a52b3 Mon Sep 17 00:00:00 2001 From: Hassan Hashmi <75794688+habbi-hb@users.noreply.github.com> Date: Wed, 29 Jun 2022 17:52:35 +0500 Subject: [PATCH 22/30] s3uploaddone --- plogical/IncScheduler.py | 414 +++++++++++++----- plogical/applicationInstaller.py | 8 +- plogical/test.py | 9 + .../websiteFunctions/RemoteBackupConfig.html | 2 +- 4 files changed, 321 insertions(+), 112 deletions(-) diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index 40e0ca245..ede25b666 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -1,9 +1,11 @@ #!/usr/local/CyberCP/bin/python import os.path import sys + sys.path.append('/usr/local/CyberCP') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") import django + django.setup() from IncBackups.IncBackupsControl import IncJobs from IncBackups.models import BackupJob @@ -22,6 +24,7 @@ import requests import socket from websiteFunctions.models import NormalBackupJobs, NormalBackupJobLogs from boto3.s3.transfer import TransferConfig + try: from s3Backups.models import BackupPlan, BackupLogs import boto3 @@ -63,7 +66,7 @@ class IncScheduler(multi.Thread): tempPath = "/home/cyberpanel/" + str(randint(1000, 9999)) for job in BackupJob.objects.all(): logging.statusWriter(IncScheduler.logPath, 'Job Description:\n\n Destination: %s, Frequency: %s.\n ' % ( - job.destination, job.frequency), 1) + job.destination, job.frequency), 1) if job.frequency == type: for web in job.jobsites_set.all(): logging.statusWriter(IncScheduler.logPath, 'Backing up %s.' % (web.website), 1) @@ -129,7 +132,7 @@ class IncScheduler(multi.Thread): web = Websites.objects.get(domain=website) message = '[%s Cron] Checking if %s has any pending commits on %s.' % ( - type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) + type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) finalText = '%s\n' % (message) GitLogs(owner=web, type='INFO', message=message).save() @@ -148,7 +151,7 @@ class IncScheduler(multi.Thread): data['domain'] = gitConf['domain'] data['folder'] = gitConf['folder'] data['commitMessage'] = 'Auto commit by CyberPanel %s cron on %s' % ( - type, time.strftime('%m-%d-%Y_%H-%M-%S')) + type, time.strftime('%m-%d-%Y_%H-%M-%S')) if gitConf['autoCommit'] == type: @@ -182,7 +185,7 @@ class IncScheduler(multi.Thread): finalText = '%s\n%s' % (finalText, message) message = '[%s Cron] Finished checking for %s on %s.' % ( - type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) + type, website, time.strftime("%m.%d.%Y_%H-%M-%S")) finalText = '%s\n%s' % (finalText, message) logging.SendEmail(web.adminEmail, web.adminEmail, finalText, 'Git report for %s.' % (web.domain)) GitLogs(owner=web, type='INFO', message=message).save() @@ -333,7 +336,7 @@ class IncScheduler(multi.Thread): if retValues[0] == 0: GDriveJobLogs(owner=items, status=backupSchedule.ERROR, message='[ERROR] Backup failed for %s, error: %s moving on..' % ( - website.domain, retValues[1])).save() + website.domain, retValues[1])).save() continue completeFileToSend = retValues[1] + ".tar.gz" @@ -378,12 +381,9 @@ class IncScheduler(multi.Thread): GDriveJobLogs(owner=items, status=backupSchedule.INFO, message='Job Completed').save() - print("job com[leted") - #logging.writeToFile('job completed') - - + # logging.writeToFile('job completed') url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission" data = { @@ -400,67 +400,67 @@ class IncScheduler(multi.Thread): page_token = None while True: - response = drive.files().list(q="name='%s-%s'" % (items.name,ipAddress), - spaces='drive', + response = drive.files().list(q="name='%s-%s'" % (items.name, ipAddress), + spaces='drive', fields='nextPageToken, files(id, name)', pageToken=page_token).execute() for file in response.get('files', []): # Process change - #print('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) - #logging.writeToFile('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) - mainfolder_id= file.get('id') + # print('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) + # logging.writeToFile('Fetch Main folder ID: %s (%s)' % (file.get('name'), file.get('id'))) + mainfolder_id = file.get('id') page_token = response.get('nextPageToken', None) if page_token is None: break - #print("new job started ") + # print("new job started ") try: page_token = None while True: - response = drive.files().list(q="'%s' in parents"%(mainfolder_id), - spaces='drive', - fields='nextPageToken, files(id, name, createdTime)', - pageToken=page_token).execute() + response = drive.files().list(q="'%s' in parents" % (mainfolder_id), + spaces='drive', + fields='nextPageToken, files(id, name, createdTime)', + pageToken=page_token).execute() for file in response.get('files', []): # Process change - #print('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'), file.get('createdTime'))) - #logging.writeToFile('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'),file.get('createdTime'))) + # print('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'), file.get('createdTime'))) + # logging.writeToFile('Fetch all folders in main folder: %s (%s) time:-%s' % (file.get('name'), file.get('id'),file.get('createdTime'))) ab = file.get('createdTime')[:10] filename = file.get('name') fileDeleteID = file.get('id') - timestamp = time.mktime(datetime.datetime.strptime(ab,"%Y-%m-%d").timetuple()) + timestamp = time.mktime(datetime.datetime.strptime(ab, "%Y-%m-%d").timetuple()) CUrrenttimestamp = time.time() timerrtention = gDriveData['FileRetentiontime'] - if(timerrtention == '1d'): + if (timerrtention == '1d'): new = CUrrenttimestamp - float(86400) - if(new>=timestamp): - resp=drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) - elif(timerrtention == '1w'): + if (new >= timestamp): + resp = drive.files().delete(fileId=fileDeleteID).execute() + logging.writeToFile('Delete file %s ' % filename) + elif (timerrtention == '1w'): new = CUrrenttimestamp - float(604800) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) elif (timerrtention == '1m'): new = CUrrenttimestamp - float(2592000) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) elif (timerrtention == '6m'): new = CUrrenttimestamp - float(15552000) if (new >= timestamp): resp = drive.files().delete(fileId=fileDeleteID).execute() - logging.writeToFile('Delete file %s '%filename) + logging.writeToFile('Delete file %s ' % filename) page_token = response.get('nextPageToken', None) if page_token is None: break - # logging.writeToFile('Createtime list - %s'%Createtime) + # logging.writeToFile('Createtime list - %s'%Createtime) except BaseException as msg: - print('An error occurred fetch child: %s' % msg) - logging.writeToFile('An error occurred fetch child: %s' % msg) + print('An error occurred fetch child: %s' % msg) + logging.writeToFile('An error occurred fetch child: %s' % msg) except BaseException as msg: - logging.writeToFile('job not completed [ERROR:]..%s'%msg) + logging.writeToFile('job not completed [ERROR:]..%s' % msg) except BaseException as msg: GDriveJobLogs(owner=items, status=backupSchedule.ERROR, @@ -523,7 +523,7 @@ class IncScheduler(multi.Thread): NormalBackupJobLogs.objects.filter(owner=backupjob).delete() NormalBackupJobLogs(owner=backupjob, status=backupSchedule.INFO, message='Starting %s backup on %s..' % ( - type, time.strftime("%m.%d.%Y_%H-%M-%S"))).save() + type, time.strftime("%m.%d.%Y_%H-%M-%S"))).save() if oldJobContinue: NormalBackupJobLogs(owner=backupjob, status=backupSchedule.INFO, @@ -886,8 +886,7 @@ Automatic backup failed for %s on %s. emailPath = '/home/vmail/%s/%s' % (website.domain, email.email.split('@')[0]) email.DiskUsage = virtualHostUtilities.getDiskUsageofPath(emailPath) email.save() - print('Disk Usage of %s is %s' % (email.email,email.DiskUsage)) - + print('Disk Usage of %s is %s' % (email.email, email.DiskUsage)) config['DiskUsage'], config['DiskUsagePercentage'] = virtualHostUtilities.getDiskUsage( "/home/" + website.domain, website.package.diskSpace) @@ -947,14 +946,14 @@ Automatic backup failed for %s on %s. if config['pluginUpdates'] == 'Enabled': command = 'wp plugin update --all --minor --allow-root --path=/home/%s/public_html' % ( - config['domainName']) + config['domainName']) ProcessUtilities.executioner(command) ### Themes, for plugins we will do minor updates only. if config['themeUpdates'] == 'Enabled': command = 'wp theme update --all --minor --allow-root --path=/home/%s/public_html' % ( - config['domainName']) + config['domainName']) ProcessUtilities.executioner(command) except BaseException as msg: @@ -970,7 +969,7 @@ Automatic backup failed for %s on %s. from plogical.applicationInstaller import ApplicationInstaller for config in RemoteBackupSchedule.objects.all(): try: - configbakup=json.loads(config.config) + configbakup = json.loads(config.config) backuptype = configbakup['BackupType'] if backuptype == 'Only DataBase': Backuptype = "3" @@ -983,120 +982,225 @@ Automatic backup failed for %s on %s. try: allRemoteBackupsiteobj = RemoteBackupsites.objects.filter(owner=config.pk) for i in allRemoteBackupsiteobj: - backupsiteID=i.WPsites - wpsite=WPSites.objects.get(pk=backupsiteID) - AdminID=wpsite.owner.admin_id + backupsiteID = i.WPsites + wpsite = WPSites.objects.get(pk=backupsiteID) + AdminID = wpsite.owner.admin_id Admin = Administrator.objects.get(pk=AdminID) - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) Lastrun = config.lastrun Currenttime = float(time.time()) if config.timeintervel == "30 Minutes": al = float(Currenttime) - float(1800) - if float(al) >= float(Lastrun): - # if 1 == 1: + # if float(al) >= float(Lastrun): + if 1 == 1: + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Hour": al = float(Currenttime) - float(3600) if float(al) >= float(Lastrun): + # if 1 == 1: + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "6 Hours": al = float(Currenttime) - float(21600) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "12 Hours": al = float(Currenttime) - float(43200) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Day": al = float(Currenttime) - float(86400) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "3 Days": al = float(Currenttime) - float(259200) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() elif config.timeintervel == "1 Week": al = float(Currenttime) - float(604800) if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg = background.WPCreateBackup() + status, msg, backupID = background.WPCreateBackup() if status == 1: filename = msg - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() except BaseException as msg: - print("Error in Sites:%s"%str(msg)) + print("Error in Sites:%s" % str(msg)) continue except BaseException as msg: - print("Error: [RemoteBackup]: %s"%str(msg)) + print("Error: [RemoteBackup]: %s" % str(msg)) logging.writeToFile('%s. [RemoteBackup]' % (str(msg))) - @staticmethod def SendTORemote(FileName, RemoteBackupID): import pysftp @@ -1118,7 +1222,6 @@ Automatic backup failed for %s on %s. with pysftp.Connection(HostName, username=Username, password=Password, cnopts=cnopts) as sftp: print("Connection succesfully stablished ... ") - try: with sftp.cd(Path): sftp.put(FileName) @@ -1132,6 +1235,104 @@ Automatic backup failed for %s on %s. except BaseException as msg: logging.writeToFile('%s. [SendTORemote]' % (str(msg))) + @staticmethod + def SendToS3Cloud(FileName, RemoteBackupCofigID, backupID): + import boto3 + import json + import time + from websiteFunctions.models import RemoteBackupConfig, WPSitesBackup + import plogical.randomPassword as randomPassword + try: + print("UPloading to S3") + Backupobj = WPSitesBackup.objects.get(pk=backupID) + backupConfig = json.loads(Backupobj.config) + websitedomain = backupConfig['WebDomain'] + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupCofigID) + config = json.loads(RemoteBackupOBJ.config) + provider = config['Provider'] + if provider == "Backblaze": + EndURl = config['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + + AccessKey = config['AccessKey'] + SecertKey = config['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + ############Creating Bucket + BucketName = randomPassword.generate_pass().lower() + print("BucketName...%s"%BucketName) + + try: + client.create_bucket(Bucket=BucketName) + except BaseException as msg: + print("Error in Creating bucket...: %s" % str(msg)) + logging.writeToFile("Create bucket error---%s:" % str(msg)) + + #####Uploading File + + uploadfilename = 'backup-' + websitedomain + "-" + time.strftime("%m.%d.%Y_%H-%M-%S") + print("uploadfilename....%s"%uploadfilename) + + try: + res = client.upload_file(Filename=FileName, Bucket=BucketName, Key=uploadfilename) + print("res of Uploading...: %s" % res) + + except BaseException as msg: + print("Error in Uploading...: %s" % msg) + + ###################### version id, this only applied to blackbaze + try: + + s3 = boto3.resource( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + ) + + bucket = BucketName + key = uploadfilename + versions = s3.Bucket(bucket).object_versions.filter(Prefix=key) + data = {} + + for version in versions: + obj = version.get() + print("VersionId---%s:" % obj.get('VersionId')) + data['backupVersionId'] = obj.get('VersionId') + + ab = os.path.getsize(FileName) + filesize = float(ab) / 1024.0 + + backupConfig['uploadfilename'] = uploadfilename + backupConfig['backupVersionId'] = data['backupVersionId'] + backupConfig['BucketName'] = BucketName + backupConfig['Uplaodingfilesize'] = filesize + Backupobj.config = json.dumps(backupConfig) + Backupobj.save() + + except BaseException as msg: + print("Version ID Error: %s"%str(msg)) + + + + + + + except BaseException as msg: + print('%s. [SendToS3Cloud]' % (str(msg))) + logging.writeToFile('%s. [SendToS3Cloud]' % (str(msg))) def main(): @@ -1152,7 +1353,6 @@ def main(): ib = IncScheduler('startBackup', {'freq': args.function}) ib.start() - ### IncScheduler.startBackup(args.function) @@ -1167,4 +1367,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/plogical/applicationInstaller.py b/plogical/applicationInstaller.py index 87349b100..94b2ca47e 100755 --- a/plogical/applicationInstaller.py +++ b/plogical/applicationInstaller.py @@ -2444,7 +2444,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id #### Only Website Data === 2 elif Backuptype == "2": @@ -2576,7 +2576,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id #### Only Database === 3 else: @@ -2705,7 +2705,7 @@ $parameters = array( raise BaseException(stdout) logging.statusWriter(self.tempStatusPath, 'Completed.[200]') - return 1, f"/home/backup/{config['name']}.tar.gz" + return 1, f"/home/backup/{config['name']}.tar.gz", backupobj.id except BaseException as msg: logging.writeToFile("Error WPCreateBackup ....... %s" % str(msg)) @@ -2715,7 +2715,7 @@ $parameters = array( except: pass logging.statusWriter(self.tempStatusPath, f'{str(msg)}. [404]') - return 0, str(msg) + return 0, str(msg), None def RestoreWPbackupNow(self): try: diff --git a/plogical/test.py b/plogical/test.py index e69de29bb..93258abd8 100644 --- a/plogical/test.py +++ b/plogical/test.py @@ -0,0 +1,9 @@ +config= { + "name": "habi", + "dev": "python" +} + +print(config) +config['klm'] ="tls" + +print(config) \ No newline at end of file diff --git a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html index d0c4c790c..127c19ffd 100644 --- a/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html +++ b/websiteFunctions/templates/websiteFunctions/RemoteBackupConfig.html @@ -105,7 +105,7 @@
    -
    From f474897030cf680baa65eb6d9003b70c1a93264e Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Wed, 29 Jun 2022 20:12:06 +0500 Subject: [PATCH 23/30] add some changes in mailscanner --- CPScripts/mailscannerinstaller.sh | 49 +++++++++++++++++++++-------- CPScripts/mailscanneruninstaller.sh | 48 +++++++++++++++++++++------- 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/CPScripts/mailscannerinstaller.sh b/CPScripts/mailscannerinstaller.sh index 58912cf95..9175cd102 100644 --- a/CPScripts/mailscannerinstaller.sh +++ b/CPScripts/mailscannerinstaller.sh @@ -44,14 +44,38 @@ else exit fi -if [ -f /etc/os-release ]; then - OS=$(head -1 /etc/os-release) - UBUNTUVERSION=$(sed '6q;d' /etc/os-release) - CENTOSVERSION=$(sed '5q;d' /etc/os-release) - CLNVERSION=$(sed '3q;d' /etc/os-release) +### OS Detection +Server_OS="" +Server_OS_Version="" +if grep -q -E "CentOS Linux 7|CentOS Linux 8" /etc/os-release ; then + Server_OS="CentOS" +elif grep -q "AlmaLinux-8" /etc/os-release ; then + Server_OS="AlmaLinux" +elif grep -q -E "CloudLinux 7|CloudLinux 8" /etc/os-release ; then + Server_OS="CloudLinux" +elif grep -q -E "Rocky Linux" /etc/os-release ; then + Server_OS="RockyLinux" +elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10|Ubuntu 22.04" /etc/os-release ; then + Server_OS="Ubuntu" +elif grep -q -E "openEuler 20.03|openEuler 22.03" /etc/os-release ; then + Server_OS="openEuler" +else + echo -e "Unable to detect your system..." + echo -e "\nCyberPanel is supported on x86_64 based Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, Ubuntu 22.04, CentOS 7, CentOS 8, AlmaLinux 8, RockyLinux 8, CloudLinux 7, CloudLinux 8, openEuler 20.03, openEuler 22.03...\n" + exit fi -if [ "$CENTOSVERSION" = "VERSION_ID=\"7\"" ]; then +Server_OS_Version=$(grep VERSION_ID /etc/os-release | awk -F[=,] '{print $2}' | tr -d \" | head -c2 | tr -d . ) + +echo -e "System: $Server_OS $Server_OS_Version detected...\n" + +if [[ $Server_OS = "CloudLinux" ]] || [[ "$Server_OS" = "AlmaLinux" ]] || [[ "$Server_OS" = "RockyLinux" ]] ; then + Server_OS="CentOS" + #CloudLinux gives version id like 7.8, 7.9, so cut it to show first number only + #treat CloudLinux, Rocky and Alma as CentOS +fi + +if [[ $Server_OS = "CentOS" ]] && [[ "$Server_OS_Version" = "7" ]] ; then setenforce 0 yum install -y perl yum-utils perl-CPAN @@ -68,7 +92,7 @@ if [ "$CENTOSVERSION" = "VERSION_ID=\"7\"" ]; then freshclam -v -elif [ "$CENTOSVERSION" = "VERSION_ID=\"8\"" ]; then +elif [[ $Server_OS = "CentOS" ]] && [[ "$Server_OS_Version" = "8" ]] ; then setenforce 0 yum install -y perl yum-utils perl-CPAN @@ -107,7 +131,7 @@ elif [ "$CLNVERSION" = "ID=\"cloudlinux\"" ]; then freshclam -v -elif [ "$OS" = "NAME=\"Ubuntu\"" ]; then +elif [[ $Server_OS = "Ubuntu" ]]; then apt-get install -y libmysqlclient-dev @@ -133,8 +157,8 @@ echo "/^Received:/ HOLD" >>/etc/postfix/header_checks systemctl restart postfix -if [ "$OS" = "NAME=\"Ubuntu\"" ]; then - wget https://github.com/MailScanner/v5/releases/download/5.3.3-1/MailScanner-5.3.3-1.noarch.deb +if [[ $Server_OS = "Ubuntu" ]]; then + wget https://github.com/MailScanner/v5/releases/download/5.4.4-1/MailScanner-5.4.4-1.noarch.deb dpkg -i *.noarch.deb mkdir /var/run/MailScanner @@ -144,10 +168,9 @@ if [ "$OS" = "NAME=\"Ubuntu\"" ]; then chown -R postfix:postfix /var/lock/subsys/MailScanner chown -R postfix:postfix /var/spool/MailScanner -elif [ "$OS" = "NAME=\"CentOS Linux\"" ]; then - wget https://github.com/MailScanner/v5/releases/download/5.3.3-1/MailScanner-5.3.3-1.rhel.noarch.rpm +elif [[ $Server_OS = "CentOS" ]]; then + wget https://github.com/MailScanner/v5/releases/download/5.4.4-1/MailScanner-5.4.4-1.rhel.noarch.rpm rpm -Uvh *.rhel.noarch.rpm - elif [ "$OS" = "NAME=\"CloudLinux\"" ]; then wget https://github.com/MailScanner/v5/releases/download/5.3.3-1/MailScanner-5.3.3-1.rhel.noarch.rpm rpm -Uvh *.rhel.noarch.rpm diff --git a/CPScripts/mailscanneruninstaller.sh b/CPScripts/mailscanneruninstaller.sh index 8fc920677..2061fe9df 100644 --- a/CPScripts/mailscanneruninstaller.sh +++ b/CPScripts/mailscanneruninstaller.sh @@ -1,26 +1,52 @@ #!/bin/bash ## Uninstall Mailscanner CyberPanel -if [ -f /etc/os-release ]; then - OS=$(head -1 /etc/os-release) - UBUNTUVERSION=$(sed '6q;d' /etc/os-release) - CENTOSVERSION=$(sed '5q;d' /etc/os-release) - CLNVERSION=$(sed '3q;d' /etc/os-release) +### OS Detection +Server_OS="" +Server_OS_Version="" +if grep -q -E "CentOS Linux 7|CentOS Linux 8" /etc/os-release ; then + Server_OS="CentOS" +elif grep -q "AlmaLinux-8" /etc/os-release ; then + Server_OS="AlmaLinux" +elif grep -q -E "CloudLinux 7|CloudLinux 8" /etc/os-release ; then + Server_OS="CloudLinux" +elif grep -q -E "Rocky Linux" /etc/os-release ; then + Server_OS="RockyLinux" +elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10|Ubuntu 22.04" /etc/os-release ; then + Server_OS="Ubuntu" +elif grep -q -E "openEuler 20.03|openEuler 22.03" /etc/os-release ; then + Server_OS="openEuler" +else + echo -e "Unable to detect your system..." + echo -e "\nCyberPanel is supported on x86_64 based Ubuntu 18.04, Ubuntu 20.04, Ubuntu 20.10, Ubuntu 22.04, CentOS 7, CentOS 8, AlmaLinux 8, RockyLinux 8, CloudLinux 7, CloudLinux 8, openEuler 20.03, openEuler 22.03...\n" + exit +fi + +Server_OS_Version=$(grep VERSION_ID /etc/os-release | awk -F[=,] '{print $2}' | tr -d \" | head -c2 | tr -d . ) + +echo -e "System: $Server_OS $Server_OS_Version detected...\n" + +if [[ $Server_OS = "CloudLinux" ]] || [[ "$Server_OS" = "AlmaLinux" ]] || [[ "$Server_OS" = "RockyLinux" ]] ; then + Server_OS="CentOS" + #CloudLinux gives version id like 7.8, 7.9, so cut it to show first number only + #treat CloudLinux, Rocky and Alma as CentOS fi systemctl stop mailscanner -if [ "$OS" = "NAME=\"Ubuntu\"" ]; then - apt purge -y mailscanner -elif - [ "$OS" = "NAME=\"CentOS Linux\"" ] -then +if [[ $Server_OS = "CentOS" ]] && [[ "$Server_OS_Version" = "7" ]] ; then + yum remove -y MailScanner -elif [ "$OS" = "NAME=\"CloudLinux\"" ]; then +elif [[ $Server_OS = "CentOS" ]] && [[ "$Server_OS_Version" = "8" ]] ; then + yum remove -y MailScanner +elif [[ $Server_OS = "Ubuntu" ]]; then + + apt purge -y mailscanner + fi sed -i 's/\/^Received:\/ HOLD/\/^Received:\/ IGNORE/g' /etc/postfix/header_checks From 17ebede40f4d86ae63410e7bf538da0d9474f097 Mon Sep 17 00:00:00 2001 From: Hassan Hashmi <75794688+habbi-hb@users.noreply.github.com> Date: Fri, 1 Jul 2022 11:16:20 +0500 Subject: [PATCH 24/30] s3backupuplaoddone --- plogical/IncScheduler.py | 49 +++++++++++++++++++++++-------------- websiteFunctions/website.py | 42 ++++++++++++++++++++++++++++--- 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index ede25b666..9dd657996 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -991,8 +991,8 @@ Automatic backup failed for %s on %s. Currenttime = float(time.time()) if config.timeintervel == "30 Minutes": al = float(Currenttime) - float(1800) - # if float(al) >= float(Lastrun): - if 1 == 1: + if float(al) >= float(Lastrun): + #if 1 == 1: extraArgs = {} extraArgs['adminID'] = Admin.pk extraArgs['WPid'] = wpsite.pk @@ -1013,7 +1013,7 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1043,7 +1043,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1072,7 +1073,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1101,7 +1103,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1130,7 +1133,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1159,7 +1163,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1188,7 +1193,8 @@ Automatic backup failed for %s on %s. obj.lastrun = time.time() obj.save() elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID) + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) command = f"rm -r {filename}" ProcessUtilities.executioner(command) obj = RemoteBackupSchedule.objects.get(pk=config.id) @@ -1236,11 +1242,11 @@ Automatic backup failed for %s on %s. logging.writeToFile('%s. [SendTORemote]' % (str(msg))) @staticmethod - def SendToS3Cloud(FileName, RemoteBackupCofigID, backupID): + def SendToS3Cloud(FileName, RemoteBackupCofigID, backupID, scheduleID): import boto3 import json import time - from websiteFunctions.models import RemoteBackupConfig, WPSitesBackup + from websiteFunctions.models import RemoteBackupConfig, WPSitesBackup, RemoteBackupSchedule import plogical.randomPassword as randomPassword try: print("UPloading to S3") @@ -1270,16 +1276,21 @@ Automatic backup failed for %s on %s. verify=False ) - ############Creating Bucket - BucketName = randomPassword.generate_pass().lower() - print("BucketName...%s"%BucketName) + # ############Creating Bucket + # BucketName = randomPassword.generate_pass().lower() + # print("BucketName...%s"%BucketName) + # + # try: + # client.create_bucket(Bucket=BucketName) + # except BaseException as msg: + # print("Error in Creating bucket...: %s" % str(msg)) + # logging.writeToFile("Create bucket error---%s:" % str(msg)) - try: - client.create_bucket(Bucket=BucketName) - except BaseException as msg: - print("Error in Creating bucket...: %s" % str(msg)) - logging.writeToFile("Create bucket error---%s:" % str(msg)) + ####getting Bucket from backup schedule + Scheduleobj = RemoteBackupSchedule.objects.get(pk=scheduleID) + Scheduleconfig = json.loads(Scheduleobj.config) + BucketName = Scheduleconfig['BucketName'] #####Uploading File uploadfilename = 'backup-' + websitedomain + "-" + time.strftime("%m.%d.%Y_%H-%M-%S") diff --git a/websiteFunctions/website.py b/websiteFunctions/website.py index ec7b08b9e..ac3951d40 100755 --- a/websiteFunctions/website.py +++ b/websiteFunctions/website.py @@ -25,6 +25,7 @@ from plogical.mailUtilities import mailUtilities from random import randint import time import re +import boto3 from plogical.childDomain import ChildDomainManager from math import ceil from plogical.alias import AliasManager @@ -1226,11 +1227,46 @@ class WebsiteManager: ScheduleName = data['ScheduleName'] RemoteConfigID = data['RemoteConfigID'] BackupType = data['BackupType'] - config = { - 'BackupType': BackupType - } + RemoteBackupConfigobj = RemoteBackupConfig.objects.get(pk=RemoteConfigID) + Rconfig = json.loads(RemoteBackupConfigobj.config) + provider = Rconfig['Provider'] + if provider == "Backblaze": + EndURl = Rconfig['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + + AccessKey = Rconfig['AccessKey'] + SecertKey = Rconfig['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + ############Creating Bucket + BucketName = randomPassword.generate_pass().lower() + + try: + client.create_bucket(Bucket=BucketName) + except BaseException as msg: + logging.CyberCPLogFileWriter.writeToFile("Creating Bucket Error: %s"%str(msg)) + data_ret = {'status': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + config = { + 'BackupType': BackupType, + 'BucketName': BucketName + } svobj = RemoteBackupSchedule( RemoteBackupConfig=RemoteBackupConfigobj, Name=ScheduleName, timeintervel=Backfrequency, fileretention=FileRetention, config=json.dumps(config), From 76f88b3a1dfafc56a54754f234f4428e4e47211a Mon Sep 17 00:00:00 2001 From: Hassan Hashmi <75794688+habbi-hb@users.noreply.github.com> Date: Fri, 1 Jul 2022 17:38:28 +0500 Subject: [PATCH 25/30] s3backuprestoredone --- plogical/applicationInstaller.py | 1091 +++++++++++++++++++++++++++++- 1 file changed, 1088 insertions(+), 3 deletions(-) diff --git a/plogical/applicationInstaller.py b/plogical/applicationInstaller.py index 94b2ca47e..6ea2f6e88 100755 --- a/plogical/applicationInstaller.py +++ b/plogical/applicationInstaller.py @@ -2725,7 +2725,7 @@ $parameters = array( from packages.models import Package import pysftp import pysftp as sftp - + import boto3 if os.path.exists(ProcessUtilities.debugPath): logging.writeToFile("Error Restore WP backup Now ....... start:%s"% self.extraArgs['Domain']) @@ -2754,12 +2754,12 @@ $parameters = array( #####Check Backup Type BackupType = config['Backuptype'] BackupDestination = config['BackupDestination'] - SFTP_ID = config['SFTP_ID'] + RemoteBackupID = config['SFTP_ID'] #SFTPBackups if BackupDestination == 'SFTP': - RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=SFTP_ID) + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupID) RemoteBackupconf = json.loads(RemoteBackupOBJ.config) HostName = RemoteBackupconf['Hostname'] Username = RemoteBackupconf['Username'] @@ -3836,6 +3836,1091 @@ $parameters = array( installUtilities.reStartLiteSpeed() + ###S#Backups + elif BackupDestination == 'S3': + uploadfilename = config['uploadfilename'] + BucketName = config['BucketName'] + RemoteBackupOBJ = RemoteBackupConfig.objects.get(pk=RemoteBackupID) + RemoteBackupconf = json.loads(RemoteBackupOBJ.config) + provider = RemoteBackupconf['Provider'] + if provider == "Backblaze": + EndURl = RemoteBackupconf['EndUrl'] + elif provider == "Amazon": + EndURl = "https://s3.us-east-1.amazonaws.com" + elif provider == "Wasabi": + EndURl = "https://s3.wasabisys.com" + AccessKey = RemoteBackupconf['AccessKey'] + SecertKey = RemoteBackupconf['SecertKey'] + + session = boto3.session.Session() + + client = session.client( + 's3', + endpoint_url=EndURl, + aws_access_key_id=AccessKey, + aws_secret_access_key=SecertKey, + verify=False + ) + + FinalZipPath = "/home/cyberpanel/%s.tar.gz" % (uploadfilename) + try: + client.download_file(BucketName, uploadfilename, FinalZipPath) + except BaseException as msg: + logging.writeToFile("Error in downloadfile: ..%s"%str(msg)) + + command = "mv %s /home/backup" % FinalZipPath + ProcessUtilities.executioner(command) + + ##### CHeck if Backup type is Only Database + if BackupType == 'DataBase Backup': + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + newWPpath = wpsite.path + newurl = wpsite.FinalURL + + ## get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + #####Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbname = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + #####Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbuser = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') == -1: + Finaldbpasswd = stdout.rstrip("\n") + else: + raise BaseException(stdout) + + ### ##Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + #####First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippathdb = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % (self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippathdb) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() + ####Check if BAckup type is Only Webdata + elif BackupType == 'Website Backup': + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + webobj = Websites.objects.get(pk=wpsite.owner_id) + ag = WPSites.objects.filter(owner=webobj).count() + if ag > 0: + ###Website found --> Wpsite Found + finalurl = "%s%s" % (webobj.domain, oldurl[oldurl.find('/'):]) + try: + WPobj = WPSites.objects.get(FinalURL=finalurl, owner=webobj) + ###Website found --> WPsite Found --> Final URL Match + #### Do not create Ne site + ### get WPsite Database name and usr + VHuser = wpsite.owner.externalApp + PhpVersion = WPobj.owner.phpSelection + newWPpath = WPobj.path + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, finalurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + except: + ####Website found --> WPsite Found --> Final URL Not Match + ####Create new obj and call wordpressnew + Newurl = wpsite.FinalURL + WPpath = wpsite.path + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, WPpath, oldurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, WPpath, Newurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={WPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + elif (DomainName != "" and int(self.extraArgs['DesSiteID']) == -1): + DataToPass = {} + + DataToPass['title'] = config['WPtitle'] + DataToPass['domain'] = DomainName + DataToPass['WPVersion'] = "6.0" + DataToPass['adminUser'] = config['WebVHuser'] + DataToPass['Email'] = config['WebadminEmail'] + DataToPass['PasswordByPass'] = config['DatabaseUser'] + DataToPass['AutomaticUpdates'] = config['WPAutoUpdates'] + DataToPass['Plugins'] = config['WPPluginUpdates'] + DataToPass['Themes'] = config['WPThemeUpdates'] + DataToPass['websiteOwner'] = WebOwner + DataToPass['package'] = packegs + try: + oldpath = config['WPsitepath'] + abc = oldpath.split("/") + newpath = abc[4] + oldhome = "0" + except BaseException as msg: + oldhome = "1" + + if self.extraArgs['path'] == '': + newurl = DomainName + else: + newurl = "%s/%s" % (DomainName, self.extraArgs['path']) + + DataToPass['path'] = self.extraArgs['path'] + + DataToPass['home'] = self.extraArgs['home'] + + ab = WebsiteManager() + coreResult = ab.submitWorpressCreation(userID, DataToPass) + coreResult1 = json.loads((coreResult).content) + logging.writeToFile("WP Creating website result....%s" % coreResult1) + reutrntempath = coreResult1['tempStatusPath'] + while (1): + lastLine = open(reutrntempath, 'r').read() + logging.writeToFile("Error WP creating lastline ....... %s" % lastLine) + if lastLine.find('[200]') > -1: + break + elif lastLine.find('[404]') > -1: + logging.statusWriter(self.tempStatusPath, + 'Failed to Create WordPress: error: %s. [404]' % lastLine) + return 0 + else: + logging.statusWriter(self.tempStatusPath, 'Creating WordPress....,20') + time.sleep(2) + + logging.statusWriter(self.tempStatusPath, 'Restoring site ....,30') + NewWPsite = WPSites.objects.get(FinalURL=newurl) + VHuser = NewWPsite.owner.externalApp + PhpVersion = NewWPsite.owner.phpSelection + newWPpath = NewWPsite.path + + ###### Same code already used in Existing site + + ### get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {NewWPsite.owner.externalApp}:{NewWPsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,40') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Copying Data File...,60') + ###Copy backup content to newsite + if oldhome == "0": + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + else: + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/public_html/" % ( + self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() + + ####Check if backup type is Both web and DB + else: + ############## Existing site + if (DomainName == "" and int(self.extraArgs['DesSiteID']) != -1): + wpsite = WPSites.objects.get(pk=DesSiteID) + webobj = Websites.objects.get(pk=wpsite.owner_id) + ag = WPSites.objects.filter(owner=webobj).count() + if ag > 0: + ###Website found --> Wpsite Found + finalurl = "%s%s" % (webobj.domain, oldurl[oldurl.find('/'):]) + try: + WPobj = WPSites.objects.get(FinalURL=finalurl, owner=webobj) + ###Website found --> WPsite Found --> Final URL Match + #### Do not create Ne site + ### get WPsite Database name and usr + VHuser = wpsite.owner.externalApp + PhpVersion = WPobj.owner.phpSelection + newWPpath = WPobj.path + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % ( + self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, finalurl, finalurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + except: + ####Website found --> WPsite Found --> Final URL Not Match + ####Create new obj and call wordpressnew + Newurl = wpsite.FinalURL + WPpath = wpsite.path + VHuser = wpsite.owner.externalApp + PhpVersion = wpsite.owner.phpSelection + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, WPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {wpsite.owner.externalApp}:{wpsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,30') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % ( + VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % ( + self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,70') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, WPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, WPpath, oldurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, WPpath, Newurl, Newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={WPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + # ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + ############## New Site + elif (DomainName != "" and int(self.extraArgs['DesSiteID']) == -1): + ###############Create New WordPressSite First + # logging.writeToFile("New Website Domain ....... %s" % str(DomainName)) + # logging.writeToFile("New Website Domain path....... %s" % str(self.extraArgs['path'])) + DataToPass = {} + + DataToPass['title'] = config['WPtitle'] + DataToPass['domain'] = DomainName + DataToPass['WPVersion'] = "6.0" + DataToPass['adminUser'] = config['WebVHuser'] + DataToPass['Email'] = config['WebadminEmail'] + DataToPass['PasswordByPass'] = config['DatabaseUser'] + DataToPass['AutomaticUpdates'] = config['WPAutoUpdates'] + DataToPass['Plugins'] = config['WPPluginUpdates'] + DataToPass['Themes'] = config['WPThemeUpdates'] + DataToPass['websiteOwner'] = WebOwner + DataToPass['package'] = packegs + try: + oldpath = config['WPsitepath'] + abc = oldpath.split("/") + newpath = abc[4] + oldhome = "0" + except BaseException as msg: + oldhome = "1" + + if self.extraArgs['path'] == '': + newurl = DomainName + else: + newurl = "%s/%s" % (DomainName, self.extraArgs['path']) + + DataToPass['path'] = self.extraArgs['path'] + + DataToPass['home'] = self.extraArgs['home'] + + ab = WebsiteManager() + coreResult = ab.submitWorpressCreation(userID, DataToPass) + coreResult1 = json.loads((coreResult).content) + logging.writeToFile("WP Creating website result....%s" % coreResult1) + reutrntempath = coreResult1['tempStatusPath'] + while (1): + lastLine = open(reutrntempath, 'r').read() + logging.writeToFile("Error WP creating lastline ....... %s" % lastLine) + if lastLine.find('[200]') > -1: + break + elif lastLine.find('[404]') > -1: + logging.statusWriter(self.tempStatusPath, + 'Failed to Create WordPress: error: %s. [404]' % lastLine) + return 0 + else: + logging.statusWriter(self.tempStatusPath, 'Creating WordPress....,20') + time.sleep(2) + + logging.statusWriter(self.tempStatusPath, 'Restoring site ....,30') + logging.writeToFile("Create site url =%s" % newurl) + NewWPsite = WPSites.objects.get(FinalURL=newurl) + VHuser = NewWPsite.owner.externalApp + PhpVersion = NewWPsite.owner.phpSelection + newWPpath = NewWPsite.path + + ###### Same code already used in Existing site + + ### get WPsite Database name and usr + php = PHPManager.getPHPString(PhpVersion) + FinalPHPPath = '/usr/local/lsws/lsphp%s/bin/php' % (php) + + ######Get DBname + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbname = stdout.rstrip("\n") + + ######Get DBuser + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbuser = stdout.rstrip("\n") + + #####Get DBpsswd + command = 'sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_PASSWORD --skip-plugins --skip-themes --path=%s' % ( + VHuser, FinalPHPPath, newWPpath) + + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + else: + Finaldbpasswd = stdout.rstrip("\n") + + ### Create secure folder + + ACLManager.CreateSecureDir() + RandomPath = str(randint(1000, 9999)) + self.tempPath = '%s/%s' % ('/usr/local/CyberCP/tmp', RandomPath) + + command = f'mkdir -p {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = f'chown -R {NewWPsite.owner.externalApp}:{NewWPsite.owner.externalApp} {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Extracting Backup File...,40') + + ###First copy backup file to temp and then Unzip + command = "sudo -u %s cp -R /home/backup/%s* %s" % (VHuser, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + #### Make temp dir ab for unzip + command = "sudo -u %s mkdir %s/ab" % (VHuser, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s tar -xvf %s/%s.tar.gz -C %s/ab" % ( + VHuser, self.tempPath, BackUpFileName, self.tempPath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Copying Data File...,60') + ###Copy backup content to newsite + if oldhome == "0": + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/" % (self.tempPath, oldtemppath) + else: + unzippath = "%s/ab/usr/local/CyberCP/tmp/%s/public_html/public_html/" % ( + self.tempPath, oldtemppath) + + command = "sudo -u %s cp -R %s* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + command = "sudo -u %s cp -R %s.[^.]* %s" % (VHuser, unzippath, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if result == 0: + raise BaseException(stdout) + + # dump Mysql file in unzippath path + unzippath2 = "%s/ab/usr/local/CyberCP/tmp/%s/%s" % (self.tempPath, oldtemppath, DumpFileName) + command = "mysql -u root %s < %s" % (Finaldbname, unzippath2) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Restoreing Data Base...,80') + #####SetUp DataBase Settings + ##set DBName + command = "sudo -u %s %s /usr/bin/wp config set DB_NAME %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbname, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBuser + command = "sudo -u %s %s /usr/bin/wp config set DB_USER %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbuser, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ##set DBpasswd + command = "sudo -u %s %s /usr/bin/wp config set DB_PASSWORD %s --skip-plugins --skip-themes --path=%s" % ( + VHuser, FinalPHPPath, Finaldbpasswd, newWPpath) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + logging.statusWriter(self.tempStatusPath, 'Replacing URLs...,90') + ########Now Replace URL's + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --path=%s "%s" "%s"' % ( + VHuser, newWPpath, oldurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = 'sudo -u %s /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp search-replace --skip-plugins --skip-themes --allow-root --path=%s "https://www.%s" "http://%s"' % ( + VHuser, newWPpath, newurl, newurl) + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + command = f'sudo -u {VHuser} /usr/local/lsws/lsphp74/bin/php -d error_reporting=0 /usr/bin/wp litespeed-purge all --path={newWPpath}' + ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + ##Remove temppath + command = f'rm -rf {self.tempPath}' + result, stdout = ProcessUtilities.outputExecutioner(command, None, None, None, 1) + + if stdout.find('Error:') > -1: + raise BaseException(stdout) + + ###Restart Server + + from plogical.installUtilities import installUtilities + installUtilities.reStartLiteSpeed() #####Local BAckups else: From 9c0784650d432494cd9daffd1b87fa6be22d4750 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Mon, 4 Jul 2022 11:56:04 +0500 Subject: [PATCH 26/30] resolve https://github.com/usmannasir/cyberpanel/issues/910 --- loginSystem/templates/loginSystem/login.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loginSystem/templates/loginSystem/login.html b/loginSystem/templates/loginSystem/login.html index 2ae119ea6..2b1ffd541 100755 --- a/loginSystem/templates/loginSystem/login.html +++ b/loginSystem/templates/loginSystem/login.html @@ -259,7 +259,7 @@
    - ...
    From 8bc41d0d58a2914b3d01178f6169c0c8aefc2ff3 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Mon, 4 Jul 2022 19:58:58 +0500 Subject: [PATCH 27/30] some bug fixes in wp remote backups; ; --- install/install.py | 9 +++++++++ plogical/IncScheduler.py | 18 +++++++++++------- plogical/upgrade.py | 16 ++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/install/install.py b/install/install.py index bf69af661..bd308a778 100755 --- a/install/install.py +++ b/install/install.py @@ -1742,6 +1742,15 @@ autocreate_system_folders = On 7 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null 0 0 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Daily 0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Weekly + +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Week' + */3 * * * * if ! find /home/*/public_html/ -maxdepth 2 -type f -newer /usr/local/lsws/cgid -name '.htaccess' -exec false {} +; then /usr/local/lsws/bin/lswsctrl restart; fi """ diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index 9dd657996..a92e421a9 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -960,7 +960,7 @@ Automatic backup failed for %s on %s. logging.writeToFile('%s. [WPUpdates:767]' % (str(msg))) @staticmethod - def RemoteBackup(): + def RemoteBackup(function): try: from websiteFunctions.models import RemoteBackupSchedule, RemoteBackupsites, WPSites from loginSystem.models import Administrator @@ -1352,6 +1352,10 @@ def main(): parser.add_argument('--planName', help='Plan name for AWS!') args = parser.parse_args() + if args.function == '30 Minutes' or args.function == '30 Minutes' or args.function == '1 Hour' or args.function == '6 Hours' or args.function == '12 Hours' or args.function == '1 Day' or args.function == '3 Days' or args.function == '1 Week': + IncScheduler.RemoteBackup(args.function) + return 0 + if args.function == 'forceRunAWSBackup': IncScheduler.forceRunAWSBackup(args.planName) return 0 @@ -1367,12 +1371,12 @@ def main(): ### IncScheduler.startBackup(args.function) - IncScheduler.RemoteBackup() - # IncScheduler.runGoogleDriveBackups(args.function) - # IncScheduler.git(args.function) - # IncScheduler.checkDiskUsage() - # IncScheduler.startNormalBackups(args.function) - # IncScheduler.runAWSBackups(args.function) + + IncScheduler.runGoogleDriveBackups(args.function) + IncScheduler.git(args.function) + IncScheduler.checkDiskUsage() + IncScheduler.startNormalBackups(args.function) + IncScheduler.runAWSBackups(args.function) ib.join() diff --git a/plogical/upgrade.py b/plogical/upgrade.py index 5212b4712..5839c1e1c 100755 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -2566,6 +2566,22 @@ vmail writeToFile = open(cronPath, 'a') writeToFile.write(content) writeToFile.close() + + if data.find("IncScheduler.py '30 Minutes'") == -1: + content = """ +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' +0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Week' +""" + writeToFile = open(cronPath, 'a') + writeToFile.write(content) + writeToFile.close() + + else: content = """ 0 * * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/findBWUsage.py >/dev/null 2>&1 From 1657bbcb103d1e2b836b9aa4b47a50caa3f5b114 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Mon, 4 Jul 2022 23:09:50 +0500 Subject: [PATCH 28/30] some bug fixes in wp remote backups; ; --- plogical/IncScheduler.py | 421 ++++++++++++++++++++------------------- 1 file changed, 218 insertions(+), 203 deletions(-) diff --git a/plogical/IncScheduler.py b/plogical/IncScheduler.py index a92e421a9..1ed92fdc1 100644 --- a/plogical/IncScheduler.py +++ b/plogical/IncScheduler.py @@ -989,217 +989,232 @@ Automatic backup failed for %s on %s. Lastrun = config.lastrun Currenttime = float(time.time()) - if config.timeintervel == "30 Minutes": - al = float(Currenttime) - float(1800) - if float(al) >= float(Lastrun): + + if config.timeintervel == function: + #al = float(Currenttime) - float(1800) + #if float(al) >= float(Lastrun): #if 1 == 1: - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype - extraArgs['SFTPID'] = config.RemoteBackupConfig_id - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "1 Hour": - al = float(Currenttime) - float(3600) - if float(al) >= float(Lastrun): - # if 1 == 1: - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "6 Hours": - al = float(Currenttime) - float(21600) - if float(al) >= float(Lastrun): - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "12 Hours": - al = float(Currenttime) - float(43200) - if float(al) >= float(Lastrun): - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + elif config.timeintervel == function: + #al = float(Currenttime) - float(3600) + #if float(al) >= float(Lastrun): + # if 1 == 1: - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "1 Day": - al = float(Currenttime) - float(86400) - if float(al) >= float(Lastrun): - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = config.RemoteBackupConfig.configtype + extraArgs['SFTPID'] = config.RemoteBackupConfig_id - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "3 Days": - al = float(Currenttime) - float(259200) - if float(al) >= float(Lastrun): - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.timeintervel == "1 Week": - al = float(Currenttime) - float(604800) - if float(al) >= float(Lastrun): - extraArgs = {} - extraArgs['adminID'] = Admin.pk - extraArgs['WPid'] = wpsite.pk - extraArgs['Backuptype'] = Backuptype - extraArgs['BackupDestination'] = "SFTP" - extraArgs['SFTPID'] = config.RemoteBackupConfig_id + elif config.timeintervel == function: + #al = float(Currenttime) - float(21600) + #if float(al) >= float(Lastrun): + + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + + elif config.timeintervel == function: + #al = float(Currenttime) - float(43200) + #if float(al) >= float(Lastrun): + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + + elif config.timeintervel == function: + #al = float(Currenttime) - float(86400) + #if float(al) >= float(Lastrun): + + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + + elif config.timeintervel == function: + #al = float(Currenttime) - float(259200) + #if float(al) >= float(Lastrun): + + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + + elif config.timeintervel == function: + #al = float(Currenttime) - float(604800) + #if float(al) >= float(Lastrun): + + extraArgs = {} + extraArgs['adminID'] = Admin.pk + extraArgs['WPid'] = wpsite.pk + extraArgs['Backuptype'] = Backuptype + extraArgs['BackupDestination'] = "SFTP" + extraArgs['SFTPID'] = config.RemoteBackupConfig_id + + extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) + background = ApplicationInstaller('WPCreateBackup', extraArgs) + status, msg, backupID = background.WPCreateBackup() + if status == 1: + filename = msg + if config.RemoteBackupConfig.configtype == "SFTP": + IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() + elif config.RemoteBackupConfig.configtype == "S3": + IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, + config.id) + command = f"rm -r {filename}" + ProcessUtilities.executioner(command) + obj = RemoteBackupSchedule.objects.get(pk=config.id) + obj.lastrun = time.time() + obj.save() - extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999)) - background = ApplicationInstaller('WPCreateBackup', extraArgs) - status, msg, backupID = background.WPCreateBackup() - if status == 1: - filename = msg - if config.RemoteBackupConfig.configtype == "SFTP": - IncScheduler.SendTORemote(filename, config.RemoteBackupConfig_id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() - elif config.RemoteBackupConfig.configtype == "S3": - IncScheduler.SendToS3Cloud(filename, config.RemoteBackupConfig_id, backupID, - config.id) - command = f"rm -r {filename}" - ProcessUtilities.executioner(command) - obj = RemoteBackupSchedule.objects.get(pk=config.id) - obj.lastrun = time.time() - obj.save() except BaseException as msg: print("Error in Sites:%s" % str(msg)) continue From dc7daf4f64a155e2a131088e0c28d6833bea284a Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Mon, 4 Jul 2022 23:34:29 +0500 Subject: [PATCH 29/30] cron job every week --- install/install.py | 12 ++++++------ plogical/upgrade.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/install/install.py b/install/install.py index bd308a778..51e9aa28b 100755 --- a/install/install.py +++ b/install/install.py @@ -1743,12 +1743,12 @@ autocreate_system_folders = On 0 0 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Daily 0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py Weekly -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' +*/30 * * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' +0 * * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' +0 */6 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' +0 */12 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' +0 1 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' +0 0 */3 * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' 0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Week' */3 * * * * if ! find /home/*/public_html/ -maxdepth 2 -type f -newer /usr/local/lsws/cgid -name '.htaccess' -exec false {} +; then /usr/local/lsws/bin/lswsctrl restart; fi diff --git a/plogical/upgrade.py b/plogical/upgrade.py index 5839c1e1c..439bcbec5 100755 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -2569,12 +2569,12 @@ vmail if data.find("IncScheduler.py '30 Minutes'") == -1: content = """ -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' -0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' +*/30 * * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '30 Minutes' +0 * * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Hour' +0 */6 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '6 Hours' +0 */12 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '12 Hours' +0 1 * * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Day' +0 0 */3 * * /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '3 Days' 0 0 * * 0 /usr/local/CyberCP/bin/python /usr/local/CyberCP/IncBackups/IncScheduler.py '1 Week' """ writeToFile = open(cronPath, 'a') From 451f6c6bfe03cf0be4be20ecf3087535c44249b9 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Wed, 6 Jul 2022 08:21:14 +0500 Subject: [PATCH 30/30] https://community.cyberpanel.net/t/backup-to-google-drive/116/10 --- plogical/backupUtilities.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/plogical/backupUtilities.py b/plogical/backupUtilities.py index c94b18e44..a3f783cfd 100755 --- a/plogical/backupUtilities.py +++ b/plogical/backupUtilities.py @@ -360,8 +360,7 @@ class backupUtilities: completPathToConf = f'{backupUtilities.Server_root}/conf/vhosts/{domainName}/vhost.conf' - if os.path.exists(backupUtilities.licenseKey): - copy(completPathToConf, tempStoragePath + '/vhost.conf') + copy(completPathToConf, tempStoragePath + '/vhost.conf') ## /home/example.com/backup/backup-example.com-02.13.2018_10-24-52 -- tempStoragePath ## shutil.make_archive @@ -441,9 +440,9 @@ class backupUtilities: actualChildDomain = childDomain.find('domain').text childPath = childDomain.find('path').text - if os.path.exists(backupUtilities.licenseKey): - completPathToConf = f'{backupUtilities.Server_root}/conf/vhosts/{actualChildDomain}/vhost.conf' - copy(completPathToConf, f'{tempStoragePath}/{actualChildDomain}.vhost.conf') + + completPathToConf = f'{backupUtilities.Server_root}/conf/vhosts/{actualChildDomain}/vhost.conf' + copy(completPathToConf, f'{tempStoragePath}/{actualChildDomain}.vhost.conf') ### Storing SSL for child domainsa @@ -813,10 +812,9 @@ class backupUtilities: try: - if os.path.exists(backupUtilities.licenseKey): - if os.path.exists(completPath + '/' + domain + '.vhost.conf'): - completPathToConf = backupUtilities.Server_root + '/conf/vhosts/' + domain + '/vhost.conf' - copy(completPath + '/' + domain + '.vhost.conf', completPathToConf) + if os.path.exists(completPath + '/' + domain + '.vhost.conf'): + completPathToConf = backupUtilities.Server_root + '/conf/vhosts/' + domain + '/vhost.conf' + copy(completPath + '/' + domain + '.vhost.conf', completPathToConf) sslStoragePath = completPath + "/" + domain + ".cert.pem" @@ -1025,10 +1023,9 @@ class backupUtilities: ## emails extracted - if os.path.exists(backupUtilities.licenseKey): - completPathToConf = backupUtilities.Server_root + '/conf/vhosts/' + masterDomain + '/vhost.conf' - if os.path.exists(completPath + '/vhost.conf'): - copy(completPath + '/vhost.conf', completPathToConf) + completPathToConf = backupUtilities.Server_root + '/conf/vhosts/' + masterDomain + '/vhost.conf' + if os.path.exists(completPath + '/vhost.conf'): + copy(completPath + '/vhost.conf', completPathToConf) logging.CyberCPLogFileWriter.statusWriter(status, "Done")