| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  | import os,sys | 
					
						
							|  |  |  | sys.path.append('/usr/local/CyberCP') | 
					
						
							|  |  |  | import django | 
					
						
							|  |  |  | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") | 
					
						
							|  |  |  | django.setup() | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | import pexpect | 
					
						
							|  |  |  | import CyberCPLogFileWriter as logging | 
					
						
							|  |  |  | import subprocess | 
					
						
							|  |  |  | import shlex | 
					
						
							|  |  |  | from shutil import make_archive,rmtree | 
					
						
							|  |  |  | import mysqlUtilities | 
					
						
							|  |  |  | import tarfile | 
					
						
							|  |  |  | from multiprocessing import Process | 
					
						
							|  |  |  | import json | 
					
						
							|  |  |  | import requests | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | import signal | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  | from installUtilities import installUtilities | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | import argparse | 
					
						
							|  |  |  | from shutil import move,copy | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  | from xml.etree import ElementTree | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  | from virtualHostUtilities import virtualHostUtilities | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | from sslUtilities import sslUtilities | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  | from websiteFunctions.models import Websites, ChildDomains, Backups | 
					
						
							|  |  |  | from databases.models import Databases | 
					
						
							|  |  |  | from loginSystem.models import Administrator | 
					
						
							|  |  |  | from dnsUtilities import DNS | 
					
						
							|  |  |  | from xml.etree.ElementTree import Element, SubElement | 
					
						
							|  |  |  | from xml.etree import ElementTree | 
					
						
							|  |  |  | from xml.dom import minidom | 
					
						
							|  |  |  | from backup.models import DBUsers | 
					
						
							|  |  |  | from mailServer.models import Domains as eDomains | 
					
						
							|  |  |  | from random import randint | 
					
						
							|  |  |  | import time | 
					
						
							| 
									
										
										
										
											2018-07-05 15:22:48 +05:00
										 |  |  | from plogical.mailUtilities import mailUtilities | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | ## I am not the monster that you think I am.. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | class backupUtilities: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  |     completeKeyPath  = "/home/cyberpanel/.ssh" | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |     destinationsPath = "/home/cyberpanel/destinations" | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def prepareBackupMeta(backupDomain, backupName, tempStoragePath, backupPath): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018 -- tempStoragePath | 
					
						
							|  |  |  |             ## /home/example.com/backup - backupPath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if not os.path.exists(backupPath): | 
					
						
							|  |  |  |                 os.mkdir(backupPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if not os.path.exists(tempStoragePath): | 
					
						
							|  |  |  |                 os.mkdir(tempStoragePath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             website = Websites.objects.get(domain=backupDomain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ######### Generating meta | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## XML Generation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             metaFileXML = Element('metaFile') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             child = SubElement(metaFileXML, 'masterDomain') | 
					
						
							|  |  |  |             child.text = backupDomain | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             child = SubElement(metaFileXML, 'phpSelection') | 
					
						
							|  |  |  |             child.text = website.phpSelection | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             child = SubElement(metaFileXML, 'externalApp') | 
					
						
							|  |  |  |             child.text = website.externalApp | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             childDomains = website.childdomains_set.all() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             databases = website.databases_set.all() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Child domains XML | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             childDomainsXML = Element('ChildDomains') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for items in childDomains: | 
					
						
							|  |  |  |                 childDomainXML = Element('domain') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 child = SubElement(childDomainXML, 'domain') | 
					
						
							|  |  |  |                 child.text = items.domain | 
					
						
							|  |  |  |                 child = SubElement(childDomainXML, 'phpSelection') | 
					
						
							|  |  |  |                 child.text = items.phpSelection | 
					
						
							|  |  |  |                 child = SubElement(childDomainXML, 'path') | 
					
						
							|  |  |  |                 child.text = items.path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 childDomainsXML.append(childDomainXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             metaFileXML.append(childDomainsXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Databases XML | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             databasesXML = Element('Databases') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for items in databases: | 
					
						
							|  |  |  |                 dbuser = DBUsers.objects.get(user=items.dbUser) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 databaseXML = Element('database') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 child = SubElement(databaseXML, 'dbName') | 
					
						
							|  |  |  |                 child.text = items.dbName | 
					
						
							|  |  |  |                 child = SubElement(databaseXML, 'dbUser') | 
					
						
							|  |  |  |                 child.text = items.dbUser | 
					
						
							|  |  |  |                 child = SubElement(databaseXML, 'password') | 
					
						
							|  |  |  |                 child.text = dbuser.password | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 databasesXML.append(databaseXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             metaFileXML.append(databasesXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Get Aliases | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             aliasesXML = Element('Aliases') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             aliases = backupUtilities.getAliases(backupDomain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for items in aliases: | 
					
						
							|  |  |  |                 child = SubElement(aliasesXML, 'alias') | 
					
						
							|  |  |  |                 child.text = items | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             metaFileXML.append(aliasesXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Finish Alias | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## DNS Records XML | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 dnsRecordsXML = Element("dnsrecords") | 
					
						
							|  |  |  |                 dnsRecords = DNS.getDNSRecords(backupDomain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 for items in dnsRecords: | 
					
						
							|  |  |  |                     dnsRecordXML = Element('dnsrecord') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     child = SubElement(dnsRecordXML, 'type') | 
					
						
							|  |  |  |                     child.text = items.type | 
					
						
							|  |  |  |                     child = SubElement(dnsRecordXML, 'name') | 
					
						
							|  |  |  |                     child.text = items.name | 
					
						
							|  |  |  |                     child = SubElement(dnsRecordXML, 'content') | 
					
						
							|  |  |  |                     child.text = items.content | 
					
						
							|  |  |  |                     child = SubElement(dnsRecordXML, 'priority') | 
					
						
							|  |  |  |                     child.text = str(items.prio) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     dnsRecordsXML.append(dnsRecordXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 metaFileXML.append(dnsRecordsXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Email accounts XML | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 emailRecordsXML = Element('emails') | 
					
						
							|  |  |  |                 eDomain = eDomains.objects.get(domain=backupDomain) | 
					
						
							|  |  |  |                 emailAccounts = eDomain.eusers_set.all() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 for items in emailAccounts: | 
					
						
							|  |  |  |                     emailRecordXML = Element('emailAccount') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     child = SubElement(emailRecordXML, 'email') | 
					
						
							|  |  |  |                     child.text = items.email | 
					
						
							|  |  |  |                     child = SubElement(emailRecordXML, 'password') | 
					
						
							|  |  |  |                     child.text = items.password | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     emailRecordsXML.append(emailRecordXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 metaFileXML.append(emailRecordsXML) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Email meta generated! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def prettify(elem): | 
					
						
							|  |  |  |                 """Return a pretty-printed XML string for the Element.
 | 
					
						
							|  |  |  |                 """
 | 
					
						
							|  |  |  |                 rough_string = ElementTree.tostring(elem, 'utf-8') | 
					
						
							|  |  |  |                 reparsed = minidom.parseString(rough_string) | 
					
						
							|  |  |  |                 return reparsed.toprettyxml(indent="  ") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018/meta.xml -- metaPath | 
					
						
							|  |  |  |             metaPath = os.path.join(tempStoragePath, "meta.xml") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             xmlpretty = prettify(metaFileXML).encode('ascii', 'ignore') | 
					
						
							|  |  |  |             metaFile = open(metaPath, 'w') | 
					
						
							|  |  |  |             metaFile.write(xmlpretty) | 
					
						
							|  |  |  |             metaFile.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## meta generated | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             newBackup = Backups(website=website, fileName=backupName, date=time.strftime("%I-%M-%S-%a-%b-%Y"), | 
					
						
							|  |  |  |                                 size=0, status=0) | 
					
						
							|  |  |  |             newBackup.save() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return 1,'None' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             return 0,str(msg) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def startBackup(tempStoragePath,backupName,backupPath): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ##### Writing the name of backup file. | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             ## /home/example.com/backup/backupFileName | 
					
						
							|  |  |  |             backupFileNamePath = os.path.join(backupPath,"backupFileName") | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             status = open(backupFileNamePath, "w") | 
					
						
							|  |  |  |             status.write(backupName) | 
					
						
							|  |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ##### | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             status = open(os.path.join(backupPath,'status'),"w") | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             status.write("Making archive of home directory.\n") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ##### Parsing XML Meta file! | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |             ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018 -- tempStoragePath | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             backupMetaData = ElementTree.parse(os.path.join(tempStoragePath,'meta.xml')) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ##### Making archive of home directory | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             domainName = backupMetaData.find('masterDomain').text | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018 -- tempStoragePath | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |             ## shutil.make_archive | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             make_archive(os.path.join(tempStoragePath,"public_html"), 'gztar', os.path.join("/home",domainName,"public_html")) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             ## backup email accounts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             status = open(os.path.join(backupPath, 'status'), "w") | 
					
						
							|  |  |  |             status.write("Backing up email accounts!\n") | 
					
						
							|  |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-21 20:10:39 +05:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 make_archive(os.path.join(tempStoragePath,domainName),'gztar',os.path.join("/home","vmail",domainName)) | 
					
						
							|  |  |  |             except: | 
					
						
							|  |  |  |                 pass | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             ## Backing up databases | 
					
						
							|  |  |  |             databases = backupMetaData.findall('Databases/database') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for database in databases: | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                 dbName = database.find('dbName').text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 status = open(os.path.join(backupPath,'status'), "w") | 
					
						
							|  |  |  |                 status.write("Backing up database: " + dbName) | 
					
						
							|  |  |  |                 status.close() | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |                 if mysqlUtilities.mysqlUtilities.createDatabaseBackup(dbName, tempStoragePath) == 0: | 
					
						
							|  |  |  |                     raise BaseException | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ##### Saving SSL Certificates if any | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 pathToStoreSSL = sslUtilities.Server_root + "/conf/vhosts/" + "SSL-" + domainName | 
					
						
							|  |  |  |                 if os.path.exists(pathToStoreSSL): | 
					
						
							|  |  |  |                     pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" | 
					
						
							|  |  |  |                     pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     copy(pathToStoreSSLPrivKey, tempStoragePath + "/privkey.pem") | 
					
						
							|  |  |  |                     copy(pathToStoreSSLFullChain, tempStoragePath + "/fullchain.pem") | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ## Child Domains SSL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             childDomains = backupMetaData.findall('ChildDomains/domain') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 for childDomain in childDomains: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     actualChildDomain = childDomain.find('domain').text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     pathToStoreSSL = sslUtilities.Server_root + "/conf/vhosts/" + "SSL-" + actualChildDomain | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |                     if os.path.exists(pathToStoreSSL): | 
					
						
							|  |  |  |                         pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" | 
					
						
							|  |  |  |                         pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         tempKeyPath = os.path.join(tempStoragePath, actualChildDomain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         if not os.path.exists(tempKeyPath): | 
					
						
							|  |  |  |                             os.mkdir(tempKeyPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         copy(pathToStoreSSLPrivKey, tempKeyPath + "/privkey.pem") | 
					
						
							|  |  |  |                         copy(pathToStoreSSLFullChain, tempKeyPath + "/fullchain.pem") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ##### Saving SSL Certificates if any | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## shutil.make_archive. Creating final package. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             make_archive(os.path.join(backupPath,backupName), 'gztar', tempStoragePath) | 
					
						
							|  |  |  |             rmtree(tempStoragePath) | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(backupPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             status.write("Completed\n") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except BaseException,msg: | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                 os.remove(os.path.join(backupPath,backupName+".tar.gz")) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             except: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 rmtree(tempStoragePath) | 
					
						
							|  |  |  |             except: | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(backupPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.write(backupName + "\n") | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             status.write("Aborted, please check CyberPanel main log file. [5009]") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def initiateBackup(tempStoragePath,backupName,backupPath): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             p = Process(target=backupUtilities.startBackup, args=(tempStoragePath,backupName,backupPath,)) | 
					
						
							|  |  |  |             p.start() | 
					
						
							|  |  |  |             pid = open(backupPath + 'pid', "w") | 
					
						
							|  |  |  |             pid.write(str(p.pid)) | 
					
						
							|  |  |  |             pid.close() | 
					
						
							|  |  |  |         except BaseException,msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [initiateBackup]") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def createWebsiteFromBackup(backupFileOrig, dir): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             backupFile = backupFileOrig.strip(".tar.gz") | 
					
						
							|  |  |  |             originalFile = "/home/backup/" + backupFileOrig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if os.path.exists(backupFileOrig): | 
					
						
							|  |  |  |                 path = backupFile | 
					
						
							|  |  |  |             elif not os.path.exists(originalFile): | 
					
						
							|  |  |  |                 dir = dir | 
					
						
							|  |  |  |                 path = "/home/backup/transfer-" + str(dir) + "/" + backupFile | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 path = "/home/backup/" + backupFile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             admin = Administrator.objects.get(pk=1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## open meta file to read data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Parsing XML Meta file! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             backupMetaData = ElementTree.parse(os.path.join(path, 'meta.xml')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             domain = backupMetaData.find('masterDomain').text | 
					
						
							|  |  |  |             phpSelection = backupMetaData.find('phpSelection').text | 
					
						
							|  |  |  |             externalApp = backupMetaData.find('externalApp').text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Pre-creation checks | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if Websites.objects.filter(domain=domain).count() > 0: | 
					
						
							|  |  |  |                 raise BaseException('This website already exists.') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ChildDomains.objects.filter(domain=domain).count() > 0: | 
					
						
							|  |  |  |                 raise BaseException("This website already exists as child domain.") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ####### Pre-creation checks ends | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Create Configurations | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             result = virtualHostUtilities.createVirtualHost(domain, admin.email, phpSelection, externalApp, | 
					
						
							|  |  |  |                                                             numberOfWebsites, 0, 'CyberPanel', 1, 0, | 
					
						
							|  |  |  |                                                             admin.userName, 'Default') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if result[0] == 0: | 
					
						
							|  |  |  |                 raise BaseException(result[1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Create Configurations ends here | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Create databases | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             databases = backupMetaData.findall('Databases/database') | 
					
						
							|  |  |  |             website = Websites.objects.get(domain=domain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for database in databases: | 
					
						
							|  |  |  |                 dbName = database.find('dbName').text | 
					
						
							|  |  |  |                 dbUser = database.find('dbUser').text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if mysqlUtilities.mysqlUtilities.createDatabase(dbName, dbUser, "cyberpanel") == 0: | 
					
						
							|  |  |  |                     raise BaseException("Failed to create Databases!") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 newDB = Databases(website=website, dbName=dbName, dbUser=dbUser) | 
					
						
							|  |  |  |                 newDB.save() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Create dns zone | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             dnsrecords = backupMetaData.findall('dnsrecords/dnsrecord') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             DNS.createDNSZone(domain, admin) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             zone = DNS.getZoneObject(domain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for dnsrecord in dnsrecords: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 recordType = dnsrecord.find('type').text | 
					
						
							|  |  |  |                 value = dnsrecord.find('name').text | 
					
						
							|  |  |  |                 content = dnsrecord.find('content').text | 
					
						
							|  |  |  |                 prio = int(dnsrecord.find('priority').text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 DNS.createDNSRecord(zone, value, recordType, content, prio, 3600) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return 1,'None' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             return 0, str(msg) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |     def startRestore(backupName, dir): | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         try: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             if dir == "CyberPanelRestore": | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |                 backupFileName = backupName.strip(".tar.gz") | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                 completPath = os.path.join("/home","backup",backupFileName) ## without extension | 
					
						
							|  |  |  |                 originalFile = os.path.join("/home","backup",backupName) ## with extension | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |             elif dir == 'CLI': | 
					
						
							|  |  |  |                 completPath = backupName.strip(".tar.gz")  ## without extension | 
					
						
							|  |  |  |                 originalFile = backupName  ## with extension | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 backupFileName = backupName.strip(".tar.gz") | 
					
						
							|  |  |  |                 completPath = "/home/backup/transfer-"+str(dir)+"/"+backupFileName ## without extension | 
					
						
							|  |  |  |                 originalFile = "/home/backup/transfer-"+str(dir)+"/"+backupName ## with extension | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             pathToCompressedHome = os.path.join(completPath,"public_html.tar.gz") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if not os.path.exists(completPath): | 
					
						
							|  |  |  |                 os.mkdir(completPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## writing pid of restore process | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             pid = open(os.path.join(completPath,'pid'), "w") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             pid.write(str(os.getpid())) | 
					
						
							|  |  |  |             pid.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             status.write("Extracting Main Archive!") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |             ## Converting /home/backup/backup-example-06-50-03-Thu-Feb-2018.tar.gz -> /home/backup/backup-example-06-50-03-Thu-Feb-2018 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             tar = tarfile.open(originalFile) | 
					
						
							|  |  |  |             tar.extractall(completPath) | 
					
						
							|  |  |  |             tar.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             status.write("Creating Accounts,Databases and DNS records!") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  |             ########### Creating website and its dabases | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ## extracting master domain for later use | 
					
						
							|  |  |  |             backupMetaData = ElementTree.parse(os.path.join(completPath, "meta.xml")) | 
					
						
							|  |  |  |             masterDomain = backupMetaData.find('masterDomain').text | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |             result = backupUtilities.createWebsiteFromBackup(backupName, dir) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |             if result[0] == 1: | 
					
						
							|  |  |  |                 ## Let us try to restore SSL. | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                 if os.path.exists(completPath + "/privkey.pem"): | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     pathToStoreSSL = sslUtilities.Server_root + "/conf/vhosts/" + "SSL-" + masterDomain | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     if not os.path.exists(pathToStoreSSL): | 
					
						
							|  |  |  |                         os.mkdir(pathToStoreSSL) | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     sslUtilities.installSSLForDomain(masterDomain) | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" | 
					
						
							|  |  |  |                     pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     copy(completPath + "/privkey.pem", pathToStoreSSLPrivKey) | 
					
						
							|  |  |  |                     copy(completPath + "/fullchain.pem", pathToStoreSSLFullChain) | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                     command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + pathToStoreSSL | 
					
						
							|  |  |  |                     cmd = shlex.split(command) | 
					
						
							|  |  |  |                     subprocess.call(cmd) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 status = open(os.path.join(completPath, 'status'), "w") | 
					
						
							|  |  |  |                 status.write("Error Message: " + result[1] + | 
					
						
							|  |  |  |                              ". Not able to create Account, Databases and DNS Records, aborting. [5009]") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |                 status.close() | 
					
						
							|  |  |  |                 return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ########### Creating child/sub/addon/parked domains | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |             status.write("Creating Child Domains!") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ## Reading meta file to create subdomains | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             externalApp = backupMetaData.find('externalApp').text | 
					
						
							|  |  |  |             websiteHome = os.path.join("/home",masterDomain,"public_html") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ### Restoring Child Domains if any. | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             childDomains = backupMetaData.findall('ChildDomains/domain') | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                 for childDomain in childDomains: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                     domain = childDomain.find('domain').text | 
					
						
							|  |  |  |                     phpSelection = childDomain.find('phpSelection').text | 
					
						
							|  |  |  |                     path = childDomain.find('path').text | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                     finalData = json.dumps( | 
					
						
							|  |  |  |                         {'masterDomain': masterDomain, 'domainName': domain, 'phpSelection': phpSelection, | 
					
						
							|  |  |  |                          'path': path, | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  |                          'ssl': 0, 'restore': 1, | 
					
						
							| 
									
										
										
										
											2018-05-24 18:01:06 +05:00
										 |  |  |                          'dkimCheck': 0, | 
					
						
							|  |  |  |                          'openBasedir':0}) | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                     r = requests.post("http://localhost:5003/websites/submitDomainCreation", data=finalData, | 
					
						
							|  |  |  |                                       verify=False) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                     data = json.loads(r.text) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                     if data['createWebSiteStatus'] == 1: | 
					
						
							|  |  |  |                         rmtree(websiteHome) | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         ## Let us try to restore SSL for Child Domains. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         tempPath = os.path.join(completPath, domain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         if os.path.exists(tempPath + "/privkey.pem"): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             pathToStoreSSL = sslUtilities.Server_root + "/conf/vhosts/" + "SSL-" + domain | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             if not os.path.exists(pathToStoreSSL): | 
					
						
							|  |  |  |                                 os.mkdir(pathToStoreSSL) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             sslUtilities.installSSLForDomain(domain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" | 
					
						
							|  |  |  |                             pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             copy(tempPath + "/privkey.pem", pathToStoreSSLPrivKey) | 
					
						
							|  |  |  |                             copy(tempPath + "/fullchain.pem", pathToStoreSSLFullChain) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + pathToStoreSSL | 
					
						
							|  |  |  |                             cmd = shlex.split(command) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                         continue | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         status = open(os.path.join(completPath,'status'), "w") | 
					
						
							|  |  |  |                         status.write("Error Message: " + data[ | 
					
						
							|  |  |  |                             'error_message'] + ". Not able to create child domains, aborting. [5009]") | 
					
						
							|  |  |  |                         status.close() | 
					
						
							|  |  |  |                         return 0 | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |                 status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |                 status.write("Error Message: " + str(msg) +". Not able to create child domains, aborting. [5009]") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |                 status.close() | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startRestore]") | 
					
						
							|  |  |  |                 return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ## Restore Aliases | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             status = open(os.path.join(completPath, 'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             status.write("Restoring Domain Aliases!") | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  |             aliases = backupMetaData.findall('Aliases/alias') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for items in aliases: | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |                 virtualHostUtilities.createAlias(masterDomain, items.text, 0, "", "") | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-11 00:03:26 +05:00
										 |  |  |             ## Restoring email accounts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             status = open(os.path.join(completPath, 'status'), "w") | 
					
						
							|  |  |  |             status.write("Restoring email accounts!") | 
					
						
							|  |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             emailAccounts = backupMetaData.findall('emails/emailAccount') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 for emailAccount in emailAccounts: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     email = emailAccount.find('email').text | 
					
						
							|  |  |  |                     username = email.split("@")[0] | 
					
						
							|  |  |  |                     password = emailAccount.find('password').text | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 15:22:48 +05:00
										 |  |  |                     result = mailUtilities.createEmailAccount(masterDomain, username, password) | 
					
						
							|  |  |  |                     if result[0] == 0: | 
					
						
							|  |  |  |                         raise BaseException(result[1]) | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             except BaseException, msg: | 
					
						
							|  |  |  |                 status = open(os.path.join(completPath,'status'), "w") | 
					
						
							|  |  |  |                 status.write("Error Message: " + str(msg) +". Not able to create email accounts, aborting. [5009]") | 
					
						
							|  |  |  |                 status.close() | 
					
						
							|  |  |  |                 logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startRestore]") | 
					
						
							|  |  |  |                 return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             ## Emails restored | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             ## restoring databases | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.write("Restoring Databases") | 
					
						
							|  |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             databases = backupMetaData.findall('Databases/database') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for database in databases: | 
					
						
							|  |  |  |                 dbName = database.find('dbName').text | 
					
						
							|  |  |  |                 password = database.find('password').text | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |                 if mysqlUtilities.mysqlUtilities.restoreDatabaseBackup(dbName, completPath, password) == 0: | 
					
						
							|  |  |  |                     raise BaseException | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             ## Databases restored | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath, 'status'), "w") | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             status.write("Extracting web home data!") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 02:17:12 +05:00
										 |  |  |             # /home/backup/backup-example-06-50-03-Thu-Feb-2018/public_html.tar.gz | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             tar = tarfile.open(pathToCompressedHome) | 
					
						
							|  |  |  |             tar.extractall(websiteHome) | 
					
						
							|  |  |  |             tar.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  |             ## extracting email accounts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             status = open(os.path.join(completPath, 'status'), "w") | 
					
						
							|  |  |  |             status.write("Extracting email accounts!") | 
					
						
							|  |  |  |             status.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-21 20:10:39 +05:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 pathToCompressedEmails = os.path.join(completPath, masterDomain + ".tar.gz") | 
					
						
							|  |  |  |                 emailHome = os.path.join("/home","vmail",masterDomain) | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-21 20:10:39 +05:00
										 |  |  |                 tar = tarfile.open(pathToCompressedEmails) | 
					
						
							|  |  |  |                 tar.extractall(emailHome) | 
					
						
							|  |  |  |                 tar.close() | 
					
						
							|  |  |  |             except: | 
					
						
							|  |  |  |                 pass | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             ## emails extracted | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             ## Change permissions | 
					
						
							| 
									
										
										
										
											2018-02-17 15:34:59 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             command = "chmod -r vmail:vmail " + emailHome | 
					
						
							|  |  |  |             subprocess.call(shlex.split(command)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             ## | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             status.write("Done") | 
					
						
							|  |  |  |             status.close() | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  |             installUtilities.reStartLiteSpeed() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             command = "chown -R " + externalApp + ":" + externalApp + " " + websiteHome | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  |             cmd = shlex.split(command) | 
					
						
							|  |  |  |             subprocess.call(cmd) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2018-02-16 00:57:46 +05:00
										 |  |  |             status = open(os.path.join(completPath,'status'), "w") | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             status.write(str(msg) + " [5009]") | 
					
						
							|  |  |  |             status.close() | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startRestore]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |     def initiateRestore(backupName,dir): | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         try: | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |             p = Process(target=backupUtilities.startRestore, args=(backupName, dir,)) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             p.start() | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [initiateRestore]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |     def sendKey(IPAddress, password,port): | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         try: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             command = "sudo scp -o StrictHostKeyChecking=no -P "+ port +" /root/.ssh/cyberpanel.pub root@" + IPAddress + ":/root/.ssh/authorized_keys" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sendKeyProc = pexpect.spawn(command,timeout=3) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             sendKeyProc.expect("password:") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sendKeyProc.sendline(password) | 
					
						
							|  |  |  |             sendKeyProc.expect("100%") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sendKeyProc.wait() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             return [1, "None"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |         except pexpect.TIMEOUT, msg: | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [sendKey]") | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             return [0, "TIMEOUT [sendKey]"] | 
					
						
							|  |  |  |         except pexpect.EOF, msg: | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [sendKey]") | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             return [0,  "EOF [sendKey]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [sendKey]") | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             return [0, str(msg) + " [sendKey]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |     def setupSSHKeys(IPAddress, password,port): | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         try: | 
					
						
							|  |  |  |             ## Checking for host verification | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             backupUtilities.host_key_verification(IPAddress) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if backupUtilities.checkIfHostIsUp(IPAddress) == 1: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |                 return [0,"Host is Down."] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             expectation = [] | 
					
						
							|  |  |  |             expectation.append("password:") | 
					
						
							|  |  |  |             expectation.append("Permission denied") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             command = "sudo ssh -o StrictHostKeyChecking=no -p "+ port +" root@"+IPAddress+" mkdir /root/.ssh" | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             setupKeys = pexpect.spawn(command,timeout=3) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             index = setupKeys.expect(expectation) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             ## on first login attempt send password | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             if index == 0: | 
					
						
							|  |  |  |                 setupKeys.sendline(password) | 
					
						
							|  |  |  |             elif index == 1: | 
					
						
							|  |  |  |                 return [0, 'Please enable password authentication on your remote server.'] | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 raise BaseException | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             ## if it again give you password, than provided password is wrong | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             expectation = [] | 
					
						
							|  |  |  |             expectation.append("please try again.") | 
					
						
							|  |  |  |             expectation.append(pexpect.EOF) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             index = setupKeys.expect(expectation) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             if index == 0: | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |                 return [0,"Wrong Password!"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             elif index == 1: | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |                 setupKeys.wait() | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |                 sendKey = backupUtilities.sendKey(IPAddress,password,port) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |                 if sendKey[0] == 1: | 
					
						
							|  |  |  |                     return [1, "None"] | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     return [0,sendKey[1]] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except pexpect.TIMEOUT, msg: | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(setupKeys.before + " " + str(msg) + " [setupSSHKeys]") | 
					
						
							|  |  |  |             return [0, str(msg) + " [TIMEOUT setupSSHKeys]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(setupKeys.before + " " + str(msg) + " [setupSSHKeys]") | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             return [0, str(msg) + " [setupSSHKeys]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def checkIfHostIsUp(IPAddress): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             if subprocess.check_output(['ping', IPAddress, '-c 1']).find("0% packet loss") > -1: | 
					
						
							|  |  |  |                 return 1 | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 return 0 | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[checkIfHostIsUp]") | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def checkConnection(IPAddress): | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 destinations = backupUtilities.destinationsPath | 
					
						
							|  |  |  |                 data = open(destinations, 'r').readlines() | 
					
						
							|  |  |  |                 port = data[1].strip("\n") | 
					
						
							|  |  |  |             except: | 
					
						
							|  |  |  |                 port = "22" | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             expectation = [] | 
					
						
							|  |  |  |             expectation.append("password:") | 
					
						
							|  |  |  |             expectation.append("Last login") | 
					
						
							|  |  |  |             expectation.append(pexpect.EOF) | 
					
						
							| 
									
										
										
										
											2018-05-29 20:20:05 +05:00
										 |  |  |             expectation.append(pexpect.TIMEOUT) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |             checkConn = pexpect.spawn("sudo ssh -i /root/.ssh/cyberpanel -o StrictHostKeyChecking=no -p "+ port+" root@"+IPAddress, timeout=3) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             index = checkConn.expect(expectation) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if index == 0: | 
					
						
							|  |  |  |                 subprocess.call(['kill', str(checkConn.pid)]) | 
					
						
							| 
									
										
										
										
											2017-11-02 02:09:47 +05:00
										 |  |  |                 logging.CyberCPLogFileWriter.writeToFile("Remote Server is not able to authenticate for transfer to initiate, IP Address:" + IPAddress) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |                 return [0,"Remote Server is not able to authenticate for transfer to initiate."] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             elif index == 1: | 
					
						
							|  |  |  |                 subprocess.call(['kill', str(checkConn.pid)]) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |                 return [1, "None"] | 
					
						
							| 
									
										
										
										
											2018-05-29 20:20:05 +05:00
										 |  |  |             elif index == 3: | 
					
						
							|  |  |  |                 subprocess.call(['kill', str(checkConn.pid)]) | 
					
						
							|  |  |  |                 return [1, "None"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 subprocess.call(['kill', str(checkConn.pid)]) | 
					
						
							| 
									
										
										
										
											2018-05-29 20:20:05 +05:00
										 |  |  |                 return [1, "None"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         except pexpect.TIMEOUT, msg: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile("Timeout "+IPAddress+ " [checkConnection]") | 
					
						
							|  |  |  |             return [0, "371 Timeout while making connection to this server [checkConnection]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except pexpect.EOF, msg: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile("EOF "+IPAddress+ "[checkConnection]") | 
					
						
							|  |  |  |             return [0, "374 Remote Server is not able to authenticate for transfer to initiate. [checkConnection]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg)+" " +IPAddress+ " [checkConnection]") | 
					
						
							|  |  |  |             return [0, "377 Remote Server is not able to authenticate for transfer to initiate. [checkConnection]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def verifyHostKey(IPAddress): | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             backupUtilities.host_key_verification(IPAddress) | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             password = "hello" ## dumb password, not used anywhere. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             expectation = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             expectation.append("continue connecting (yes/no)?") | 
					
						
							|  |  |  |             expectation.append("password:") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-05 03:02:51 +05:00
										 |  |  |             setupSSHKeys = pexpect.spawn("ssh cyberpanel@" + IPAddress, timeout=3) | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             index = setupSSHKeys.expect(expectation) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if index == 0: | 
					
						
							|  |  |  |                 setupSSHKeys.sendline("yes") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 setupSSHKeys.expect("password:") | 
					
						
							|  |  |  |                 setupSSHKeys.sendline(password) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 expectation = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 expectation.append("password:") | 
					
						
							|  |  |  |                 expectation.append(pexpect.EOF) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 innerIndex = setupSSHKeys.expect(expectation) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if innerIndex == 0: | 
					
						
							|  |  |  |                     setupSSHKeys.kill(signal.SIGTERM) | 
					
						
							|  |  |  |                     return [1, "None"] | 
					
						
							|  |  |  |                 elif innerIndex == 1: | 
					
						
							|  |  |  |                     setupSSHKeys.kill(signal.SIGTERM) | 
					
						
							|  |  |  |                     return [1, "None"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             elif index == 1: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 setupSSHKeys.expect("password:") | 
					
						
							|  |  |  |                 setupSSHKeys.sendline(password) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 expectation = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 expectation.append("password:") | 
					
						
							|  |  |  |                 expectation.append(pexpect.EOF) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 innerIndex = setupSSHKeys.expect(expectation) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if innerIndex == 0: | 
					
						
							|  |  |  |                     setupSSHKeys.kill(signal.SIGTERM) | 
					
						
							|  |  |  |                     return [1, "None"] | 
					
						
							|  |  |  |                 elif innerIndex == 1: | 
					
						
							|  |  |  |                     setupSSHKeys.kill(signal.SIGTERM) | 
					
						
							|  |  |  |                     return [1, "None"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except pexpect.TIMEOUT, msg: | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile("Timeout [verifyHostKey]") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             return [0,"Timeout [verifyHostKey]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except pexpect.EOF, msg: | 
					
						
							| 
									
										
										
										
											2017-10-26 23:50:59 +05:00
										 |  |  |             logging.CyberCPLogFileWriter.writeToFile("EOF [verifyHostKey]") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             return [0,"EOF [verifyHostKey]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [verifyHostKey]") | 
					
						
							| 
									
										
										
										
											2017-10-29 22:16:06 +05:00
										 |  |  |             return [0,str(msg)+" [verifyHostKey]"] | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2017-11-05 21:07:12 +05:00
										 |  |  |     def createBackupDir(IPAddress,port): | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |             command = "sudo ssh -o StrictHostKeyChecking=no -p "+ port +" -i /root/.ssh/cyberpanel root@"+IPAddress+" mkdir /home/backup" | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             subprocess.call(shlex.split(command)) | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [createBackupDir]") | 
					
						
							|  |  |  |             return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def host_key_verification(IPAddress): | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             command = 'sudo ssh-keygen -R ' + IPAddress | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |             subprocess.call(shlex.split(command)) | 
					
						
							| 
									
										
										
										
											2018-05-21 16:51:28 +05:00
										 |  |  |             return 1 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [host_key_verification]") | 
					
						
							|  |  |  |             return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-09 23:10:57 +05:00
										 |  |  |     @staticmethod | 
					
						
							|  |  |  |     def getAliases(masterDomain): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             confPath = os.path.join(virtualHostUtilities.Server_root, "conf/httpd_config.conf") | 
					
						
							|  |  |  |             command = "sudo cat " + confPath | 
					
						
							|  |  |  |             data = subprocess.check_output(shlex.split(command)).splitlines() | 
					
						
							|  |  |  |             aliases = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             for items in data: | 
					
						
							|  |  |  |                 if items.find(masterDomain) > -1 and items.find('map') > -1: | 
					
						
							|  |  |  |                     data = filter(None, items.split(" ")) | 
					
						
							|  |  |  |                     if data[1] == masterDomain: | 
					
						
							|  |  |  |                         length = len(data) | 
					
						
							|  |  |  |                         for i in range(3, length): | 
					
						
							|  |  |  |                             currentAlias = data[i].rstrip(',').strip('\n') | 
					
						
							|  |  |  |                             aliases.append(currentAlias) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return aliases | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + "  [getAliases]") | 
					
						
							|  |  |  |             print 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-24 19:16:36 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  | def submitBackupCreation(tempStoragePath, backupName, backupPath, backupDomain): | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2018-02-16 21:05:15 +05:00
										 |  |  |         ## /home/example.com/backup/backup-example-06-50-03-Thu-Feb-2018 -- tempStoragePath | 
					
						
							|  |  |  |         ## backup-example-06-50-03-Thu-Feb-2018 -- backup name | 
					
						
							|  |  |  |         ## /home/example.com/backup - backupPath | 
					
						
							|  |  |  |         ## /home/cyberpanel/1047.xml - metaPath | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |         backupUtilities.prepareBackupMeta(backupDomain, backupName, tempStoragePath, backupPath) | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         p = Process(target=backupUtilities.startBackup, args=(tempStoragePath, backupName, backupPath,)) | 
					
						
							|  |  |  |         p.start() | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |         pid = open(os.path.join(backupPath, 'pid'), "w") | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |         pid.write(str(p.pid)) | 
					
						
							|  |  |  |         pid.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         print "1,None" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |     except BaseException, msg: | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |         logging.CyberCPLogFileWriter.writeToFile( | 
					
						
							|  |  |  |             str(msg) + "  [submitBackupCreation]") | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |         print "0," + str(msg) | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | def cancelBackupCreation(backupCancellationDomain,fileName): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         path = "/home/" + backupCancellationDomain + "/backup/pid" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pid = open(path, "r").readlines()[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.kill(int(pid), signal.SIGKILL) | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [cancelBackupCreation]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         backupPath = "/home/" + backupCancellationDomain + "/backup/" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         tempStoragePath = backupPath + fileName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.remove(tempStoragePath + ".tar.gz") | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [cancelBackupCreation]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             rmtree(tempStoragePath) | 
					
						
							|  |  |  |         except BaseException, msg: | 
					
						
							|  |  |  |             logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [cancelBackupCreation]") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         status = open(backupPath + 'status', "w") | 
					
						
							|  |  |  |         status.write("Aborted manually. [5009]") | 
					
						
							|  |  |  |         status.close() | 
					
						
							|  |  |  |     except BaseException,msg: | 
					
						
							|  |  |  |         logging.CyberCPLogFileWriter.writeToFile( | 
					
						
							|  |  |  |             str(msg) + "  [cancelBackupCreation]") | 
					
						
							|  |  |  |         print "0,"+str(msg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def submitRestore(backupFile,dir): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         p = Process(target=backupUtilities.startRestore, args=(backupFile, dir,)) | 
					
						
							|  |  |  |         p.start() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         print "1,None" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     except BaseException,msg: | 
					
						
							|  |  |  |         logging.CyberCPLogFileWriter.writeToFile( | 
					
						
							|  |  |  |             str(msg) + "  [cancelBackupCreation]") | 
					
						
							|  |  |  |         print "0,"+str(msg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parser = argparse.ArgumentParser(description='CyberPanel Installer') | 
					
						
							|  |  |  |     parser.add_argument('function', help='Specific a function to call!') | 
					
						
							|  |  |  |     parser.add_argument('--tempStoragePath', help='') | 
					
						
							|  |  |  |     parser.add_argument('--backupName', help='!') | 
					
						
							|  |  |  |     parser.add_argument('--backupPath', help='') | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |     parser.add_argument('--backupDomain', help='') | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |     parser.add_argument('--metaPath', help='') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ## backup cancellation arguments | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parser.add_argument('--backupCancellationDomain', help='') | 
					
						
							|  |  |  |     parser.add_argument('--fileName', help='') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ## backup restore arguments | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parser.add_argument('--backupFile', help='') | 
					
						
							|  |  |  |     parser.add_argument('--dir', help='') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     args = parser.parse_args() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if args.function == "submitBackupCreation": | 
					
						
							| 
									
										
										
										
											2018-06-05 00:53:45 +05:00
										 |  |  |         submitBackupCreation(args.tempStoragePath,args.backupName,args.backupPath, args.backupDomain) | 
					
						
							| 
									
										
										
										
											2017-12-09 22:30:10 +05:00
										 |  |  |     elif args.function == "cancelBackupCreation": | 
					
						
							|  |  |  |         cancelBackupCreation(args.backupCancellationDomain,args.fileName) | 
					
						
							|  |  |  |     elif args.function == "submitRestore": | 
					
						
							|  |  |  |         submitRestore(args.backupFile,args.dir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2018-02-19 23:42:57 +05:00
										 |  |  |     main() |