HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/plogical/restoreMeta.py
#!/usr/local/CyberCP/bin/python
import os.path
import sys

sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
import django
django.setup()

from websiteFunctions.models import Websites
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
from xml.etree import ElementTree
import plogical.mysqlUtilities as mysqlUtilities
from databases.models import Databases
import argparse
try:
    from plogical.virtualHostUtilities import virtualHostUtilities
    from plogical.mailUtilities import mailUtilities
    from plogical.processUtilities import ProcessUtilities
except:
    pass


class restoreMeta():

    @staticmethod
    def startRestore(metaPath, statusPath):
        try:

            ## extracting master domain for later use
            backupMetaData = ElementTree.parse(metaPath)
            masterDomain = backupMetaData.find('masterDomain').text

            ########### Creating child/sub/addon/parked domains

            logging.statusWriter(statusPath, "Creating Child Domains!", 1)

            ### Restoring Child Domains if any.

            childDomains = backupMetaData.findall('ChildDomains/domain')

            try:
                for childDomain in childDomains:

                    domain = childDomain.find('domain').text
                    phpSelection = childDomain.find('phpSelection').text
                    path = childDomain.find('path').text

                    virtualHostUtilities.createDomain(masterDomain, domain, phpSelection, path, 0, 0, 0,
                                                                  'admin', 0)
            except BaseException as msg:
                logging.writeToFile(str(msg) + " [startRestore]")
                return 0

            ## Restore Aliases

            logging.statusWriter(statusPath, "Restoring Domain Aliases!", 1)

            aliases = backupMetaData.findall('Aliases/alias')

            for items in aliases:
                virtualHostUtilities.createAlias(masterDomain, items.text, 0, "", "", "admin")

            ## Restoring email accounts

            logging.statusWriter(statusPath, "Restoring email accounts!", 1)

            emailAccounts = backupMetaData.findall('emails/emailAccount')

            try:
                for emailAccount in emailAccounts:

                    email = emailAccount.find('email').text
                    username = email.split("@")[0]
                    password = emailAccount.find('password').text

                    result = mailUtilities.createEmailAccount(masterDomain, username, password)
                    if result[0] == 0:
                        logging.statusWriter(statusPath, 'Email existed, updating password according to last snapshot. %s' % (email))
                        if mailUtilities.changeEmailPassword(email, password, 1)[0] == 0:
                            logging.statusWriter(statusPath,
                                                 'Failed changing password for: %s' % (
                                                     email))
                        else:
                            logging.statusWriter(statusPath,
                                                 'Password changed for: %s' % (
                                                     email))

                    else:
                        logging.statusWriter(statusPath,
                                             'Email created: %s' % (
                                                 email))

            except BaseException as msg:
                logging.writeToFile(str(msg) + " [startRestore]")
                return 0

            ## Emails restored

            ## restoring databases

            logging.statusWriter(statusPath, "Restoring Databases!", 1)

            ## Create databases

            databases = backupMetaData.findall('Databases/database')
            website = Websites.objects.get(domain=masterDomain)

            for database in databases:

                dbName = database.find('dbName').text

                logging.writeToFile('Backup version 2.1.1 detected..')

                first = 1

                databaseUsers = database.findall('databaseUsers')

                for databaseUser in databaseUsers:

                    dbUser = databaseUser.find('dbUser').text
                    dbHost = databaseUser.find('dbHost').text
                    password = databaseUser.find('password').text

                    if os.path.exists(ProcessUtilities.debugPath):
                        logging.writeToFile('Database user: %s' % (dbUser))
                        logging.writeToFile('Database host: %s' % (dbHost))
                        logging.writeToFile('Database password: %s' % (password))

                    if first:

                        first = 0

                        try:
                            dbExist = Databases.objects.get(dbName=dbName)
                            logging.statusWriter(statusPath, 'Database exists, changing Database password.. %s' % (dbName))

                            if mysqlUtilities.mysqlUtilities.changePassword(dbUser, password, 1, dbHost) == 0:
                                logging.statusWriter(statusPath, 'Failed changing password for database: %s' % (dbName))
                            else:
                                logging.statusWriter(statusPath, 'Password successfully changed for database: %s.' % (dbName))

                        except:

                            logging.statusWriter(statusPath, 'Database did not exist, creating new.. %s' % (dbName))

                            if mysqlUtilities.mysqlUtilities.createDatabase(dbName, dbUser, "cyberpanel") == 0:
                                logging.statusWriter(statusPath, 'Failed the creation of database: %s' % (dbName))
                            else:
                                logging.statusWriter(statusPath, 'Database: %s successfully created.' % (dbName))

                            mysqlUtilities.mysqlUtilities.changePassword(dbUser, password, 1)

                            if mysqlUtilities.mysqlUtilities.changePassword(dbUser, password, 1) == 0:
                                logging.statusWriter(statusPath, 'Failed changing password for database: %s' % (dbName))
                            else:
                                logging.statusWriter(statusPath, 'Password successfully changed for database: %s.' % (dbName))

                            try:
                                newDB = Databases(website=website, dbName=dbName, dbUser=dbUser)
                                newDB.save()
                            except:
                                pass

                    ## This function will not create database, only database user is created as third value is 0 for createDB

                    mysqlUtilities.mysqlUtilities.createDatabase(dbName, dbUser, password, 0, dbHost)
                    mysqlUtilities.mysqlUtilities.changePassword(dbUser, password, 1, dbHost)


            ## Databases restored

            try:
                os.remove(metaPath)
            except:
                pass

        except BaseException as msg:
            logging.writeToFile(str(msg) + " [startRestore]")

def main():

    parser = argparse.ArgumentParser(description='CyberPanel Installer')
    parser.add_argument('function', help='Specific a function to call!')
    parser.add_argument('--metaPath', help='')
    parser.add_argument('--statusFile', help='!')

    ## backup restore arguments

    parser.add_argument('--backupFile', help='')
    parser.add_argument('--dir', help='')

    args = parser.parse_args()


    if args.function == "submitRestore":
        restoreMeta.startRestore(args.metaPath,args.statusFile)

if __name__ == "__main__":
    main()