예제 #1
0
                pass

            ## emails extracted

            ## Change permissions

            command = "chmod -r vmail:vmail " + emailHome
            subprocess.call(shlex.split(command))

            ##

            status = open(os.path.join(completPath,'status'), "w")
            status.write("Done")
            status.close()

            installUtilities.reStartLiteSpeed()

            command = "chown -R " + externalApp + ":" + externalApp + " " + websiteHome
            cmd = shlex.split(command)
            subprocess.call(cmd)

        except BaseException, msg:
            status = open(os.path.join(completPath,'status'), "w")
            status.write(str(msg) + " [5009]")
            status.close()
            logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startRestore]")

    @staticmethod
    def initiateRestore(backupName,dir):
        try:
            p = Process(target=backupUtilities.startRestore, args=(backupName, dir,))
예제 #2
0
    def installWordPress(self):
        try:

            admin = self.extraArgs['admin']
            domainName = self.extraArgs['domainName']
            home = self.extraArgs['home']
            tempStatusPath = self.extraArgs['tempStatusPath']
            blogTitle = self.extraArgs['blogTitle']
            adminUser = self.extraArgs['adminUser']
            adminPassword = self.extraArgs['adminPassword']
            adminEmail = self.extraArgs['adminEmail']

            ### Check WP CLI

            try:
                command = 'sudo wp --info'
                res = subprocess.call(shlex.split(command))

                if res == 1:
                    self.installWPCLI()
            except subprocess.CalledProcessError:
                self.installWPCLI()

            ## Open Status File

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Setting up paths,0')
            statusFile.close()

            try:
                website = ChildDomains.objects.get(domain=domainName)
                externalApp = website.master.externalApp

                if admin.type != 1:
                    if website.master.admin != admin:
                        statusFile = open(tempStatusPath, 'w')
                        statusFile.writelines("You do not own this website." +
                                              " [404]")
                        statusFile.close()
                        return 0

            except:
                website = Websites.objects.get(domain=domainName)
                externalApp = website.externalApp

                if admin.type != 1:
                    if website.admin != admin:
                        statusFile = open(tempStatusPath, 'w')
                        statusFile.writelines("You do not own this website." +
                                              " [404]")
                        statusFile.close()
                        return 0

            finalPath = ""

            if home == '0':
                path = self.extraArgs['path']
                finalPath = "/home/" + domainName + "/public_html/" + path + "/"
            else:
                finalPath = "/home/" + domainName + "/public_html/"

            ## Security Check

            if finalPath.find("..") > -1:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Specified path must be inside virtual host home." +
                    " [404]")
                statusFile.close()
                return 0

            FNULL = open(os.devnull, 'w')

            if not os.path.exists(finalPath):
                command = 'sudo mkdir -p ' + finalPath
                subprocess.call(shlex.split(command))

            ## checking for directories/files

            dirFiles = os.listdir(finalPath)

            if len(dirFiles) == 1:
                if dirFiles[0] == ".well-known":
                    pass
                else:
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines(
                        "Target directory should be empty before installation, otherwise data loss could occur."
                        + " [404]")
                    statusFile.close()
                    return 0
            elif len(dirFiles) == 0:
                pass
            else:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Target directory should be empty before installation, otherwise data loss could occur."
                    + " [404]")
                statusFile.close()
                return 0

            ## DB Creation

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Setting up Database,20')
            statusFile.close()

            dbName = randomPassword.generate_pass()
            dbUser = dbName
            dbPassword = randomPassword.generate_pass()

            ## DB Creation

            if website.package.dataBases > website.databases_set.all().count():
                pass
            else:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Maximum database limit reached for this website." +
                    " [404]")
                statusFile.close()
                return 0

            if Databases.objects.filter(
                    dbName=dbName).exists() or Databases.objects.filter(
                        dbUser=dbUser).exists():
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "This database or user is already taken." + " [404]")
                statusFile.close()
                return 0

            result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)

            if result == 1:
                pass
            else:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines("Not able to create database." +
                                      " [404]")
                statusFile.close()
                return 0

            db = Databases(website=website, dbName=dbName, dbUser=dbUser)
            db.save()

            ####

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Downloading WordPress Core,30')
            statusFile.close()

            command = "sudo wp core download --allow-root --path=" + finalPath
            subprocess.call(shlex.split(command))

            ##

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Configuring the installation,40')
            statusFile.close()

            command = "sudo wp core config --dbname=" + dbName + " --dbuser="******" --dbpass="******" --dbhost=localhost --dbprefix=wp_ --allow-root --path=" + finalPath
            subprocess.call(shlex.split(command))

            if home == '0':
                path = self.extraArgs['path']
                finalURL = domainName + '/' + path
            else:
                finalURL = domainName

            command = 'sudo wp core install --url="http://' + finalURL + '" --title="' + blogTitle + '" --admin_user="******" --admin_password="******" --admin_email="' + adminEmail + '" --allow-root --path=' + finalPath
            subprocess.call(shlex.split(command))

            ##

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Installing LSCache Plugin,80')
            statusFile.close()

            command = "sudo wp plugin install litespeed-cache --allow-root --path=" + finalPath
            subprocess.call(shlex.split(command))

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Activating LSCache Plugin,90')
            statusFile.close()

            command = "sudo wp plugin activate litespeed-cache --allow-root --path=" + finalPath
            subprocess.call(shlex.split(command))

            ##

            command = "sudo chown -R " + externalApp + ":" + externalApp + " " + "/home/" + domainName + "/public_html/"
            cmd = shlex.split(command)
            res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)

            vhost.addRewriteRules(domainName)
            installUtilities.reStartLiteSpeed()

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines("Successfully Installed. [200]")
            statusFile.close()
            return 0

        except BaseException, msg:
            # remove the downloaded files
            try:

                command = "sudo rm -rf " + finalPath
                cmd = shlex.split(command)
                res = subprocess.call(cmd,
                                      stdout=FNULL,
                                      stderr=subprocess.STDOUT)

            except BaseException, msg:
                logging.writeToFile(str(msg) + " [installWordPress]")
