mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-05-07 12:56:51 +02:00
Improved WordPress installation process.
This commit is contained in:
281
plogical/applicationInstaller.py
Normal file
281
plogical/applicationInstaller.py
Normal file
@@ -0,0 +1,281 @@
|
||||
#!/usr/local/CyberCP/bin/python2
|
||||
import os,sys
|
||||
sys.path.append('/usr/local/CyberCP')
|
||||
import django
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||||
django.setup()
|
||||
import threading as multi
|
||||
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
||||
import subprocess
|
||||
import shlex
|
||||
from vhost import vhost
|
||||
from loginSystem.models import Administrator
|
||||
from websiteFunctions.models import ChildDomains, Websites
|
||||
import randomPassword
|
||||
from mysqlUtilities import mysqlUtilities
|
||||
from databases.models import Databases
|
||||
from installUtilities import installUtilities
|
||||
import shutil
|
||||
|
||||
|
||||
class ApplicationInstaller(multi.Thread):
|
||||
|
||||
def __init__(self, installApp, extraArgs):
|
||||
multi.Thread.__init__(self)
|
||||
self.installApp = installApp
|
||||
self.extraArgs = extraArgs
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
if self.installApp == 'wordpress':
|
||||
self.installWordPress()
|
||||
|
||||
except BaseException, msg:
|
||||
logging.writeToFile( str(msg) + ' [ApplicationInstaller.run]')
|
||||
|
||||
|
||||
def installWPCLI(self):
|
||||
try:
|
||||
command = 'sudo wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'
|
||||
subprocess.call(shlex.split(command))
|
||||
|
||||
command = 'sudo chmod +x wp-cli.phar'
|
||||
subprocess.call(shlex.split(command))
|
||||
|
||||
command = 'sudo mv wp-cli.phar /usr/bin/wp'
|
||||
subprocess.call(shlex.split(command))
|
||||
|
||||
except BaseException, msg:
|
||||
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installWPCLI]')
|
||||
|
||||
|
||||
|
||||
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:
|
||||
raise BaseException("Maximum database limit reached for this website.")
|
||||
|
||||
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(
|
||||
dbUser=dbUser).exists():
|
||||
raise BaseException("This database or user is already taken.")
|
||||
|
||||
result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)
|
||||
|
||||
if result == 1:
|
||||
pass
|
||||
else:
|
||||
raise BaseException("Not able to create database.")
|
||||
|
||||
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=" + dbUser + " --dbpass=" + dbPassword + " --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="' + adminUser + '" --admin_password="' + adminPassword + '" --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]")
|
||||
|
||||
homeDir = "/home/" + domainName + "/public_html"
|
||||
|
||||
if not os.path.exists(homeDir):
|
||||
FNULL = open(os.devnull, 'w')
|
||||
|
||||
command = 'sudo mkdir ' + homeDir
|
||||
subprocess.call(shlex.split(command))
|
||||
|
||||
|
||||
command = "sudo chown -R " + externalApp + ":" + externalApp + " " + homeDir
|
||||
cmd = shlex.split(command)
|
||||
res = subprocess.call(cmd, stdout=FNULL, stderr=subprocess.STDOUT)
|
||||
|
||||
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
|
||||
0
plogical/letsEncrypt.py
Normal file
0
plogical/letsEncrypt.py
Normal file
@@ -534,7 +534,7 @@ milter_default_action = accept
|
||||
subprocess.call(shlex.split(command))
|
||||
|
||||
writeToFile = open(postfixPath, 'a')
|
||||
writeToFile.writelines('smtpd_data_restrictions = check_policy_service inet:localhost:1089\n')
|
||||
writeToFile.writelines('smtpd_data_restrictions = check_policy_service unix:/var/log/policyServerSocket\n')
|
||||
writeToFile.close()
|
||||
|
||||
command = 'systemctl restart postfix'
|
||||
@@ -545,7 +545,7 @@ milter_default_action = accept
|
||||
writeToFile = open(postfixPath, 'w')
|
||||
|
||||
for items in data:
|
||||
if items.find('check_policy_service inet:localhost:1089') > -1:
|
||||
if items.find('check_policy_service unix:/var/log/policyServerSocket') > -1:
|
||||
continue
|
||||
else:
|
||||
writeToFile.writelines(items)
|
||||
|
||||
@@ -39,10 +39,12 @@ class virtualHostUtilities:
|
||||
try:
|
||||
|
||||
if Websites.objects.filter(domain=virtualHostName).count() > 0:
|
||||
raise BaseException("This website already exists.")
|
||||
print "0, This website already exists."
|
||||
return 0, "This website already exists."
|
||||
|
||||
if ChildDomains.objects.filter(domain=virtualHostName).count() > 0:
|
||||
raise BaseException("This website already exists as child domain.")
|
||||
print "0, This website already exists as child domain."
|
||||
return 0, "This website already exists as child domain."
|
||||
|
||||
####### Limitations Check End
|
||||
|
||||
@@ -55,10 +57,12 @@ class virtualHostUtilities:
|
||||
## zone creation
|
||||
|
||||
if vhost.checkIfVirtualHostExists(virtualHostName) == 1:
|
||||
raise BaseException("Virtual Host Directory already exists!")
|
||||
print "0, Virtual Host Directory already exists!"
|
||||
return 0, "Virtual Host Directory already exists!"
|
||||
|
||||
if vhost.checkIfAliasExists(virtualHostName) == 1:
|
||||
raise BaseException("This domain exists as Alias.")
|
||||
print "0, This domain exists as Alias."
|
||||
return 0, "This domain exists as Alias."
|
||||
|
||||
if dkimCheck == 1:
|
||||
if mailUtilities.checkIfDKIMInstalled() == 0:
|
||||
@@ -924,10 +928,12 @@ class virtualHostUtilities:
|
||||
DNS.dnsTemplate(virtualHostName, admin)
|
||||
|
||||
if Websites.objects.filter(domain=virtualHostName).count() > 0:
|
||||
raise BaseException("This Domain already exists as a website.")
|
||||
print "0, This Domain already exists as a website."
|
||||
return 0, "This Domain already exists as a website."
|
||||
|
||||
if ChildDomains.objects.filter(domain=virtualHostName).count() > 0:
|
||||
raise BaseException("This domain already exists as child domain.")
|
||||
print "0, This domain already exists as child domain."
|
||||
return 0, "This domain already exists as child domain."
|
||||
|
||||
####### Limitations check
|
||||
|
||||
@@ -939,16 +945,20 @@ class virtualHostUtilities:
|
||||
elif domainsInPackage > master.childdomains_set.all().count():
|
||||
pass
|
||||
else:
|
||||
raise BaseException("Exceeded maximum number of domains for this package")
|
||||
print "0, Exceeded maximum number of domains for this package"
|
||||
return 0, "Exceeded maximum number of domains for this package"
|
||||
|
||||
|
||||
####### Limitations Check End
|
||||
|
||||
|
||||
if vhost.checkIfVirtualHostExists(virtualHostName) == 1:
|
||||
raise BaseException("Virtual Host Directory already exists!")
|
||||
print "0, Virtual Host Directory already exists!"
|
||||
return 0, "Virtual Host Directory already exists!"
|
||||
|
||||
if vhost.checkIfAliasExists(virtualHostName) == 1:
|
||||
raise BaseException("This domain exists as Alias.")
|
||||
print "0, This domain exists as Alias."
|
||||
return 0, "This domain exists as Alias."
|
||||
|
||||
if dkimCheck == 1:
|
||||
if mailUtilities.checkIfDKIMInstalled() == 0:
|
||||
|
||||
Reference in New Issue
Block a user