mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-01 19:06:01 +01:00
Improved Joomla Installation process.
This commit is contained in:
@@ -18,14 +18,12 @@ import plogical.randomPassword as randomPassword
|
||||
import subprocess
|
||||
import shlex
|
||||
from databases.models import Databases
|
||||
from dns.models import Domains,Records
|
||||
import requests
|
||||
import re
|
||||
from random import randint
|
||||
import hashlib
|
||||
from xml.etree import ElementTree
|
||||
from plogical.mailUtilities import mailUtilities
|
||||
from plogical.applicationInstaller import ApplicationInstaller
|
||||
import time
|
||||
# Create your views here.
|
||||
|
||||
|
||||
@@ -1062,139 +1060,6 @@ def fetchErrorLogs(request):
|
||||
final_json = json.dumps({'logstatus': 0, 'error_message': str(msg)})
|
||||
return HttpResponse(final_json)
|
||||
|
||||
def installJoomla(request):
|
||||
try:
|
||||
val = request.session['userID']
|
||||
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
data = json.loads(request.body)
|
||||
domainName = data['domain']
|
||||
home = data['home']
|
||||
|
||||
sitename = data['sitename']
|
||||
username = data['username']
|
||||
password = data['password']
|
||||
prefix = data['prefix']
|
||||
|
||||
mailUtilities.checkHome()
|
||||
|
||||
finalPath = ""
|
||||
|
||||
if home == '0':
|
||||
path = data['path']
|
||||
finalPath = "/home/" + domainName + "/public_html/" + path + "/"
|
||||
else:
|
||||
finalPath = "/home/" + domainName + "/public_html/"
|
||||
|
||||
|
||||
if finalPath.find("..") > -1:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "Specified path must be inside virtual host home!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
admin = Administrator.objects.get(pk=val)
|
||||
|
||||
try:
|
||||
website = ChildDomains.objects.get(domain=domainName)
|
||||
externalApp = website.master.externalApp
|
||||
|
||||
if admin.type != 1:
|
||||
if website.master.admin != admin:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "You do not own this website!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
except:
|
||||
website = Websites.objects.get(domain=domainName)
|
||||
externalApp = website.externalApp
|
||||
|
||||
if admin.type != 1:
|
||||
if website.admin != admin:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "You do not own this website!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
## DB Creation
|
||||
|
||||
dbName = randomPassword.generate_pass()
|
||||
dbUser = dbName
|
||||
dbPassword = randomPassword.generate_pass()
|
||||
|
||||
|
||||
## DB Creation
|
||||
|
||||
if website.package.dataBases > website.databases_set.all().count():
|
||||
pass
|
||||
else:
|
||||
data_ret = {'installStatus': 0, 'error_message': "0,Maximum database limit reached for this website."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(
|
||||
dbUser=dbUser).exists():
|
||||
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "0,This database or user is already taken."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)
|
||||
|
||||
if result == 1:
|
||||
pass
|
||||
else:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "0,Not able to create database."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
db = Databases(website=website, dbName=dbName, dbUser=dbUser)
|
||||
db.save()
|
||||
|
||||
## Installation
|
||||
salt = randomPassword.generate_pass(32)
|
||||
#return salt
|
||||
password_hash = hashlib.md5(password + salt).hexdigest()
|
||||
password = password_hash + ":" + salt
|
||||
|
||||
|
||||
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
|
||||
|
||||
execPath = execPath + " installJoomla --virtualHostName " + domainName + " --virtualHostUser " + externalApp + " --path " + finalPath + " --dbName " + dbName + " --dbUser " + dbUser + " --dbPassword " + dbPassword + " --username " + username + " --password " + password +" --prefix " + prefix +" --sitename '" + sitename + "'"
|
||||
|
||||
#return execPath
|
||||
|
||||
|
||||
output = subprocess.check_output(shlex.split(execPath))
|
||||
|
||||
if output.find("1,None") > -1:
|
||||
data_ret = {"installStatus": 1}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
else:
|
||||
mysqlUtilities.deleteDatabase(dbName,dbUser)
|
||||
db = Databases.objects.get(dbName=dbName)
|
||||
db.delete()
|
||||
data_ret = {'installStatus': 0, 'error_message': output}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
## Installation ends
|
||||
|
||||
except BaseException, msg:
|
||||
data_ret = {'installStatus': 0, 'error_message': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
except KeyError, msg:
|
||||
status = {"installStatus":0,"error":str(msg)}
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installJoomla]")
|
||||
return HttpResponse("Not Logged in as admin")
|
||||
|
||||
def getDataFromConfigFile(request):
|
||||
try:
|
||||
val = request.session['userID']
|
||||
@@ -2400,6 +2265,8 @@ def installWordpress(request):
|
||||
background = ApplicationInstaller('wordpress', extraArgs)
|
||||
background.start()
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
data_ret = {'installStatus': 1, 'error_message': 'None', 'tempStatusPath': extraArgs['tempStatusPath']}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
@@ -2464,4 +2331,174 @@ def installWordpressStatus(request):
|
||||
except KeyError, msg:
|
||||
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
|
||||
def joomlaInstall(request, domain):
|
||||
try:
|
||||
val = request.session['userID']
|
||||
admin = Administrator.objects.get(pk=val)
|
||||
try:
|
||||
if admin.type != 1:
|
||||
website = Websites.objects.get(domain=domain)
|
||||
if website.admin != admin:
|
||||
raise BaseException('You do not own this website.')
|
||||
|
||||
|
||||
return render(request, 'websiteFunctions/installJoomla.html', {'domainName' : domain})
|
||||
except BaseException, msg:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||||
return HttpResponse(str(msg))
|
||||
except KeyError:
|
||||
return redirect(loadLoginPage)
|
||||
|
||||
|
||||
def installJoomla(request):
|
||||
try:
|
||||
val = request.session['userID']
|
||||
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
data = json.loads(request.body)
|
||||
domainName = data['domain']
|
||||
home = data['home']
|
||||
|
||||
sitename = data['sitename']
|
||||
username = data['username']
|
||||
password = data['password']
|
||||
prefix = data['prefix']
|
||||
|
||||
mailUtilities.checkHome()
|
||||
|
||||
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
|
||||
|
||||
statusFile = open(tempStatusPath, 'w')
|
||||
statusFile.writelines('Setting up paths,0')
|
||||
statusFile.close()
|
||||
|
||||
finalPath = ""
|
||||
|
||||
if home == '0':
|
||||
path = data['path']
|
||||
finalPath = "/home/" + domainName + "/public_html/" + path + "/"
|
||||
else:
|
||||
finalPath = "/home/" + domainName + "/public_html/"
|
||||
|
||||
|
||||
if finalPath.find("..") > -1:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "Specified path must be inside virtual host home!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
##
|
||||
|
||||
statusFile = open(tempStatusPath, 'w')
|
||||
statusFile.writelines('Creating database..,10')
|
||||
statusFile.close()
|
||||
|
||||
admin = Administrator.objects.get(pk=val)
|
||||
|
||||
try:
|
||||
website = ChildDomains.objects.get(domain=domainName)
|
||||
externalApp = website.master.externalApp
|
||||
|
||||
if admin.type != 1:
|
||||
if website.master.admin != admin:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "You do not own this website!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
except:
|
||||
website = Websites.objects.get(domain=domainName)
|
||||
externalApp = website.externalApp
|
||||
|
||||
if admin.type != 1:
|
||||
if website.admin != admin:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "You do not own this website!"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
## DB Creation
|
||||
|
||||
dbName = randomPassword.generate_pass()
|
||||
dbUser = dbName
|
||||
dbPassword = randomPassword.generate_pass()
|
||||
|
||||
|
||||
## DB Creation
|
||||
|
||||
if website.package.dataBases > website.databases_set.all().count():
|
||||
pass
|
||||
else:
|
||||
data_ret = {'installStatus': 0, 'error_message': "0,Maximum database limit reached for this website."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(
|
||||
dbUser=dbUser).exists():
|
||||
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "0,This database or user is already taken."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)
|
||||
|
||||
if result == 1:
|
||||
pass
|
||||
else:
|
||||
data_ret = {'installStatus': 0,
|
||||
'error_message': "0,Not able to create database."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
db = Databases(website=website, dbName=dbName, dbUser=dbUser)
|
||||
db.save()
|
||||
|
||||
## Installation
|
||||
salt = randomPassword.generate_pass(32)
|
||||
#return salt
|
||||
password_hash = hashlib.md5(password + salt).hexdigest()
|
||||
password = password_hash + ":" + salt
|
||||
|
||||
statusFile = open(tempStatusPath, 'w')
|
||||
statusFile.writelines('Downloading Joomla Core..,20')
|
||||
statusFile.close()
|
||||
|
||||
|
||||
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
|
||||
|
||||
execPath = execPath + " installJoomla --virtualHostName " + domainName + \
|
||||
" --virtualHostUser " + externalApp + " --path " + finalPath + " --dbName " + dbName + \
|
||||
" --dbUser " + dbUser + " --dbPassword " + dbPassword + " --username " + username + \
|
||||
" --password " + password +" --prefix " + prefix + " --sitename '" + sitename + "'" \
|
||||
+ " --tempStatusPath " + tempStatusPath
|
||||
|
||||
#return execPath
|
||||
|
||||
|
||||
output = subprocess.Popen(shlex.split(execPath))
|
||||
|
||||
data_ret = {"installStatus": 1, 'tempStatusPath': tempStatusPath}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
|
||||
## Installation ends
|
||||
|
||||
except BaseException, msg:
|
||||
data_ret = {'installStatus': 0, 'error_message': str(msg)}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
|
||||
except KeyError, msg:
|
||||
status = {"installStatus":0,"error":str(msg)}
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installJoomla]")
|
||||
return HttpResponse("Not Logged in as admin")
|
||||
Reference in New Issue
Block a user