예제 #3
0
    def installJoomla(self):

        try:

            domainName = self.extraArgs['domainName']
            finalPath = self.extraArgs['finalPath']
            virtualHostUser = self.extraArgs['virtualHostUser']
            dbName = self.extraArgs['dbName']
            dbUser = self.extraArgs['dbUser']
            dbPassword = self.extraArgs['dbPassword']
            username = self.extraArgs['username']
            password = self.extraArgs['password']
            prefix = self.extraArgs['prefix']
            sitename = self.extraArgs['sitename']
            tempStatusPath = self.extraArgs['tempStatusPath']

            FNULL = open(os.devnull, 'w')

            if not os.path.exists(finalPath):
                os.makedirs(finalPath)

            ## checking for directories/files

            dirFiles = os.listdir(finalPath)

            if len(dirFiles) == 1:
                if dirFiles[0] == ".well-known":
                    pass
                else:
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines(
                        "Target directory should be empty before installation, otherwise data loss could occur."
                        + " [404]")
                    statusFile.close()
                    return 0
            elif len(dirFiles) == 0:
                pass
            else:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Target directory should be empty before installation, otherwise data loss could occur."
                    + " [404]")
                statusFile.close()
                return 0

            ## Get Joomla

            os.chdir(finalPath)

            if not os.path.exists("staging.zip"):
                command = 'wget --no-check-certificate https://github.com/joomla/joomla-cms/archive/staging.zip -P ' + finalPath
                cmd = shlex.split(command)
                res = subprocess.call(cmd,
                                      stdout=FNULL,
                                      stderr=subprocess.STDOUT)
            else:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines("File already exists." + " [404]")
                statusFile.close()
                return 0

            command = 'unzip ' + finalPath + 'staging.zip -d ' + finalPath
            cmd = shlex.split(command)

            res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
            os.remove(finalPath + 'staging.zip')

            command = 'cp -r ' + finalPath + 'joomla-cms-staging/. ' + finalPath
            cmd = shlex.split(command)
            res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)

            shutil.rmtree(finalPath + "joomla-cms-staging")
            os.rename(finalPath + "installation/configuration.php-dist",
                      finalPath + "configuration.php")
            os.rename(finalPath + "robots.txt.dist", finalPath + "robots.txt")
            os.rename(finalPath + "htaccess.txt", finalPath + ".htaccess")

            ## edit config file

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Creating configuration files.,40')
            statusFile.close()

            configfile = finalPath + "configuration.php"

            data = open(configfile, "r").readlines()

            writeDataToFile = open(configfile, "w")

            secret = randomPassword.generate_pass()

            defDBName = "   public $user = '******';" + "\n"
            defDBUser = "******" + dbUser + "';" + "\n"
            defDBPassword = "******" + dbPassword + "';" + "\n"
            secretKey = "   public $secret = '" + secret + "';" + "\n"
            logPath = "   public $log_path = '" + finalPath + "administrator/logs';" + "\n"
            tmpPath = "   public $tmp_path = '" + finalPath + "administrator/tmp';" + "\n"
            dbprefix = "   public $dbprefix = '" + prefix + "';" + "\n"
            sitename = "   public $sitename = '" + sitename + "';" + "\n"

            for items in data:
                if items.find("public $user ") > -1:
                    writeDataToFile.writelines(defDBUser)
                elif items.find("public $password ") > -1:
                    writeDataToFile.writelines(defDBPassword)
                elif items.find("public $db ") > -1:
                    writeDataToFile.writelines(defDBName)
                elif items.find("public $log_path ") > -1:
                    writeDataToFile.writelines(logPath)
                elif items.find("public $tmp_path ") > -1:
                    writeDataToFile.writelines(tmpPath)
                elif items.find("public $secret ") > -1:
                    writeDataToFile.writelines(secretKey)
                elif items.find("public $dbprefix ") > -1:
                    writeDataToFile.writelines(dbprefix)
                elif items.find("public $sitename ") > -1:
                    writeDataToFile.writelines(sitename)
                elif items.find("/*") > -1:
                    pass
                elif items.find(" *") > -1:
                    pass
                else:
                    writeDataToFile.writelines(items)

            writeDataToFile.close()

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Creating default user..,70')
            statusFile.close()

            # Rename SQL db prefix

            f1 = open(finalPath + 'installation/sql/mysql/joomla.sql', 'r')
            f2 = open('installation/sql/mysql/joomlaInstall.sql', 'w')
            for line in f1:
                f2.write(line.replace('#__', prefix))
            f1.close()
            f2.close()

            # Restore SQL
            proc = subprocess.Popen([
                "mysql",
                "--user=%s" % dbUser,
                "--password=%s" % dbPassword, dbName
            ],
                                    stdin=subprocess.PIPE,
                                    stdout=subprocess.PIPE)

            usercreation = """INSERT INTO `%susers`
            (`name`, `username`, `password`, `params`)
            VALUES ('Administrator', '%s',
            '%s', '');
            INSERT INTO `%suser_usergroup_map` (`user_id`,`group_id`)
            VALUES (LAST_INSERT_ID(),'8');""" % (prefix, username, password,
                                                 prefix)

            out, err = proc.communicate(
                file(finalPath +
                     'installation/sql/mysql/joomlaInstall.sql').read() +
                "\n" + usercreation)

            shutil.rmtree(finalPath + "installation")

            command = "chown -R " + virtualHostUser + ":" + virtualHostUser + " " + "/home/" + domainName + "/public_html/"

            cmd = shlex.split(command)

            res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)

            vhost.addRewriteRules(domainName)

            installUtilities.reStartLiteSpeed()

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines("Successfully Installed. [200]")
            statusFile.close()
            return 0

        except BaseException, msg:
            # remove the downloaded files
            try:
                shutil.rmtree(finalPath)
            except:
                logging.writeToFile("shutil.rmtree(finalPath)")

            homeDir = "/home/" + domainName + "/public_html"

            if not os.path.exists(homeDir):
                FNULL = open(os.devnull, 'w')
                os.mkdir(homeDir)
                command = "chown -R " + virtualHostUser + ":" + virtualHostUser + " " + homeDir
                cmd = shlex.split(command)
                res = subprocess.call(cmd,
                                      stdout=FNULL,
                                      stderr=subprocess.STDOUT)

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines(str(msg) + " [404]")
            statusFile.close()
            return 0
