Files
CyberPanel/websiteFunctions/views.py

2288 lines
85 KiB
Python
Raw Normal View History

2017-10-24 19:16:36 +05:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render,redirect
from django.http import HttpResponse
from loginSystem.models import Administrator
from packages.models import Package
from loginSystem.views import loadLoginPage
import plogical.CyberCPLogFileWriter as logging
from .models import Websites,ChildDomains
2017-10-24 19:16:36 +05:00
import json
from math import ceil
from plogical.mysqlUtilities import mysqlUtilities
import os
from plogical.virtualHostUtilities import virtualHostUtilities
from plogical.installUtilities import installUtilities
import plogical.randomPassword as randomPassword
import subprocess
import shlex
from databases.models import Databases
2017-12-09 22:30:10 +05:00
import re
from random import randint
2017-12-14 06:56:27 -05:00
import hashlib
2018-05-08 21:25:37 +05:00
from plogical.mailUtilities import mailUtilities
from plogical.applicationInstaller import ApplicationInstaller
2018-07-13 21:45:40 +05:00
import time
2018-08-18 00:39:10 +05:00
from plogical.acl import ACLManager
2017-10-24 19:16:36 +05:00
# Create your views here.
def loadWebsitesHome(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
return render(request,'websiteFunctions/index.html',{"type":admin.type})
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
2018-03-02 18:13:26 +05:00
def createWebsite(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-06-30 15:29:56 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['createWebsite'] == 1:
pass
2018-03-02 18:13:26 +05:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadError()
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
adminNames = ACLManager.loadAllUsers(userID)
packagesName = ACLManager.loadPackages(userID, currentACL)
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
Data = {'packageList': packagesName, "owernList":adminNames}
2018-03-02 18:13:26 +05:00
return render(request, 'websiteFunctions/createWebsite.html', Data)
2018-08-18 00:39:10 +05:00
2018-03-02 18:13:26 +05:00
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
except KeyError:
return redirect(loadLoginPage)
def modifyWebsite(request):
2018-03-01 16:11:49 +00:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-01 16:11:49 +00:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['modifyWebsite'] == 1:
pass
2018-03-01 16:11:49 +00:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadError()
2018-03-01 16:11:49 +00:00
2018-08-18 00:39:10 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
return render(request, 'websiteFunctions/modifyWebsite.html', {'websiteList':websitesName})
2018-03-01 16:11:49 +00:00
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
2018-03-02 18:13:26 +05:00
2018-03-01 16:11:49 +00:00
except KeyError:
return redirect(loadLoginPage)
2018-03-02 18:13:26 +05:00
def deleteWebsite(request):
2018-03-01 16:11:49 +00:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['deleteWebsite'] == 1:
pass
2018-03-02 18:13:26 +05:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadError()
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
return render(request, 'websiteFunctions/deleteWebsite.html', {'websiteList' : websitesName})
2018-03-02 18:13:26 +05:00
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
except KeyError:
return redirect(loadLoginPage)
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
def siteState(request):
2018-03-01 16:11:49 +00:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-01 16:11:49 +00:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['suspendWebsite'] == 1:
pass
2018-03-02 18:13:26 +05:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadError()
2018-03-02 18:13:26 +05:00
2018-08-18 00:39:10 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
return render(request, 'websiteFunctions/suspendWebsite.html', {'websiteList':websitesName})
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
except KeyError:
return redirect(loadLoginPage)
2018-03-01 16:11:49 +00:00
2018-03-02 18:13:26 +05:00
def submitWebsiteCreation(request):
2018-03-01 16:11:49 +00:00
try:
2018-06-30 15:29:56 +05:00
val = request.session['userID']
2018-03-01 16:11:49 +00:00
if request.method == 'POST':
2018-03-02 18:13:26 +05:00
data = json.loads(request.body)
2018-03-02 18:13:26 +05:00
domain = data['domainName']
adminEmail = data['adminEmail']
phpSelection = data['phpSelection']
packageName = data['package']
websiteOwner = data['websiteOwner']
externalApp = "".join(re.findall("[a-zA-Z]+", domain))[:7]
2018-07-30 17:33:28 +05:00
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
2018-03-02 18:13:26 +05:00
2018-03-02 18:13:26 +05:00
####### Limitations check
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(val)
if currentACL['admin'] == 1:
pass
elif currentACL['createWebsite'] == 1:
pass
else:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
newOwner = Administrator.objects.get(userName=websiteOwner)
if ACLManager.websitesLimitCheck(newOwner, 1) == 0:
data_ret = {'createWebSiteStatus': 0,
'error_message': "You've reached maximum websites limit as a reseller."}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
####### Limitations Check End
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
numberOfWebsites = str(Websites.objects.count() + ChildDomains.objects.count())
sslpath = "/home/" + domain + "/public_html"
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
## Create Configurations
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-11-05 03:02:51 +05:00
2018-06-01 02:08:21 +05:00
execPath = execPath + " createVirtualHost --virtualHostName " + domain + \
" --administratorEmail " + adminEmail + " --phpVersion '" + phpSelection + \
"' --virtualHostUser " + externalApp + " --numberOfSites " + numberOfWebsites + \
" --ssl " + str(data['ssl']) + " --sslPath " + sslpath + " --dkimCheck " + str(data['dkimCheck'])\
+ " --openBasedir " + str(data['openBasedir']) + ' --websiteOwner ' + websiteOwner \
2018-07-30 17:33:28 +05:00
+ ' --package ' + packageName + ' --tempStatusPath ' + tempStatusPath
2017-10-24 19:16:36 +05:00
2018-07-30 17:33:28 +05:00
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
2017-10-24 19:16:36 +05:00
2018-07-30 17:33:28 +05:00
data_ret = {'createWebSiteStatus': 1, 'error_message': "None", 'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-07-29 01:20:46 +05:00
2017-12-09 22:30:10 +05:00
except BaseException, msg:
2018-07-30 17:33:28 +05:00
data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg)}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitDomainCreation(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
masterDomain = data['masterDomain']
domain = data['domainName']
phpSelection = data['phpSelection']
2018-06-01 02:08:21 +05:00
path = data['path']
2018-07-30 17:33:28 +05:00
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
2018-06-01 02:08:21 +05:00
try:
restore = data['restore']
restore = '1'
2018-06-01 02:08:21 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-11-05 03:02:51 +05:00
2018-06-01 02:08:21 +05:00
execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
" --phpVersion '" + phpSelection + "' --ssl " + str(data['ssl']) + " --dkimCheck " + \
str(data['dkimCheck']) + " --openBasedir " + str(data['openBasedir']) + ' --path ' + path \
2018-07-30 17:33:28 +05:00
+ ' --restore ' + restore + ' --tempStatusPath ' + tempStatusPath
2017-11-05 03:02:51 +05:00
except:
2018-06-01 02:08:21 +05:00
restore = '0'
if len(path) > 0:
path = path.lstrip("/")
path = "/home/" + masterDomain + "/public_html/" + path
else:
path = "/home/" + masterDomain + "/public_html/" + domain
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
2018-05-08 21:25:37 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] != 1:
2018-06-30 15:29:56 +05:00
data['openBasedir'] = 1
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
2018-06-01 02:08:21 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-11-05 03:02:51 +05:00
2018-06-01 02:08:21 +05:00
execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
" --phpVersion '" + phpSelection + "' --ssl " + str(data['ssl']) + " --dkimCheck " + str(data['dkimCheck']) \
+ " --openBasedir " + str(data['openBasedir']) + ' --path ' + path \
2018-07-30 17:33:28 +05:00
+ ' --restore ' + restore + ' --websiteOwner ' + admin.userName + ' --tempStatusPath ' + tempStatusPath
2018-07-30 17:33:28 +05:00
subprocess.Popen(shlex.split(execPath))
time.sleep(2)
2017-12-09 22:30:10 +05:00
2018-07-30 17:33:28 +05:00
data_ret = {'createWebSiteStatus': 1, 'error_message': "None", 'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2018-07-30 17:33:28 +05:00
data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchDomains(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
try:
if request.method == 'POST':
data = json.loads(request.body)
masterDomain = data['masterDomain']
master = Websites.objects.get(domain=masterDomain)
childDomains = master.childdomains_set.all()
json_data = "["
checker = 0
for items in childDomains:
dic = {
2018-06-30 15:29:56 +05:00
'childDomain': items.domain,
'path': items.path,
'childLunch': '/websites/' + masterDomain + '/' + items.domain
}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
2018-06-30 15:29:56 +05:00
final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "data": json_data})
return HttpResponse(final_json)
except BaseException,msg:
final_dic = {'fetchStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except KeyError:
final_dic = {'fetchStatus': 0, 'error_message': "Not Logged In, please refresh the page or login again."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
def listWebsites(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
websites = ACLManager.findAllSites(currentACL, userID)
2017-10-24 19:16:36 +05:00
pages = float(len(websites)) / float(10)
pagination = []
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
2018-03-01 12:40:58 +05:00
2017-10-24 19:16:36 +05:00
return render(request,'websiteFunctions/listWebsites.html',{"pagination":pagination})
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse("See CyberCP main log file.")
except KeyError:
return redirect(loadLoginPage)
def getFurtherAccounts(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
status = data['page']
pageNumber = int(status)
except BaseException, msg:
2018-08-18 00:39:10 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + ' [getFurtherAccounts]')
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
finalPageNumber = ((pageNumber * 10)) - 10
endPageNumber = finalPageNumber + 10
websites = ACLManager.findWebsiteObjects(currentACL, userID)[finalPageNumber:endPageNumber]
2017-10-24 19:16:36 +05:00
json_data = "["
checker = 0
try:
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg))
ipAddress = "192.168.100.1"
2017-10-24 19:16:36 +05:00
for items in websites:
if items.state == 0:
state = "Suspended"
else:
state = "Active"
dic = {'domain': items.domain, 'adminEmail': items.adminEmail,'ipAddress':ipAddress,'admin': items.admin.userName,'package': items.package.packageName,'state':state}
2017-10-24 19:16:36 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data +',' + json.dumps(dic)
json_data = json_data + ']'
final_dic = {'listWebSiteStatus': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException,msg:
dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError,msg:
dic = {'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def submitWebsiteDeletion(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
websiteName = data['websiteName']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['deleteWebsite'] == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2017-11-05 03:02:51 +05:00
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
numberOfWebsites = str(Websites.objects.count() + ChildDomains.objects.count())
2018-08-18 00:39:10 +05:00
## Deleting master domain
2017-12-09 22:30:10 +05:00
2018-08-18 00:39:10 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-11-05 03:02:51 +05:00
2018-08-18 00:39:10 +05:00
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + websiteName + \
" --numberOfSites " + numberOfWebsites
2018-06-30 15:29:56 +05:00
2018-08-18 00:39:10 +05:00
subprocess.check_output(shlex.split(execPath))
2018-06-30 15:29:56 +05:00
2018-08-18 00:39:10 +05:00
data_ret = {'websiteDeleteStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
data_ret = {'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitDomainDeletion(request):
try:
val = request.session['userID']
try:
if request.method == 'POST':
data = json.loads(request.body)
websiteName = data['websiteName']
2018-06-30 15:29:56 +05:00
childDomain = ChildDomains.objects.get(domain=websiteName)
admin = Administrator.objects.get(pk=val)
2018-06-30 15:29:56 +05:00
if childDomain.master.admin == admin:
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
execPath = execPath + " deleteDomain --virtualHostName " + websiteName
2018-06-30 15:29:56 +05:00
subprocess.check_output(shlex.split(execPath))
data_ret = {'websiteDeleteStatus': 1,'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'websiteDeleteStatus': 0, 'error_message': "You can not delete this child domain, as master domain is not owned by logged in user."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
except BaseException,msg:
data_ret = {'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitWebsiteStatus(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
websiteName = data['websiteName']
state = data['state']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['suspendWebsite'] == 1:
pass
else:
return ACLManager.loadErrorJson('websiteStatus', 0)
2017-11-05 03:02:51 +05:00
2018-08-18 00:39:10 +05:00
website = Websites.objects.get(domain=websiteName)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if state == "Suspend":
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
command = "sudo mv " + confPath + " " + confPath + "-suspended"
subprocess.call(shlex.split(command))
installUtilities.reStartLiteSpeed()
website.state = 0
else:
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
command = "sudo mv " + confPath + "-suspended" + " " + confPath
subprocess.call(shlex.split(command))
2017-11-05 03:02:51 +05:00
2018-08-18 00:39:10 +05:00
command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + confPath
cmd = shlex.split(command)
subprocess.call(cmd)
2017-11-05 03:02:51 +05:00
2018-08-18 00:39:10 +05:00
installUtilities.reStartLiteSpeed()
website.state = 1
2017-11-05 03:02:51 +05:00
2018-08-18 00:39:10 +05:00
website.save()
data_ret = {'websiteStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
except BaseException,msg:
2017-11-05 03:02:51 +05:00
2017-10-24 19:16:36 +05:00
data_ret = {'websiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'websiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitWebsiteModify(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
if request.method == 'POST':
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['modifyWebsite'] == 1:
pass
2017-10-24 19:16:36 +05:00
else:
2018-08-18 00:39:10 +05:00
return ACLManager.loadErrorJson('modifyStatus', 0)
packs = ACLManager.loadPackages(userID, currentACL)
admins = ACLManager.loadAllUsers(userID)
2017-10-24 19:16:36 +05:00
## Get packs name
json_data = "["
checker = 0
for items in packs:
2018-08-18 00:39:10 +05:00
dic = {"pack":items}
2017-10-24 19:16:36 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
### Get admin names
admin_data = "["
checker = 0
for items in admins:
2018-08-18 00:39:10 +05:00
dic = {"adminNames": items}
2017-10-24 19:16:36 +05:00
if checker == 0:
admin_data = admin_data + json.dumps(dic)
checker = 1
else:
admin_data = admin_data + ',' + json.dumps(dic)
admin_data = admin_data + ']'
data = json.loads(request.body)
websiteToBeModified = data['websiteToBeModified']
modifyWeb = Websites.objects.get(domain=websiteToBeModified)
email = modifyWeb.adminEmail
currentPack = modifyWeb.package.packageName
owner = modifyWeb.admin.userName
data_ret = {'modifyStatus': 1,'error_message': "None","adminEmail":email,
"packages":json_data,"current_pack":currentPack,"adminNames":admin_data,'currentAdmin':owner}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException,msg:
dic = {'modifyStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'modifyStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def saveWebsiteChanges(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
domain = data['domain']
package = data['packForWeb']
email = data['email']
phpVersion = data['phpVersion']
2018-06-30 15:29:56 +05:00
newUser = data['admin']
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-12-09 22:30:10 +05:00
2018-08-18 00:39:10 +05:00
if currentACL['admin'] == 1:
pass
elif currentACL['modifyWebsite'] == 1:
pass
else:
return ACLManager.loadErrorJson('saveStatus', 0)
2018-06-30 15:29:56 +05:00
2017-12-09 22:30:10 +05:00
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + domain
completePathToConfigFile = confPath + "/vhost.conf"
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'saveStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## php changes ends
2018-06-30 15:29:56 +05:00
newOwner = Administrator.objects.get(userName=newUser)
2017-10-24 19:16:36 +05:00
modifyWeb = Websites.objects.get(domain=domain)
webpack = Package.objects.get(packageName=package)
modifyWeb.package = webpack
modifyWeb.adminEmail = email
modifyWeb.phpSelection = phpVersion
modifyWeb.admin = newOwner
modifyWeb.save()
data_ret = {'saveStatus': 1,'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-06-30 15:29:56 +05:00
def domain(request, domain):
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
2017-10-24 19:16:36 +05:00
if Websites.objects.filter(domain=domain).exists():
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
website = Websites.objects.get(domain=domain)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data = {}
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data['ftpTotal'] = website.package.ftpAccounts
Data['ftpUsed'] = website.users_set.all().count()
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data['databasesUsed'] = website.databases_set.all().count()
Data['databasesTotal'] = website.package.dataBases
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data['domain'] = domain
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + domain, website.package.diskSpace)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
## bw usage calculation
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
try:
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " findDomainBW --virtualHostName " + domain + " --bandwidth " + str(
website.package.bandwidth)
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
output = subprocess.check_output(shlex.split(execPath))
bwData = output.split(",")
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
bwData = [0, 0]
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
## bw usage calculations
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data['bwInMBTotal'] = website.package.bandwidth
Data['bwInMB'] = bwData[0]
Data['bwUsage'] = bwData[1]
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
if diskUsageDetails != None:
if diskUsageDetails[1] > 100:
diskUsageDetails[1] = 100
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
Data['diskUsage'] = diskUsageDetails[1]
Data['diskInMB'] = diskUsageDetails[0]
Data['diskInMBTotal'] = website.package.diskSpace
2017-10-24 19:16:36 +05:00
else:
2018-08-18 00:39:10 +05:00
Data['diskUsage'] = 0
Data['diskInMB'] = 0
Data['diskInMBTotal'] = website.package.diskSpace
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
return render(request, 'websiteFunctions/website.html', Data)
2017-10-24 19:16:36 +05:00
else:
2018-06-30 15:29:56 +05:00
return render(request, 'websiteFunctions/website.html', {"error":1,"domain": "This domain does not exists."})
2017-10-24 19:16:36 +05:00
except KeyError:
return redirect(loadLoginPage)
2018-08-18 00:39:10 +05:00
def launchChild(request, domain, childDomain):
2018-05-24 23:37:10 +05:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
admin = Administrator.objects.get(pk=userID)
2018-05-24 23:37:10 +05:00
if ChildDomains.objects.filter(domain=childDomain).exists():
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
website = Websites.objects.get(domain=domain)
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data = {}
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data['ftpTotal'] = website.package.ftpAccounts
Data['ftpUsed'] = website.users_set.all().count()
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data['databasesUsed'] = website.databases_set.all().count()
Data['databasesTotal'] = website.package.dataBases
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data['domain'] = domain
Data['childDomain'] = childDomain
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + domain, website.package.diskSpace)
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
## bw usage calculation
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
try:
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " findDomainBW --virtualHostName " + domain + " --bandwidth " + str(
website.package.bandwidth)
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
output = subprocess.check_output(shlex.split(execPath))
bwData = output.split(",")
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
bwData = [0, 0]
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
## bw usage calculations
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data['bwInMBTotal'] = website.package.bandwidth
Data['bwInMB'] = bwData[0]
Data['bwUsage'] = bwData[1]
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
if diskUsageDetails != None:
if diskUsageDetails[1] > 100:
diskUsageDetails[1] = 100
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
Data['diskUsage'] = diskUsageDetails[1]
Data['diskInMB'] = diskUsageDetails[0]
Data['diskInMBTotal'] = website.package.diskSpace
2018-05-24 23:37:10 +05:00
else:
2018-08-18 00:39:10 +05:00
Data['diskUsage'] = 0
Data['diskInMB'] = 0
Data['diskInMBTotal'] = website.package.diskSpace
2018-05-24 23:37:10 +05:00
2018-08-18 00:39:10 +05:00
return render(request, 'websiteFunctions/launchChild.html', Data)
2018-05-24 23:37:10 +05:00
else:
return render(request, 'websiteFunctions/launchChild.html', {"error":1,"domain": "This child domain does not exists"})
except KeyError:
return redirect(loadLoginPage)
2017-10-24 19:16:36 +05:00
def getDataFromLogFile(request):
2018-06-30 15:29:56 +05:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-06-30 15:29:56 +05:00
data = json.loads(request.body)
logType = data['logType']
virtualHost = data['virtualHost']
page = data['page']
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
if logType == 1:
fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".access_log"
else:
fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".error_log"
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
## get Logs
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
execPath = execPath + " getAccessLogs --path " + fileName + " --page " + str(page)
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
output = subprocess.check_output(shlex.split(execPath))
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
if output.find("1,None") > -1:
final_json = json.dumps(
{'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"})
return HttpResponse(final_json)
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
## get log ends here.
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
data = output.split("\n")
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
json_data = "["
checker = 0
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
for items in reversed(data):
if len(items) > 10:
logData = items.split(" ")
domain = logData[0].strip('"')
ipAddress = logData[1]
time = (logData[4]).strip("[").strip("]")
resource = logData[7].strip('"')
size = logData[10].replace('"', '')
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
dic = {'domain': domain,
'ipAddress': ipAddress,
'time': time,
'resource': resource,
'size': size,
}
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
2017-10-24 19:16:36 +05:00
2018-06-30 15:29:56 +05:00
json_data = json_data + ']'
final_json = json.dumps({'logstatus': 1, 'error_message': "None", "data": json_data})
return HttpResponse(final_json)
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
##
2017-12-09 22:30:10 +05:00
2018-06-30 15:29:56 +05:00
except KeyError,msg:
data_ret = {'logstatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
def fetchErrorLogs(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-06-30 15:29:56 +05:00
data = json.loads(request.body)
virtualHost = data['virtualHost']
page = data['page']
fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".error_log"
2017-12-09 22:30:10 +05:00
## get Logs
2017-12-09 22:30:10 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " getErrorLogs --path " + fileName + " --page " + str(page)
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
final_json = json.dumps(
{'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"})
return HttpResponse(final_json)
## get log ends here.
final_json = json.dumps({'logstatus': 1, 'error_message': "None", "data": output})
return HttpResponse(final_json)
except BaseException,msg:
final_json = json.dumps({'logstatus': 0, 'error_message': str(msg)})
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
def getDataFromConfigFile(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
virtualHost = data['virtualHost']
2018-06-30 15:29:56 +05:00
filePath = installUtilities.Server_root_path + "/conf/vhosts/" + virtualHost + "/vhost.conf"
2017-10-24 19:16:36 +05:00
2018-08-18 00:39:10 +05:00
command = 'sudo cat ' + filePath
configData = subprocess.check_output(shlex.split(command))
2017-10-24 19:16:36 +05:00
if len(configData) == 0:
2017-12-09 22:30:10 +05:00
status = {"configstatus": 0, "error_message": "Configuration file is currently empty!"}
2017-10-24 19:16:36 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
2018-06-30 15:29:56 +05:00
status = {"configstatus": 1, "configData": configData}
2017-10-24 19:16:36 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
except BaseException, msg:
data_ret = {'configstatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
2017-12-09 22:30:10 +05:00
status = {"configstatus":0,"error":"Could not fetch data from log file, please see CyberCP main log file through command line."}
2017-10-24 19:16:36 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[getDataFromConfigFile]")
return HttpResponse("Not Logged in as admin")
def saveConfigsToFile(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
virtualHost = data['virtualHost']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] != 1:
return ACLManager.loadErrorJson('configstatus', 0)
2018-06-30 15:29:56 +05:00
2017-12-09 22:30:10 +05:00
## writing data temporary to file
2017-11-05 03:02:51 +05:00
2018-05-14 22:26:25 +05:00
mailUtilities.checkHome()
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
tempPath = "/home/cyberpanel/"+str(randint(1000, 9999))
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
vhost = open(tempPath, "w")
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
vhost.write(data['configData'])
2017-10-24 19:16:36 +05:00
vhost.close()
2017-12-09 22:30:10 +05:00
## writing data temporary to file
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
filePath = installUtilities.Server_root_path + "/conf/vhosts/"+virtualHost+"/vhost.conf"
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
## save configuration data
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
execPath = execPath + " saveVHostConfigs --path " + filePath + " --tempPath " + tempPath
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
status = {"configstatus": 1}
final_json = json.dumps(status)
return HttpResponse(final_json)
else:
data_ret = {'configstatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## save configuration data ends
2017-10-24 19:16:36 +05:00
except BaseException, msg:
data_ret = {'configstatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-03-02 18:13:26 +05:00
except KeyError, msg:
status = {"configstatus":0,"error":"Could not save, see CyberPanel main log file."}
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[saveConfigsToFile]")
return HttpResponse("Not Logged in as admin")
def getRewriteRules(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
virtualHost = data['virtualHost']
2018-06-30 15:29:56 +05:00
try:
childDom = ChildDomains.objects.get(domain=virtualHost)
filePath = childDom.path + '/.htaccess'
except:
website = Websites.objects.get(domain=virtualHost)
filePath = "/home/" + virtualHost + "/public_html/.htaccess"
2018-03-02 18:13:26 +05:00
try:
rewriteRules = open(filePath,"r").read()
if len(rewriteRules) == 0:
status = {"rewriteStatus": 1, "error_message": "Rules file is currently empty"}
final_json = json.dumps(status)
return HttpResponse(final_json)
status = {"rewriteStatus": 1, "rewriteRules": rewriteRules}
final_json = json.dumps(status)
return HttpResponse(final_json)
except IOError:
status = {"rewriteStatus": 1, "error_message": "none","rewriteRules":""}
final_json = json.dumps(status)
return HttpResponse(final_json)
except BaseException, msg:
data_ret = {'rewriteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
status = {"logstatus":0,"error":"Could not fetch data from log file, please see CyberCP main log file through command line."}
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[getDataFromConfigFile]")
return HttpResponse("Not Logged in as admin")
def saveRewriteRules(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
virtualHost = data['virtualHost']
## writing data temporary to file
2018-05-14 22:26:25 +05:00
mailUtilities.checkHome()
2018-03-02 18:13:26 +05:00
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempPath, "w")
vhost.write(data['rewriteRules'])
vhost.close()
## writing data temporary to file
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
currentACL = ACLManager.loadedACL(userID)
2018-06-30 15:29:56 +05:00
2018-05-24 23:37:10 +05:00
try:
childDomain = ChildDomains.objects.get(domain=virtualHost)
filePath = childDomain.path + '/.htaccess'
except:
filePath = "/home/" + virtualHost + "/public_html/.htaccess"
2018-03-02 18:13:26 +05:00
## save configuration data
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveRewriteRules --virtualHostName "+ virtualHost + " --path " + filePath + " --tempPath " + tempPath
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
2018-06-30 15:29:56 +05:00
status = {"rewriteStatus": 1, 'error_message': output}
final_json = json.dumps(status)
return HttpResponse(final_json)
2018-03-02 18:13:26 +05:00
else:
data_ret = {'rewriteStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## save configuration data ends
except BaseException, msg:
data_ret = {'rewriteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
status = {"rewriteStatus":0,"error":"Could not save, see main log file."}
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[saveConfigsToFile]")
return HttpResponse("Not Logged in as admin")
def saveSSL(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
domain = data['virtualHost']
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
currentACL = ACLManager.loadedACL(userID)
2018-06-30 15:29:56 +05:00
try:
website = ChildDomains.objects.get(domain=domain)
except:
website = Websites.objects.get(domain=domain)
2018-05-08 21:25:37 +05:00
mailUtilities.checkHome()
2018-03-02 18:13:26 +05:00
## writing data temporary to file
tempKeyPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempKeyPath, "w")
vhost.write(data['key'])
vhost.close()
tempCertPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempCertPath, "w")
vhost.write(data['cert'])
2018-03-02 18:13:26 +05:00
vhost.close()
## writing data temporary to file
pathToStoreSSL = virtualHostUtilities.Server_root + "/conf/vhosts/" + "SSL-" + domain
if website.ssl == 0:
## save configuration data
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveSSL --virtualHostName " + domain + " --path " + pathToStoreSSL + " --tempKeyPath " + tempKeyPath + " --tempCertPath " + tempCertPath + " --sslCheck 0"
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
website.ssl = 1
website.save()
data_ret = {'sslStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
logging.CyberCPLogFileWriter.writeToFile(
output)
data_ret = {'sslStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## save configuration data ends
else:
## save configuration data
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveSSL --virtualHostName " + domain + " --path " + pathToStoreSSL + " --tempKeyPath " + tempKeyPath + " --tempCertPath " + tempCertPath + " --sslCheck 1"
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
website.ssl = 1
website.save()
data_ret = {'sslStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
logging.CyberCPLogFileWriter.writeToFile(
output)
data_ret = {'sslStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## save configuration data ends
except BaseException,msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [Can not create directory to stroe SSL [saveSSL]]")
data_ret = {'sslStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
2018-06-30 15:29:56 +05:00
return HttpResponse(json_data)
2018-03-02 18:13:26 +05:00
except KeyError,msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [Can not create directory to stroe SSL [saveSSL]]")
data_ret = {'sslStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
2018-06-30 15:29:56 +05:00
return HttpResponse(json_data)
2018-03-02 18:13:26 +05:00
def changePHP(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
childDomain = data['childDomain']
phpVersion = data['phpSelection']
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + childDomain
completePathToConfigFile = confPath + "/vhost.conf"
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'changePHP': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
data_ret = {'changePHP': 1,'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
data_ret = {'changePHP': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'changePHP': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def listCron(request):
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2017-10-24 19:16:36 +05:00
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-12-09 22:30:10 +05:00
2018-08-18 00:39:10 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
return render(request, 'websiteFunctions/listCron.html', {'websiteList': websitesName})
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
except KeyError:
return redirect(loadLoginPage)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
def getWebsiteCron(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
data = json.loads(request.body)
domain = data['domain']
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
admin = Administrator.objects.get(pk=request.session['userID'])
2017-10-24 19:16:36 +05:00
website = Websites.objects.get(domain=domain)
2018-03-02 18:13:26 +05:00
if Websites.objects.filter(domain=domain).exists():
pass
else:
dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
cmd = 'sudo test -e ' + cronPath + ' && echo Exists'
output = os.popen(cmd).read()
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
if "Exists" not in output:
data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": {}}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
crons = []
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
try:
f = subprocess.check_output(["sudo", "cat", cronPath])
print f
except subprocess.CalledProcessError as error:
dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
counter = 0
for line in f.split("\n"):
if line:
split = line.split(" ", 5)
print line
print split
if len(split) == 6:
counter += 1
crons.append({"line": counter,
"minute": split[0],
"hour": split[1],
"monthday": split[2],
"month": split[3],
"weekday": split[4],
"command": split[5]})
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
print json.dumps(crons)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": crons}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException, msg:
print msg
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
except KeyError, msg:
status = {"getWebsiteCron": 0, "error": "Not Logged in as admin"}
final_json = json.dumps(status)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
def getCronbyLine(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
data = json.loads(request.body)
domain = data['domain']
line = data['line']
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
line -= 1
admin = Administrator.objects.get(pk=request.session['userID'])
website = Websites.objects.get(domain=domain)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
if Websites.objects.filter(domain=domain).exists():
pass
else:
dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
crons = []
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
try:
f = subprocess.check_output(["sudo", "cat", cronPath])
print f
except subprocess.CalledProcessError as error:
dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
f = f.split("\n")
cron = f[line]
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
if not cron:
dic = {'getWebsiteCron': 0, 'error_message': 'Cron line empty'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
cron = cron.split(" ", 5)
if len(cron) != 6:
dic = {'getWebsiteCron': 0, 'error_message': 'Cron line incorrect'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
data_ret = {"getWebsiteCron": 1,
"user": website.externalApp,
"cron": {
"minute": cron[0],
"hour": cron[1],
"monthday": cron[2],
"month": cron[3],
"weekday": cron[4],
"command": cron[5],
},
"line": line}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException, msg:
print msg
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
except KeyError, msg:
status = {"getWebsiteCron": 0, "error": "Not Logged in"}
final_json = json.dumps(status)
return HttpResponse(final_json)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
def saveCronChanges(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
data = json.loads(request.body)
domain = data['domain']
line = data['line']
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
minute = data['minute']
hour = data['hour']
monthday = data['monthday']
month = data['month']
weekday = data['weekday']
command = data['command']
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
website = Websites.objects.get(domain=domain)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp"
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
o = subprocess.call(['sudo', 'cp', cronPath, tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
# Confirming that directory is read/writable
o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
with open(tempPath, 'r') as file:
data = file.readlines()
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
data[line] = finalCron + '\n'
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
with open(tempPath, 'w') as file:
file.writelines(data)
print 'test'
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath])
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
os.remove(tempPath)
if output != 0:
data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted.'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
data_ret = {"getWebsiteCron": 1,
"user": website.externalApp,
"cron": finalCron,
"line": line}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException, msg:
print msg
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-10-26 23:50:59 +05:00
2018-03-02 18:13:26 +05:00
except KeyError, msg:
status = {"getWebsiteCron": 0, "error": "Not Logged in"}
final_json = json.dumps(status)
return HttpResponse(final_json)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
def remCronbyLine(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
data = json.loads(request.body)
domain = data['domain']
line = data['line']
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
line -= 1
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
website = Websites.objects.get(domain=domain)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
cmd = 'sudo test -e ' + cronPath + ' && echo Exists'
output = os.popen(cmd).read()
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
if "Exists" not in output:
data_ret = {'remCronbyLine': 0, 'error_message': 'No Cron exists for this user'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp"
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
o = subprocess.call(['sudo', 'cp', cronPath, tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
# Confirming that directory is read/writable
o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-11-05 03:02:51 +05:00
2018-03-02 18:13:26 +05:00
with open(tempPath, 'r') as file:
data = file.readlines()
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
removedLine = data.pop(line)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
with open(tempPath, 'w') as file:
file.writelines(data)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath])
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
os.remove(tempPath)
if output != 0:
data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
data_ret = {"remCronbyLine": 1,
"user": website.externalApp,
"removeLine": removedLine,
"line": line}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException, msg:
print msg
dic = {'remCronbyLine': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
2018-03-02 18:13:26 +05:00
except KeyError, msg:
status = {"remCronbyLine": 0, "error": "Not Logged in"}
final_json = json.dumps(status)
return HttpResponse(final_json)
2018-03-02 18:13:26 +05:00
def addNewCron(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-03-02 18:13:26 +05:00
if request.method == 'POST':
try:
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-03-02 18:13:26 +05:00
data = json.loads(request.body)
domain = data['domain']
2018-03-02 18:13:26 +05:00
minute = data['minute']
hour = data['hour']
monthday = data['monthday']
month = data['month']
weekday = data['weekday']
command = data['command']
2018-03-02 18:13:26 +05:00
website = Websites.objects.get(domain=domain)
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
cmd = 'sudo test -e ' + cronPath + ' && echo Exists'
output = os.popen(cmd).read()
2018-03-02 18:13:26 +05:00
if "Exists" not in output:
echo = subprocess.Popen(('echo'), stdout=subprocess.PIPE)
output = subprocess.call(('sudo', 'crontab', '-u', website.externalApp, '-'), stdin=echo.stdout)
echo.wait()
echo.stdout.close()
# Confirmation
o = subprocess.call(["sudo", "cp", "/dev/null", cronPath])
2018-03-02 18:13:26 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp"
2018-03-02 18:13:26 +05:00
finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command)
2018-03-02 18:13:26 +05:00
o = subprocess.call(['sudo', 'cp', cronPath, tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2018-03-02 18:13:26 +05:00
# Confirming that directory is read/writable
o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath])
if o is not 0:
data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2018-03-02 18:13:26 +05:00
with open(tempPath, "a") as file:
file.write(finalCron + "\n")
2018-03-02 18:13:26 +05:00
output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath])
2018-03-02 18:13:26 +05:00
os.remove(tempPath)
if output != 0:
data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2017-10-24 19:16:36 +05:00
2018-03-02 18:13:26 +05:00
data_ret = {"addNewCron": 1,
"user": website.externalApp,
"cron": finalCron}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
except BaseException, msg:
print msg
dic = {'addNewCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
except KeyError, msg:
status = {"addNewCron": 0, "error": "Not Logged in"}
final_json = json.dumps(status)
2018-05-05 00:10:05 +05:00
return HttpResponse(final_json)
def domainAlias(request,domain):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-05-05 00:10:05 +05:00
try:
2018-08-18 00:39:10 +05:00
website = Websites.objects.get(domain=domain)
2018-06-30 15:29:56 +05:00
2018-08-18 00:39:10 +05:00
finalAlisList = []
noAlias = 0
2018-05-05 00:10:05 +05:00
path = "/home/" + domain + "/public_html"
2018-08-18 00:39:10 +05:00
aliases = website.aliasdomains_set.all()
2018-05-05 00:10:05 +05:00
2018-08-18 00:39:10 +05:00
for items in aliases:
finalAlisList.append(items.aliasDomain)
noAlias = 1
2018-05-05 00:10:05 +05:00
return render(request, 'websiteFunctions/domainAlias.html', {
'masterDomain': domain,
2018-08-18 00:39:10 +05:00
'aliases':finalAlisList,
2018-05-05 00:10:05 +05:00
'path':path,
'noAlias':noAlias
})
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
except KeyError:
2018-05-08 21:25:37 +05:00
return redirect(loadLoginPage)
def submitAliasCreation(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-05-08 21:25:37 +05:00
if request.method == 'POST':
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-05-08 21:25:37 +05:00
data = json.loads(request.body)
masterDomain = data['masterDomain']
aliasDomain = data['aliasDomain']
ssl = data['ssl']
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
2018-05-08 21:25:37 +05:00
sslpath = "/home/" + masterDomain + "/public_html"
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " createAlias --masterDomain " + masterDomain + " --aliasDomain " + aliasDomain + " --ssl " + str(
2018-06-01 02:08:21 +05:00
ssl) + " --sslPath " + sslpath + " --administratorEmail " + admin.email + ' --websiteOwner ' + admin.userName
2018-05-08 21:25:37 +05:00
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'createAliasStatus': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Create Configurations ends here
data_ret = {'createAliasStatus': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'createAliasStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def issueAliasSSL(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-05-08 21:25:37 +05:00
if request.method == 'POST':
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
2018-05-08 21:25:37 +05:00
data = json.loads(request.body)
masterDomain = data['masterDomain']
aliasDomain = data['aliasDomain']
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=userID)
2018-05-08 21:25:37 +05:00
sslpath = "/home/" + masterDomain + "/public_html"
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " issueAliasSSL --masterDomain " + masterDomain + " --aliasDomain " + aliasDomain + " --sslPath " + sslpath + " --administratorEmail " + admin.email
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'sslStatus': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Create Configurations ends here
data_ret = {'sslStatus': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'sslStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def delateAlias(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-05-08 21:25:37 +05:00
if request.method == 'POST':
data = json.loads(request.body)
masterDomain = data['masterDomain']
aliasDomain = data['aliasDomain']
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteAlias --masterDomain " + masterDomain + " --aliasDomain " + aliasDomain
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'deleteAlias': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Create Configurations ends here
data_ret = {'deleteAlias': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'deleteAlias': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
2018-05-21 21:52:35 +05:00
return HttpResponse(json_data)
def changeOpenBasedir(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-05-21 21:52:35 +05:00
try:
if request.method == 'POST':
data = json.loads(request.body)
domainName = data['domainName']
openBasedirValue = data['openBasedirValue']
2018-08-18 00:39:10 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] != 1:
return ACLManager.loadErrorJson('changeOpenBasedir', 0)
2018-06-30 15:29:56 +05:00
2018-05-21 21:52:35 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " changeOpenBasedir --virtualHostName '" + domainName + "' --openBasedirValue " + openBasedirValue
output = subprocess.check_output(shlex.split(execPath))
if output.find("1,None") > -1:
pass
else:
data_ret = {'changeOpenBasedir': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
data_ret = {'changeOpenBasedir': 1,'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException,msg:
data_ret = {'changeOpenBasedir': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError,msg:
data_ret = {'changeOpenBasedir': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def applicationInstaller(request):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
try:
return render(request, 'websiteFunctions/applicationInstaller.html')
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
except KeyError:
return redirect(loadLoginPage)
def wordpressInstall(request, domain):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
return render(request, 'websiteFunctions/installWordPress.html', {'domainName' : domain})
except KeyError:
return redirect(loadLoginPage)
def installWordpress(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['admin'] = admin
extraArgs['domainName'] = data['domain']
extraArgs['home'] = data['home']
extraArgs['blogTitle'] = data['blogTitle']
extraArgs['adminUser'] = data['adminUser']
extraArgs['adminPassword'] = data['adminPassword']
extraArgs['adminEmail'] = data['adminEmail']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
if data['home'] == '0':
extraArgs['path'] = data['path']
background = ApplicationInstaller('wordpress', extraArgs)
background.start()
2018-07-13 21:45:40 +05:00
time.sleep(2)
data_ret = {'installStatus': 1, 'error_message': 'None', 'tempStatusPath': extraArgs['tempStatusPath']}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
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) + "[installWordpress]")
return HttpResponse("Not Logged in as admin")
def installWordpressStatus(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
statusFile = data['statusFile']
statusData = open(statusFile, 'r').readlines()
lastLine = statusData[-1]
if lastLine.find('[200]') > -1:
data_ret = { 'abort':1, 'installStatus': 1, 'installationProgress': "100", 'currentStatus': 'Successfully Installed.' }
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
elif lastLine.find('[404]') > -1:
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': lastLine}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
progress = lastLine.split(',')
currentStatus = progress[0]
installationProgress = progress[1]
data_ret = {'abort': 0, 'installStatus': 0, 'installationProgress': installationProgress, 'currentStatus': currentStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)}
json_data = json.dumps(data_ret)
2018-07-13 21:45:40 +05:00
return HttpResponse(json_data)
def joomlaInstall(request, domain):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
return render(request, 'websiteFunctions/installJoomla.html', {'domainName' : domain})
2018-07-13 21:45:40 +05:00
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 = ""
2018-08-18 00:39:10 +05:00
admin = Administrator.objects.get(pk=val)
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
## DB Creation
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Creating database..,10')
statusFile.close()
dbName = randomPassword.generate_pass()
dbUser = dbName
dbPassword = randomPassword.generate_pass()
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(
dbUser=dbUser).exists():
2018-07-13 21:45:40 +05:00
data_ret = {'installStatus': 0,
2018-08-18 00:39:10 +05:00
'error_message': "0,This database or user is already taken."}
2018-07-13 21:45:40 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-18 00:39:10 +05:00
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)
2018-07-13 21:45:40 +05:00
##
try:
website = ChildDomains.objects.get(domain=domainName)
externalApp = website.master.externalApp
2018-08-18 00:39:10 +05:00
if website.master.package.dataBases > website.master.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)
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
if home == '0':
path = data['path']
finalPath = website.path.rstrip('/') + "/" + path + "/"
else:
finalPath = website.path + "/"
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
db = Databases(website=website.master, dbName=dbName, dbUser=dbUser)
db.save()
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
except:
website = Websites.objects.get(domain=domainName)
externalApp = website.externalApp
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
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)
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
if home == '0':
path = data['path']
finalPath = "/home/" + domainName + "/public_html/" + path + "/"
else:
finalPath = "/home/" + domainName + "/public_html/"
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
db = Databases(website=website, dbName=dbName, dbUser=dbUser)
db.save()
2018-07-13 21:45:40 +05:00
2018-08-18 00:39:10 +05:00
if finalPath.find("..") > -1:
2018-07-13 21:45:40 +05:00
data_ret = {'installStatus': 0,
2018-08-18 00:39:10 +05:00
'error_message': "Specified path must be inside virtual host home!"}
2018-07-13 21:45:40 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## 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]")
2018-07-26 04:11:10 +05:00
return HttpResponse("Not Logged in as admin")
def setupGit(request, domain):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-07-26 04:11:10 +05:00
try:
2018-07-27 04:13:10 +05:00
path = '/home/cyberpanel/' + domain + '.git'
if os.path.exists(path):
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
webhookURL = 'https://' + ipAddress + ':8090/websites/' + domain + '/gitNotify'
2018-07-29 01:20:46 +05:00
2018-07-27 04:13:10 +05:00
return render(request, 'websiteFunctions/setupGit.html',
{'domainName': domain, 'installed': 1, 'webhookURL': webhookURL})
else:
command = 'sudo cat /root/.ssh/cyberpanel.pub'
deploymentKey = subprocess.check_output(shlex.split(command)).strip('\n')
return render(request, 'websiteFunctions/setupGit.html', {'domainName' : domain, 'deploymentKey': deploymentKey, 'installed': 0})
2018-07-26 04:11:10 +05:00
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
except KeyError:
return redirect(loadLoginPage)
def setupGitRepo(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['admin'] = admin
extraArgs['domainName'] = data['domain']
extraArgs['username'] = data['username']
extraArgs['reponame'] = data['reponame']
extraArgs['branch'] = data['branch']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
2018-07-27 04:13:10 +05:00
extraArgs['defaultProvider'] = data['defaultProvider']
2018-07-26 04:11:10 +05:00
background = ApplicationInstaller('git', 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)
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) + "[installWordpress]")
2018-07-26 23:13:02 +05:00
return HttpResponse("Not Logged in as admin")
def gitNotify(request, domain):
try:
if request.method == 'POST':
try:
extraArgs = {}
extraArgs['domain'] = domain
background = ApplicationInstaller('pull', extraArgs)
background.start()
data_ret = {'pulled': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'pulled': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
data_ret = {"pulled":0,"error":str(msg)}
json_data = json.dumps(data_ret)
2018-07-28 01:25:51 +05:00
return HttpResponse(json_data)
def detachRepo(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['domainName'] = data['domain']
2018-07-29 01:20:46 +05:00
extraArgs['admin'] = admin
2018-07-28 01:25:51 +05:00
background = ApplicationInstaller('detach', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
status = {"status":0,"error":str(msg)}
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installWordpress]")
return HttpResponse("Not Logged in as admin")
def changeBranch(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(pk=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['domainName'] = data['domain']
extraArgs['githubBranch'] = data['githubBranch']
2018-07-29 01:20:46 +05:00
extraArgs['admin'] = admin
2018-07-28 01:25:51 +05:00
background = ApplicationInstaller('changeBranch', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except KeyError, msg:
status = {"status":0,"error":str(msg)}
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installWordpress]")
2018-08-05 01:46:31 +05:00
return HttpResponse("Not Logged in as admin")
def installPrestaShop(request, domain):
try:
2018-08-18 00:39:10 +05:00
userID = request.session['userID']
2018-08-05 01:46:31 +05:00
2018-08-18 00:39:10 +05:00
return render(request, 'websiteFunctions/installPrestaShop.html', {'domainName' : domain})
2018-08-05 01:46:31 +05:00
except KeyError:
return redirect(loadLoginPage)
def prestaShopInstall(request):
try:
val = request.session['userID']
admin = Administrator.objects.get(id=val)
if request.method == 'POST':
try:
data = json.loads(request.body)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['admin'] = admin
extraArgs['domainName'] = data['domain']
extraArgs['home'] = data['home']
extraArgs['shopName'] = data['shopName']
extraArgs['firstName'] = data['firstName']
extraArgs['lastName'] = data['lastName']
extraArgs['databasePrefix'] = data['databasePrefix']
extraArgs['email'] = data['email']
extraArgs['password'] = data['password']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
if data['home'] == '0':
extraArgs['path'] = data['path']
background = ApplicationInstaller('prestashop', 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)
## 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]")
2018-08-18 00:39:10 +05:00
return HttpResponse("Not Logged in as admin")