Files
CyberPanel/websiteFunctions/website.py

4328 lines
162 KiB
Python
Raw Normal View History

2019-12-10 23:04:24 +05:00
#!/usr/local/CyberCP/bin/python
2019-08-03 14:53:31 +05:00
import os
import os.path
import sys
import django
2021-03-03 20:09:13 +05:00
from plogical.httpProc import httpProc
2019-08-03 14:53:31 +05:00
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
import json
from plogical.acl import ACLManager
import plogical.CyberCPLogFileWriter as logging
2020-03-19 22:13:47 +05:00
from websiteFunctions.models import Websites, ChildDomains, GitLogs
2019-08-03 14:53:31 +05:00
from plogical.virtualHostUtilities import virtualHostUtilities
import subprocess
import shlex
from plogical.installUtilities import installUtilities
from django.shortcuts import HttpResponse, render
from loginSystem.models import Administrator, ACL
from packages.models import Package
from plogical.mailUtilities import mailUtilities
from random import randint
import time
import re
from plogical.childDomain import ChildDomainManager
from math import ceil
from plogical.alias import AliasManager
from plogical.applicationInstaller import ApplicationInstaller
from plogical import hashPassword
from emailMarketing.emACL import emACL
from plogical.processUtilities import ProcessUtilities
from managePHP.phpManager import PHPManager
from ApachController.ApacheVhosts import ApacheVhost
from plogical.vhostConfs import vhostConfs
from plogical.cronUtil import CronUtil
2019-12-11 10:40:35 +05:00
from .StagingSetup import StagingSetup
2020-03-06 00:25:11 +05:00
import validators
2019-08-03 14:53:31 +05:00
class WebsiteManager:
apache = 1
ols = 2
lsws = 3
def __init__(self, domain=None, childDomain=None):
self.domain = domain
self.childDomain = childDomain
def createWebsite(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
adminNames = ACLManager.loadAllUsers(userID)
packagesName = ACLManager.loadPackages(userID, currentACL)
phps = PHPManager.findPHPVersions()
2019-08-03 14:53:31 +05:00
Data = {'packageList': packagesName, "owernList": adminNames, 'phps': phps}
proc = httpProc(request, 'websiteFunctions/createWebsite.html',
Data, 'createWebsite')
return proc.render()
2019-08-03 14:53:31 +05:00
def modifyWebsite(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
2019-08-03 14:53:31 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
phps = PHPManager.findPHPVersions()
proc = httpProc(request, 'websiteFunctions/modifyWebsite.html',
{'websiteList': websitesName, 'phps': phps}, 'modifyWebsite')
return proc.render()
2019-08-03 14:53:31 +05:00
def deleteWebsite(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
websitesName = ACLManager.findAllSites(currentACL, userID)
proc = httpProc(request, 'websiteFunctions/deleteWebsite.html',
{'websiteList': websitesName}, 'deleteWebsite')
return proc.render()
2019-08-03 14:53:31 +05:00
def CreateNewDomain(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
websitesName = ACLManager.findAllSites(currentACL, userID)
proc = httpProc(request, 'websiteFunctions/createDomain.html', {'websiteList': websitesName, 'phps': PHPManager.findPHPVersions()})
return proc.render()
2019-08-03 14:53:31 +05:00
def siteState(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
2019-08-03 14:53:31 +05:00
websitesName = ACLManager.findAllSites(currentACL, userID)
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/suspendWebsite.html',
{'websiteList': websitesName}, 'suspendWebsite')
return proc.render()
2019-08-03 14:53:31 +05:00
def listWebsites(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
pagination = self.websitePagination(currentACL, userID)
proc = httpProc(request, 'websiteFunctions/listWebsites.html',
{"pagination": pagination})
return proc.render()
2019-08-03 14:53:31 +05:00
2019-12-22 17:03:58 +05:00
def listChildDomains(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
adminNames = ACLManager.loadAllUsers(userID)
packagesName = ACLManager.loadPackages(userID, currentACL)
phps = PHPManager.findPHPVersions()
2019-12-23 17:02:34 +05:00
Data = {'packageList': packagesName, "owernList": adminNames, 'phps': phps}
proc = httpProc(request, 'websiteFunctions/listChildDomains.html',
Data)
return proc.render()
2019-12-22 17:03:58 +05:00
2019-08-03 14:53:31 +05:00
def listCron(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2021-02-19 15:56:19 +05:00
if ACLManager.checkOwnership(request.GET.get('domain'), admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2021-02-19 15:56:19 +05:00
proc = httpProc(request, 'websiteFunctions/listCron.html',
{'domain': request.GET.get('domain')})
return proc.render()
2019-08-03 14:53:31 +05:00
def domainAlias(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
aliasManager = AliasManager(self.domain)
noAlias, finalAlisList = aliasManager.fetchAlisForDomains()
2019-08-03 14:53:31 +05:00
path = "/home/" + self.domain + "/public_html"
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/domainAlias.html', {
'masterDomain': self.domain,
'aliases': finalAlisList,
'path': path,
'noAlias': noAlias
})
return proc.render()
2019-08-03 14:53:31 +05:00
def submitWebsiteCreation(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
domain = data['domainName']
adminEmail = data['adminEmail']
phpSelection = data['phpSelection']
packageName = data['package']
websiteOwner = data['websiteOwner']
2020-01-23 20:13:29 +05:00
loggedUser = Administrator.objects.get(pk=userID)
newOwner = Administrator.objects.get(userName=websiteOwner)
2020-03-06 09:25:49 +05:00
2020-01-23 20:13:29 +05:00
if ACLManager.currentContextPermission(currentACL, 'createWebsite') == 0:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
if ACLManager.checkOwnerProtection(currentACL, loggedUser, newOwner) == 0:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
if ACLManager.CheckDomainBlackList(domain) == 0:
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Blacklisted domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if not validators.domain(domain):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if not validators.email(adminEmail):
2019-08-03 14:53:31 +05:00
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))[:5] + str(randint(1000, 9999))
2019-08-03 14:53:31 +05:00
2020-02-18 20:15:07 +05:00
2019-08-03 14:53:31 +05:00
try:
counter = 0
while 1:
tWeb = Websites.objects.get(externalApp=externalApp)
externalApp = '%s%s' % (tWeb.externalApp, str(counter))
counter = counter + 1
except:
pass
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
try:
apacheBackend = str(data['apacheBackend'])
except:
apacheBackend = "0"
2020-02-18 20:15:07 +05:00
try:
mailDomain = str(data['mailDomain'])
except:
mailDomain = "1"
import pwd
counter = 0
2020-03-06 09:25:49 +05:00
2019-08-03 14:53:31 +05:00
## Create Configurations
2020-03-06 09:25:49 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +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']) + \
2020-09-11 10:19:17 +05:00
' --websiteOwner "' + websiteOwner + '" --package "' + packageName + '" --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend + " --mailDomain %s" % (mailDomain)
2019-08-03 14:53:31 +05:00
ProcessUtilities.popenExecutioner(execPath)
time.sleep(2)
data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None",
'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitDomainCreation(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
masterDomain = data['masterDomain']
domain = data['domainName']
phpSelection = data['phpSelection']
path = data['path']
tempStatusPath = "/home/cyberpanel/" + str(randint(1000, 9999))
2020-03-06 00:25:11 +05:00
if not validators.domain(domain):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if ACLManager.checkOwnership(masterDomain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
2020-02-08 12:51:45 +05:00
if data['path'].find('..') > -1:
return ACLManager.loadErrorJson('createWebSiteStatus', 0)
2019-08-03 14:53:31 +05:00
if currentACL['admin'] != 1:
data['openBasedir'] = 1
if len(path) > 0:
path = path.lstrip("/")
path = "/home/" + masterDomain + "/" + path
2019-08-03 14:53:31 +05:00
else:
path = "/home/" + masterDomain + "/" + domain
2019-08-03 14:53:31 +05:00
try:
apacheBackend = str(data['apacheBackend'])
except:
apacheBackend = "0"
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
" --phpVersion '" + phpSelection + "' --ssl " + str(data['ssl']) + " --dkimCheck " + str(
data['dkimCheck']) \
+ " --openBasedir " + str(data['openBasedir']) + ' --path ' + path + ' --websiteOwner ' \
+ admin.userName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend
ProcessUtilities.popenExecutioner(execPath)
time.sleep(2)
data_ret = {'status': 1, 'createWebSiteStatus': 1, 'error_message': "None",
'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchDomains(self, userID=None, data=None):
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()
final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def searchWebsites(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
try:
json_data = self.searchWebsitesJson(currentACL, userID, data['patternAdded'])
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
tempData = {}
tempData['page'] = 1
return self.getFurtherAccounts(userID, tempData)
pagination = self.websitePagination(currentACL, userID)
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def searchChilds(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
websites = ACLManager.findWebsiteObjects(currentACL, userID)
childDomains = []
for web in websites:
for child in web.childdomains_set.filter(domain__istartswith=data['patternAdded']):
childDomains.append(child)
json_data = self.findChildsListJson(childDomains)
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-08-03 14:53:31 +05:00
def getFurtherAccounts(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
pageNumber = int(data['page'])
json_data = self.findWebsitesJson(currentACL, userID, pageNumber)
pagination = self.websitePagination(currentACL, userID)
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def fetchWebsitesList(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
pageNumber = int(data['page'])
recordsToShow = int(data['recordsToShow'])
endPageNumber, finalPageNumber = self.recordsPointer(pageNumber, recordsToShow)
websites = ACLManager.findWebsiteObjects(currentACL, userID)
pagination = self.getPagination(len(websites), recordsToShow)
json_data = self.findWebsitesListJson(websites[finalPageNumber:endPageNumber])
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-22 17:03:58 +05:00
def fetchChildDomainsMain(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
pageNumber = int(data['page'])
recordsToShow = int(data['recordsToShow'])
endPageNumber, finalPageNumber = self.recordsPointer(pageNumber, recordsToShow)
websites = ACLManager.findWebsiteObjects(currentACL, userID)
childDomains = []
for web in websites:
for child in web.childdomains_set.all():
childDomains.append(child)
pagination = self.getPagination(len(childDomains), recordsToShow)
json_data = self.findChildsListJson(childDomains[finalPageNumber:endPageNumber])
final_dic = {'status': 1, 'listWebSiteStatus': 1, 'error_message': "None", "data": json_data,
'pagination': pagination}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
dic = {'status': 1, 'listWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def findWebsitesListJson(self, websites):
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:
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"
DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items)
diskUsed = "%sMB" % str(DiskUsage)
2020-01-08 13:30:37 +05:00
dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress,
'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed}
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
2019-12-22 17:03:58 +05:00
def findChildsListJson(self, childs):
json_data = "["
checker = 0
try:
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" + str(msg))
ipAddress = "192.168.100.1"
for items in childs:
dic = {'domain': items.domain, 'masterDomain': items.master.domain, 'adminEmail': items.master.adminEmail, 'ipAddress': ipAddress,
'admin': items.master.admin.userName, 'package': items.master.package.packageName, '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 + ']'
return json_data
def recordsPointer(self, page, toShow):
finalPageNumber = ((page * toShow)) - toShow
endPageNumber = finalPageNumber + toShow
return endPageNumber, finalPageNumber
def getPagination(self, records, toShow):
pages = float(records) / float(toShow)
pagination = []
counter = 1
if pages <= 1.0:
pages = 1
pagination.append(counter)
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append(counter)
counter = counter + 1
return pagination
2019-08-03 14:53:31 +05:00
def submitWebsiteDeletion(self, userID=None, data=None):
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)
## Deleting master domain
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + websiteName
ProcessUtilities.popenExecutioner(execPath)
data_ret = {'status': 1, 'websiteDeleteStatus': 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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitDomainDeletion(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
websiteName = data['websiteName']
try:
DeleteDocRoot = int(data['DeleteDocRoot'])
except:
DeleteDocRoot = 0
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteDomain --virtualHostName " + websiteName + ' --DeleteDocRoot %s' % (str(DeleteDocRoot))
2019-08-03 14:53:31 +05:00
ProcessUtilities.outputExecutioner(execPath)
data_ret = {'status': 1, 'websiteDeleteStatus': 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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitWebsiteStatus(self, userID=None, data=None):
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)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(websiteName, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteStatus', 0)
2019-08-03 14:53:31 +05:00
if state == "Suspend":
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
command = "mv " + confPath + " " + confPath + "-suspended"
2019-08-03 14:53:31 +05:00
ProcessUtilities.popenExecutioner(command)
childDomains = website.childdomains_set.all()
for items in childDomains:
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + items.domain
command = "mv " + confPath + " " + confPath + "-suspended"
2020-02-13 16:57:29 +05:00
ProcessUtilities.executioner(command)
2019-08-03 14:53:31 +05:00
installUtilities.reStartLiteSpeedSocket()
website.state = 0
else:
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + websiteName
command = "mv " + confPath + "-suspended" + " " + confPath
2019-08-03 14:53:31 +05:00
ProcessUtilities.executioner(command)
command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + confPath
ProcessUtilities.popenExecutioner(command)
childDomains = website.childdomains_set.all()
for items in childDomains:
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + items.domain
command = "mv " + confPath + "-suspended" + " " + confPath
ProcessUtilities.executioner(command)
command = "chown -R " + "lsadm" + ":" + "lsadm" + " " + confPath
ProcessUtilities.popenExecutioner(command)
2019-08-03 14:53:31 +05:00
installUtilities.reStartLiteSpeedSocket()
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:
2019-08-03 14:53:31 +05:00
data_ret = {'websiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitWebsiteModify(self, userID=None, data=None):
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)
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
data_ret = {'status': 1, '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)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'status': 0, 'modifyStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def fetchWebsiteDataJSON(self, userID=None, data=None):
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:
2019-08-03 14:53:31 +05:00
dic = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def saveWebsiteChanges(self, userID=None, data=None):
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)
newOwner = Administrator.objects.get(userName=newUser)
if ACLManager.checkUserOwnerShip(currentACL, admin, newOwner) == 1:
pass
else:
return ACLManager.loadErrorJson('websiteDeleteStatus', 0)
2019-08-03 14:53:31 +05:00
confPath = virtualHostUtilities.Server_root + "/conf/vhosts/" + domain
completePathToConfigFile = confPath + "/vhost.conf"
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile
ProcessUtilities.popenExecutioner(execPath)
####
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()
data_ret = {'status': 1, 'saveStatus': 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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def loadDomainHome(self, request=None, userID=None, data=None):
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 = {}
marketingStatus = emACL.checkIfEMEnabled(admin.userName)
Data['marketingStatus'] = marketingStatus
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
DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(website)
2019-08-03 14:53:31 +05:00
## bw usage calculations
Data['bwInMBTotal'] = website.package.bandwidth
Data['bwInMB'] = bwInMB
Data['bwUsage'] = bwUsage
2019-08-03 14:53:31 +05:00
if DiskUsagePercentage > 100:
DiskUsagePercentage = 100
2019-08-03 14:53:31 +05:00
Data['diskUsage'] = DiskUsagePercentage
Data['diskInMB'] = DiskUsage
Data['diskInMBTotal'] = website.package.diskSpace
2019-08-03 14:53:31 +05:00
Data['phps'] = PHPManager.findPHPVersions()
servicePath = '/home/cyberpanel/postfix'
if os.path.exists(servicePath):
Data['email'] = 1
else:
Data['email'] = 0
2019-12-04 14:40:59 +05:00
## Getting SSL Information
try:
import OpenSSL
from datetime import datetime
filePath = '/etc/letsencrypt/live/%s/fullchain.pem' % (self.domain)
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,
open(filePath, 'r').read())
expireData = x509.get_notAfter().decode('ascii')
finalDate = datetime.strptime(expireData, '%Y%m%d%H%M%SZ')
now = datetime.now()
diff = finalDate - now
Data['viewSSL'] = 1
Data['days'] = str(diff.days)
2019-12-21 19:34:11 +05:00
Data['authority'] = x509.get_issuer().get_components()[1][1].decode('utf-8')
2019-12-04 19:42:38 +05:00
if Data['authority'] == 'Denial':
Data['authority'] = '%s has SELF-SIGNED SSL.' % (self.domain)
else:
Data['authority'] = '%s has SSL from %s.' % (self.domain, Data['authority'])
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-12-04 14:40:59 +05:00
Data['viewSSL'] = 0
logging.CyberCPLogFileWriter.writeToFile(str(msg))
2019-08-03 14:53:31 +05:00
servicePath = '/home/cyberpanel/pureftpd'
if os.path.exists(servicePath):
Data['ftp'] = 1
else:
Data['ftp'] = 0
2021-03-03 20:09:13 +05:00
proc = httpProc(request, 'websiteFunctions/website.html', Data)
return proc.render()
2019-08-03 14:53:31 +05:00
else:
2021-03-03 20:09:13 +05:00
proc = httpProc(request, 'websiteFunctions/website.html',
2019-08-03 14:53:31 +05:00
{"error": 1, "domain": "This domain does not exists."})
2021-03-03 20:09:13 +05:00
return proc.render()
2019-08-03 14:53:31 +05:00
def launchChild(self, request=None, userID=None, data=None):
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
DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(website)
2019-08-03 14:53:31 +05:00
## bw usage calculations
Data['bwInMBTotal'] = website.package.bandwidth
Data['bwInMB'] = bwInMB
Data['bwUsage'] = bwUsage
2019-08-03 14:53:31 +05:00
if DiskUsagePercentage > 100:
DiskUsagePercentage = 100
2019-08-03 14:53:31 +05:00
Data['diskUsage'] = DiskUsagePercentage
Data['diskInMB'] = DiskUsage
Data['diskInMBTotal'] = website.package.diskSpace
2019-08-03 14:53:31 +05:00
Data['phps'] = PHPManager.findPHPVersions()
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
2019-12-04 14:40:59 +05:00
## Getting SSL Information
try:
import OpenSSL
from datetime import datetime
filePath = '/etc/letsencrypt/live/%s/fullchain.pem' % (self.childDomain)
2019-12-04 14:40:59 +05:00
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,
open(filePath, 'r').read())
expireData = x509.get_notAfter().decode('ascii')
finalDate = datetime.strptime(expireData, '%Y%m%d%H%M%SZ')
now = datetime.now()
diff = finalDate - now
Data['viewSSL'] = 1
Data['days'] = str(diff.days)
2019-12-21 19:34:11 +05:00
Data['authority'] = x509.get_issuer().get_components()[1][1].decode('utf-8')
2019-12-04 19:42:38 +05:00
if Data['authority'] == 'Denial':
Data['authority'] = '%s has SELF-SIGNED SSL.' % (self.childDomain)
2019-12-04 19:42:38 +05:00
else:
Data['authority'] = '%s has SSL from %s.' % (self.childDomain, Data['authority'])
2019-12-04 19:42:38 +05:00
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-12-04 14:40:59 +05:00
Data['viewSSL'] = 0
logging.CyberCPLogFileWriter.writeToFile(str(msg))
2021-03-03 20:09:13 +05:00
proc = httpProc(request, 'websiteFunctions/launchChild.html', Data)
return proc.render()
2019-08-03 14:53:31 +05:00
else:
2021-03-03 20:09:13 +05:00
proc = httpProc(request, 'websiteFunctions/launchChild.html',
2019-08-03 14:53:31 +05:00
{"error": 1, "domain": "This child domain does not exists"})
2021-03-03 20:09:13 +05:00
return proc.render()
2019-08-03 14:53:31 +05:00
def getDataFromLogFile(self, userID=None, data=None):
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)
2019-11-26 13:36:17 +05:00
output = virtualHostUtilities.getAccessLogs(fileName, page, website.externalApp)
2019-08-03 14:53:31 +05:00
if output.find("1,None") > -1:
final_json = json.dumps(
{'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file, Error: %s" % (output)})
2019-08-03 14:53:31 +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[5].strip('"')
ipAddress = logData[0].strip('"')
time = (logData[3]).strip("[").strip("]")
resource = logData[6].strip('"')
size = logData[9].replace('"', '')
2019-08-03 14:53:31 +05:00
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({'status': 1, 'logstatus': 1, 'error_message': "None", "data": json_data})
return HttpResponse(final_json)
def fetchErrorLogs(self, userID=None, data=None):
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)
2019-11-26 13:36:17 +05:00
output = virtualHostUtilities.getErrorLogs(fileName, page, website.externalApp)
2019-08-03 14:53:31 +05:00
if output.find("1,None") > -1:
final_json = json.dumps(
{'status': 0, 'logstatus': 0, 'error_message': "Not able to fetch logs, see CyberPanel main log file!"})
return HttpResponse(final_json)
## get log ends here.
final_json = json.dumps({'status': 1, 'logstatus': 1, 'error_message': "None", "data": output})
return HttpResponse(final_json)
def getDataFromConfigFile(self, userID=None, data=None):
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)
2020-02-29 11:36:55 +05:00
command = 'cat %s' % ('/usr/local/lsws/conf/dvhost_redis.conf')
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
if ProcessUtilities.outputExecutioner(command).find('127.0.0.1') == -1:
filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf"
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
command = 'cat ' + filePath
configData = ProcessUtilities.outputExecutioner(command, 'lsadm')
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
if len(configData) == 0:
status = {'status': 0, "configstatus": 0, "error_message": "Configuration file is currently empty!"}
final_json = json.dumps(status)
return HttpResponse(final_json)
else:
command = 'redis-cli get "vhost:%s"' % (self.domain)
configData = ProcessUtilities.outputExecutioner(command)
configData = '#### This configuration is fetched from redis as Redis-Mass Hosting is being used.\n%s' % (configData)
2019-08-03 14:53:31 +05:00
status = {'status': 1, "configstatus": 1, "configData": configData}
final_json = json.dumps(status)
return HttpResponse(final_json)
def saveConfigsToFile(self, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] != 1:
return ACLManager.loadErrorJson('configstatus', 0)
configData = data['configData']
self.domain = data['virtualHost']
2020-02-29 11:36:55 +05:00
command = 'cat %s' % ('/usr/local/lsws/conf/dvhost_redis.conf')
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
if ProcessUtilities.outputExecutioner(command).find('127.0.0.1') == -1:
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
mailUtilities.checkHome()
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
vhost = open(tempPath, "w")
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
vhost.write(configData)
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
vhost.close()
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
## writing data temporary to file
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
filePath = installUtilities.Server_root_path + "/conf/vhosts/" + self.domain + "/vhost.conf"
2019-08-03 14:53:31 +05:00
2020-02-29 11:36:55 +05:00
## save configuration data
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " saveVHostConfigs --path " + filePath + " --tempPath " + tempPath
output = ProcessUtilities.outputExecutioner(execPath)
if output.find("1,None") > -1:
status = {"configstatus": 1}
final_json = json.dumps(status)
return HttpResponse(final_json)
else:
data_ret = {'configstatus': 0, 'error_message': output}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## save configuration data ends
else:
command = "redis-cli set vhost:%s '%s'" % (self.domain, configData.replace('#### This configuration is fetched from redis as Redis-Mass Hosting is being used.\n', ''))
ProcessUtilities.executioner(command)
2019-08-03 14:53:31 +05:00
status = {"configstatus": 1}
final_json = json.dumps(status)
return HttpResponse(final_json)
def getRewriteRules(self, userID=None, data=None):
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'
2020-01-09 15:57:28 +05:00
externalApp = childDom.master.externalApp
2019-08-03 14:53:31 +05:00
except:
2020-01-09 15:57:28 +05:00
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2019-08-03 14:53:31 +05:00
filePath = "/home/" + self.domain + "/public_html/.htaccess"
try:
2020-01-09 15:57:28 +05:00
command = 'cat %s' % (filePath)
rewriteRules = ProcessUtilities.outputExecutioner(command, externalApp)
2019-08-03 14:53:31 +05:00
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)
2020-01-09 15:57:28 +05:00
except BaseException as msg:
status = {"rewriteStatus": 1, "error_message": str(msg), "rewriteRules": ""}
2019-08-03 14:53:31 +05:00
final_json = json.dumps(status)
return HttpResponse(final_json)
def saveRewriteRules(self, userID=None, data=None):
2020-01-09 15:57:28 +05:00
try:
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['virtualHost']
rewriteRules = data['rewriteRules'].encode('utf-8')
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('rewriteStatus', 0)
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
## writing data temporary to file
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
mailUtilities.checkHome()
tempPath = "/tmp/" + str(randint(1000, 9999))
vhost = open(tempPath, "wb")
vhost.write(rewriteRules)
vhost.close()
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
## writing data temporary to file
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
try:
childDomain = ChildDomains.objects.get(domain=self.domain)
filePath = childDomain.path + '/.htaccess'
externalApp = childDomain.master.externalApp
except:
filePath = "/home/" + self.domain + "/public_html/.htaccess"
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
## save configuration data
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
command = 'cp %s %s' % (tempPath, filePath)
ProcessUtilities.executioner(command, externalApp)
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
command = 'rm -f %s' % (tempPath)
ProcessUtilities.executioner(command, 'cyberpanel')
2019-08-03 14:53:31 +05:00
2020-01-09 15:57:28 +05:00
installUtilities.reStartLiteSpeedSocket()
status = {"rewriteStatus": 1, 'error_message': 'None'}
final_json = json.dumps(status)
return HttpResponse(final_json)
except BaseException as msg:
status = {"rewriteStatus": 0, 'error_message': str(msg)}
final_json = json.dumps(status)
return HttpResponse(final_json)
2019-08-03 14:53:31 +05:00
def saveSSL(self, userID=None, data=None):
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
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " saveSSL --virtualHostName " + self.domain + " --tempKeyPath " + tempKeyPath + " --tempCertPath " + tempCertPath
output = ProcessUtilities.outputExecutioner(execPath)
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)
def changePHP(self, userID=None, data=None):
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"
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " changePHP --phpVersion '" + phpVersion + "' --path " + completePathToConfigFile
ProcessUtilities.popenExecutioner(execPath)
data_ret = {'status': 1, 'changePHP': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def getWebsiteCron(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('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)
crons = []
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp
f = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
2020-05-24 11:14:35 +01:00
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
cronPath = "/var/spool/cron/" + website.externalApp
else:
cronPath = "/var/spool/cron/crontabs/" + website.externalApp
if f.find('Permission denied') > -1:
command = 'chmod 644 %s' % (cronPath)
ProcessUtilities.executioner(command)
command = 'chown %s:%s %s' % (website.externalApp, website.externalApp, cronPath)
ProcessUtilities.executioner(command)
f = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
2019-08-03 14:53:31 +05:00
if f.find("0,CyberPanel,") > -1:
data_ret = {'getWebsiteCron': 0, "user": website.externalApp, "crons": {}}
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:
2019-08-03 14:53:31 +05:00
logging.CyberCPLogFileWriter.writeToFile(str(msg))
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def getCronbyLine(self, userID=None, data=None):
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)
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " getWebsiteCron --externalApp " + website.externalApp
f = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
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)
2019-08-03 14:53:31 +05:00
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def saveCronChanges(self, userID=None, data=None):
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']
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-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " saveCronChanges --externalApp " + website.externalApp + " --line " + str(
line) + " --finalCron '" + finalCron + "'"
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
if output.find("1,") > -1:
data_ret = {"getWebsiteCron": 1,
"user": website.externalApp,
"cron": finalCron,
"line": line}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
else:
dic = {'getWebsiteCron': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'getWebsiteCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def remCronbyLine(self, userID=None, data=None):
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-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " remCronbyLine --externalApp " + website.externalApp + " --line " + str(
line)
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
CronUtil.CronPrem(0)
if output.find("1,") > -1:
data_ret = {"remCronbyLine": 1,
"user": website.externalApp,
"removeLine": output.split(',')[1],
"line": line}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
else:
dic = {'remCronbyLine': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'remCronbyLine': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def addNewCron(self, userID=None, data=None):
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']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('addNewCron', 0)
website = Websites.objects.get(domain=self.domain)
2020-05-24 11:14:35 +01:00
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
2020-02-11 21:33:20 +05:00
cronPath = "/var/spool/cron/" + website.externalApp
else:
cronPath = "/var/spool/cron/crontabs/" + website.externalApp
2019-08-03 14:53:31 +05:00
2020-02-11 21:33:20 +05:00
commandT = 'touch %s' % (cronPath)
2019-08-03 14:53:31 +05:00
ProcessUtilities.executioner(commandT, 'root')
2020-02-11 21:33:20 +05:00
commandT = 'chown %s:%s %s' % (website.externalApp, website.externalApp, cronPath)
2019-08-03 14:53:31 +05:00
ProcessUtilities.executioner(commandT, 'root')
CronUtil.CronPrem(1)
finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command)
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/cronUtil.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " addNewCron --externalApp " + website.externalApp + " --finalCron '" + finalCron + "'"
output = ProcessUtilities.outputExecutioner(execPath, website.externalApp)
2020-03-25 12:39:36 +05:00
2020-05-15 01:07:04 +05:00
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
2020-03-25 12:39:36 +05:00
command = 'chmod 600 %s' % (cronPath)
ProcessUtilities.executioner(command)
2020-03-25 17:58:12 +05:00
command = 'systemctl restart cron'
ProcessUtilities.executioner(command)
2019-08-03 14:53:31 +05:00
CronUtil.CronPrem(0)
if output.find("1,") > -1:
data_ret = {"addNewCron": 1,
"user": website.externalApp,
"cron": finalCron}
final_json = json.dumps(data_ret)
return HttpResponse(final_json)
else:
dic = {'addNewCron': 0, 'error_message': output}
json_data = json.dumps(dic)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
dic = {'addNewCron': 0, 'error_message': str(msg)}
json_data = json.dumps(dic)
return HttpResponse(json_data)
def submitAliasCreation(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['masterDomain']
aliasDomain = data['aliasDomain']
ssl = data['ssl']
if not validators.domain(aliasDomain):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createAliasStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('createAliasStatus', 0)
sslpath = "/home/" + self.domain + "/public_html"
## Create Configurations
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " createAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --ssl " + str(
ssl) + " --sslPath " + sslpath + " --administratorEmail " + admin.email + ' --websiteOwner ' + admin.userName
output = ProcessUtilities.outputExecutioner(execPath)
if output.find("1,None") > -1:
pass
else:
data_ret = {'createAliasStatus': 0, 'error_message': output, "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Create Configurations ends here
data_ret = {'createAliasStatus': 1, 'error_message': "None", "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
data_ret = {'createAliasStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def issueAliasSSL(self, userID=None, data=None):
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)
if ACLManager.AliasDomainCheck(currentACL, aliasDomain, self.domain) == 1:
pass
else:
return ACLManager.loadErrorJson('sslStatus', 0)
2019-08-03 14:53:31 +05:00
sslpath = "/home/" + self.domain + "/public_html"
## Create Configurations
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " issueAliasSSL --masterDomain " + self.domain + " --aliasDomain " + aliasDomain + " --sslPath " + sslpath + " --administratorEmail " + admin.email
output = ProcessUtilities.outputExecutioner(execPath)
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:
2019-08-03 14:53:31 +05:00
data_ret = {'sslStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def delateAlias(self, userID=None, data=None):
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)
if ACLManager.AliasDomainCheck(currentACL, aliasDomain, self.domain) == 1:
pass
else:
return ACLManager.loadErrorJson('deleteAlias', 0)
2019-08-03 14:53:31 +05:00
## Create Configurations
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " deleteAlias --masterDomain " + self.domain + " --aliasDomain " + aliasDomain
output = ProcessUtilities.outputExecutioner(execPath)
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:
2019-08-03 14:53:31 +05:00
data_ret = {'deleteAlias': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def changeOpenBasedir(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
self.domain = data['domainName']
openBasedirValue = data['openBasedirValue']
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson('changeOpenBasedir', 0)
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
execPath = execPath + " changeOpenBasedir --virtualHostName '" + self.domain + "' --openBasedirValue " + openBasedirValue
output = ProcessUtilities.popenExecutioner(execPath)
data_ret = {'status': 1, 'changeOpenBasedir': 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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'changeOpenBasedir': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def wordpressInstall(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/installWordPress.html', {'domainName': self.domain})
return proc.render()
2019-08-03 14:53:31 +05:00
def installWordpress(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('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']
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)
data_ret = {'status': 1, '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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def installWordpressStatus(self, userID=None, data=None):
try:
statusFile = data['statusFile']
2020-01-31 21:17:23 +05:00
if (statusFile[:16] == "/home/cyberpanel" or statusFile[:4] == '/tmp' or statusFile[:18] == '/usr/local/CyberCP') \
and statusFile != '/usr/local/CyberCP/CyberCP/settings.py' and statusFile.find('..') == -1 and statusFile != '/home/cyberpanel/.my.cnf':
2020-01-29 19:30:58 +05:00
pass
else:
data_ret = {'abort': 1, 'installStatus': 0, 'installationProgress': "100",
'currentStatus': 'Invalid status file.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
statusData = ProcessUtilities.outputExecutioner("cat " + statusFile).splitlines()
2019-08-03 14:53:31 +05:00
lastLine = statusData[-1]
if lastLine.find('[200]') > -1:
2020-01-29 19:30:58 +05:00
command = 'rm -f ' + statusFile
2019-08-03 14:53:31 +05:00
subprocess.call(shlex.split(command))
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]
try:
installationProgress = progress[1]
except:
installationProgress = 0
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:
2020-06-09 12:35:15 +05:00
data_ret = {'abort': 0, 'installStatus': 0, 'installationProgress': "0", 'error_message': str(msg)}
2019-08-03 14:53:31 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def joomlaInstall(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/installJoomla.html', {'domainName': self.domain})
return proc.render()
2019-08-03 14:53:31 +05:00
def installJoomla(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('installStatus', 0)
extraArgs = {}
2019-08-03 14:53:31 +05:00
extraArgs['password'] = data['passwordByPass']
extraArgs['prefix'] = data['prefix']
extraArgs['domain'] = data['domain']
extraArgs['home'] = data['home']
2020-10-08 21:33:57 +05:00
extraArgs['siteName'] = data['siteName']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
2019-08-03 14:53:31 +05:00
mailUtilities.checkHome()
if data['home'] == '0':
extraArgs['path'] = data['path']
2019-08-03 14:53:31 +05:00
background = ApplicationInstaller('joomla', extraArgs)
background.start()
2019-08-03 14:53:31 +05:00
time.sleep(2)
2019-08-03 14:53:31 +05:00
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
'tempStatusPath': extraArgs['tempStatusPath']}
2019-08-03 14:53:31 +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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def setupGit(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
website = Websites.objects.get(domain=self.domain)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2019-08-03 14:53:31 +05:00
path = '/home/cyberpanel/' + self.domain + '.git'
2019-08-03 14:53:31 +05:00
if os.path.exists(path):
ipFile = "/etc/cyberpanel/machineIP"
f = open(ipFile)
ipData = f.read()
ipAddress = ipData.split('\n', 1)[0]
2019-08-03 14:53:31 +05:00
port = ProcessUtilities.fetchCurrentPort()
2020-08-15 11:28:12 +05:00
webhookURL = 'https://' + ipAddress + ':%s/websites/' % (port) + self.domain + '/gitNotify'
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/setupGit.html',
{'domainName': self.domain, 'installed': 1, 'webhookURL': webhookURL})
return proc.render()
else:
2019-08-03 14:53:31 +05:00
command = "ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''" % (self.domain, website.externalApp)
ProcessUtilities.executioner(command, website.externalApp)
2019-08-03 14:53:31 +05:00
###
2019-08-03 14:53:31 +05:00
configContent = """Host github.com
2019-08-03 14:53:31 +05:00
IdentityFile /home/%s/.ssh/%s
2019-08-29 14:11:51 +05:00
StrictHostKeyChecking no
2019-08-03 14:53:31 +05:00
""" % (self.domain, website.externalApp)
path = "/home/cyberpanel/config"
writeToFile = open(path, 'w')
writeToFile.writelines(configContent)
writeToFile.close()
2019-08-03 14:53:31 +05:00
command = 'mv %s /home/%s/.ssh/config' % (path, self.domain)
ProcessUtilities.executioner(command)
2019-08-03 14:53:31 +05:00
command = 'chown %s:%s /home/%s/.ssh/config' % (website.externalApp, website.externalApp, self.domain)
ProcessUtilities.executioner(command)
2019-08-03 14:53:31 +05:00
command = 'cat /home/%s/.ssh/%s.pub' % (self.domain, website.externalApp)
deploymentKey = ProcessUtilities.outputExecutioner(command, website.externalApp)
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/setupGit.html',
{'domainName': self.domain, 'deploymentKey': deploymentKey, 'installed': 0})
return proc.render()
2019-08-03 14:53:31 +05:00
def setupGitRepo(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('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:
2019-08-03 14:53:31 +05:00
data_ret = {'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def gitNotify(self, userID=None, data=None):
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:
2019-08-03 14:53:31 +05:00
data_ret = {'pulled': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def detachRepo(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()
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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def changeBranch(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()
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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def installPrestaShop(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/installPrestaShop.html', {'domainName': self.domain})
return proc.render()
2019-08-03 14:53:31 +05:00
2019-11-07 09:37:06 +05:00
def installMagento(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-11-07 09:37:06 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-11-07 09:37:06 +05:00
proc = httpProc(request, 'websiteFunctions/installMagento.html', {'domainName': self.domain})
return proc.render()
2019-11-07 09:37:06 +05:00
def magentoInstall(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('installStatus', 0)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['admin'] = admin
extraArgs['domainName'] = data['domain']
extraArgs['home'] = data['home']
extraArgs['firstName'] = data['firstName']
extraArgs['lastName'] = data['lastName']
extraArgs['username'] = data['username']
extraArgs['email'] = data['email']
extraArgs['password'] = data['passwordByPass']
extraArgs['sampleData'] = data['sampleData']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
if data['home'] == '0':
extraArgs['path'] = data['path']
background = ApplicationInstaller('magento', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
'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:
2020-08-25 15:49:52 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def installMautic(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2020-08-25 15:49:52 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2020-08-25 15:49:52 +05:00
proc = httpProc(request, 'websiteFunctions/installMautic.html', {'domainName': self.domain})
return proc.render()
2020-08-25 15:49:52 +05:00
def mauticInstall(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('installStatus', 0)
mailUtilities.checkHome()
extraArgs = {}
extraArgs['admin'] = admin
extraArgs['domainName'] = data['domain']
extraArgs['home'] = data['home']
extraArgs['username'] = data['username']
extraArgs['email'] = data['email']
extraArgs['password'] = data['passwordByPass']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
if data['home'] == '0':
extraArgs['path'] = data['path']
background = ApplicationInstaller('mautic', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
'tempStatusPath': extraArgs['tempStatusPath']}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
## Installation ends
except BaseException as msg:
2019-11-07 09:37:06 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-08-03 14:53:31 +05:00
def prestaShopInstall(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('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']
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
if data['home'] == '0':
extraArgs['path'] = data['path']
background = ApplicationInstaller('prestashop', extraArgs)
background.start()
time.sleep(2)
data_ret = {'status': 1, 'installStatus': 1, 'error_message': 'None',
'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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def createWebsiteAPI(self, data=None):
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']
try:
websitesLimit = data['websitesLimit']
except:
websitesLimit = 1
2019-08-03 14:53:31 +05:00
2019-11-07 09:37:06 +05:00
try:
apiACL = data['acl']
except:
apiACL = 'user'
2019-08-03 14:53:31 +05:00
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
if adminEmail is None:
data['adminEmail'] = "usman@cyberpersons.com"
try:
2019-11-07 09:37:06 +05:00
acl = ACL.objects.get(name=apiACL)
2019-08-03 14:53:31 +05:00
websiteOwn = Administrator(userName=websiteOwner,
password=hashPassword.hash_password(ownerPassword),
email=adminEmail, type=3, owner=admin.pk,
initWebsitesLimit=websitesLimit, acl=acl, api=1)
2019-08-03 14:53:31 +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:
2019-08-03 14:53:31 +05:00
data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def searchWebsitesJson(self, currentlACL, userID, searchTerm):
websites = ACLManager.searchWebsiteObjects(currentlACL, userID, searchTerm)
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-08-03 14:53:31 +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"
2019-08-17 21:14:37 +05:00
DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items)
diskUsed = "%sMB" % str(DiskUsage)
2019-08-03 14:53:31 +05:00
dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress,
2019-08-17 21:14:37 +05:00
'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed}
2019-08-03 14:53:31 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
return json_data
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:
2019-08-03 14:53:31 +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"
DiskUsage, DiskUsagePercentage, bwInMB, bwUsage = virtualHostUtilities.FindStats(items)
diskUsed = "%sMB" % str(DiskUsage)
2019-08-03 14:53:31 +05:00
dic = {'domain': items.domain, 'adminEmail': items.adminEmail, 'ipAddress': ipAddress,
'admin': items.admin.userName, 'package': items.package.packageName, 'state': state, 'diskUsed': diskUsed}
2019-08-03 14:53:31 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
json_data = json_data + ']'
return json_data
def websitePagination(self, currentACL, userID):
websites = ACLManager.findAllSites(currentACL, userID)
pages = float(len(websites)) / float(10)
pagination = []
if pages <= 1.0:
pages = 1
pagination.append('<li><a href="\#"></a></li>')
else:
pages = ceil(pages)
finalPages = int(pages) + 1
for i in range(1, finalPages):
pagination.append('<li><a href="\#">' + str(i) + '</a></li>')
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-08-03 14:53:31 +05: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))
2019-12-10 23:04:24 +05:00
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
2019-08-03 14:53:31 +05:00
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.'}
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):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/sshAccess.html',
{'domainName': self.domain, 'externalApp': externalApp})
return proc.render()
2019-08-03 14:53:31 +05:00
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)
2020-01-30 22:33:57 +05:00
if website.externalApp != data['externalApp']:
data_ret = {'status': 0, 'error_message': 'External app mis-match.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
uBuntuPath = '/etc/lsb-release'
if os.path.exists(uBuntuPath):
command = "echo '%s:%s' | chpasswd" % (data['externalApp'], data['password'])
else:
command = 'echo "%s" | passwd --stdin %s' % (data['password'], data['externalApp'])
2019-08-03 14:53:31 +05:00
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:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def setupStaging(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/setupStaging.html',
{'domainName': self.domain, 'externalApp': externalApp})
return proc.render()
2019-08-03 14:53:31 +05:00
def startCloning(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['masterDomain']
if not validators.domain(self.domain):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-06 00:25:11 +05:00
if not validators.domain(data['domainName']):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
extraArgs = {}
extraArgs['domain'] = data['domainName']
extraArgs['masterDomain'] = data['masterDomain']
extraArgs['admin'] = admin
tempStatusPath = "/tmp/" + str(randint(1000, 9999))
writeToFile = open(tempStatusPath, 'a')
message = 'Cloning process has started..,5'
writeToFile.write(message)
writeToFile.close()
extraArgs['tempStatusPath'] = tempStatusPath
st = StagingSetup('startCloning', extraArgs)
st.start()
data_ret = {'status': 1, 'error_message': 'None', 'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def syncToMaster(self, request=None, userID=None, data=None, childDomain = None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2019-08-03 14:53:31 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2019-08-03 14:53:31 +05:00
website = Websites.objects.get(domain=self.domain)
externalApp = website.externalApp
2019-08-03 14:53:31 +05:00
proc = httpProc(request, 'websiteFunctions/syncMaster.html',
{'domainName': self.domain, 'externalApp': externalApp, 'childDomain': childDomain})
return proc.render()
2019-08-03 14:53:31 +05:00
def startSync(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2020-03-06 00:25:11 +05:00
if not validators.domain(data['childDomain']):
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': "Invalid domain."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
self.domain = data['childDomain']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
extraArgs = {}
extraArgs['childDomain'] = data['childDomain']
try:
extraArgs['eraseCheck'] = data['eraseCheck']
except:
extraArgs['eraseCheck'] = False
try:
extraArgs['dbCheck'] = data['dbCheck']
except:
extraArgs['dbCheck'] = False
try:
extraArgs['copyChanged'] = data['copyChanged']
except:
extraArgs['copyChanged'] = False
extraArgs['admin'] = admin
tempStatusPath = "/tmp/" + str(randint(1000, 9999))
writeToFile = open(tempStatusPath, 'a')
message = 'Syncing process has started..,5'
writeToFile.write(message)
writeToFile.close()
extraArgs['tempStatusPath'] = tempStatusPath
st = StagingSetup('startSyncing', extraArgs)
st.start()
data_ret = {'status': 1, 'error_message': 'None', 'tempStatusPath': tempStatusPath}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-10 15:09:10 +05:00
except BaseException as msg:
2019-08-03 14:53:31 +05:00
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2019-12-23 17:02:34 +05:00
def convertDomainToSite(self, userID=None, request=None):
try:
extraArgs = {}
extraArgs['request'] = request
extraArgs['tempStatusPath'] = "/home/cyberpanel/" + str(randint(1000, 9999))
background = ApplicationInstaller('convertDomainToSite', extraArgs)
background.start()
data_ret = {'status': 1, 'createWebSiteStatus': 1, 'tempStatusPath': extraArgs['tempStatusPath']}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'createWebSiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-07 19:01:54 +05:00
def manageGIT(self, request=None, userID=None, data=None):
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2020-03-28 12:25:09 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadError()
2020-03-07 19:01:54 +05:00
try:
website = Websites.objects.get(domain=self.domain)
folders = ['/home/%s/public_html' % (self.domain), '/home/%s' % (self.domain),
'/home/vmail/%s' % (self.domain)]
2020-03-28 12:25:09 +05:00
databases = website.databases_set.all()
2020-03-28 12:25:09 +05:00
for database in databases:
basePath = '/var/lib/mysql/'
folders.append('%s%s' % (basePath, database.dbName))
except:
2020-03-28 19:23:57 +05:00
self.childWebsite = ChildDomains.objects.get(domain=self.domain)
2020-03-28 19:23:57 +05:00
folders = [self.childWebsite.path]
2020-03-07 19:01:54 +05:00
databases = self.childWebsite.master.databases_set.all()
2020-03-07 19:01:54 +05:00
for database in databases:
basePath = '/var/lib/mysql/'
folders.append('%s%s' % (basePath, database.dbName))
2020-03-07 19:01:54 +05:00
proc = httpProc(request, 'websiteFunctions/manageGIT.html',
{'domainName': self.domain, 'folders': folders})
return proc.render()
2020-03-07 21:03:17 +05:00
def folderCheck(self):
2020-03-28 19:23:57 +05:00
2020-03-28 12:25:09 +05:00
try:
2020-03-28 19:23:57 +05:00
2020-03-30 17:14:33 +05:00
###
2020-03-30 01:07:46 +05:00
domainPath = '/home/%s/public_html' % (self.domain)
vhRoot = '/home/%s' % (self.domain)
vmailPath = '/home/vmail/%s' % (self.domain)
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
##
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
try:
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
website = Websites.objects.get(domain=self.domain)
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
self.masterWebsite = website
self.masterDomain = website.domain
externalApp = website.externalApp
self.externalAppLocal = website.externalApp
self.adminEmail = website.adminEmail
self.firstName = website.admin.firstName
self.lastName = website.admin.lastName
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
self.home = 0
if self.folder == '/home/%s/public_html' % (self.domain):
self.home = 1
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
except:
2020-03-14 13:22:24 +05:00
2020-03-30 01:07:46 +05:00
website = ChildDomains.objects.get(domain=self.domain)
self.masterWebsite = website.master
self.masterDomain = website.master.domain
externalApp = website.master.externalApp
self.externalAppLocal = website.master.externalApp
self.adminEmail = website.master.adminEmail
self.firstName = website.master.admin.firstName
self.lastName = website.master.admin.lastName
2020-03-07 21:03:17 +05:00
2020-03-30 01:07:46 +05:00
self.home = 0
if self.folder == website.path:
self.home = 1
2020-03-28 19:23:57 +05:00
2020-03-30 17:14:33 +05:00
### Fetch git configurations
self.confCheck = 1
gitConfFolder = '/home/cyberpanel/git'
gitConFile = '%s/%s' % (gitConfFolder, self.masterDomain)
if not os.path.exists(gitConfFolder):
os.mkdir(gitConfFolder)
if not os.path.exists(gitConFile):
os.mkdir(gitConFile)
if os.path.exists(gitConFile):
files = os.listdir(gitConFile)
if len(files) >= 1:
for file in files:
self.finalFile = '%s/%s' % (gitConFile, file)
gitConf = json.loads(open(self.finalFile, 'r').read())
if gitConf['folder'] == self.folder:
self.autoCommitCurrent = gitConf['autoCommit']
self.autoPushCurrent = gitConf['autoPush']
self.emailLogsCurrent = gitConf['emailLogs']
try:
self.commands = gitConf['commands']
except:
self.commands = "Add Commands to run after every commit, separate commands using comma."
try:
self.webhookCommandCurrent = gitConf['webhookCommand']
except:
self.webhookCommandCurrent = "False"
self.confCheck = 0
break
if self.confCheck:
self.autoCommitCurrent = 'Never'
self.autoPushCurrent = 'Never'
self.emailLogsCurrent = 'False'
self.webhookCommandCurrent = 'False'
self.commands = "Add Commands to run after every commit, separate commands using comma."
2020-03-30 01:07:46 +05:00
##
2020-03-26 12:10:16 +05:00
2020-03-30 01:07:46 +05:00
if self.folder == domainPath:
self.externalApp = externalApp
return 1
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
##
2020-03-28 12:25:09 +05:00
2020-03-30 01:07:46 +05:00
if self.folder == vhRoot:
2020-03-28 19:23:57 +05:00
self.externalApp = externalApp
2020-03-28 12:25:09 +05:00
return 1
2020-03-30 01:07:46 +05:00
##
2020-03-28 12:25:09 +05:00
2020-03-30 01:07:46 +05:00
try:
childDomain = ChildDomains.objects.get(domain=self.domain)
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
if self.folder == childDomain.path:
self.externalApp = externalApp
return 1
2020-03-07 21:03:17 +05:00
2020-03-30 01:07:46 +05:00
except:
pass
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
##
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
if self.folder == vmailPath:
self.externalApp = 'vmail'
return 1
2020-03-28 19:23:57 +05:00
2020-03-30 01:07:46 +05:00
try:
for database in website.databases_set.all():
self.externalApp = 'mysql'
basePath = '/var/lib/mysql/'
dbPath = '%s%s' % (basePath, database.dbName)
if self.folder == dbPath:
return 1
except:
for database in website.master.databases_set.all():
self.externalApp = 'mysql'
basePath = '/var/lib/mysql/'
dbPath = '%s%s' % (basePath, database.dbName)
if self.folder == dbPath:
return 1
2020-03-30 13:26:17 +05:00
return 0
2020-03-30 01:07:46 +05:00
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile('%s. [folderCheck:3002]' % (str(msg)))
2020-03-07 21:03:17 +05:00
return 0
def fetchFolderDetails(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-07 23:25:58 +05:00
gitPath = '%s/.git' % (self.folder)
2020-03-07 21:03:17 +05:00
command = 'ls -la %s' % (gitPath)
if ProcessUtilities.outputExecutioner(command, self.externalAppLocal).find('No such file or directory') > -1:
2020-03-11 15:00:20 +05:00
2020-03-28 19:23:57 +05:00
command = 'cat /home/%s/.ssh/%s.pub' % (self.masterDomain, self.externalAppLocal)
deploymentKey = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-11 15:00:20 +05:00
if deploymentKey.find('No such file or directory') > -1:
2020-03-28 19:23:57 +05:00
command = "ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''" % (self.masterDomain, self.externalAppLocal)
2020-03-28 12:25:09 +05:00
ProcessUtilities.executioner(command, self.externalAppLocal)
2020-03-11 15:00:20 +05:00
2020-03-28 19:23:57 +05:00
command = 'cat /home/%s/.ssh/%s.pub' % (self.masterDomain, self.externalAppLocal)
deploymentKey = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-11 15:00:20 +05:00
2020-03-28 19:23:57 +05:00
data_ret = {'status': 1, 'repo': 0, 'deploymentKey': deploymentKey, 'home': self.home}
2020-03-07 21:03:17 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2020-03-07 23:25:58 +05:00
## Find git branches
2020-03-09 08:59:57 +05:00
command = 'git -C %s branch' % (self.folder)
branches = ProcessUtilities.outputExecutioner(command, self.externalAppLocal).split('\n')[:-1]
2020-03-07 23:25:58 +05:00
## Fetch key
2020-03-28 12:25:09 +05:00
command = 'cat /home/%s/.ssh/%s.pub' % (self.domain, self.externalAppLocal)
deploymentKey = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-07 23:25:58 +05:00
2020-03-09 08:59:57 +05:00
if deploymentKey.find('No such file or directory') > -1:
2020-03-28 19:23:57 +05:00
command = "ssh-keygen -f /home/%s/.ssh/%s -t rsa -N ''" % (self.masterDomain, self.externalAppLocal)
2020-03-28 12:25:09 +05:00
ProcessUtilities.executioner(command, self.externalAppLocal)
2020-03-09 08:59:57 +05:00
2020-03-28 19:23:57 +05:00
command = 'cat /home/%s/.ssh/%s.pub' % (self.masterDomain, self.externalAppLocal)
deploymentKey = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-09 08:59:57 +05:00
## Find Remote if any
command = 'git -C %s remote -v' % (self.folder)
remoteResult = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-09 08:59:57 +05:00
remote = 1
if remoteResult.find('origin') == -1:
remote = 0
2020-03-09 16:30:56 +05:00
remoteResult = 'Remote currently not set.'
2020-03-09 08:59:57 +05:00
2020-03-10 12:49:35 +05:00
## Find Total commits on current branch
command = 'git -C %s rev-list --count HEAD' % (self.folder)
totalCommits = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-10 12:49:35 +05:00
if totalCommits.find('fatal') > -1:
totalCommits = '0'
2020-03-16 19:14:39 +05:00
##
2020-08-15 11:28:12 +05:00
port = ProcessUtilities.fetchCurrentPort()
webHookURL = 'https://%s:%s/websites/%s/webhook' % (ACLManager.fetchIP(), port, self.domain)
2020-03-16 19:14:39 +05:00
2020-03-10 12:49:35 +05:00
data_ret = {'status': 1, 'repo': 1, 'finalBranches': branches, 'deploymentKey': deploymentKey,
2020-03-28 19:23:57 +05:00
'remote': remote, 'remoteResult': remoteResult, 'totalCommits': totalCommits, 'home': self.home,
2020-03-30 17:14:33 +05:00
'webHookURL': webHookURL, 'autoCommitCurrent': self.autoCommitCurrent,
'autoPushCurrent':self.autoPushCurrent, 'emailLogsCurrent': self.emailLogsCurrent, 'commands': self.commands, "webhookCommandCurrent": self.webhookCommandCurrent}
2020-03-16 19:14:39 +05:00
2020-03-09 08:59:57 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def initRepo(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-15 15:26:24 +05:00
2020-03-09 08:59:57 +05:00
command = 'git -C %s init' % (self.folder)
2020-03-15 21:34:26 +05:00
result = ProcessUtilities.outputExecutioner(command)
2020-03-09 08:59:57 +05:00
if result.find('Initialized empty Git repository in') > -1:
2020-03-15 15:26:24 +05:00
2020-03-28 12:25:09 +05:00
command = 'git -C %s config --local user.email %s' % (self.folder, self.adminEmail)
2020-03-15 21:34:26 +05:00
ProcessUtilities.executioner(command)
2020-03-15 15:26:24 +05:00
command = 'git -C %s config --local user.name "%s %s"' % (
2020-03-28 12:25:09 +05:00
self.folder, self.firstName, self.lastName)
2020-03-15 21:34:26 +05:00
ProcessUtilities.executioner(command)
2020-03-15 15:26:24 +05:00
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-09 08:59:57 +05:00
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': result}
2020-03-07 21:03:17 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-09 16:30:56 +05:00
def setupRemote(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.gitHost = data['gitHost']
self.gitUsername = data['gitUsername']
self.gitReponame = data['gitReponame']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
2020-03-15 21:34:26 +05:00
## Security checks
2020-03-09 16:30:56 +05:00
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
if self.gitHost.find(':') > -1:
gitHostDomain = self.gitHost.split(':')[0]
gitHostPort = self.gitHost.split(':')[1]
if not validators.domain(gitHostDomain):
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
try:
gitHostPort = int(gitHostPort)
except:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
else:
if not validators.domain(self.gitHost):
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
if ACLManager.validateInput(self.gitUsername) and ACLManager.validateInput(self.gitReponame):
2020-03-15 21:34:26 +05:00
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
2020-03-10 21:04:57 +05:00
### set default ssh key
2020-03-28 19:23:57 +05:00
command = 'git -C %s config --local core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""' % (self.folder, self.masterDomain, self.externalAppLocal)
2020-03-14 23:18:23 +05:00
ProcessUtilities.executioner(command)
2020-03-10 21:04:57 +05:00
2020-03-09 16:30:56 +05:00
## Check if remote exists
command = 'git -C %s remote -v' % (self.folder)
2020-03-14 23:18:23 +05:00
remoteResult = ProcessUtilities.outputExecutioner(command)
2020-03-09 16:30:56 +05:00
## Set new remote
if remoteResult.find('origin') == -1:
command = 'git -C %s remote add origin git@%s:%s/%s.git' % (self.folder, self.gitHost, self.gitUsername, self.gitReponame)
else:
2020-03-14 23:18:23 +05:00
command = 'git -C %s remote set-url origin git@%s:%s/%s.git' % (self.folder, self.gitHost, self.gitUsername, self.gitReponame)
2020-03-09 16:30:56 +05:00
2020-03-28 12:25:09 +05:00
possibleError = ProcessUtilities.outputExecutioner(command)
2020-03-09 16:30:56 +05:00
## Check if set correctly.
command = 'git -C %s remote -v' % (self.folder)
2020-03-28 12:25:09 +05:00
remoteResult = ProcessUtilities.outputExecutioner(command)
2020-03-09 16:30:56 +05:00
if remoteResult.find(self.gitUsername) > -1:
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-09 16:30:56 +05:00
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': possibleError}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'installStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-10 12:49:35 +05:00
def changeGitBranch(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.branchName = data['branchName']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-15 21:34:26 +05:00
## Security check
if ACLManager.validateInput(self.branchName):
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
2020-03-12 13:30:18 +05:00
if self.branchName.find('*') > -1:
data_ret = {'status': 0, 'commandStatus': 'Already on this branch.', 'error_message': 'Already on this branch.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-10 12:49:35 +05:00
command = 'git -C %s checkout %s' % (self.folder, self.branchName.strip(' '))
2020-03-28 12:25:09 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command)
2020-03-10 12:49:35 +05:00
if commandStatus.find('Switched to branch') > -1:
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-10 12:49:35 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus + 'Refreshing page in 3 seconds..'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': 'Failed to change branch', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-10 15:06:42 +05:00
def createNewBranch(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.newBranchName = data['newBranchName']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-15 21:34:26 +05:00
## Security check
if ACLManager.validateInput(self.newBranchName):
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
##
2020-03-11 15:00:20 +05:00
command = 'git -C %s checkout -b "%s"' % (self.folder, self.newBranchName)
2020-03-28 19:23:57 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command)
2020-03-10 15:06:42 +05:00
if commandStatus.find(self.newBranchName) > -1:
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-10 15:06:42 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': 'Failed to create branch', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def commitChanges(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.commitMessage = data['commitMessage']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
2020-03-30 13:26:17 +05:00
return ACLManager.loadErrorJson('status', 0)
2020-03-10 15:06:42 +05:00
2020-03-30 01:07:46 +05:00
2020-03-15 21:34:26 +05:00
# security check
2020-03-30 13:26:17 +05:00
2020-03-15 21:34:26 +05:00
if ACLManager.validateInput(self.commitMessage):
pass
else:
2020-03-30 01:07:46 +05:00
return ACLManager.loadErrorJson()
2020-03-15 21:34:26 +05:00
2020-03-30 13:26:17 +05:00
2020-03-10 15:06:42 +05:00
## Check if remote exists
command = 'git -C %s add -A' % (self.folder)
2020-03-15 15:26:24 +05:00
ProcessUtilities.outputExecutioner(command )
2020-03-10 15:06:42 +05:00
command = 'git -C %s commit -m "%s"' % (self.folder, self.commitMessage.replace('"', ''))
commandStatus = ProcessUtilities.outputExecutioner(command)
2020-03-10 15:06:42 +05:00
if commandStatus.find('nothing to commit') == -1:
try:
2020-03-30 17:14:33 +05:00
if self.commands != 'NONE':
2020-03-28 19:23:57 +05:00
GitLogs(owner=self.masterWebsite, type='INFO', message='Running commands after successful git commit..').save()
if self.commands.find('\n') > -1:
commands = self.commands.split('\n')
for command in commands:
2020-03-28 19:23:57 +05:00
GitLogs(owner=self.masterWebsite, type='INFO',
message='Running: %s' % (command)).save()
2020-03-28 19:23:57 +05:00
result = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
GitLogs(owner=self.masterWebsite, type='INFO',
message='Result: %s' % (result)).save()
else:
2020-03-28 19:23:57 +05:00
GitLogs(owner=self.masterWebsite, type='INFO',
2020-03-30 17:14:33 +05:00
message='Running: %s' % (self.commands)).save()
2020-03-30 17:14:33 +05:00
result = ProcessUtilities.outputExecutioner(self.commands, self.externalAppLocal)
2020-03-28 19:23:57 +05:00
GitLogs(owner=self.masterWebsite, type='INFO',
message='Result: %s' % (result)).save()
2020-03-28 19:23:57 +05:00
GitLogs(owner=self.masterWebsite, type='INFO',
message='Finished running commands.').save()
except:
pass
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-10 15:06:42 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': 'Nothing to commit.', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg), 'commandStatus': str(msg)}
2020-03-10 15:06:42 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-10 21:04:57 +05:00
def gitPull(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-11 15:00:20 +05:00
### set default ssh key
2020-03-15 15:26:24 +05:00
command = 'git -C %s config --local core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""' % (
2020-03-28 19:23:57 +05:00
self.folder, self.masterDomain, self.externalAppLocal)
2020-03-15 15:26:24 +05:00
ProcessUtilities.executioner(command )
2020-03-11 15:00:20 +05:00
2020-03-10 21:04:57 +05:00
## Check if remote exists
command = 'git -C %s pull' % (self.folder)
commandStatus = ProcessUtilities.outputExecutioner(command)
if commandStatus.find('Already up to date') == -1:
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-10 21:04:57 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {'status': 0, 'error_message': 'Pull not required.', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def gitPush(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-11 15:00:20 +05:00
### set default ssh key
2020-03-15 15:26:24 +05:00
command = 'git -C %s config --local core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""' % (
2020-03-28 19:23:57 +05:00
self.folder, self.masterDomain, self.externalAppLocal)
2020-03-15 21:34:26 +05:00
ProcessUtilities.executioner(command)
2020-03-11 15:00:20 +05:00
##
command = 'git -C %s push' % (self.folder)
2020-03-19 18:59:27 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command, 'root', False)
2020-03-10 21:04:57 +05:00
2020-03-11 15:00:20 +05:00
if commandStatus.find('has no upstream branch') > -1:
command = 'git -C %s rev-parse --abbrev-ref HEAD' % (self.folder)
2020-03-19 18:59:27 +05:00
currentBranch = ProcessUtilities.outputExecutioner(command, 'root', False).rstrip('\n')
2020-03-15 15:26:24 +05:00
if currentBranch.find('fatal: ambiguous argument') > -1:
data_ret = {'status': 0, 'error_message': 'You need to commit first.', 'commandStatus': 'You need to commit first.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-11 15:00:20 +05:00
command = 'git -C %s push --set-upstream origin %s' % (self.folder, currentBranch)
2020-03-19 18:59:27 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command, 'root', False)
2020-03-11 15:00:20 +05:00
2020-03-19 11:39:10 +05:00
if commandStatus.find('Everything up-to-date') == -1 and commandStatus.find('rejected') == -1 and commandStatus.find('Permission denied') == -1:
2020-03-10 21:04:57 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2020-03-19 11:39:10 +05:00
data_ret = {'status': 0, 'error_message': 'Push failed.', 'commandStatus': commandStatus}
2020-03-10 21:04:57 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg), 'commandStatus': str(msg)}
2020-03-10 21:04:57 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-11 15:00:20 +05:00
def attachRepoGIT(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.gitHost = data['gitHost']
self.gitUsername = data['gitUsername']
self.gitReponame = data['gitReponame']
2020-03-14 23:18:23 +05:00
2020-03-11 15:00:20 +05:00
try:
self.overrideData = data['overrideData']
except:
self.overrideData = False
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
if self.gitHost.find(':') > -1:
gitHostDomain = self.gitHost.split(':')[0]
gitHostPort = self.gitHost.split(':')[1]
if not validators.domain(gitHostDomain):
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
try:
gitHostPort = int(gitHostPort)
except:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
else:
if not validators.domain(self.gitHost):
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
2020-03-28 19:23:57 +05:00
2020-03-15 21:34:26 +05:00
## Security check
if ACLManager.validateInput(self.gitUsername) and ACLManager.validateInput(self.gitReponame):
2020-03-15 21:34:26 +05:00
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
##
2020-03-11 15:00:20 +05:00
if self.overrideData:
command = 'rm -rf %s' % (self.folder)
2020-03-14 23:18:23 +05:00
ProcessUtilities.executioner(command)
2020-03-11 15:00:20 +05:00
## Set defauly key
2020-03-28 19:23:57 +05:00
command = 'git config --global core.sshCommand "ssh -i /home/%s/.ssh/%s -o "StrictHostKeyChecking=no""' % (self.masterDomain, self.externalAppLocal)
2020-03-14 23:18:23 +05:00
ProcessUtilities.executioner(command)
2020-03-11 15:00:20 +05:00
##
command = 'git clone git@%s:%s/%s.git %s' % (self.gitHost, self.gitUsername, self.gitReponame, self.folder)
2020-03-14 23:18:23 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command)
2020-03-11 15:00:20 +05:00
if commandStatus.find('already exists') == -1 and commandStatus.find('Permission denied') == -1:
2020-03-12 13:30:18 +05:00
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
2020-03-28 19:23:57 +05:00
fm.fixPermissions(self.masterDomain)
2020-03-12 13:30:18 +05:00
2020-03-28 19:23:57 +05:00
command = 'git -C %s config --local user.email %s' % (self.folder, self.adminEmail)
2020-03-15 15:26:24 +05:00
ProcessUtilities.executioner(command)
2020-03-28 19:23:57 +05:00
command = 'git -C %s config --local user.name "%s %s"' % (self.folder, self.firstName, self.lastName)
2020-03-15 15:26:24 +05:00
ProcessUtilities.executioner(command)
2020-03-11 15:00:20 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2020-03-12 13:30:18 +05:00
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
2020-03-28 19:23:57 +05:00
fm.fixPermissions(self.masterDomain)
2020-03-12 13:30:18 +05:00
2020-03-11 15:00:20 +05:00
data_ret = {'status': 0, 'error_message': 'Failed to clone.', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def removeTracking(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
command = 'rm -rf %s/.git' % (self.folder)
2020-03-28 19:23:57 +05:00
ProcessUtilities.executioner(command)
2020-03-11 15:00:20 +05:00
2020-03-30 17:14:33 +05:00
gitConfFolder = '/home/cyberpanel/git'
gitConFile = '%s/%s' % (gitConfFolder, self.masterDomain)
finalFile = '%s/%s' % (gitConFile, self.folder.split('/')[-1])
command = 'rm -rf %s' % (finalFile)
ProcessUtilities.outputExecutioner(command)
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-11 15:00:20 +05:00
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-12 13:30:18 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchGitignore(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
command = 'cat %s/.gitignore' % (self.folder)
2020-03-28 19:23:57 +05:00
gitIgnoreContent = ProcessUtilities.outputExecutioner(command, self.externalAppLocal)
2020-03-12 13:30:18 +05:00
if gitIgnoreContent.find('No such file or directory') > -1:
gitIgnoreContent = 'File is currently empty.'
data_ret = {'status': 1, 'gitIgnoreContent': gitIgnoreContent}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def saveGitIgnore(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.gitIgnoreContent = data['gitIgnoreContent']
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
## Write to temp file
writeToFile = open(tempPath, 'w')
writeToFile.write(self.gitIgnoreContent)
writeToFile.close()
## Move to original file
command = 'mv %s %s/.gitignore' % (tempPath, self.folder)
ProcessUtilities.executioner(command)
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
2020-03-28 19:23:57 +05:00
fm.fixPermissions(self.masterDomain)
2020-03-12 13:30:18 +05:00
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-12 18:56:28 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchCommits(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-12 21:33:06 +05:00
initCommand = """log --pretty=format:"%h|%s|%cn|%cd" -50"""
2020-03-12 18:56:28 +05:00
command = 'git -C %s %s' % (self.folder, initCommand)
2020-03-15 15:26:24 +05:00
commits = ProcessUtilities.outputExecutioner(command).split('\n')
2020-03-12 18:56:28 +05:00
2020-03-12 21:33:06 +05:00
json_data = "["
checker = 0
2020-03-13 11:12:40 +05:00
id = 1
2020-03-12 21:33:06 +05:00
for commit in commits:
cm = commit.split('|')
2020-03-13 11:12:40 +05:00
dic = {'id': str(id),'commit': cm[0], 'message': cm[1].replace('"', "'"), 'name': cm[2], 'date': cm[3]}
id = id + 1
2020-03-12 21:33:06 +05:00
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
commits = json_data + ']'
2020-03-12 18:56:28 +05:00
data_ret = {'status': 1, 'commits': commits}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-15 21:34:26 +05:00
except IndexError:
data_ret = {'status': 0, 'error_message': 'No commits found.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-13 11:12:40 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchFiles(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.commit = data['commit']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-15 21:34:26 +05:00
## Security check
if ACLManager.validateInput(self.commit):
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
##
2020-03-13 11:12:40 +05:00
command = 'git -C %s diff-tree --no-commit-id --name-only -r %s' % (self.folder, self.commit)
2020-03-15 15:26:24 +05:00
files = ProcessUtilities.outputExecutioner(command).split('\n')
2020-03-13 11:12:40 +05:00
data_ret = {'status': 1, 'files': files}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def fetchChangesInFile(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
self.file = data['file']
self.commit = data['commit']
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-15 21:34:26 +05:00
## security check
if ACLManager.validateInput(self.commit) and self.file.find('..') == -1:
pass
else:
return ACLManager.loadErrorJson('status', 'Invalid characters in your input.')
2020-03-13 11:12:40 +05:00
command = 'git -C %s show %s -- %s/%s' % (self.folder, self.commit, self.folder, self.file.strip('\n').strip(' '))
2020-03-15 15:26:24 +05:00
fileChangedContent = ProcessUtilities.outputExecutioner(command).split('\n')
2020-03-13 11:12:40 +05:00
2020-03-14 13:22:24 +05:00
2020-03-15 15:26:24 +05:00
initialNumber = 0
2020-03-14 13:22:24 +05:00
## Find initial line numbers
2020-03-15 15:26:24 +05:00
for items in fileChangedContent:
if len(items) == 0:
initialNumber = initialNumber + 1
elif items[0] == '@':
break
else:
initialNumber = initialNumber + 1
2020-03-14 13:22:24 +05:00
2020-03-29 21:18:55 +05:00
try:
lineNumber = int(fileChangedContent[initialNumber].split('+')[1].split(',')[0])
except:
lineNumber = int(fileChangedContent[initialNumber].split('+')[1].split(' ')[0])
2020-03-13 20:41:50 +05:00
fileLen = len(fileChangedContent)
2020-03-15 15:26:24 +05:00
finalConent = '<tr><td style="border-top: none;color:blue">%s</td><td style="border-top: none;"><p style="color:blue">%s</p></td></tr>' % ('#', fileChangedContent[initialNumber])
2020-03-13 20:41:50 +05:00
2020-03-15 15:26:24 +05:00
for i in range(initialNumber + 1, fileLen-1):
2020-03-14 13:22:24 +05:00
if fileChangedContent[i][0] == '@':
lineNumber = int(fileChangedContent[i].split('+')[1].split(',')[0])
finalConent = finalConent + '<tr><td style="border-top: none;color:blue">%s</td><td style="border-top: none;"><p style="color:blue">%s</p></td></tr>' % ('#', fileChangedContent[i])
continue
2020-03-13 20:41:50 +05:00
2020-03-14 13:22:24 +05:00
else:
if fileChangedContent[i][0] == '+':
2020-03-15 15:26:24 +05:00
content = '<p style="color:green">%s</p>' % (fileChangedContent[i].replace('<', "&lt;").replace('>', "&gt;"))
2020-03-14 13:22:24 +05:00
finalConent = finalConent + '<tr style="color:green"><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>' % (str(lineNumber), content)
lineNumber = lineNumber + 1
elif fileChangedContent[i][0] == '-':
2020-03-15 15:26:24 +05:00
content = '<p style="color:red">%s</p>' % (fileChangedContent[i].replace('<', "&lt;").replace('>', "&gt;"))
2020-03-14 13:22:24 +05:00
finalConent = finalConent + '<tr style="color:red"><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>' % (str(lineNumber), content)
lineNumber = lineNumber + 1
else:
2020-03-15 15:26:24 +05:00
content = '<p>%s</p>' % (fileChangedContent[i].replace('<', "&lt;").replace('>', "&gt;"))
2020-03-14 13:22:24 +05:00
finalConent = finalConent + '<tr><td style="border-top: none;">%s</td><td style="border-top: none;">%s</td></tr>' % (str(lineNumber), content)
lineNumber = lineNumber + 1
data_ret = {'status': 1, 'fileChangedContent': finalConent}
2020-03-13 11:12:40 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-15 15:26:24 +05:00
except IndexError:
data_ret = {'status': 0, 'error_message': 'Not a text file.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-16 19:14:39 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def saveGitConfigurations(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
dic = {}
2020-03-30 17:14:33 +05:00
dic['domain'] = self.domain
2020-03-16 19:14:39 +05:00
dic['autoCommit'] = data['autoCommit']
try:
dic['autoPush'] = data['autoPush']
except:
dic['autoPush'] = 'Never'
2020-03-16 19:14:39 +05:00
try:
dic['emailLogs'] = data['emailLogs']
except:
dic['emailLogs'] = False
try:
dic['commands'] = data['commands']
except:
dic['commands'] = 'NONE'
try:
dic['webhookCommand'] = data['webhookCommand']
except:
dic['webhookCommand'] = False
2020-03-30 17:14:33 +05:00
dic['folder'] = self.folder
2020-03-16 19:14:39 +05:00
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
##
2020-03-30 17:14:33 +05:00
if self.confCheck == 1:
gitConfFolder = '/home/cyberpanel/git'
gitConFile = '%s/%s' % (gitConfFolder, self.masterDomain)
self.finalFile = '%s/%s' % (gitConFile, str(randint(1000, 9999)))
2020-03-16 19:14:39 +05:00
2020-03-30 17:14:33 +05:00
if not os.path.exists(gitConfFolder):
os.mkdir(gitConfFolder)
2020-03-16 21:22:04 +05:00
2020-03-30 17:14:33 +05:00
if not os.path.exists(gitConFile):
os.mkdir(gitConFile)
2020-03-16 21:22:04 +05:00
2020-03-30 17:14:33 +05:00
writeToFile = open(self.finalFile, 'w')
2020-03-16 19:14:39 +05:00
writeToFile.write(json.dumps(dic))
writeToFile.close()
data_ret = {'status': 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def getLogsInJson(self, logs):
json_data = "["
checker = 0
counter = 1
for items in logs:
dic = {'type': items.type, 'date': items.date.strftime('%m.%d.%Y_%H-%M-%S'), 'message': items.message}
if checker == 0:
json_data = json_data + json.dumps(dic)
checker = 1
else:
json_data = json_data + ',' + json.dumps(dic)
counter = counter + 1
json_data = json_data + ']'
return json_data
def fetchGitLogs(self, userID=None, data=None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
self.domain = data['domain']
self.folder = data['folder']
recordsToShow = int(data['recordsToShow'])
page = int(data['page'])
if ACLManager.checkOwnership(self.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
if self.folderCheck():
pass
else:
return ACLManager.loadErrorJson()
2020-03-28 19:23:57 +05:00
logs = self.masterWebsite.gitlogs_set.all().order_by('-id')
from s3Backups.s3Backups import S3Backups
pagination = S3Backups.getPagination(len(logs), recordsToShow)
endPageNumber, finalPageNumber = S3Backups.recordsPointer(page, recordsToShow)
jsonData = self.getLogsInJson(logs[finalPageNumber:endPageNumber])
data_ret = {'status': 1, 'logs': jsonData, 'pagination': pagination}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except IndexError:
data_ret = {'status': 0, 'error_message': 'Not a text file.'}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-19 22:13:47 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def webhook(self,domain, data=None):
try:
self.domain = domain
### set default ssh key
2020-03-28 19:23:57 +05:00
try:
web = Websites.objects.get(domain=self.domain)
2020-03-30 17:44:35 +05:00
self.web = web
2020-03-28 19:23:57 +05:00
self.folder = '/home/%s/public_html' % (domain)
2020-03-30 17:14:33 +05:00
self.masterDomain = domain
2020-03-28 19:23:57 +05:00
except:
web = ChildDomains.objects.get(domain=self.domain)
self.folder = web.path
2020-03-30 17:14:33 +05:00
self.masterDomain = web.master.domain
2020-03-30 17:44:35 +05:00
self.web = web.master
2020-03-19 22:13:47 +05:00
## Check if remote exists
command = 'git -C %s pull' % (self.folder)
2020-03-30 17:44:35 +05:00
commandStatus = ProcessUtilities.outputExecutioner(command)
2020-03-19 22:13:47 +05:00
if commandStatus.find('Already up to date') == -1:
message = '[Webhook Fired] Status: %s.' % (commandStatus)
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO', message=message).save()
2020-03-30 17:14:33 +05:00
### Fetch git configurations
2020-03-30 17:14:33 +05:00
found = 0
2020-03-28 19:23:57 +05:00
2020-03-30 17:14:33 +05:00
gitConfFolder = '/home/cyberpanel/git'
gitConFile = '%s/%s' % (gitConfFolder, self.masterDomain)
2020-03-28 19:23:57 +05:00
2020-03-30 17:14:33 +05:00
if not os.path.exists(gitConfFolder):
os.mkdir(gitConfFolder)
2020-03-30 17:14:33 +05:00
if not os.path.exists(gitConFile):
os.mkdir(gitConFile)
2020-03-30 17:14:33 +05:00
if os.path.exists(gitConFile):
files = os.listdir(gitConFile)
if len(files) >= 1:
for file in files:
finalFile = '%s/%s' % (gitConFile, file)
gitConf = json.loads(open(finalFile, 'r').read())
if gitConf['folder'] == self.folder:
found = 1
break
if found:
try:
if gitConf['webhookCommand']:
if gitConf['commands'] != 'NONE':
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO', message='Running commands after successful git commit..').save()
2020-03-30 17:14:33 +05:00
if gitConf['commands'].find('\n') > -1:
commands = gitConf['commands'].split('\n')
2020-03-30 17:14:33 +05:00
for command in commands:
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO',
2020-03-30 17:14:33 +05:00
message='Running: %s' % (command)).save()
result = ProcessUtilities.outputExecutioner(command, self.web.externalApp, None, self.folder)
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO',
2020-03-30 17:14:33 +05:00
message='Result: %s' % (result)).save()
else:
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO',
2020-03-30 17:14:33 +05:00
message='Running: %s' % (gitConf['commands'])).save()
result = ProcessUtilities.outputExecutioner(gitConf['commands'], self.web.externalApp, None, self.folder)
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO',
message='Result: %s' % (result)).save()
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='INFO',
2020-03-30 17:14:33 +05:00
message='Finished running commands.').save()
except:
pass
## Fix permissions
from filemanager.filemanager import FileManager
fm = FileManager(None, None)
fm.fixPermissions(self.masterDomain)
2020-03-19 22:13:47 +05:00
data_ret = {'status': 1, 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
message = '[Webhook Fired] Status: %s.' % (commandStatus)
2020-03-30 17:44:35 +05:00
GitLogs(owner=self.web, type='ERROR', message=message).save()
2020-03-19 22:13:47 +05:00
data_ret = {'status': 0, 'error_message': 'Pull not required.', 'commandStatus': commandStatus}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2020-03-11 15:00:20 +05:00
except BaseException as msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def getSSHConfigs(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
domain = data['domain']
website = Websites.objects.get(domain=domain)
if ACLManager.checkOwnership(domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
pathToKeyFile = "/home/%s/.ssh/authorized_keys" % (domain)
cat = "cat " + pathToKeyFile
data = ProcessUtilities.outputExecutioner(cat, website.externalApp).split('\n')
json_data = "["
checker = 0
for items in data:
if items.find("ssh-rsa") > -1:
keydata = items.split(" ")
try:
key = "ssh-rsa " + keydata[1][:50] + " .. " + keydata[2]
try:
userName = keydata[2][:keydata[2].index("@")]
except:
userName = keydata[2]
except:
key = "ssh-rsa " + keydata[1][:50]
userName = ''
dic = {'userName': userName,
'key': key,
}
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({'status': 1, 'error_message': "None", "data": json_data})
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def deleteSSHKey(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
domain = data['domain']
if ACLManager.checkOwnership(domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
key = data['key']
pathToKeyFile = "/home/%s/.ssh/authorized_keys" % (domain)
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/firewallUtilities.py"
execPath = execPath + " deleteSSHKey --key '%s' --path %s" % (key, pathToKeyFile)
output = ProcessUtilities.outputExecutioner(execPath)
if output.find("1,None") > -1:
final_dic = {'status': 1, 'delete_status': 1}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
else:
final_dic = {'status': 1, 'delete_status': 1, "error_mssage": output}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'status': 0, 'delete_status': 0, 'error_mssage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def addSSHKey(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
domain = data['domain']
website = Websites.objects.get(domain=domain)
if ACLManager.checkOwnership(domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson('status', 0)
key = data['key']
pathToKeyFile = "/home/%s/.ssh/authorized_keys" % (domain)
command = 'mkdir -p /home/%s/.ssh/' % (domain)
ProcessUtilities.executioner(command)
command = 'chown %s:%s /home/%s/.ssh/' % (website.externalApp, website.externalApp, domain)
ProcessUtilities.executioner(command)
tempPath = "/home/cyberpanel/" + str(randint(1000, 9999))
writeToFile = open(tempPath, "w")
writeToFile.write(key)
writeToFile.close()
execPath = "sudo /usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/firewallUtilities.py"
execPath = execPath + " addSSHKey --tempPath %s --path %s" % (tempPath, pathToKeyFile)
output = ProcessUtilities.outputExecutioner(execPath)
if output.find("1,None") > -1:
final_dic = {'status': 1, 'add_status': 1}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
else:
final_dic = {'status': 0, 'add_status': 0, "error_mssage": output}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException as msg:
final_dic = {'status': 0, 'add_status': 0, 'error_mssage': str(msg)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)