# -*- 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 import json from math import ceil from plogical.mysqlUtilities import mysqlUtilities import os import shutil from plogical.virtualHostUtilities import virtualHostUtilities from plogical.installUtilities import installUtilities from plogical.sslUtilities import sslUtilities import plogical.randomPassword as randomPassword import subprocess import shlex from databases.models import Databases from os.path import join from os import listdir, rmdir from shutil import move from filemanager_app import views as fileManage from plogical.findBWUsage import findBWUsage from dns.models import Domains,Records import requests # Create your views here. def loadWebsitesHome(request): try: val = request.session['userID'] admin = Administrator.objects.get(pk=val) viewStatus = 1 if admin.type == 3: viewStatus = 0 return render(request,'websiteFunctions/index.html',{"viewStatus":viewStatus}) except KeyError: return redirect(loadLoginPage) def createWebsite(request): try: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) packages = admin.package_set.all() packagesName = [] for items in packages: packagesName.append(items.packageName) if admin.type == 1: admins = Administrator.objects.all() adminNames = [] for items in admins: adminNames.append(items.userName) else: admins = Administrator.objects.filter(owner=admin.pk) adminNames = [] adminNames.append(admin.userName) for items in admins: adminNames.append(items.userName) Data = {'packageList': packagesName,"owernList":adminNames} return render(request, 'websiteFunctions/createWebsite.html', Data) except BaseException, msg: logging.CyberCPLogFileWriter.writeToFile(str(msg)) return HttpResponse(str(msg)) except KeyError: return redirect(loadLoginPage) def modifyWebsite(request): try: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) if admin.type == 1: websites = Websites.objects.all() websitesName = [] for items in websites: websitesName.append(items.domain) else: if admin.type == 2: websites = admin.websites_set.all() admins = Administrator.objects.filter(owner=admin.pk) websitesName = [] for items in websites: websitesName.append(items.domain) for items in admins: webs = items.websites_set.all() for web in webs: websitesName.append(web.domain) else: websitesName = [] websites = Websites.objects.filter(admin=admin) for items in websites: websitesName.append(items.domain) return render(request, 'websiteFunctions/modifyWebsite.html', {'websiteList':websitesName}) except BaseException, msg: logging.CyberCPLogFileWriter.writeToFile(str(msg)) return HttpResponse(str(msg)) except KeyError: return redirect(loadLoginPage) def deleteWebsite(request): try: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) if admin.type == 1: websites = Websites.objects.all() websitesName = [] for items in websites: websitesName.append(items.domain) else: if admin.type == 2: websites = admin.websites_set.all() admins = Administrator.objects.filter(owner=admin.pk) websitesName = [] for items in websites: websitesName.append(items.domain) for items in admins: webs = items.websites_set.all() for web in webs: websitesName.append(web.domain) else: websitesName = [] websites = Websites.objects.filter(admin=admin) for items in websites: websitesName.append(items.domain) return render(request, 'websiteFunctions/deleteWebsite.html', {'websiteList':websitesName}) except BaseException, msg: logging.CyberCPLogFileWriter.writeToFile(str(msg)) return HttpResponse(str(msg)) except KeyError: return redirect(loadLoginPage) def siteState(request): try: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) if admin.type == 1: websites = Websites.objects.all() websitesName = [] for items in websites: websitesName.append(items.domain) else: if admin.type == 2: websites = admin.websites_set.all() admins = Administrator.objects.filter(owner=admin.pk) websitesName = [] for items in websites: websitesName.append(items.domain) for items in admins: webs = items.websites_set.all() for web in webs: websitesName.append(web.domain) else: websitesName = [] websites = Websites.objects.filter(admin=admin) for items in websites: websitesName.append(items.domain) return render(request, 'websiteFunctions/suspendWebsite.html', {'websiteList':websitesName}) except BaseException, msg: logging.CyberCPLogFileWriter.writeToFile(str(msg)) return HttpResponse(str(msg)) except KeyError: return redirect(loadLoginPage) def submitWebsiteCreation(request): try: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) domain = data['domainName'] adminEmail = data['adminEmail'] phpSelection = data['phpSelection'] packageName = data['package'] websiteOwner = data['websiteOwner'] try: website = Websites.objects.get(domain=domain) data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Website Already Exists"} json_data = json.dumps(data_ret) return HttpResponse(json_data) except: pass try: website = ChildDomains.objects.get(domain=domain) data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Website Already Exists"} json_data = json.dumps(data_ret) return HttpResponse(json_data) except: pass ####### Limitations check admin = Administrator.objects.get(userName=websiteOwner) if admin.type == 1: pass elif admin.type == 3: if admin.initWebsitesLimit == 0: pass elif admin.websites_set.all().count() == admin.initWebsitesLimit: data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Selected owner have reached maximum websites limit"} json_data = json.dumps(data_ret) return HttpResponse(json_data) else: pass else: initialLimit = admin.initWebsitesLimit try: subaccounts = Administrator.objects.filter(owner=admin.pk) for items in subaccounts: initialLimit = initialLimit - items.initWebsitesLimit except: pass if admin.initWebsitesLimit == 0: pass elif admin.websites_set.all().count() == initialLimit: data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Selected owner have reached maximum websites limit"} json_data = json.dumps(data_ret) return HttpResponse(json_data) else: pass ####### Limitations Check End ssl = data['ssl'] if virtualHostUtilities.checkIfVirtualHostExists(domain) == 1: data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': "This domain already exists in Litespeed Configurations, first delete the domain to perform sweap."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if virtualHostUtilities.createDirectoryForVirtualHost(domain, adminEmail, phpSelection) != 1: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if virtualHostUtilities.createConfigInMainVirtualHostFile(domain) != 1: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if ssl == 1: installUtilities.reStartOpenLiteSpeed("restart","ols") else: installUtilities.reStartLiteSpeed() if ssl == 1: sslpath = "/home/" + domain + "/public_html" ssl_responce = sslUtilities.obtainSSLForADomain(domain, adminEmail,sslpath) if ssl_responce == 1: sslUtilities.installSSLForDomain(domain) installUtilities.reStartLiteSpeed() else: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': str( ssl_responce) + ", for more information see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) ## zone creation and try: newZone = Domains(admin=admin, name=domain, type="NATIVE") newZone.save() content = "ns1." + domain + " hostmaster." + domain + " 1 10800 3600 604800 3600" soaRecord = Records(domainOwner=newZone, domain_id=newZone.id, name=domain, type="SOA", content=content, ttl=3600, prio=0, disabled=0, auth=1) soaRecord.save() try: recordContentA = requests.get('https://api.ipify.org').text zone = Domains.objects.get(name=domain) record = Records(domainOwner=zone, domain_id=zone.id, name=domain, type="A", content=recordContentA, ttl=3600, prio=0, disabled=0, auth=1) record.save() except: pass except: try: recordContentA = requests.get('https://api.ipify.org').text zone = Domains.objects.get(name=domain) record = Records(domainOwner=zone, domain_id=zone.id, name=domain, type="A", content=recordContentA, ttl=3600, prio=0, disabled=0, auth=1) record.save() except: pass ## zone creation selectedPackage = Package.objects.get(packageName=packageName) website = Websites(admin=admin, package=selectedPackage, domain=domain, adminEmail=adminEmail, phpSelection=phpSelection, ssl=ssl) website.save() shutil.copy("/usr/local/CyberCP/index.html", "/home/" + domain + "/public_html/index.html") data_ret = {'createWebSiteStatus': 1, 'error_message': "None", "existsStatus": 0} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException,msg: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg),"existsStatus":0} json_data = json.dumps(data_ret) return HttpResponse(json_data) except KeyError: data_ret = {'createWebSiteStatus': 0, 'error_message': "not logged in as admin","existsStatus":0} 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'] try: website = Websites.objects.get(domain=domain) data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Website Already Exists"} json_data = json.dumps(data_ret) return HttpResponse(json_data) except: pass try: website = ChildDomains.objects.get(domain=domain) data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Website Already Exists"} json_data = json.dumps(data_ret) return HttpResponse(json_data) except: pass ####### Limitations check master = Websites.objects.get(domain=masterDomain) if master.package.allowedDomains > master.childdomains_set.all().count(): pass else: data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0, 'error_message': "Exceeded maximum number of domains for this package"} json_data = json.dumps(data_ret) return HttpResponse(json_data) ####### Limitations Check End ssl = data['ssl'] path = data['path'] ####### Creation try: restore = data['restore'] except: if len(path) > 0: path = path.lstrip("/") path = "/home/" + masterDomain + "/public_html/" + path else: path = "/home/" + masterDomain + "/public_html/" + domain if virtualHostUtilities.createDirectoryForDomain(masterDomain, domain, phpSelection, path, master.adminEmail) != 1: numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 0, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if virtualHostUtilities.createConfigInMainDomainHostFile(domain, masterDomain) != 1: numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 0, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if ssl == 1: installUtilities.reStartOpenLiteSpeed("restart", "ols") else: installUtilities.reStartLiteSpeed() if ssl == 1: ssl_responce = sslUtilities.obtainSSLForADomain(domain, master.adminEmail, path) if ssl_responce == 1: sslUtilities.installSSLForDomain(domain) installUtilities.reStartLiteSpeed() else: numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': str( ssl_responce) + ", for more information see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) website = ChildDomains(master=master, domain=domain, path=path, phpSelection=phpSelection, ssl=ssl) website.save() shutil.copy("/usr/local/CyberCP/index.html", path + "/index.html") data_ret = {'createWebSiteStatus': 1, 'error_message': "None", "existsStatus": 0} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException, msg: numberOfWebsites = Websites.objects.count() + ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0} json_data = json.dumps(data_ret) return HttpResponse(json_data) def fetchDomains(request): try: val = 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 = { 'childDomain': items.domain, 'path': items.path, } 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_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) def listWebsites(request): try: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) if admin.type == 1: websites = admin.websites_set.all() else: websites = Websites.objects.filter(admin=admin) pages = float(len(websites)) / float(10) pagination = [] if pages <= 1.0: pages = 1 pagination.append('
  • ') else: pages = ceil(pages) finalPages = int(pages) + 1 for i in range(1, finalPages): pagination.append('
  • ' + str(i) + '
  • ') 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: val = request.session['userID'] try: admin = Administrator.objects.get(pk=request.session['userID']) if request.method == 'POST': try: data = json.loads(request.body) status = data['page'] pageNumber = int(status) except BaseException, msg: status = str(msg) if admin.type == 1: finalPageNumber = ((pageNumber * 10))-10 endPageNumber = finalPageNumber + 10 websites = Websites.objects.all()[finalPageNumber:endPageNumber] else: finalPageNumber = ((pageNumber * 10)) - 10 endPageNumber = finalPageNumber + 10 websites = Websites.objects.filter(admin=admin)[finalPageNumber:endPageNumber] json_data = "[" checker = 0 for items in websites: if items.state == 0: state = "Suspended" else: state = "Active" dic = {'domain': items.domain, 'adminEmail': items.adminEmail,'admin': items.admin.userName,'package': items.package.packageName,'state':state} 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: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) websiteName = data['websiteName'] numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(websiteName,numberOfWebsites) delWebsite = Websites.objects.get(domain=websiteName) databases = Databases.objects.filter(website=delWebsite) childDomains = delWebsite.childdomains_set.all() for items in childDomains: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(items.domain, numberOfWebsites) for items in databases: mysqlUtilities.deleteDatabase(items.dbName, items.dbUser) delWebsite.delete() installUtilities.reStartLiteSpeed() 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'] numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(websiteName,numberOfWebsites) delWebsite = ChildDomains.objects.get(domain=websiteName) delWebsite.delete() installUtilities.reStartLiteSpeed() 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 submitWebsiteStatus(request): try: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) websiteName = data['websiteName'] state = data['state'] website = Websites.objects.get(domain=websiteName) if state == "Suspend": virtualHostUtilities.suspendVirtualHost(websiteName) installUtilities.reStartLiteSpeed() website.state = 0 else: virtualHostUtilities.UnsuspendVirtualHost(websiteName) installUtilities.reStartLiteSpeed() website.state = 1 website.save() data_ret = {'websiteStatus': 1,'error_message': "None"} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException,msg: 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: val = request.session['userID'] try: if request.method == 'POST': admin = Administrator.objects.get(pk=request.session['userID']) if admin.type == 1: packs = Package.objects.all() else: packs = Package.objects.filter(admin=admin) if admin.type == 1: admins = Administrator.objects.all() else: admins = Administrator.objects.filter(owner=admin.pk) ## Get packs name json_data = "[" checker = 0 for items in packs: dic = {"pack":items.packageName} 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: dic = {"adminNames": items.userName} 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: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) domain = data['domain'] package = data['packForWeb'] email = data['email'] phpVersion = data['phpVersion'] admin = data['admin'] newOwner = Administrator.objects.get(userName=admin) modifyWeb = Websites.objects.get(domain=domain) webpack = Package.objects.get(packageName=package) modifyWeb.package = webpack modifyWeb.adminEmail = email modifyWeb.phpSelection = phpVersion modifyWeb.admin = newOwner confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + domain completePathToConfigFile = confPath + "/vhost.conf" virtualHostUtilities.changePHP(completePathToConfigFile,phpVersion) installUtilities.reStartLiteSpeed() 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) def domain(request,domain): try: val = request.session['userID'] admin = Administrator.objects.get(pk=val) if Websites.objects.filter(domain=domain).exists(): if admin.type == 1: website = Websites.objects.get(domain=domain) Data = {} Data['ftpTotal'] = website.package.ftpAccounts Data['ftpUsed'] = website.users_set.all().count() Data['databasesUsed'] = website.databases_set.all().count() Data['databasesTotal'] = website.package.dataBases Data['domain'] = domain diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/"+domain,website.package.diskSpace) ## bw usage calculation bwData = findBWUsage.findDomainBW(domain,website.package.bandwidth) Data['bwInMBTotal'] = website.package.bandwidth Data['bwInMB'] = bwData[0] Data['bwUsage'] = bwData[1] if diskUsageDetails!=None: if diskUsageDetails[1] > 100: diskUsageDetails[1] = 100 Data['diskUsage'] = diskUsageDetails[1] Data['diskInMB'] = diskUsageDetails[0] Data['diskInMBTotal'] = website.package.diskSpace else: Data['diskUsage'] = 0 Data['diskInMB'] = 0 Data['diskInMBTotal'] = website.package.diskSpace return render(request, 'websiteFunctions/website.html', Data) else: website = Websites.objects.get(domain=domain) if website.admin == admin: Data = {} Data['ftpTotal'] = website.package.ftpAccounts Data['ftpUsed'] = website.users_set.all().count() Data['databasesUsed'] = website.databases_set.all().count() Data['databasesTotal'] = website.package.dataBases Data['domain'] = domain diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + domain, website.package.diskSpace) if diskUsageDetails != None: if diskUsageDetails[1] > 100: diskUsageDetails[1] = 100 Data['diskUsage'] = diskUsageDetails[1] Data['diskInMB'] = diskUsageDetails[0] Data['diskInMBTotal'] = website.package.diskSpace else: Data['diskUsage'] = 0 Data['diskInMB'] = 0 Data['diskInMBTotal'] = website.package.diskSpace return render(request, 'websiteFunctions/website.html', Data) else: return render(request, 'websiteFunctions/website.html', {"error": 1, "domain": "You do not own this domain."}) else: return render(request, 'websiteFunctions/website.html', {"error":1,"domain": "This domain does not exists"}) except KeyError: return redirect(loadLoginPage) def getDataFromLogFile(request): data = json.loads(request.body) logType = data['logType'] virtualHost = data['virtualHost'] page = data['page'] if logType == 1: fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".access_log" else: fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".error_log" numberOfTotalLines = int(subprocess.check_output(["wc", "-l", fileName]).split(" ")[0]) if numberOfTotalLines < 25 : data = subprocess.check_output(["cat", fileName]) else: if page == 1: end = numberOfTotalLines start = end - 24 if start <= 0: start = 1 startingAndEnding = "'" + str(start) + "," + str(end) + "p'" command = "sed -n " + startingAndEnding + " " + fileName proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) data = proc.stdout.read() else: end = numberOfTotalLines - ((page-1)*25) start = end - 24 if start <= 0: start = 1 startingAndEnding = "'" + str(start) + "," + str(end) + "p'" command = "sed -n " + startingAndEnding + " " + fileName proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) data = proc.stdout.read() data = data.split("\n") json_data = "[" checker = 0 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('"', '') dic = {'domain': domain, 'ipAddress': ipAddress, 'time': time, 'resource': resource, 'size': size, } 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_json = json.dumps({'logstatus': 1, 'error_message': "None", "data": json_data}) return HttpResponse(final_json) def fetchErrorLogs(request): try: data = json.loads(request.body) virtualHost = data['virtualHost'] page = data['page'] fileName = "/home/" + virtualHost + "/logs/" + virtualHost + ".error_log" numberOfTotalLines = int(subprocess.check_output(["wc", "-l", fileName]).split(" ")[0]) if numberOfTotalLines < 25: data = subprocess.check_output(["cat", fileName]) else: if page == 1: end = numberOfTotalLines start = end - 24 if start <= 0: start = 1 startingAndEnding = "'" + str(start) + "," + str(end) + "p'" command = "sed -n " + startingAndEnding + " " + fileName proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) data = proc.stdout.read() else: end = numberOfTotalLines - ((page - 1) * 25) start = end - 24 if start <= 0: start = 1 startingAndEnding = "'" + str(start) + "," + str(end) + "p'" command = "sed -n " + startingAndEnding + " " + fileName proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) data = proc.stdout.read() final_json = json.dumps({'logstatus': 1, 'error_message': "None", "data": data}) return HttpResponse(final_json) except BaseException,msg: final_json = json.dumps({'logstatus': 0, 'error_message': str(msg)}) return HttpResponse(final_json) def installWordpress(request): try: val = request.session['userID'] if request.method == 'POST': try: data = json.loads(request.body) domainName = data['domain'] home = data['home'] finalPath = "" if home == '0': path = data['path'] finalPath = "/home/" + domainName + "/public_html/" + path + "/" else: finalPath = "/home/" + domainName + "/public_html/" if not os.path.exists(finalPath): os.makedirs(finalPath) if not os.listdir(finalPath): pass else: data_ret = {'installStatus': 0, 'error_message': "Target directory should be empty before installation, otherwise data loss could occur."} json_data = json.dumps(data_ret) return HttpResponse(json_data) ## Get wordpress if not os.path.exists("latest.tar.gz"): command = 'wget --no-check-certificate http://wordpress.org/latest.tar.gz' cmd = shlex.split(command) res = subprocess.call(cmd) command = 'tar -xzvf latest.tar.gz -C ' + finalPath cmd = shlex.split(command) res = subprocess.call(cmd) ## Get plugin if not os.path.exists("litespeed-cache.1.1.5.1.zip"): command = 'wget --no-check-certificate https://downloads.wordpress.org/plugin/litespeed-cache.1.1.5.1.zip' cmd = shlex.split(command) res = subprocess.call(cmd) command = 'unzip litespeed-cache.1.1.5.1.zip -d ' + finalPath cmd = shlex.split(command) res = subprocess.call(cmd) root = finalPath for filename in listdir(join(root, 'wordpress')): move(join(root, 'wordpress', filename), join(root, filename)) rmdir(root + "wordpress") shutil.copytree(finalPath + "litespeed-cache", finalPath + "wp-content/plugins/litespeed-cache") shutil.rmtree(finalPath + "litespeed-cache") ## DB Creation dbName = randomPassword.generate_pass() dbUser = dbName dbPassword = randomPassword.generate_pass() ## DB Creation website = Websites.objects.get(domain=domainName) if website.package.dataBases > website.databases_set.all().count(): pass else: # remove the downloaded files if installation fails shutil.rmtree(finalPath) homeDir = "/home/"+domainName+"/public_html" if not os.path.exists(homeDir): os.mkdir(homeDir) command = 'chown -R nobody:nobody '+homeDir cmd = shlex.split(command) res = subprocess.call(cmd) data_ret = {'installStatus': 0, 'error_message': "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(): # remove the downloaded files if installation fails shutil.rmtree(finalPath) homeDir = "/home/" + domainName + "/public_html" if not os.path.exists(homeDir): os.mkdir(homeDir) command = 'chown -R nobody:nobody ' + homeDir cmd = shlex.split(command) res = subprocess.call(cmd) data_ret = {'installStatus': 0, 'error_message': "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: # remove the downloaded files shutil.rmtree(finalPath) homeDir = "/home/" + domainName + "/public_html" if not os.path.exists(homeDir): os.mkdir(homeDir) command = 'chown -R nobody:nobody ' + homeDir cmd = shlex.split(command) res = subprocess.call(cmd) data_ret = {'installStatus': 0, 'error_message': result} json_data = json.dumps(data_ret) return HttpResponse(json_data) db = Databases(website=website, dbName=dbName, dbUser=dbUser) db.save() ## edit config file wpconfigfile = finalPath + "wp-config-sample.php" data = open(wpconfigfile, "r").readlines() writeDataToFile = open(wpconfigfile, "w") defDBName = "define('DB_NAME', '" + dbName + "');" + "\n" defDBUser = "define('DB_USER', '" + dbUser + "');" + "\n" defDBPassword = "define('DB_PASSWORD', '" + dbPassword + "');" + "\n" for items in data: if items.find("DB_NAME") > -1: if items.find("database_name_here") > -1: writeDataToFile.writelines(defDBName) print ("database_name_here") elif items.find("DB_USER") > -1: if items.find("username_here") > -1: writeDataToFile.writelines(defDBUser) print ("username_here") elif items.find("DB_PASSWORD") > -1: writeDataToFile.writelines(defDBPassword) else: writeDataToFile.writelines(items) writeDataToFile.close() os.rename(wpconfigfile, finalPath + 'wp-config.php') command = 'chown -R nobody:nobody ' + finalPath cmd = shlex.split(command) res = subprocess.call(cmd) virtualHostUtilities.addRewriteRules(domainName) installUtilities.reStartLiteSpeed() status = {"installStatus": 1} final_json = json.dumps(status) return HttpResponse(final_json) except BaseException, msg: # remove the downloaded files shutil.rmtree(finalPath) homeDir = "/home/" + domainName + "/public_html" if not os.path.exists(homeDir): os.mkdir(homeDir) command = 'chown -R nobody:nobody ' + homeDir cmd = shlex.split(command) res = subprocess.call(cmd) 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) + "[getDataFromLogFile]") return HttpResponse("Not Logged in as admin") def getDataFromConfigFile(request): try: val = request.session['userID'] if request.method == 'POST': try: data = json.loads(request.body) virtualHost = data['virtualHost'] filePath = installUtilities.Server_root_path + "/conf/vhosts/"+virtualHost+"/vhost.conf" configData = open(filePath,"r").read() if len(configData) == 0: status = {"logstatus": 0, "error_message": "Log file is currently empty"} final_json = json.dumps(status) return HttpResponse(final_json) status = {"configstatus":1,"configData":configData} 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: 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 saveConfigsToFile(request): try: val = request.session['userID'] if request.method == 'POST': try: data = json.loads(request.body) virtualHost = data['virtualHost'] configData = data['configData'] filePath = installUtilities.Server_root_path + "/conf/vhosts/"+virtualHost+"/vhost.conf" vhost = open(filePath,"w") vhost.write(configData) vhost.close() status = {"configstatus":1,"configData":configData} 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: status = {"logstatus":0,"error":"Could not save, see main log file."} logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[saveConfigsToFile]") return HttpResponse("Not Logged in as admin") def getRewriteRules(request): try: val = request.session['userID'] if request.method == 'POST': try: data = json.loads(request.body) virtualHost = data['virtualHost'] filePath = "/home/"+virtualHost+"/public_html/.htaccess" 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: val = request.session['userID'] if request.method == 'POST': try: data = json.loads(request.body) virtualHost = data['virtualHost'] rewriteRules = data['rewriteRules'] virtualHostUtilities.addRewriteRules(virtualHost) filePath = "/home/" + virtualHost + "/public_html/.htaccess" vhost = open(filePath,"w") vhost.write(rewriteRules) vhost.close() status = {"rewriteStatus":1} 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 save, see main log file."} logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[saveConfigsToFile]") return HttpResponse("Not Logged in as admin") def saveSSL(request): try: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) domain = data['virtualHost'] cert = data['cert'] key = data['key'] pathToStoreSSL = virtualHostUtilities.Server_root + "/conf/vhosts/" + "SSL-" + domain website = Websites.objects.get(domain=domain) if website.ssl == 0: try: os.mkdir(pathToStoreSSL) pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" privkey = open(pathToStoreSSLPrivKey, 'w') privkey.write(key) privkey.close() fullchain = open(pathToStoreSSLFullChain, 'w') fullchain.write(cert) fullchain.close() sslUtilities.installSSLForDomain(domain) installUtilities.reStartLiteSpeed() website.ssl = 1 website.save() data_ret = {'sslStatus': 1, 'error_message': "None"} json_data = json.dumps(data_ret) return HttpResponse(json_data) 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) return HttpResponse(json_data) else: pathToStoreSSLPrivKey = pathToStoreSSL + "/privkey.pem" pathToStoreSSLFullChain = pathToStoreSSL + "/fullchain.pem" privkey = open(pathToStoreSSLPrivKey, 'w') privkey.write(key) privkey.close() fullchain = open(pathToStoreSSLFullChain, 'w') fullchain.write(cert) fullchain.close() installUtilities.reStartLiteSpeed() website.ssl = 1 website.save() data_ret = {'sslStatus': 1, 'error_message': "None"} json_data = json.dumps(data_ret) return HttpResponse(json_data) data_ret = {'saveStatus': 1,'error_message': "None"} json_data = json.dumps(data_ret) return HttpResponse(json_data) 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) 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) def filemanager(request, domain): try: val = request.session['userID'] request.session['fileManagerHome'] = '/home/' + domain fileManage.fm.root = request.session['fileManagerHome'] return fileManage.index(request) except KeyError: return redirect(loadLoginPage) def CreateWebsiteFromBackup(request): try: if request.method == 'POST': data = json.loads(request.body) backupFile = data['backupFile'].strip(".tar.gz") originalFile = "/home/backup/" + data['backupFile'] if not os.path.exists(originalFile): dir = data['dir'] path = "/home/backup/transfer-"+str(dir)+"/"+backupFile else: path = "/home/backup/" + backupFile admin = Administrator.objects.get(pk=1) websiteOwner = admin.userName adminEmail = admin.email ## open meta file to read data data = open(path + "/meta", 'r').readlines() domain = data[0].split('-')[0] phpSelection = data[0].split("-")[1].strip("\n") try: website = Websites.objects.get(domain=domain) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 0, 'error_message': "Website Already Exists, please delete this account to restore."} status = open(path + '/status', "w") status.write("Website already exists") status.close() json_data = json.dumps(data_ret) return HttpResponse(json_data) except: pass check = 0 dbCheck = 0 for items in data: if check == 0: if virtualHostUtilities.createDirectoryForVirtualHost(domain, adminEmail, phpSelection) != 1: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) if virtualHostUtilities.createConfigInMainVirtualHostFile(domain) != 1: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {"existsStatus": 1, 'createWebSiteStatus': 1, 'error_message': "Can not create configurations, see CyberCP main log file."} json_data = json.dumps(data_ret) return HttpResponse(json_data) installUtilities.reStartLiteSpeed() selectedPackage = Package.objects.get(packageName="Default") website = Websites(admin=admin, package=selectedPackage, domain=domain, adminEmail=adminEmail, phpSelection=phpSelection, ssl=0) website.save() #shutil.copy("/usr/local/CyberCP/index.html", "/home/" + domain + "/public_html/index.html") check = check + 1 else: if items.find("Databases") > -1: dbCheck = 1 continue if dbCheck == 1: dbData = items.split('-') mysqlUtilities.createDatabase(dbData[0], dbData[1], "cyberpanel") newDB = Databases(website=website, dbName=dbData[0], dbUser=dbData[1]) newDB.save() status = open(path + '/status', "w") status.write("Accounts and DBs Created") status.close() data_ret = {'createWebSiteStatus': 1, 'error_message': "None", "existsStatus": 0} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException, msg: numberOfWebsites = Websites.objects.count()+ChildDomains.objects.count() virtualHostUtilities.deleteVirtualHostConfigurations(domain, numberOfWebsites) data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0} json_data = json.dumps(data_ret) return HttpResponse(json_data) def changePHP(request): try: val = request.session['userID'] try: if request.method == 'POST': data = json.loads(request.body) childDomain = data['childDomain'] phpVersion = data['phpSelection'] confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + childDomain completePathToConfigFile = confPath + "/vhost.conf" virtualHostUtilities.changePHP(completePathToConfigFile,phpVersion) installUtilities.reStartLiteSpeed() 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)