This commit is contained in:
usman@cyberpersons.com
2023-02-12 13:15:41 +05:00
parent f43763034c
commit 59300fe3a5
2 changed files with 100 additions and 44 deletions

View File

@@ -1,6 +1,7 @@
import json
import os
import sys
import time
sys.path.append('/usr/local/CyberCP')
import django
@@ -13,75 +14,119 @@ except:
class CPBackupsV2:
PENDING_START = 0
RUNNING = 1
COMPLETED = 2
FAILED = 3
def __init__(self, data):
self.data = data
pass
@staticmethod
def FetchCurrentTimeStamp():
import time
return str(time.time())
def UpdateStatus(self, message, status):
from websiteFunctions.models import Backupsv2, BackupsLogsv2
self.buv2 = Backupsv2.objects.get(fileName=self.buv2.fileName)
self.buv2.status = status
self.buv2.save()
BackupsLogsv2(message=message).save()
if status == CPBackupsV2.FAILED:
self.buv2.website.BackupLock = 0
self.buv2.website.save()
elif status == CPBackupsV2.COMPLETED:
self.buv2.website.BackupLock = 0
self.buv2.website.save()
def InitiateBackup(self):
from websiteFunctions.models import Websites, ChildDomains, WPSites, WPStaging
from websiteFunctions.models import Websites, Backupsv2
from django.forms.models import model_to_dict
from plogical.mysqlUtilities import mysqlUtilities
website = Websites.objects.get(domain=self.data['domain'])
while(1):
Config = {'MainWebsite': model_to_dict(website, fields=['domain', 'adminEmail', 'phpSelection', 'state', 'config'])}
Config['admin'] = model_to_dict(website.admin, fields=['userName', 'password', 'firstName', 'lastName',
'email', 'type', 'owner', 'token', 'api', 'securityLevel',
'state', 'initWebsitesLimit', 'twoFA', 'secretKey', 'config'])
Config['acl'] = model_to_dict(website.admin.acl)
if website.BackupLock == 0:
### Child domains to config
website.BackupLock = 1
website.save()
ChildsList = []
self.buv2 = Backupsv2(website=website, fileName='backup-' + self.data['domain'] + "-" + time.strftime("%m.%d.%Y_%H-%M-%S"), status=CPBackupsV2.RUNNING, BasePath=self.data['BasePath'])
self.buv2.save()
for childDomains in website.childdomains_set.all():
print(childDomains.domain)
ChildsList.append(model_to_dict(childDomains))
try:
Config['ChildDomains'] = ChildsList
Config = {'MainWebsite': model_to_dict(website, fields=['domain', 'adminEmail', 'phpSelection', 'state', 'config'])}
Config['admin'] = model_to_dict(website.admin, fields=['userName', 'password', 'firstName', 'lastName',
'email', 'type', 'owner', 'token', 'api', 'securityLevel',
'state', 'initWebsitesLimit', 'twoFA', 'secretKey', 'config'])
Config['acl'] = model_to_dict(website.admin.acl)
#print(str(Config))
### Child domains to config
### Databases
ChildsList = []
connection, cursor = mysqlUtilities.setupConnection()
for childDomains in website.childdomains_set.all():
print(childDomains.domain)
ChildsList.append(model_to_dict(childDomains))
if connection == 0:
return 0
Config['ChildDomains'] = ChildsList
dataBases = website.databases_set.all()
DBSList = []
#print(str(Config))
for db in dataBases:
### Databases
query = f"SELECT host,user FROM mysql.db WHERE db='{db.dbName}';"
cursor.execute(query)
DBUsers = cursor.fetchall()
connection, cursor = mysqlUtilities.setupConnection()
UserList = []
if connection == 0:
return 0
for databaseUser in DBUsers:
query = f"SELECT password FROM `mysql`.`user` WHERE `Host`='{databaseUser[0]}' AND `User`='{databaseUser[1]}';"
cursor.execute(query)
resp = cursor.fetchall()
print(resp)
UserList.append({'user': databaseUser[1], 'host': databaseUser[0], 'password': resp[0][0]})
dataBases = website.databases_set.all()
DBSList = []
DBSList.append({db.dbName: UserList})
for db in dataBases:
Config['databases'] = DBSList
query = f"SELECT host,user FROM mysql.db WHERE db='{db.dbName}';"
cursor.execute(query)
DBUsers = cursor.fetchall()
WPSitesList = []
UserList = []
for wpsite in website.wpsites_set.all():
WPSitesList.append(model_to_dict(wpsite,fields=['title', 'path', 'FinalURL', 'AutoUpdates', 'PluginUpdates', 'ThemeUpdates', 'WPLockState']))
for databaseUser in DBUsers:
query = f"SELECT password FROM `mysql`.`user` WHERE `Host`='{databaseUser[0]}' AND `User`='{databaseUser[1]}';"
cursor.execute(query)
resp = cursor.fetchall()
print(resp)
UserList.append({'user': databaseUser[1], 'host': databaseUser[0], 'password': resp[0][0]})
Config['WPSites'] = WPSitesList
DBSList.append({db.dbName: UserList})
print(json.dumps(Config))
Config['databases'] = DBSList
pass
WPSitesList = []
for wpsite in website.wpsites_set.all():
WPSitesList.append(model_to_dict(wpsite,fields=['title', 'path', 'FinalURL', 'AutoUpdates', 'PluginUpdates', 'ThemeUpdates', 'WPLockState']))
Config['WPSites'] = WPSitesList
except BaseException as msg:
self.UpdateStatus(str(msg), CPBackupsV2.FAILED)
return 0
print(json.dumps(Config))
break
else:
time.sleep(5)
def BackupDataBases(self):
@@ -100,5 +145,5 @@ class CPBackupsV2:
pass
if __name__ == "__main__":
cpbuv2 = CPBackupsV2({'domain': 'cyberpanel.net'} )
cpbuv2 = CPBackupsV2({'domain': 'cyberpanel.net', 'BasePath': '/home/backup', 'BackupDatabase': 1, 'BackupData': 1} )
cpbuv2.InitiateBackup()