예제 #4
0
    def installMagento(self):
        try:

            username = self.extraArgs['username']
            domainName = self.extraArgs['domainName']
            home = self.extraArgs['home']
            firstName = self.extraArgs['firstName']
            lastName = self.extraArgs['lastName']
            email = self.extraArgs['email']
            password = self.extraArgs['password']
            tempStatusPath = self.extraArgs['tempStatusPath']
            sampleData = self.extraArgs['sampleData']

            FNULL = open(os.devnull, 'w')

            ## Open Status File

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Setting up paths,0')
            statusFile.close()

            finalPath = ''

            try:
                website = ChildDomains.objects.get(domain=domainName)
                externalApp = website.master.externalApp

                if home == '0':
                    path = self.extraArgs['path']
                    finalPath = website.path.rstrip('/') + "/" + path + "/"
                else:
                    finalPath = website.path + "/"

                if website.master.package.dataBases > website.master.databases_set.all(
                ).count():
                    pass
                else:
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines(
                        "Maximum database limit reached for this website." +
                        " [404]")
                    statusFile.close()
                    return 0

                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines('Setting up Database,20')
                statusFile.close()

                dbName, dbUser, dbPassword = self.dbCreation(
                    tempStatusPath, website.master)

            except:
                website = Websites.objects.get(domain=domainName)
                externalApp = website.externalApp

                if home == '0':
                    path = self.extraArgs['path']
                    finalPath = "/home/" + domainName + "/public_html/" + path + "/"
                else:
                    finalPath = "/home/" + domainName + "/public_html/"

                if website.package.dataBases > website.databases_set.all(
                ).count():
                    pass
                else:
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines(
                        "Maximum database limit reached for this website." +
                        " [404]")
                    statusFile.close()
                    return 0

                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines('Setting up Database,20')
                statusFile.close()

                dbName, dbUser, dbPassword = self.dbCreation(
                    tempStatusPath, website)

            ## Security Check

            if finalPath.find("..") > -1:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Specified path must be inside virtual host home." +
                    " [404]")
                statusFile.close()
                return 0

            if not os.path.exists(finalPath):
                command = 'sudo mkdir -p ' + finalPath
                ProcessUtilities.executioner(command, externalApp)

            ## checking for directories/files

            if self.dataLossCheck(finalPath, tempStatusPath) == 0:
                return 0

            ####

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines(
                'Downloading and extracting Magento Core..,30')
            statusFile.close()

            if sampleData:
                command = "sudo wget http://cyberpanelsh.b-cdn.net/latest-sample.tar.gz -P %s" % (
                    finalPath)
            else:
                command = "sudo wget http://cyberpanelsh.b-cdn.net/latest.tar.gz -P %s" % (
                    finalPath)

            ProcessUtilities.executioner(command, externalApp)

            if sampleData:
                command = 'tar -xf %slatest-sample.tar.gz --directory %s' % (
                    finalPath, finalPath)
            else:
                command = 'tar -xf %slatest.tar.gz --directory %s' % (
                    finalPath, finalPath)

            ProcessUtilities.executioner(command, externalApp)

            ##

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Configuring the installation,40')
            statusFile.close()

            if home == '0':
                path = self.extraArgs['path']
                # finalURL = domainName + '/' + path
                finalURL = domainName
            else:
                finalURL = domainName

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Installing and configuring Magento..,60')
            statusFile.close()

            command = '/usr/local/lsws/lsphp72/bin/php -d memory_limit=512M %sbin/magento setup:install --backend-frontname="admin" ' \
                      '--db-host="localhost" --db-name="%s" --db-user="******" --db-password="******" ' \
                      '--base-url="http://%s" --base-url-secure="https://%s/" --admin-user="******" ' \
                      '--admin-password="******" --admin-email="%s" --admin-firstname="%s" --admin-lastname="%s"' \
                      % (finalPath, dbName, dbUser, dbPassword, finalURL, finalURL, username, password, email, firstName, lastName)
            result = ProcessUtilities.outputExecutioner(command, externalApp)
            logging.writeToFile(result)

            ##

            if sampleData:
                command = 'rm -rf %slatest-sample.tar.gz' % (finalPath)
            else:
                command = 'rm -rf %slatest.tar.gz' % (finalPath)

            ProcessUtilities.executioner(command, externalApp)

            ##

            command = "sudo chown -R " + externalApp + ":" + externalApp + " " + finalPath
            ProcessUtilities.executioner(command, externalApp)

            installUtilities.reStartLiteSpeed()

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines("Successfully Installed. [200]")
            statusFile.close()
            return 0

        except BaseException, msg:
            # remove the downloaded files

            homeDir = "/home/" + domainName + "/public_html"

            if not os.path.exists(homeDir):
                command = "sudo chown -R " + externalApp + ":" + externalApp + " " + homeDir
                ProcessUtilities.executioner(command, externalApp)

            try:
                mysqlUtilities.deleteDatabase(dbName, dbUser)
                db = Databases.objects.get(dbName=dbName)
                db.delete()
            except:
                pass

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines(str(msg) + " [404]")
            statusFile.close()
            return 0
