Files
CyberPanel/plogical/website.py

2326 lines
88 KiB
Python
Raw Normal View History

2019-12-10 23:04:24 +05:00
#!/usr/local/CyberCP/bin/python
2018-08-26 04:55:51 +05:00
import os
import os.path
import sys
import django
2019-06-08 21:41:43 +00:00
2018-08-26 04:55:51 +05:00
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
import json
2019-12-15 13:30:40 +05:00
from plogical.acl import ACLManager
from plogical import CyberCPLogFileWriter as logging
2018-08-26 04:55:51 +05:00
from websiteFunctions.models import Websites, ChildDomains
2019-12-15 13:30:40 +05:00
from plogical.virtualHostUtilities import virtualHostUtilities
2018-08-26 04:55:51 +05:00
import subprocess
import shlex
2019-12-15 13:30:40 +05:00
from plogical.installUtilities import installUtilities
2018-08-26 04:55:51 +05:00
from django.shortcuts import HttpResponse, render
2018-09-03 16:46:51 +05:00
from loginSystem.models import Administrator, ACL
2018-08-26 04:55:51 +05:00
from packages.models import Package
2019-12-15 13:30:40 +05:00
from plogical.mailUtilities import mailUtilities
2018-08-26 04:55:51 +05:00
from random import randint
import time
import re
2019-12-15 13:30:40 +05:00
from plogical.childDomain import ChildDomainManager
2018-08-26 04:55:51 +05:00
from math import ceil
from plogical.alias import AliasManager
from plogical.applicationInstaller import ApplicationInstaller
from databases.models import Databases
2019-12-15 13:30:40 +05:00
from plogical import randomPassword as randomPassword
2018-08-26 04:55:51 +05:00
import hashlib
2019-12-15 13:30:40 +05:00
from plogical.mysqlUtilities import mysqlUtilities
2018-08-26 05:23:08 +05:00
from plogical import hashPassword
2018-10-22 10:55:52 +05:00
from emailMarketing.emACL import emACL
2019-12-15 13:30:40 +05:00
from plogical.processUtilities import ProcessUtilities
2018-12-17 18:46:34 +05:00
from managePHP.phpManager import PHPManager
2019-06-08 21:41:43 +00:00
from ApachController.ApacheVhosts import ApacheVhost
from plogical.vhostConfs import vhostConfs
from plogical.cronUtil import CronUtil
from re import match,I,M
2019-06-08 21:41:43 +00:00
2018-08-26 04:55:51 +05:00
class WebsiteManager:
2019-06-08 21:41:43 +00:00
apache = 1
ols = 2
lsws = 3
def __init__(self, domain=None, childDomain=None):
2018-08-26 04:55:51 +05:00
self.domain = domain
self.childDomain = childDomain
2019-06-08 21:41:43 +00:00
def createWebsite(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0:
return ACLManager.loadError()
adminNames = ACLManager.loadAllUsers(userID)
packagesName = ACLManager.loadPackages(userID, currentACL)
2018-12-17 18:46:34 +05:00
phps = PHPManager.findPHPVersions()
2018-08-26 04:55:51 +05:00
2018-12-17 18:46:34 +05:00
Data = {'packageList': packagesName, "owernList": adminNames, 'phps': phps}
2018-08-26 04:55:51 +05:00
return render(request, 'websiteFunctions/createWebsite.html', Data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def modifyWebsite(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
2018-12-17 18:46:34 +05:00
phps = PHPManager.findPHPVersions()
2018-08-26 04:55:51 +05:00
2018-12-17 18:46:34 +05:00
return render(request, 'websiteFunctions/modifyWebsite.html', {'websiteList': websitesName, 'phps': phps})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def deleteWebsite(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'deleteWebsite') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'websiteFunctions/deleteWebsite.html', {'websiteList': websitesName})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def siteState(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'suspendWebsite') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'websiteFunctions/suspendWebsite.html', {'websiteList': websitesName})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def listWebsites(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
2018-11-08 13:19:36 +05:00
pagination = self.websitePagination(currentACL, userID)
2018-08-26 04:55:51 +05:00
return render(request, 'websiteFunctions/listWebsites.html', {"pagination": pagination})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def listCron(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'websiteFunctions/listCron.html', {'websiteList': websitesName})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def domainAlias(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
aliasManager = AliasManager(self.domain)
noAlias, finalAlisList = aliasManager.fetchAlisForDomains()
path = "/home/" + self.domain + "/public_html"
return render(request, 'websiteFunctions/domainAlias.html', {
'masterDomain': self.domain,
'aliases': finalAlisList,
'path': path,
'noAlias': noAlias
})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def submitWebsiteCreation(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
2019-03-12 14:47:58 +05:00
domain = data['domainName']
2018-08-26 04:55:51 +05:00
adminEmail = data['adminEmail']
phpSelection = data['phpSelection']
packageName = data['package']
websiteOwner = data['websiteOwner']
if not match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', domain,
M | I):
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if not match(r'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b', adminEmail,
M | I):
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid email."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
try:
HA = data['HA']
externalApp = 'nobody'
except:
externalApp = "".join(re.findall("[a-zA-Z]+", domain))[:7]
try:
counter = 0
while 1:
tWeb = Websites.objects.get(externalApp=externalApp)
externalApp = '%s%s' % (tWeb.externalApp, str(counter))
counter = counter + 1
except:
pass
2018-08-26 04:55:51 +05:00
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
2019-06-08 21:41:43 +00:00
try:
apacheBackend = str(data['apacheBackend'])
except:
apacheBackend = "0"
2018-08-26 04:55:51 +05:00
## Create Configurations
2019-12-10 23:04:24 +05:00
execPath = "sudo /usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2018-08-26 04:55:51 +05:00
execPath = execPath + " createVirtualHost --virtualHostName " + domain + \
" --administratorEmail " + adminEmail + " --phpVersion '" + phpSelection + \
"' --virtualHostUser " + externalApp + " --ssl " + str(data['ssl']) + " --dkimCheck " \
+ str(data['dkimCheck']) + " --openBasedir " + str(data['openBasedir']) + \
2019-06-08 21:41:43 +00:00
' --websiteOwner ' + websiteOwner + ' --package ' + packageName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
time.sleep(2)
2019-06-08 21:41:43 +00:00
data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None",
'tempStatusPath': tempStatusPath}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitDomainCreation(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
masterDomain = data['masterDomain']
2019-03-12 14:47:58 +05:00
domain = data['domainName']
2018-08-26 04:55:51 +05:00
phpSelection = data['phpSelection']
path = data['path']
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
if not match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', domain,
M | I):
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-26 04:55:51 +05:00
if ACLManager.checkOwnership(masterDomain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
if currentACL['admin'] != 1:
data['openBasedir'] = 1
if len(path) > 0:
path = path.lstrip("/")
path = "/home/" + masterDomain + "/public_html/" + path
else:
path = "/home/" + masterDomain + "/public_html/" + domain
2019-06-08 21:41:43 +00:00
try:
apacheBackend = str(data['apacheBackend'])
except:
apacheBackend = "0"
2018-08-26 04:55:51 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
" --phpVersion '" + phpSelection + "' --ssl " + str(data['ssl']) + " --dkimCheck " + str(
data['dkimCheck']) \
+ " --openBasedir " + str(data['openBasedir']) + ' --path ' + path + ' --websiteOwner ' \
2019-06-08 21:41:43 +00:00
+ admin.userName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
time.sleep(2)
2019-06-08 21:41:43 +00:00
data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None",
'tempStatusPath': tempStatusPath}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-06-08 21:41:43 +00:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def fetchDomains(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
masterDomain = data['masterDomain']
if ACLManager.checkOwnership(masterDomain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('fetchStatus', 0)
cdManager = ChildDomainManager(masterDomain)
json_data = cdManager.findChildDomainsJson()
2018-11-08 13:19:36 +05:00
final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
2018-08-26 04:55:51 +05:00
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-06-08 21:41:43 +00:00
def searchWebsites(self, userID=None, data=None):
2019-02-22 09:19:16 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
2019-02-24 15:37:19 +05:00
try:
json_data = self.searchWebsitesJson(currentACL, userID, data['patternAdded'])
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-02-24 15:37:19 +05:00
tempData = {}
tempData['page'] = 1
return self.getFurtherAccounts(userID, tempData)
2019-02-22 09:19:16 +05:00
pagination = self.websitePagination(currentACL, userID)
2019-06-08 21:41:43 +00:00
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
2019-02-22 09:19:16 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-02-22 09:19:16 +05:00
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def getFurtherAccounts(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
pageNumber = int(data['page'])
json_data = self.findWebsitesJson(currentACL, userID, pageNumber)
2018-11-08 13:19:36 +05:00
pagination = self.websitePagination(currentACL, userID)
2019-06-08 21:41:43 +00:00
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitWebsiteDeletion(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'deleteWebsite') == 0:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
websiteName = data['websiteName']
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2018-08-26 04:55:51 +05:00
## Deleting master domain
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + websiteName
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'websiteDeleteStatus': 1, 'error_message': "None"}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitDomainDeletion(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
websiteName = data['websiteName']
if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteDomain --virtualHostName " + websiteName
2019-03-26 16:19:03 +05:00
ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'websiteDeleteStatus': 1, 'error_message': "None"}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitWebsiteStatus(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'suspendWebsite') == 0:
return ACLManager.loadErrorJson('websiteStatus', 0)
websiteName = data['websiteName']
state = data['state']
website = Websites.objects.get(domain=websiteName)
if state == "Suspend":
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
command = "sudo mv " + confPath + " " + confPath + "-suspended"
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(command)
2019-03-31 02:47:35 +05:00
installUtilities.reStartLiteSpeedSocket()
2018-08-26 04:55:51 +05:00
website.state = 0
else:
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
command = "sudo mv " + confPath + "-suspended" + " " + confPath
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2018-08-26 04:55:51 +05:00
command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + confPath
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(command)
2018-08-26 04:55:51 +05:00
2019-03-31 02:47:35 +05:00
installUtilities.reStartLiteSpeedSocket()
2018-08-26 04:55:51 +05:00
website.state = 1
website.save()
data_ret = {'websiteStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'websiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitWebsiteModify(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0:
return ACLManager.loadErrorJson('modifyStatus', 0)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(data['websiteToBeModified'], admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2018-08-26 04:55:51 +05:00
packs = ACLManager.loadPackages(userID, currentACL)
admins = ACLManager.loadAllUsers(userID)
## Get packs name
json_data = "["
checker = 0
for items in packs:
dic = {"pack": items}
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}
if checker == 0:
admin_data = admin_data + json.dumps(dic)
checker = 1
else:
admin_data = admin_data + ',' + json.dumps(dic)
admin_data = admin_data + ']'
websiteToBeModified = data['websiteToBeModified']
modifyWeb = Websites.objects.get(domain=websiteToBeModified)
email = modifyWeb.adminEmail
currentPack = modifyWeb.package.packageName
owner = modifyWeb.admin.userName
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'modifyStatus': 1, 'error_message': "None", "adminEmail": email,
2018-08-26 04:55:51 +05:00
"packages": json_data, "current_pack": currentPack, "adminNames": admin_data,
'currentAdmin': owner}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
dic = {'status': 0, 'modifyStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def fetchWebsiteDataJSON(self, userID=None, data=None):
2018-11-08 13:19:36 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
packs = ACLManager.loadPackages(userID, currentACL)
admins = ACLManager.loadAllUsers(userID)
## Get packs name
json_data = "["
checker = 0
for items in packs:
dic = {"pack": items}
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}
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_ret = {'status': 1, 'error_message': "None",
"packages": json_data, "adminNames": admin_data}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
dic = {'status': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def saveWebsiteChanges(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
domain = data['domain']
package = data['packForWeb']
email = data['email']
phpVersion = data['phpVersion']
newUser = data['admin']
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'modifyWebsite') == 0:
return ACLManager.loadErrorJson('saveStatus', 0)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2018-08-26 04:55:51 +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
2019-03-26 16:19:03 +05:00
ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
####
2018-08-26 04:55:51 +05:00
newOwner = Administrator.objects.get(userName=newUser)
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()
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'saveStatus': 1, 'error_message': "None"}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def loadDomainHome(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
if Websites.objects.filter(domain=self.domain).exists():
currentACL = ACLManager.loadedACL(userID)
website = Websites.objects.get(domain=self.domain)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
Data = {}
2018-11-08 13:19:36 +05:00
2018-10-22 10:55:52 +05:00
marketingStatus = emACL.checkIfEMEnabled(admin.userName)
2018-08-26 04:55:51 +05:00
2018-10-22 10:55:52 +05:00
Data['marketingStatus'] = marketingStatus
2018-08-26 04:55:51 +05:00
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'] = self.domain
diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace)
## bw usage calculation
try:
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str(
website.package.bandwidth)
2019-03-30 14:21:52 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
bwData = output.split(",")
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
bwData = [0, 0]
## bw usage calculations
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
2018-12-17 18:46:34 +05:00
Data['phps'] = PHPManager.findPHPVersions()
2019-06-27 13:07:47 +05:00
servicePath = '/home/cyberpanel/postfix'
if os.path.exists(servicePath):
Data['email'] = 1
else:
Data['email'] = 0
servicePath = '/home/cyberpanel/pureftpd'
if os.path.exists(servicePath):
Data['ftp'] = 1
else:
Data['ftp'] = 0
2018-08-26 04:55:51 +05:00
return render(request, 'websiteFunctions/website.html', Data)
else:
return render(request, 'websiteFunctions/website.html',
{"error": 1, "domain": "This domain does not exists."})
2019-06-08 21:41:43 +00:00
def launchChild(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
if ChildDomains.objects.filter(domain=self.childDomain).exists():
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
website = Websites.objects.get(domain=self.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'] = self.domain
Data['childDomain'] = self.childDomain
diskUsageDetails = virtualHostUtilities.getDiskUsage("/home/" + self.domain, website.package.diskSpace)
## bw usage calculation
try:
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " findDomainBW --virtualHostName " + self.domain + " --bandwidth " + str(
website.package.bandwidth)
2019-03-30 14:21:52 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
bwData = output.split(",")
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
bwData = [0, 0]
## bw usage calculations
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
2018-12-17 18:46:34 +05:00
Data['phps'] = PHPManager.findPHPVersions()
2019-06-27 13:07:47 +05:00
servicePath = '/home/cyberpanel/postfix'
if os.path.exists(servicePath):
Data['email'] = 1
else:
Data['email'] = 0
servicePath = '/home/cyberpanel/pureftpd'
if os.path.exists(servicePath):
Data['ftp'] = 1
else:
Data['ftp'] = 0
2018-08-26 04:55:51 +05:00
return render(request, 'websiteFunctions/launchChild.html', Data)
else:
2019-06-08 21:41:43 +00:00
return render(request, 'websiteFunctions/launchChild.html',
{"error": 1, "domain": "This child domain does not exists"})
2018-08-26 04:55:51 +05:00
2019-06-08 21:41:43 +00:00
def getDataFromLogFile(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
logType = data['logType']
self.domain = data['virtualHost']
page = data['page']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('logstatus', 0)
if logType == 1:
fileName = "/home/" + self.domain + "/logs/" + self.domain + ".access_log"
else:
fileName = "/home/" + self.domain + "/logs/" + self.domain + ".error_log"
## get Logs
website = Websites.objects.get(domain=self.domain)
2018-08-26 04:55:51 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " getAccessLogs --path " + fileName + " --page " + str(page)
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
final_json = json.dumps(
2019-06-08 21:41:43 +00:00
{'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"})
2018-08-26 04:55:51 +05:00
return HttpResponse(final_json)
## get log ends here.
data = output.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 + ']'
2018-11-20 15:43:43 +05:00
final_json = json.dumps({'status': 1, 'logstatus': 1, 'error_message': "None", "data": json_data})
2018-08-26 04:55:51 +05:00
return HttpResponse(final_json)
2019-06-08 21:41:43 +00:00
def fetchErrorLogs(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
page = data['page']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('logstatus', 0)
fileName = "/home/" + self.domain + "/logs/" + self.domain + ".error_log"
## get Logs
website = Websites.objects.get(domain=self.domain)
2018-08-26 04:55:51 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " getErrorLogs --path " + fileName + " --page " + str(page)
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
final_json = json.dumps(
2018-11-20 15:43:43 +05:00
{'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"})
2018-08-26 04:55:51 +05:00
return HttpResponse(final_json)
## get log ends here.
2018-11-20 15:43:43 +05:00
final_json = json.dumps({'status': 1, 'logstatus': 1, 'error_message': "None", "data": output})
2018-08-26 04:55:51 +05:00
return HttpResponse(final_json)
2019-06-08 21:41:43 +00:00
def getDataFromConfigFile(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('configstatus', 0)
filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf"
command = 'sudo cat ' + filePath
configData = ProcessUtilities.outputExecutioner(command, 'lsadm')
2018-08-26 04:55:51 +05:00
if len(configData) == 0:
2018-11-20 15:43:43 +05:00
status = {'status': 0, "configstatus": 0, "error_message": "Configuration file is currently empty!"}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
2018-11-20 15:43:43 +05:00
status = {'status': 1, "configstatus": 1, "configData": configData}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
2019-06-08 21:41:43 +00:00
def saveConfigsToFile(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] != 1:
return ACLManager.loadErrorJson('configstatus', 0)
configData = data['configData']
self.domain = data['virtualHost']
mailUtilities.checkHome()
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempPath, "w")
vhost.write(configData)
vhost.close()
## writing data temporary to file
filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf"
## save configuration data
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveVHostConfigs --path " + filePath + " --tempPath " + tempPath
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
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)
2019-06-08 21:41:43 +00:00
## save configuration data ends
2018-08-26 04:55:51 +05:00
2019-06-08 21:41:43 +00:00
def getRewriteRules(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('rewriteStatus', 0)
try:
childDom = ChildDomains.objects.get(domain=self.domain)
filePath = childDom.path + '/.htaccess'
except:
filePath = "/home/" + self.domain + "/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)
2019-06-08 21:41:43 +00:00
def saveRewriteRules(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
rewriteRules = data['rewriteRules']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('rewriteStatus', 0)
## writing data temporary to file
mailUtilities.checkHome()
tempPath = "/tmp/" + str(randint(1000, 9999))
2018-08-26 04:55:51 +05:00
vhost = open(tempPath, "w")
vhost.write(rewriteRules)
vhost.close()
## writing data temporary to file
try:
childDomain = ChildDomains.objects.get(domain=self.domain)
filePath = childDomain.path + '/.htaccess'
externalApp = childDomain.master.externalApp
2018-08-26 04:55:51 +05:00
except:
filePath = "/home/" + self.domain + "/public_html/.htaccess"
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2018-08-26 04:55:51 +05:00
## save configuration data
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveRewriteRules --virtualHostName " + self.domain + " --path " + filePath + " --tempPath " + tempPath
output = ProcessUtilities.outputExecutioner(execPath, externalApp)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
installUtilities.reStartLiteSpeedSocket()
2018-08-26 04:55:51 +05:00
status = {"rewriteStatus": 1, 'error_message': output}
final_json = json.dumps(status)
return HttpResponse(final_json)
else:
data_ret = {'rewriteStatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def saveSSL(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
key = data['key']
cert = data['cert']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('sslStatus', 0)
mailUtilities.checkHome()
## writing data temporary to file
tempKeyPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempKeyPath, "w")
vhost.write(key)
vhost.close()
tempCertPath = "/home/cyberpanel/" + str(randint(1000, 9999))
vhost = open(tempCertPath, "w")
vhost.write(cert)
vhost.close()
## writing data temporary to file
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveSSL --virtualHostName " + self.domain + " --tempKeyPath " + tempKeyPath + " --tempCertPath " + tempCertPath
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
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)
2019-06-08 21:41:43 +00:00
def changePHP(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['childDomain']
phpVersion = data['phpSelection']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('changePHP', 0)
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + self.domain
completePathToConfigFile = confPath + "/vhost.conf"
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile
2019-06-08 21:41:43 +00:00
ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'changePHP': 1, 'error_message': "None"}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-11-10 16:05:40 +05:00
def getWebsiteCron(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
2018-11-10 16:05:40 +05:00
2018-08-26 04:55:51 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('getWebsiteCron', 0)
website = Websites.objects.get(domain=self.domain)
if Websites.objects.filter(domain=self.domain).exists():
pass
else:
dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
CronUtil.CronPrem(1)
2019-03-26 16:19:03 +05:00
crons = []
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp
f = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2018-08-26 04:55:51 +05:00
if f.find("0,CyberPanel,") > -1:
2019-03-26 16:19:03 +05:00
data_ret = {'getWebsiteCron': 0, "user": website.externalApp, "crons": {}}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
counter = 0
for line in f.split("\n"):
if line:
split = line.split(" ", 5)
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]})
data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": crons}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
2018-08-26 04:55:51 +05:00
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-11-10 16:05:40 +05:00
def getCronbyLine(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
line = data['line']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('getWebsiteCron', 0)
if Websites.objects.filter(domain=self.domain).exists():
pass
else:
dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
line -= 1
website = Websites.objects.get(domain=self.domain)
try:
CronUtil.CronPrem(1)
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp
f = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2018-08-26 04:55:51 +05:00
except subprocess.CalledProcessError as error:
dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'}
json_data = json.dumps(dic)
return HttpResponse(json_data)
f = f.split("\n")
cron = f[line]
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)
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
print(msg)
2018-08-26 04:55:51 +05:00
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-11-10 16:05:40 +05:00
def saveCronChanges(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
line = data['line']
minute = data['minute']
hour = data['hour']
monthday = data['monthday']
month = data['month']
weekday = data['weekday']
command = data['cronCommand']
2018-08-26 04:55:51 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('getWebsiteCron', 0)
website = Websites.objects.get(domain=self.domain)
finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command)
CronUtil.CronPrem(1)
2019-03-26 16:19:03 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-06-08 21:41:43 +00:00
execPath = execPath + " saveCronChanges --externalApp " + website.externalApp + " --line " + str(
line) + " --finalCron '" + finalCron + "'"
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2018-11-10 16:05:40 +05:00
2019-03-26 16:19:03 +05:00
if output.find("1,") > -1:
data_ret = {"getWebsiteCron": 1,
"user": website.externalApp,
"cron": finalCron,
"line": line}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-03-26 16:19:03 +05:00
else:
dic = {'getWebsiteCron': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-08-26 04:55:51 +05:00
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-11-10 16:05:40 +05:00
def remCronbyLine(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
line = data['line']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('addNewCron', 0)
website = Websites.objects.get(domain=self.domain)
CronUtil.CronPrem(1)
2019-03-26 16:19:03 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
execPath = execPath + " remCronbyLine --externalApp " + website.externalApp + " --line " + str(
line)
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
if output.find("1,") > -1:
data_ret = {"remCronbyLine": 1,
"user": website.externalApp,
"removeLine": output.split(',')[1],
"line": line}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-03-26 16:19:03 +05:00
else:
dic = {'remCronbyLine': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-08-26 04:55:51 +05:00
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
dic = {'remCronbyLine': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-11-10 16:05:40 +05:00
def addNewCron(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
minute = data['minute']
hour = data['hour']
monthday = data['monthday']
month = data['month']
weekday = data['weekday']
command = data['cronCommand']
2018-08-26 04:55:51 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('addNewCron', 0)
website = Websites.objects.get(domain=self.domain)
CronPath = '/var/spool/cron/%s' % (website.externalApp)
commandT = 'touch %s' % (CronPath)
ProcessUtilities.executioner(commandT, 'root')
commandT = 'chown %s:%s %s' % (website.externalApp, website.externalApp, CronPath)
ProcessUtilities.executioner(commandT, 'root')
CronUtil.CronPrem(1)
2018-11-10 16:05:40 +05:00
finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command)
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
execPath = execPath + " addNewCron --externalApp " + website.externalApp + " --finalCron '" + finalCron + "'"
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2018-08-26 04:55:51 +05:00
2019-03-26 16:19:03 +05:00
if output.find("1,") > -1:
2019-03-26 16:19:03 +05:00
data_ret = {"addNewCron": 1,
"user": website.externalApp,
"cron": finalCron}
2018-08-26 04:55:51 +05:00
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
2019-03-26 16:19:03 +05:00
else:
dic = {'addNewCron': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2018-08-26 04:55:51 +05:00
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
dic = {'addNewCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def submitAliasCreation(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['masterDomain']
aliasDomain = data['aliasDomain']
ssl = data['ssl']
if not match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', aliasDomain,
M | I):
data_ret = {'status': 0, 'createAliasStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-26 04:55:51 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('createAliasStatus', 0)
sslpath = "/home/" + self.domain + "/public_html"
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " createAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --ssl " + str(
ssl) + " --sslPath " + sslpath + " --administratorEmail " + admin.email + ' --websiteOwner ' + admin.userName
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'createAliasStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def issueAliasSSL(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['masterDomain']
aliasDomain = data['aliasDomain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('sslStatus', 0)
sslpath = "/home/" + self.domain + "/public_html"
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " issueAliasSSL --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --sslPath " + sslpath + " --administratorEmail " + admin.email
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
data_ret = {'sslStatus': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'sslStatus': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'sslStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def delateAlias(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['masterDomain']
aliasDomain = data['aliasDomain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('deleteAlias', 0)
## Create Configurations
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.outputExecutioner(execPath)
2018-08-26 04:55:51 +05:00
if output.find("1,None") > -1:
data_ret = {'deleteAlias': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'deleteAlias': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'deleteAlias': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def changeOpenBasedir(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
self.domain = data['domainName']
openBasedirValue = data['openBasedirValue']
2018-08-28 01:19:34 +05:00
if currentACL['admin'] == 1:
2018-08-26 04:55:51 +05:00
pass
else:
return ACLManager.loadErrorJson('changeOpenBasedir', 0)
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " changeOpenBasedir --virtualHostName '" + self.domain + "' --openBasedirValue " + openBasedirValue
2019-03-26 16:19:03 +05:00
output = ProcessUtilities.popenExecutioner(execPath)
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'changeOpenBasedir': 1, 'error_message': "None"}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-06-08 21:41:43 +00:00
data_ret = {'status': 0, 'changeOpenBasedir': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def wordpressInstall(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
return render(request, 'websiteFunctions/installWordPress.html', {'domainName': self.domain})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def installWordpress(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
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['passwordByPass']
2018-08-26 04:55:51 +05:00
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()
time.sleep(2)
2018-11-20 15:43:43 +05:00
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
2018-08-26 04:55:51 +05:00
'tempStatusPath': extraArgs['tempStatusPath']}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def installWordpressStatus(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
statusFile = data['statusFile']
2019-04-15 15:54:23 +05:00
statusData = ProcessUtilities.outputExecutioner("sudo cat " + statusFile).splitlines()
2018-08-26 04:55:51 +05:00
lastLine = statusData[-1]
if lastLine.find('[200]') > -1:
2018-10-17 23:20:02 +05:00
command = 'sudo rm -f ' + statusFile
2019-03-26 16:19:03 +05:00
subprocess.call(shlex.split(command))
2018-08-26 04:55:51 +05:00
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]
2018-10-17 23:20:02 +05:00
try:
installationProgress = progress[1]
except:
installationProgress = 0
2018-08-26 04:55:51 +05:00
data_ret = {'abort': 0, 'installStatus': 0, 'installationProgress': installationProgress,
'currentStatus': currentStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def joomlaInstall(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
return render(request, 'websiteFunctions/installJoomla.html', {'domainName': self.domain})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def installJoomla(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
domainName = data['domain']
home = data['home']
sitename = data['sitename']
username = data['username']
password = data['passwordByPass']
2018-08-26 04:55:51 +05:00
prefix = data['prefix']
mailUtilities.checkHome()
tempStatusPath = "/tmp/" + str(randint(1000, 9999))
2018-08-26 04:55:51 +05:00
statusFile = open(tempStatusPath, 'w')
statusFile.writelines('Setting up paths,0')
statusFile.close()
2019-12-10 15:09:10 +05:00
os.chmod(tempStatusPath, 0o777)
2018-08-26 04:55:51 +05:00
finalPath = ""
admin = Administrator.objects.get(pk=userID)
## DB Creation
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-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0,
2018-08-26 04:55:51 +05:00
'error_message': "0,This database or user is already taken."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
result = mysqlUtilities.createDatabase(dbName, dbUser, dbPassword)
if result == 1:
pass
else:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0,
2018-08-26 04:55:51 +05:00
'error_message': "0,Not able to create database."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
##
try:
website = ChildDomains.objects.get(domain=domainName)
externalApp = website.master.externalApp
if website.master.package.dataBases > website.master.databases_set.all().count():
pass
else:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0,
2018-08-26 04:55:51 +05:00
'error_message': "0,Maximum database limit reached for this website."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if home == '0':
path = data['path']
finalPath = website.path.rstrip('/') + "/" + path + "/"
else:
finalPath = website.path + "/"
db = Databases(website=website.master, dbName=dbName, dbUser=dbUser)
db.save()
except:
website = Websites.objects.get(domain=domainName)
externalApp = website.externalApp
if website.package.dataBases > website.databases_set.all().count():
pass
else:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0,
2018-08-26 04:55:51 +05:00
'error_message': "0,Maximum database limit reached for this website."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if home == '0':
path = data['path']
finalPath = "/home/" + domainName + "/public_html/" + path + "/"
else:
finalPath = "/home/" + domainName + "/public_html/"
db = Databases(website=website, dbName=dbName, dbUser=dbUser)
db.save()
if finalPath.find("..") > -1:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0,
2018-08-26 04:55:51 +05:00
'error_message': "Specified path must be inside virtual host home!"}
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
ProcessUtilities.popenExecutioner(execPath, externalApp)
2018-08-26 04:55:51 +05:00
2018-11-20 15:43:43 +05:00
data_ret = {'status': 1, "installStatus": 1, 'tempStatusPath': tempStatusPath}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Installation ends
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def setupGit(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
website = Websites.objects.get(domain=self.domain)
2018-08-26 04:55:51 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-08-26 04:55:51 +05:00
path = '/home/cyberpanel/' + self.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/' + self.domain + '/gitNotify'
return render(request, 'websiteFunctions/setupGit.html',
{'domainName': self.domain, 'installed': 1, 'webhookURL': webhookURL})
else:
2019-02-21 17:19:04 +05:00
command = "ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''" % (self.domain, website.externalApp)
ProcessUtilities.executioner(command, website.externalApp)
2019-02-21 17:19:04 +05:00
###
configContent = """Host github.com
IdentityFile /home/%s/.ssh/%s
""" % (self.domain, website.externalApp)
2019-02-21 17:19:04 +05:00
path = "/home/cyberpanel/config"
writeToFile = open(path, 'w')
writeToFile.writelines(configContent)
writeToFile.close()
command = 'mv %s /home/%s/.ssh/config' % (path, self.domain)
2019-02-21 17:19:04 +05:00
ProcessUtilities.executioner(command)
command = 'sudo chown %s:%s /home/%s/.ssh/config' % (website.externalApp, website.externalApp, self.domain)
2018-11-12 18:39:04 +05:00
ProcessUtilities.executioner(command)
command = 'cat /home/%s/.ssh/%s.pub' % (self.domain, website.externalApp)
deploymentKey = ProcessUtilities.outputExecutioner(command, website.externalApp)
2018-08-26 04:55:51 +05:00
return render(request, 'websiteFunctions/setupGit.html',
{'domainName': self.domain, 'deploymentKey': deploymentKey, 'installed': 0})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def setupGitRepo(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
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))
extraArgs['defaultProvider'] = data['defaultProvider']
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def gitNotify(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
extraArgs = {}
extraArgs['domain'] = self.domain
background = ApplicationInstaller('pull', extraArgs)
background.start()
data_ret = {'pulled': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'pulled': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def detachRepo(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
mailUtilities.checkHome()
extraArgs = {}
extraArgs['domainName'] = data['domain']
extraArgs['admin'] = admin
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def changeBranch(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
mailUtilities.checkHome()
extraArgs = {}
extraArgs['domainName'] = data['domain']
extraArgs['githubBranch'] = data['githubBranch']
extraArgs['admin'] = admin
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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def installPrestaShop(self, request=None, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
return render(request, 'websiteFunctions/installPrestaShop.html', {'domainName': self.domain})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
return HttpResponse(str(msg))
2019-06-08 21:41:43 +00:00
def prestaShopInstall(self, userID=None, data=None):
2018-08-26 04:55:51 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('installStatus', 0)
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['passwordByPass']
2018-08-26 04:55:51 +05:00
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)
2018-11-20 15:43:43 +05:00
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
2018-08-26 04:55:51 +05:00
'tempStatusPath': extraArgs['tempStatusPath']}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Installation ends
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-11-20 15:43:43 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
2018-08-26 04:55:51 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-06-08 21:41:43 +00:00
def createWebsiteAPI(self, data=None):
2018-08-26 05:23:08 +05:00
try:
adminUser = data['adminUser']
adminPass = data['adminPass']
adminEmail = data['ownerEmail']
websiteOwner = data['websiteOwner']
ownerPassword = data['ownerPassword']
data['ssl'] = 0
data['dkimCheck'] = 0
data['openBasedir'] = 1
data['adminEmail'] = data['ownerEmail']
data['phpSelection'] = "PHP 7.0"
data['package'] = data['packageName']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
if adminEmail is None:
data['adminEmail'] = "usman@cyberpersons.com"
try:
2018-09-03 16:46:51 +05:00
acl = ACL.objects.get(name='user')
2018-08-26 05:23:08 +05:00
websiteOwn = Administrator(userName=websiteOwner,
password=hashPassword.hash_password(ownerPassword),
email=adminEmail, type=3, owner=admin.pk,
initWebsitesLimit=1, acl=acl, api=1)
2018-08-26 05:23:08 +05:00
websiteOwn.save()
except BaseException:
pass
else:
data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
return self.submitWebsiteCreation(admin.pk, data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 05:23:08 +05:00
data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-02-24 15:37:19 +05:00
def searchWebsitesJson(self, currentlACL, userID, searchTerm):
2019-02-22 09:19:16 +05:00
2019-02-24 15:37:19 +05:00
websites = ACLManager.searchWebsiteObjects(currentlACL, userID, searchTerm)
2019-02-22 09:19:16 +05:00
json_data = "["
checker = 0
try:
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-02-22 09:19:16 +05:00
logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg))
ipAddress = "192.168.100.1"
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}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
return json_data
2018-08-26 04:55:51 +05:00
def findWebsitesJson(self, currentACL, userID, pageNumber):
finalPageNumber = ((pageNumber * 10)) - 10
endPageNumber = finalPageNumber + 10
websites = ACLManager.findWebsiteObjects(currentACL, userID)[finalPageNumber:endPageNumber]
json_data = "["
checker = 0
try:
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2018-08-26 04:55:51 +05:00
logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg))
ipAddress = "192.168.100.1"
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}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
return json_data
2018-11-08 13:19:36 +05:00
def websitePagination(self, currentACL, userID):
websites = ACLManager.findAllSites(currentACL, userID)
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
pages = float(len(websites)) / float(10)
pagination = []
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
2018-08-26 04:55:51 +05:00
2018-11-08 13:19:36 +05:00
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
2018-08-26 04:55:51 +05:00
2019-06-08 21:41:43 +00:00
return pagination
def getSwitchStatus(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
try:
globalData = data['global']
data = {}
data['status'] = 1
if os.path.exists('/etc/httpd'):
data['server'] = 1
else:
data['server'] = 0
json_data = json.dumps(data)
return HttpResponse(json_data)
except:
pass
self.domain = data['domainName']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
finalConfPath = ApacheVhost.configBasePath + self.domain + '.conf'
if os.path.exists(finalConfPath):
phpPath = ApacheVhost.whichPHPExists(self.domain)
command = 'sudo cat ' + phpPath
phpConf = ProcessUtilities.outputExecutioner(command).splitlines()
pmMaxChildren = phpConf[8].split(' ')[2]
pmStartServers = phpConf[9].split(' ')[2]
pmMinSpareServers = phpConf[10].split(' ')[2]
pmMaxSpareServers = phpConf[11].split(' ')[2]
data = {}
data['status'] = 1
data['server'] = WebsiteManager.apache
data['pmMaxChildren'] = pmMaxChildren
data['pmStartServers'] = pmStartServers
data['pmMinSpareServers'] = pmMinSpareServers
data['pmMaxSpareServers'] = pmMaxSpareServers
data['phpPath'] = phpPath
else:
data = {}
data['status'] = 1
data['server'] = WebsiteManager.ols
else:
data = {}
data['status'] = 1
data['server'] = WebsiteManager.lsws
json_data = json.dumps(data)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-06-08 21:41:43 +00:00
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def switchServer(self, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
domainName = data['domainName']
phpVersion = data['phpSelection']
server = data['server']
if ACLManager.checkOwnership(domainName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " switchServer --phpVersion '" + phpVersion + "' --server " + str(
server) + " --virtualHostName " + domainName + " --tempStatusPath " + tempStatusPath
ProcessUtilities.popenExecutioner(execPath)
time.sleep(3)
data_ret = {'status': 1, 'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def tuneSettings(self, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
domainName = data['domainName']
pmMaxChildren = data['pmMaxChildren']
pmStartServers = data['pmStartServers']
pmMinSpareServers = data['pmMinSpareServers']
pmMaxSpareServers = data['pmMaxSpareServers']
phpPath = data['phpPath']
if ACLManager.checkOwnership(domainName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
if int(pmStartServers) < int(pmMinSpareServers) or int(pmStartServers) > int(pmMinSpareServers):
data_ret = {'status': 0,
'error_message': 'pm.start_servers must not be less than pm.min_spare_servers and not greater than pm.max_spare_servers.'}
2019-06-08 21:41:43 +00:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if int(pmMinSpareServers) > int(pmMaxSpareServers):
data_ret = {'status': 0,
'error_message': 'pm.max_spare_servers must not be less than pm.min_spare_servers'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
try:
website = Websites.objects.get(domain=domainName)
externalApp = website.externalApp
except:
website = ChildDomains.objects.get(domain=domainName)
externalApp = website.master.externalApp
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
phpFPMConf = vhostConfs.phpFpmPoolReplace
phpFPMConf = phpFPMConf.replace('{externalApp}', externalApp)
phpFPMConf = phpFPMConf.replace('{pmMaxChildren}', pmMaxChildren)
phpFPMConf = phpFPMConf.replace('{pmStartServers}', pmStartServers)
phpFPMConf = phpFPMConf.replace('{pmMinSpareServers}', pmMinSpareServers)
phpFPMConf = phpFPMConf.replace('{pmMaxSpareServers}', pmMaxSpareServers)
phpFPMConf = phpFPMConf.replace('{www}', "".join(re.findall("[a-zA-Z]+", domainName))[:7])
phpFPMConf = phpFPMConf.replace('{Sock}', domainName)
writeToFile = open(tempStatusPath, 'w')
writeToFile.writelines(phpFPMConf)
writeToFile.close()
command = 'sudo mv %s %s' % (tempStatusPath, phpPath)
ProcessUtilities.executioner(command)
phpPath = phpPath.split('/')
if phpPath[1] == 'etc':
phpVersion = phpPath[4][3] + phpPath[4][4]
else:
phpVersion = phpPath[3][3] + phpPath[3][4]
command = "systemctl stop php%s-php-fpm" % (phpVersion)
ProcessUtilities.executioner(command)
command = "systemctl restart php%s-php-fpm" % (phpVersion)
ProcessUtilities.executioner(command)
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def sshAccess(self, request=None, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
return render(request, 'websiteFunctions/sshAccess.html',
{'domainName': self.domain, 'externalApp': externalApp})
2019-12-10 15:09:10 +05:00
except BaseException as msg:
return HttpResponse(str(msg))
def saveSSHAccessChanges(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
website = Websites.objects.get(domain=self.domain)
command = 'echo "%s" | passwd --stdin %s' % (data['password'], data['externalApp'])
ProcessUtilities.executioner(command)
data_ret = {'status': 1, 'error_message': 'None'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)