View File

@@ -18,6 +18,8 @@ class Websites(models.Model):
state = models.IntegerField(default=1)
externalApp = models.CharField(max_length=30, default=None)
config = models.TextField(default='')
BackupLock = models.IntegerField(default=0)
class ChildDomains(models.Model):
master = models.ForeignKey(Websites,on_delete=models.CASCADE)
@@ -94,20 +96,16 @@ class NormalBackupSites(models.Model):
owner = models.ForeignKey(NormalBackupJobs, on_delete=models.CASCADE)
domain = models.ForeignKey(Websites, on_delete=models.CASCADE)
class NormalBackupJobLogs(models.Model):
owner = models.ForeignKey(NormalBackupJobs, on_delete=models.CASCADE)
status = models.IntegerField()
message = models.TextField()
class wpplugins(models.Model):
owner = models.ForeignKey(Administrator, on_delete=models.CASCADE)
Name = models.CharField(max_length=255, default='')
config = models.TextField()
class WPSites(models.Model):
owner = models.ForeignKey(Websites, on_delete=models.CASCADE)
title = models.CharField(max_length=255, default='')
@@ -129,7 +127,6 @@ class WPSitesBackup(models.Model):
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='')
@@ -147,3 +144,17 @@ class RemoteBackupsites(models.Model):
owner = models.ForeignKey(RemoteBackupSchedule, on_delete=models.CASCADE)
WPsites = models.IntegerField(null=True)
database = models.IntegerField(null=True)
import time
class Backupsv2(models.Model):
website = models.ForeignKey(Websites, on_delete=models.CASCADE)
fileName = models.CharField(max_length=255)
status = models.IntegerField(default=0)
timeStamp = models.CharField(max_length=255, default=str(time.time()))
BasePath = models.TextField(default='')
class BackupsLogsv2(models.Model):
owner = models.ForeignKey(Backupsv2, on_delete=models.CASCADE)
timeStamp = models.CharField(max_length=255, default=str(time.time()))
message = models.TextField(default='')