예제 #5
0
    def setupGit(self):
        try:
            admin = self.extraArgs['admin']
            domainName = self.extraArgs['domainName']
            username = self.extraArgs['username']
            reponame = self.extraArgs['reponame']
            branch = self.extraArgs['branch']
            tempStatusPath = self.extraArgs['tempStatusPath']
            defaultProvider = self.extraArgs['defaultProvider']

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Checking if GIT installed..,0')
            statusFile.close()

            ### Check git

            try:
                command = 'sudo git --help'
                output = ProcessUtilities.outputExecutioner(command)

                if output.find('command not found') > -1:
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines('Installing GIT..,0')
                    statusFile.close()
                    self.installGit()
                    statusFile = open(tempStatusPath, 'w')
                    statusFile.writelines('GIT successfully installed,20')
                    statusFile.close()
            except subprocess.CalledProcessError:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines('Installing GIT..,0')
                statusFile.close()
                self.installGit()
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines('GIT successfully installed.,20')
                statusFile.close()

            ## Open Status File

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Setting up directories..,20')
            statusFile.close()

            try:
                website = ChildDomains.objects.get(domain=domainName)
                externalApp = website.master.externalApp
                finalPath = website.path

            except:
                website = Websites.objects.get(domain=domainName)
                externalApp = website.externalApp
                finalPath = "/home/" + domainName + "/public_html/"

            ## Security Check

            if finalPath.find("..") > -1:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    "Specified path must be inside virtual host home." +
                    " [404]")
                statusFile.close()
                return 0

            command = 'sudo mkdir -p ' + finalPath
            ProcessUtilities.executioner(command, externalApp)

            ## checking for directories/files

            if self.dataLossCheck(finalPath, tempStatusPath) == 0:
                return 0

            ####

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines('Cloning the repo..,40')
            statusFile.close()

            try:
                command = 'git clone --depth 1 --no-single-branch git@' + defaultProvider + '.com:' + username + '/' + reponame + '.git -b ' + branch + ' ' + finalPath
                ProcessUtilities.executioner(command, externalApp)
            except subprocess.CalledProcessError, msg:
                statusFile = open(tempStatusPath, 'w')
                statusFile.writelines(
                    'Failed to clone repository, make sure you deployed your key to repository. [404]'
                )
                statusFile.close()
                return 0

            ##

            command = "sudo chown -R " + externalApp + ":" + externalApp + " " + finalPath
            ProcessUtilities.executioner(command, externalApp)

            vhost.addRewriteRules(domainName)
            installUtilities.reStartLiteSpeed()

            mailUtilities.checkHome()

            gitPath = '/home/cyberpanel/' + domainName + '.git'
            writeToFile = open(gitPath, 'w')
            writeToFile.write(username + ':' + reponame)
            writeToFile.close()

            statusFile = open(tempStatusPath, 'w')
            statusFile.writelines(
                "GIT Repository successfully attached. [200]")
            statusFile.close()
            return 0
예제 #6
0
                if dbCheck == 1:
                    dbData = items.split('--')
                    mysqlUtilities.mysqlUtilities.restoreDatabaseBackup(dbData[0], completPath, dbData[2].strip('\n'))

            status = open(completPath + '/status', "w")
            status.write("Extracting web home data")
            status.close()

            tar = tarfile.open(pathToCompressedHome)
            tar.extractall(websiteHome)
            tar.close()

            status = open(completPath + '/status', "w")
            status.write("Done")
            status.close()
            installUtilities.reStartLiteSpeed()

            command = "chown -R " + externalApp + ":" + externalApp + " " + websiteHome

            cmd = shlex.split(command)

            subprocess.call(cmd)

        except BaseException, msg:
            status = open(completPath + '/status', "w")
            status.write(str(msg) + " [5009]")
            status.close()
            logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [startRestore]")

    @staticmethod
    def initiateRestore(backupName,dir):