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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
phps = PHPManager . findPHPVersions ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
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
2021-05-17 13:09:54 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
websitesName = ACLManager . findAllSites ( currentACL , userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
phps = PHPManager . findPHPVersions ( )
2019-12-23 17:02:34 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2021-02-19 15:56:19 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
aliasManager = AliasManager ( self . domain )
noAlias , finalAlisList = aliasManager . fetchAlisForDomains ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
path = " /home/ " + self . domain + " /public_html "
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 )
2020-03-05 21:02:38 +02: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 )
2020-03-05 21:02:38 +02:00
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 :
2020-09-11 11:36:37 +05:00
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 "
2020-02-14 22:27:56 +05:00
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
2020-03-05 21:02:38 +02: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 ( " / " )
2020-04-04 23:48:05 +05:00
path = " /home/ " + masterDomain + " / " + path
2019-08-03 14:53:31 +05:00
else :
2020-04-04 23:48:05 +05:00
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 )
2020-08-15 13:01:40 +05:00
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 )
2019-08-18 21:07:54 +05:00
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 :
2019-08-18 21:07:54 +05:00
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 )
2019-08-18 21:07:54 +05:00
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 :
2019-08-18 21:07:54 +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 "
2021-01-18 14:01:26 +05:00
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( items )
diskUsed = " %s MB " % str ( DiskUsage )
2020-01-08 13:30:37 +05:00
2019-08-18 21:07:54 +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
2019-08-18 21:07:54 +05:00
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 ' ]
2021-03-11 13:41:47 +05:00
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 "
2021-03-11 13:41:47 +05:00
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 )
2021-08-02 11:55:43 +05:00
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
2020-01-20 23:41:51 +05:00
command = " mv " + confPath + " " + confPath + " -suspended "
2019-08-03 14:53:31 +05:00
ProcessUtilities . popenExecutioner ( command )
2020-01-20 23:41:51 +05:00
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 )
2020-01-20 23:41:51 +05:00
2019-08-03 14:53:31 +05:00
installUtilities . reStartLiteSpeedSocket ( )
website . state = 0
else :
confPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + websiteName
2020-01-20 23:41:51 +05:00
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 )
2020-01-20 23:41:51 +05:00
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 )
2021-08-20 15:40:23 +05:00
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
2021-01-18 14:01:26 +05:00
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( website )
2019-08-03 14:53:31 +05:00
## bw usage calculations
Data [ ' bwInMBTotal ' ] = website . package . bandwidth
2021-01-18 14:01:26 +05:00
Data [ ' bwInMB ' ] = bwInMB
Data [ ' bwUsage ' ] = bwUsage
2019-08-03 14:53:31 +05:00
2021-01-18 14:01:26 +05:00
if DiskUsagePercentage > 100 :
DiskUsagePercentage = 100
2019-08-03 14:53:31 +05:00
2021-01-18 14:01:26 +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
2021-01-18 14:01:26 +05:00
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( website )
2019-08-03 14:53:31 +05:00
## bw usage calculations
Data [ ' bwInMBTotal ' ] = website . package . bandwidth
2021-01-18 14:01:26 +05:00
Data [ ' bwInMB ' ] = bwInMB
Data [ ' bwUsage ' ] = bwUsage
2019-08-03 14:53:31 +05:00
2021-01-18 14:01:26 +05:00
if DiskUsagePercentage > 100 :
DiskUsagePercentage = 100
2019-08-03 14:53:31 +05:00
2021-01-18 14:01:26 +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
2019-12-04 22:57:38 +05:00
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 ' :
2019-12-04 22:57:38 +05:00
Data [ ' authority ' ] = ' %s has SELF-SIGNED SSL. ' % ( self . childDomain )
2019-12-04 19:42:38 +05:00
else :
2019-12-04 23:06:51 +05:00
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 ( )
2021-03-07 11:12:38 +05:00
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 (
2020-02-03 17:30:24 +05:00
{ ' 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 ( " " )
2020-02-03 17:30:24 +05:00
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 :
2020-01-29 13:11:16 +05:00
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 )
2020-01-29 13:12:48 +05:00
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 ' ]
2020-03-05 21:02:38 +02:00
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 )
2021-08-20 19:42:06 +05:00
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 )
2021-08-20 19:42:06 +05:00
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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ' ) \
2021-08-20 15:31:11 +05:00
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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 )
2020-10-08 12:18:51 +05:00
extraArgs = { }
2019-08-03 14:53:31 +05:00
2020-10-08 12:18:51 +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 ' ]
2020-10-08 12:18:51 +05:00
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
2019-08-03 14:53:31 +05:00
mailUtilities . checkHome ( )
2020-10-08 12:18:51 +05:00
if data [ ' home ' ] == ' 0 ' :
extraArgs [ ' path ' ] = data [ ' path ' ]
2019-08-03 14:53:31 +05:00
2020-10-08 12:18:51 +05:00
background = ApplicationInstaller ( ' joomla ' , extraArgs )
background . start ( )
2019-08-03 14:53:31 +05:00
2020-10-08 12:18:51 +05:00
time . sleep ( 2 )
2019-08-03 14:53:31 +05:00
2020-10-08 12:18:51 +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 ) :
2021-03-07 11:12:38 +05:00
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
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
path = ' /home/cyberpanel/ ' + self . domain + ' .git '
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +05:00
port = ProcessUtilities . fetchCurrentPort ( )
2020-08-15 11:28:12 +05:00
2021-03-07 11:12:38 +05:00
webhookURL = ' https:// ' + ipAddress + ' : %s /websites/ ' % ( port ) + self . domain + ' /gitNotify '
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +05:00
###
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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)
2021-03-07 11:12:38 +05:00
path = " /home/cyberpanel/config "
writeToFile = open ( path , ' w ' )
writeToFile . writelines ( configContent )
writeToFile . close ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
command = ' mv %s /home/ %s /.ssh/config ' % ( path , self . domain )
ProcessUtilities . executioner ( command )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-11-07 09:37:06 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-11-07 09:37:06 +05:00
2021-03-07 11:12:38 +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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2020-08-25 15:49:52 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2020-08-25 15:49:52 +05:00
2021-03-07 11:12:38 +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 ' ]
2019-10-27 18:08:10 +05:00
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 ,
2019-10-27 18:08:10 +05:00
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
2021-01-18 14:01:26 +05:00
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( items )
diskUsed = " %s MB " % 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 "
2019-08-17 02:26:44 +05:00
2021-01-18 14:01:26 +05:00
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( items )
diskUsed = " %s MB " % str ( DiskUsage )
2019-08-17 02:26:44 +05:00
2019-08-03 14:53:31 +05:00
dic = { ' domain ' : items . domain , ' adminEmail ' : items . adminEmail , ' ipAddress ' : ipAddress ,
2019-08-17 02:26:44 +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 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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 )
2019-11-19 00:06:35 +05:00
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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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 ' ]
2020-03-05 21:02:38 +02:00
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
2020-03-05 21:02:38 +02: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 ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +05:00
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
2019-08-03 14:53:31 +05:00
2021-03-07 11:12:38 +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
2020-03-05 21:02:38 +02: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 )
2020-03-05 21:02:38 +02:00
return HttpResponse ( json_data )
2020-03-07 19:01:54 +05:00
def manageGIT ( self , request = None , userID = None , data = None ) :
2021-03-07 11:12:38 +05:00
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
2020-03-28 12:25:09 +05:00
2021-03-07 11:12:38 +05:00
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
2020-03-07 19:01:54 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +05:00
databases = website . databases_set . all ( )
2020-03-28 12:25:09 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +05:00
self . childWebsite = ChildDomains . objects . get ( domain = self . domain )
2020-03-28 19:23:57 +05:00
2021-03-07 11:12:38 +05:00
folders = [ self . childWebsite . path ]
2020-03-07 19:01:54 +05:00
2021-03-07 11:12:38 +05:00
databases = self . childWebsite . master . databases_set . all ( )
2020-03-07 19:01:54 +05:00
2021-03-07 11:12:38 +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
2021-03-07 11:12:38 +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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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 )
2021-08-30 13:17:33 +05:00
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
2020-04-16 12:06:06 +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 ( )
2020-05-20 15:48:46 +05:00
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 :
2020-04-16 12:06:06 +05:00
## 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 :
2020-04-16 12:06:06 +05:00
## 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 :
2020-04-16 12:06:06 +05:00
## 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
2020-03-17 20:51:45 +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 :
2020-03-24 17:37:41 +05:00
try :
2020-03-30 17:14:33 +05:00
if self . commands != ' NONE ' :
2020-03-24 17:37:41 +05:00
2020-03-28 19:23:57 +05:00
GitLogs ( owner = self . masterWebsite , type = ' INFO ' , message = ' Running commands after successful git commit.. ' ) . save ( )
2020-03-24 17:37:41 +05:00
2020-04-02 21:58:08 +05:00
if self . commands . find ( ' \n ' ) > - 1 :
commands = self . commands . split ( ' \n ' )
2020-03-24 17:37:41 +05:00
for command in commands :
2020-03-28 19:23:57 +05:00
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
2020-03-24 17:37:41 +05:00
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 ' ,
2020-03-24 17:37:41 +05:00
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-24 17:37:41 +05:00
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 ' ,
2020-03-24 17:37:41 +05:00
message = ' Result: %s ' % ( result ) ) . save ( )
2020-03-28 19:23:57 +05:00
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
2020-03-24 17:37:41 +05:00
message = ' Finished running commands. ' ) . save ( )
except :
pass
2020-04-16 12:06:06 +05:00
## 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 :
2020-03-17 20:51:45 +05:00
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 :
2020-04-16 12:06:06 +05:00
## 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 :
2020-03-17 20:51:45 +05:00
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 ( )
2020-05-20 15:48:46 +05:00
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
2020-05-20 15:48:46 +05:00
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 )
2020-04-16 12:06:06 +05:00
## 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 | %c n| %c d " -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 ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 :
2020-03-17 20:51:45 +05:00
dic [ ' autoPush ' ] = ' Never '
2020-03-16 19:14:39 +05:00
try :
dic [ ' emailLogs ' ] = data [ ' emailLogs ' ]
except :
dic [ ' emailLogs ' ] = False
2020-03-24 17:37:41 +05:00
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 )
2020-03-17 20:51:45 +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 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 ' )
2020-03-17 20:51:45 +05:00
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-24 17:37:41 +05:00
2020-03-30 17:14:33 +05:00
### Fetch git configurations
2020-03-24 17:37:41 +05:00
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-24 17:37:41 +05:00
2020-03-30 17:14:33 +05:00
if not os . path . exists ( gitConFile ) :
os . mkdir ( gitConFile )
2020-03-24 17:37:41 +05:00
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
2020-04-02 21:58:08 +05:00
if gitConf [ ' commands ' ] . find ( ' \n ' ) > - 1 :
commands = gitConf [ ' commands ' ] . split ( ' \n ' )
2020-03-24 17:37:41 +05:00
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 ( )
2020-03-24 17:37:41 +05:00
2020-06-22 23:21:32 +05:00
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 ( )
2020-03-24 17:37:41 +05:00
2020-06-22 23:21:32 +05:00
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 ' ,
2020-03-24 17:37:41 +05:00
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
2020-03-24 17:37:41 +05:00
2020-04-16 12:06:06 +05:00
## 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 )
2020-10-25 10:07:50 +05:00
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 )
2020-11-29 13:01:42 +05:00
command = ' chown %s : %s /home/ %s /.ssh/ ' % ( website . externalApp , website . externalApp , domain )
ProcessUtilities . executioner ( command )
2020-10-25 10:07:50 +05:00
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 )