2025-08-01 14:56:30 +05:00
#!/usr/local/CyberCP/bin/python
import html
import os
import os . path
import sys
import django
from databases . models import Databases
from plogical . DockerSites import Docker_Sites
from plogical . httpProc import httpProc
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
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
from websiteFunctions . models import Websites , ChildDomains , GitLogs , wpplugins , WPSites , WPStaging , WPSitesBackup , \
RemoteBackupConfig , RemoteBackupSchedule , RemoteBackupsites , DockerPackages , PackageAssignment , DockerSites
from plogical . virtualHostUtilities import virtualHostUtilities
import subprocess
import shlex
from plogical . installUtilities import installUtilities
from django . shortcuts import HttpResponse , render , redirect
from loginSystem . models import Administrator , ACL
from packages . models import Package
from plogical . mailUtilities import mailUtilities
from random import randint
import time
import re
import boto3
from plogical . childDomain import ChildDomainManager
from math import ceil
from plogical . alias import AliasManager
from plogical . applicationInstaller import ApplicationInstaller
from plogical import hashPassword , randomPassword
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
from . StagingSetup import StagingSetup
import validators
from django . http import JsonResponse
import ipaddress
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 ) :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " all " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
test_domain_status = 0
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
test_domain_status = 1
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
phps = PHPManager . findPHPVersions ( )
rnpss = randomPassword . generate_pass ( 10 )
Data = { ' packageList ' : packagesName , " owernList " : adminNames , ' phps ' : phps , ' Randam_String ' : rnpss . lower ( ) ,
' test_domain_data ' : test_domain_status }
proc = httpProc ( request , ' websiteFunctions/createWebsite.html ' ,
Data , ' createWebsite ' )
return proc . render ( )
def WPCreate ( self , request = None , userID = None , data = None ) :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " wp-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
if len ( packagesName ) == 0 :
packagesName = [ ' Default ' ]
FinalVersions = [ ]
userobj = Administrator . objects . get ( pk = userID )
counter = 0
try :
import requests
WPVersions = json . loads ( requests . get ( ' https://api.wordpress.org/core/version-check/1.7/ ' ) . text ) [
' offers ' ]
for versions in WPVersions :
if counter == 7 :
break
if versions [ ' current ' ] not in FinalVersions :
FinalVersions . append ( versions [ ' current ' ] )
counter = counter + 1
except :
FinalVersions = [ ' 5.6 ' , ' 5.5.3 ' , ' 5.5.2 ' ]
Plugins = wpplugins . objects . filter ( owner = userobj )
rnpss = randomPassword . generate_pass ( 10 )
##
test_domain_status = 1
Data = { ' packageList ' : packagesName , " owernList " : adminNames , ' WPVersions ' : FinalVersions ,
' Plugins ' : Plugins , ' Randam_String ' : rnpss . lower ( ) , ' test_domain_data ' : test_domain_status }
proc = httpProc ( request , ' websiteFunctions/WPCreate.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def ListWPSites ( self , request = None , userID = None , DeleteID = None ) :
import json
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
data = { }
wp_sites = ACLManager . GetALLWPObjects ( currentACL , userID )
data [ ' wp ' ] = wp_sites
try :
if DeleteID != None :
WPDelete = WPSites . objects . get ( pk = DeleteID )
if ACLManager . checkOwnership ( WPDelete . owner . domain , admin , currentACL ) == 1 :
WPDelete . delete ( )
except BaseException as msg :
pass
sites = [ ]
for site in data [ ' wp ' ] :
sites . append ( {
' id ' : site . id ,
' title ' : site . title ,
' url ' : site . FinalURL ,
' production_status ' : True
} )
context = {
" wpsite " : json . dumps ( sites ) ,
" status " : 1 ,
" total_sites " : len ( sites ) ,
" debug_info " : json . dumps ( {
" user_id " : userID ,
" is_admin " : bool ( currentACL . get ( ' admin ' , 0 ) ) ,
" wp_sites_count " : wp_sites . count ( )
} )
}
proc = httpProc ( request , ' websiteFunctions/WPsitesList.html ' , context )
return proc . render ( )
def WPHome ( self , request = None , userID = None , WPid = None , DeleteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
WPobj = WPSites . objects . get ( pk = WPid )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( WPobj . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
try :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " wp-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
rnpss = randomPassword . generate_pass ( 10 )
Data [ ' Randam_String ' ] = rnpss . lower ( )
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
Data [ ' wpsite ' ] = WPobj
Data [ ' test_domain_data ' ] = 1
try :
DeleteID = request . GET . get ( ' DeleteID ' , None )
if DeleteID != None :
wstagingDelete = WPStaging . objects . get ( pk = DeleteID , owner = WPobj )
wstagingDelete . delete ( )
except BaseException as msg :
da = str ( msg )
proc = httpProc ( request , ' websiteFunctions/WPsiteHome.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
except :
proc = httpProc ( request , ' websiteFunctions/WPsiteHome.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
def RestoreHome ( self , request = None , userID = None , BackupID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
Data [ ' backupobj ' ] = WPSitesBackup . objects . get ( pk = BackupID )
if ACLManager . CheckIPBackupObjectOwner ( currentACL , Data [ ' backupobj ' ] , admin ) == 1 :
pass
else :
return ACLManager . loadError ( )
config = json . loads ( Data [ ' backupobj ' ] . config )
Data [ ' FileName ' ] = config [ ' name ' ]
try :
Data [ ' Backuptype ' ] = config [ ' Backuptype ' ]
if Data [ ' Backuptype ' ] == ' DataBase Backup ' or Data [ ' Backuptype ' ] == ' Website Backup ' :
Data [ ' WPsites ' ] = [ WPSites . objects . get ( pk = Data [ ' backupobj ' ] . WPSiteID ) ]
else :
Data [ ' WPsites ' ] = ACLManager . GetALLWPObjects ( currentACL , userID )
except :
Data [ ' Backuptype ' ] = None
Data [ ' WPsites ' ] = ACLManager . GetALLWPObjects ( currentACL , userID )
proc = httpProc ( request , ' websiteFunctions/WPRestoreHome.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def RemoteBackupConfig ( self , request = None , userID = None , DeleteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
try :
if DeleteID != None :
BackupconfigDelete = RemoteBackupConfig . objects . get ( pk = DeleteID )
BackupconfigDelete . delete ( )
except :
pass
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
Data [ ' WPsites ' ] = ACLManager . GetALLWPObjects ( currentACL , userID )
allcon = RemoteBackupConfig . objects . all ( )
Data [ ' backupconfigs ' ] = [ ]
for i in allcon :
configr = json . loads ( i . config )
if i . configtype == " SFTP " :
Data [ ' backupconfigs ' ] . append ( {
' id ' : i . pk ,
' Type ' : i . configtype ,
' HostName ' : configr [ ' Hostname ' ] ,
' Path ' : configr [ ' Path ' ]
} )
elif i . configtype == " S3 " :
Provider = configr [ ' Provider ' ]
if Provider == " Backblaze " :
Data [ ' backupconfigs ' ] . append ( {
' id ' : i . pk ,
' Type ' : i . configtype ,
' HostName ' : Provider ,
' Path ' : configr [ ' S3keyname ' ]
} )
else :
Data [ ' backupconfigs ' ] . append ( {
' id ' : i . pk ,
' Type ' : i . configtype ,
' HostName ' : Provider ,
' Path ' : configr [ ' S3keyname ' ]
} )
proc = httpProc ( request , ' websiteFunctions/RemoteBackupConfig.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def BackupfileConfig ( self , request = None , userID = None , RemoteConfigID = None , DeleteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
Data [ ' RemoteConfigID ' ] = RemoteConfigID
RemoteConfigobj = RemoteBackupConfig . objects . get ( pk = RemoteConfigID )
try :
if DeleteID != None :
RemoteBackupConfigDelete = RemoteBackupSchedule . objects . get ( pk = DeleteID )
RemoteBackupConfigDelete . delete ( )
except :
pass
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
Data [ ' WPsites ' ] = ACLManager . GetALLWPObjects ( currentACL , userID )
allsechedule = RemoteBackupSchedule . objects . filter ( RemoteBackupConfig = RemoteConfigobj )
Data [ ' Backupschedule ' ] = [ ]
for i in allsechedule :
lastrun = i . lastrun
LastRun = time . strftime ( ' % Y- % m- %d ' , time . localtime ( float ( lastrun ) ) )
Data [ ' Backupschedule ' ] . append ( {
' id ' : i . pk ,
' Name ' : i . Name ,
' RemoteConfiguration ' : i . RemoteBackupConfig . configtype ,
' Retention ' : i . fileretention ,
' Frequency ' : i . timeintervel ,
' LastRun ' : LastRun
} )
proc = httpProc ( request , ' websiteFunctions/BackupfileConfig.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def AddRemoteBackupsite ( self , request = None , userID = None , RemoteScheduleID = None , DeleteSiteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
Data [ ' RemoteScheduleID ' ] = RemoteScheduleID
RemoteBackupScheduleobj = RemoteBackupSchedule . objects . get ( pk = RemoteScheduleID )
try :
if DeleteSiteID != None :
RemoteBackupsitesDelete = RemoteBackupsites . objects . get ( pk = DeleteSiteID )
RemoteBackupsitesDelete . delete ( )
except :
pass
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
Data [ ' WPsites ' ] = ACLManager . GetALLWPObjects ( currentACL , userID )
allRemoteBackupsites = RemoteBackupsites . objects . filter ( owner = RemoteBackupScheduleobj )
Data [ ' RemoteBackupsites ' ] = [ ]
for i in allRemoteBackupsites :
try :
wpsite = WPSites . objects . get ( pk = i . WPsites )
Data [ ' RemoteBackupsites ' ] . append ( {
' id ' : i . pk ,
' Title ' : wpsite . title ,
} )
except :
pass
proc = httpProc ( request , ' websiteFunctions/AddRemoteBackupSite.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def WordpressPricing ( self , request = None , userID = None , ) :
Data = { }
proc = httpProc ( request , ' websiteFunctions/CyberpanelPricing.html ' , Data , ' createWebsite ' )
return proc . render ( )
def RestoreBackups ( self , request = None , userID = None , DeleteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " wp-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
backobj = WPSitesBackup . objects . filter ( owner = admin ) . order_by ( ' -id ' )
# if ACLManager.CheckIPBackupObjectOwner(currentACL, backobj, admin) == 1:
# pass
# else:
# return ACLManager.loadError()
try :
if DeleteID != None :
DeleteIDobj = WPSitesBackup . objects . get ( pk = DeleteID )
if ACLManager . CheckIPBackupObjectOwner ( currentACL , DeleteIDobj , admin ) == 1 :
config = DeleteIDobj . config
conf = json . loads ( config )
FileName = conf [ ' name ' ]
command = " rm -r /home/backup/ %s .tar.gz " % FileName
ProcessUtilities . executioner ( command )
DeleteIDobj . delete ( )
except BaseException as msg :
pass
Data [ ' job ' ] = [ ]
for sub in backobj :
try :
wpsite = WPSites . objects . get ( pk = sub . WPSiteID )
web = wpsite . title
except :
web = " Website Not Found "
try :
config = sub . config
conf = json . loads ( config )
Backuptype = conf [ ' Backuptype ' ]
BackupDestination = conf [ ' BackupDestination ' ]
except :
Backuptype = " Backup type not exists "
Data [ ' job ' ] . append ( {
' id ' : sub . id ,
' title ' : web ,
' Backuptype ' : Backuptype ,
' BackupDestination ' : BackupDestination
} )
proc = httpProc ( request , ' websiteFunctions/RestoreBackups.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def AutoLogin ( self , request = None , userID = None ) :
WPid = request . GET . get ( ' id ' )
currentACL = ACLManager . loadedACL ( userID )
WPobj = WPSites . objects . get ( pk = WPid )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( WPobj . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
from managePHP . phpManager import PHPManager
php = PHPManager . getPHPString ( WPobj . owner . phpSelection )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " wp-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
## Get title
password = randomPassword . generate_pass ( 10 )
command = f ' sudo -u %s { FinalPHPPath } /usr/bin/wp user create autologin %s --role=administrator --user_pass= " %s " --path=%s --skip-plugins --skip-themes ' % (
WPobj . owner . externalApp , ' autologin@cloudpages.cloud ' , password , WPobj . path )
ProcessUtilities . executioner ( command )
command = f ' sudo -u %s { FinalPHPPath } /usr/bin/wp user update autologin --user_pass= " %s " --path=%s --skip-plugins --skip-themes ' % (
WPobj . owner . externalApp , password , WPobj . path )
ProcessUtilities . executioner ( command )
data = { }
if WPobj . FinalURL . endswith ( ' / ' ) :
FinalURL = WPobj . FinalURL [ : - 1 ]
else :
FinalURL = WPobj . FinalURL
data [ ' url ' ] = ' https:// %s ' % ( FinalURL )
data [ ' userName ' ] = ' autologin '
data [ ' password ' ] = password
proc = httpProc ( request , ' websiteFunctions/AutoLogin.html ' ,
data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def ConfigurePlugins ( self , request = None , userID = None , data = None ) :
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
currentACL = ACLManager . loadedACL ( userID )
userobj = Administrator . objects . get ( pk = userID )
Selectedplugins = wpplugins . objects . filter ( owner = userobj )
# data['Selectedplugins'] = wpplugins.objects.filter(ProjectOwner=HostingCompany)
Data = { ' Selectedplugins ' : Selectedplugins , }
proc = httpProc ( request , ' websiteFunctions/WPConfigurePlugins.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def Addnewplugin ( self , request = None , userID = None , data = None ) :
from django . shortcuts import reverse
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
phps = PHPManager . findPHPVersions ( )
Data = { ' packageList ' : packagesName , " owernList " : adminNames , ' phps ' : phps }
proc = httpProc ( request , ' websiteFunctions/WPAddNewPlugin.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
return redirect ( reverse ( ' pricing ' ) )
def SearchOnkeyupPlugin ( self , userID = None , data = None ) :
try :
if ACLManager . CheckForPremFeature ( ' wp-manager ' ) :
currentACL = ACLManager . loadedACL ( userID )
pluginname = data [ ' pluginname ' ]
# logging.CyberCPLogFileWriter.writeToFile("Plugin Name ....... %s"%pluginname)
url = " http://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[search]= %s " % str (
pluginname )
import requests
res = requests . get ( url )
r = res . json ( )
# return proc.ajax(1, 'Done', {'plugins': r})
data_ret = { ' status ' : 1 , ' plugns ' : r , }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : ' Premium feature not available. ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def AddNewpluginAjax ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
userobj = Administrator . objects . get ( pk = userID )
config = data [ ' config ' ]
Name = data [ ' Name ' ]
# pluginname = data['pluginname']
# logging.CyberCPLogFileWriter.writeToFile("config ....... %s"%config)
# logging.CyberCPLogFileWriter.writeToFile(" Name ....... %s"%Name)
addpl = wpplugins ( Name = Name , config = json . dumps ( config ) , owner = userobj )
addpl . save ( )
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' AddNewpluginAjax ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def EidtPlugin ( self , request = None , userID = None , pluginbID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
pluginobj = wpplugins . objects . get ( pk = pluginbID )
if ACLManager . CheckIPPluginObjectOwner ( currentACL , pluginobj , admin ) == 1 :
pass
else :
return ACLManager . loadError ( )
lmo = json . loads ( pluginobj . config )
Data [ ' Selectedplugins ' ] = lmo
Data [ ' pluginbID ' ] = pluginbID
Data [ ' BucketName ' ] = pluginobj . Name
proc = httpProc ( request , ' websiteFunctions/WPEidtPlugin.html ' ,
Data , ' createDatabase ' )
return proc . render ( )
def deletesPlgin ( self , userID = None , data = None , ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
userobj = Administrator . objects . get ( pk = userID )
pluginname = data [ ' pluginname ' ]
pluginbBucketID = data [ ' pluginbBucketID ' ]
# logging.CyberCPLogFileWriter.writeToFile("pluginbID ....... %s" % pluginbBucketID)
# logging.CyberCPLogFileWriter.writeToFile("pluginname ....... %s" % pluginname)
obj = wpplugins . objects . get ( pk = pluginbBucketID , owner = userobj )
if ACLManager . CheckIPPluginObjectOwner ( currentACL , obj , admin ) == 1 :
pass
else :
return ACLManager . loadError ( )
ab = [ ]
ab = json . loads ( obj . config )
ab . remove ( pluginname )
obj . config = json . dumps ( ab )
obj . save ( )
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' deletesPlgin ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def Addplugineidt ( self , userID = None , data = None , ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
userobj = Administrator . objects . get ( pk = userID )
pluginname = data [ ' pluginname ' ]
pluginbBucketID = data [ ' pluginbBucketID ' ]
# logging.CyberCPLogFileWriter.writeToFile("pluginbID ....... %s" % pluginbBucketID)
# logging.CyberCPLogFileWriter.writeToFile("pluginname ....... %s" % pluginname)
pObj = wpplugins . objects . get ( pk = pluginbBucketID , owner = userobj )
if ACLManager . CheckIPPluginObjectOwner ( currentACL , pObj , admin ) == 1 :
pass
else :
return ACLManager . loadError ( )
listofplugin = json . loads ( pObj . config )
try :
index = listofplugin . index ( pluginname )
print ( ' index..... %s ' % index )
if ( index > = 0 ) :
data_ret = { ' status ' : 0 , ' deletesPlgin ' : 0 , ' error_message ' : str ( ' Already Save in your Plugin lis ' ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except :
ab = [ ]
ab = json . loads ( pObj . config )
ab . append ( pluginname )
pObj . config = json . dumps ( ab )
pObj . save ( )
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' deletesPlgin ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def modifyWebsite ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
websitesName = ACLManager . findAllSites ( currentACL , userID )
phps = PHPManager . findPHPVersions ( )
proc = httpProc ( request , ' websiteFunctions/modifyWebsite.html ' ,
{ ' websiteList ' : websitesName , ' phps ' : phps } , ' modifyWebsite ' )
return proc . render ( )
def deleteWebsite ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
websitesName = ACLManager . findAllSites ( currentACL , userID )
proc = httpProc ( request , ' websiteFunctions/deleteWebsite.html ' ,
{ ' websiteList ' : websitesName } , ' deleteWebsite ' )
return proc . render ( )
def CreateNewDomain ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
websitesName = ACLManager . findAllSites ( currentACL , userID )
try :
admin = Administrator . objects . get ( pk = userID )
if admin . defaultSite == 0 :
websites = ACLManager . findWebsiteObjects ( currentACL , userID )
admin . defaultSite = websites [ 0 ] . id
admin . save ( )
except :
pass
try :
admin = Administrator . objects . get ( pk = userID )
defaultDomain = Websites . objects . get ( pk = admin . defaultSite ) . domain
except :
try :
admin = Administrator . objects . get ( pk = userID )
websites = ACLManager . findWebsiteObjects ( currentACL , userID )
admin . defaultSite = websites [ 0 ] . id
admin . save ( )
defaultDomain = websites [ 0 ] . domain
except :
defaultDomain = ' NONE '
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " all " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
test_domain_status = 0
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
test_domain_status = 1
rnpss = randomPassword . generate_pass ( 10 )
proc = httpProc ( request , ' websiteFunctions/createDomain.html ' ,
{ ' websiteList ' : websitesName , ' phps ' : PHPManager . findPHPVersions ( ) , ' Randam_String ' : rnpss ,
' test_domain_data ' : test_domain_status , ' defaultSite ' : defaultDomain } )
return proc . render ( )
def siteState ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
websitesName = ACLManager . findAllSites ( currentACL , userID )
proc = httpProc ( request , ' websiteFunctions/suspendWebsite.html ' ,
{ ' websiteList ' : websitesName } , ' suspendWebsite ' )
return proc . render ( )
def listWebsites ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
pagination = self . websitePagination ( currentACL , userID )
proc = httpProc ( request , ' websiteFunctions/listWebsites.html ' ,
{ " pagination " : pagination } )
return proc . render ( )
def listChildDomains ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
adminNames = ACLManager . loadAllUsers ( userID )
packagesName = ACLManager . loadPackages ( userID , currentACL )
phps = PHPManager . findPHPVersions ( )
Data = { ' packageList ' : packagesName , " owernList " : adminNames , ' phps ' : phps }
proc = httpProc ( request , ' websiteFunctions/listChildDomains.html ' ,
Data )
return proc . render ( )
def listCron ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( request . GET . get ( ' domain ' ) , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/listCron.html ' ,
{ ' domain ' : request . GET . get ( ' domain ' ) } )
return proc . render ( )
def domainAlias ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
aliasManager = AliasManager ( self . domain )
noAlias , finalAlisList = aliasManager . fetchAlisForDomains ( )
path = " /home/ " + self . domain + " /public_html "
proc = httpProc ( request , ' websiteFunctions/domainAlias.html ' , {
' masterDomain ' : self . domain ,
' aliases ' : finalAlisList ,
' path ' : path ,
' noAlias ' : noAlias
} )
return proc . render ( )
def FetchWPdata ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp core version --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , path )
version = ProcessUtilities . outputExecutioner ( command , None , True )
version = html . escape ( version )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin status litespeed-cache --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , path )
lscachee = ProcessUtilities . outputExecutioner ( command )
# Get current theme
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --status=active --field=name --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , path )
currentTheme = ProcessUtilities . outputExecutioner ( command , None , True )
currentTheme = currentTheme . strip ( )
# Get number of plugins
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --field=name --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , path )
plugins = ProcessUtilities . outputExecutioner ( command , None , True )
pluginCount = len ( [ p for p in plugins . split ( ' \n ' ) if p . strip ( ) ] )
if lscachee . find ( ' Status: Active ' ) > - 1 :
lscache = 1
else :
lscache = 0
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp config list --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , path )
stdout = ProcessUtilities . outputExecutioner ( command )
debugging = 0
for items in stdout . split ( ' \n ' ) :
if items . find ( ' WP_DEBUG true constant ' ) > - 1 :
debugging = 1
break
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp option get blog_public --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
searchindex = int ( stdoutput . splitlines ( ) [ - 1 ] )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp maintenance-mode status --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , path )
maintenanceMod = ProcessUtilities . outputExecutioner ( command )
result = maintenanceMod . splitlines ( ) [ - 1 ]
if result . find ( ' not active ' ) > - 1 :
maintenanceMode = 0
else :
maintenanceMode = 1
##### Check passwd protection
vhostName = wpsite . owner . domain
vhostPassDir = f ' /home/ { vhostName } '
path = f ' { vhostPassDir } / { WPManagerID } '
if os . path . exists ( path ) :
passwd = 1
else :
passwd = 0
#### Check WP cron
command = " sudo -u %s cat %s /wp-config.php " % ( Vhuser , wpsite . path )
stdout = ProcessUtilities . outputExecutioner ( command )
if stdout . find ( " ' DISABLE_WP_CRON ' , ' true ' " ) > - 1 :
wpcron = 1
else :
wpcron = 0
fb = {
' version ' : version . rstrip ( ' \n ' ) ,
' lscache ' : lscache ,
' debugging ' : debugging ,
' searchIndex ' : searchindex ,
' maintenanceMode ' : maintenanceMode ,
' passwordprotection ' : passwd ,
' wpcron ' : wpcron ,
' theme ' : currentTheme ,
' activePlugins ' : pluginCount ,
' phpVersion ' : wpsite . owner . phpSelection
}
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , ' ret_data ' : fb }
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 GetCurrentPlugins ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --skip-plugins --skip-themes --format=json --path= %s ' % (
Vhuser , FinalPHPPath , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
json_data = stdoutput . splitlines ( ) [ - 1 ]
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , ' plugins ' : json_data }
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 GetCurrentThemes ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --skip-plugins --skip-themes --format=json --path= %s ' % (
Vhuser , FinalPHPPath , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
json_data = stdoutput . splitlines ( ) [ - 1 ]
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , ' themes ' : json_data }
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 fetchstaging ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
from plogical . phpUtilities import phpUtilities
json_data = phpUtilities . GetStagingInJson ( wpsite . wpstaging_set . all ( ) . order_by ( ' -id ' ) )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , ' wpsites ' : json_data }
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 fetchDatabase ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
php = PHPManager . getPHPString ( wpsite . owner . phpSelection )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
command = f ' { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path= { wpsite . path } 2>/dev/null '
retStatus , stdoutput = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp , True , None , 1 )
if stdoutput . find ( ' Error: ' ) == - 1 :
DataBaseName = stdoutput . rstrip ( " \n " )
DataBaseName = html . escape ( DataBaseName )
else :
data_ret = { ' status ' : 0 , ' error_message ' : stdoutput }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
command = f ' { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config get DB_USER --skip-plugins --skip-themes --path= { wpsite . path } 2>/dev/null '
retStatus , stdoutput = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp , True , None , 1 )
if stdoutput . find ( ' Error: ' ) == - 1 :
DataBaseUser = stdoutput . rstrip ( " \n " )
DataBaseUser = html . escape ( DataBaseUser )
else :
data_ret = { ' status ' : 0 , ' error_message ' : stdoutput }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
command = f ' { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config get table_prefix --skip-plugins --skip-themes --path= { wpsite . path } 2>/dev/null '
retStatus , stdoutput = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp , True , None , 1 )
if stdoutput . find ( ' Error: ' ) == - 1 :
tableprefix = stdoutput . rstrip ( " \n " )
tableprefix = html . escape ( tableprefix )
else :
data_ret = { ' status ' : 0 , ' error_message ' : stdoutput }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , " DataBaseUser " : DataBaseUser ,
" DataBaseName " : DataBaseName , ' tableprefix ' : tableprefix }
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 SaveUpdateConfig ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
Plugins = data [ ' Plugins ' ]
Themes = data [ ' Themes ' ]
AutomaticUpdates = data [ ' AutomaticUpdates ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
php = PHPManager . getPHPString ( wpsite . owner . phpSelection )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
if AutomaticUpdates == ' Disabled ' :
command = f " { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE false --raw --allow-root --path= " + wpsite . path
result = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp )
if result . find ( ' Success: ' ) == - 1 :
raise BaseException ( result )
elif AutomaticUpdates == ' Minor and Security Updates ' :
command = f " { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE minor --allow-root --path= " + wpsite . path
result = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp )
if result . find ( ' Success: ' ) == - 1 :
raise BaseException ( result )
else :
command = f " { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config set WP_AUTO_UPDATE_CORE true --raw --allow-root --path= " + wpsite . path
result = ProcessUtilities . outputExecutioner ( command , wpsite . owner . externalApp )
if result . find ( ' Success: ' ) == - 1 :
raise BaseException ( result )
wpsite . AutoUpdates = AutomaticUpdates
wpsite . PluginUpdates = Plugins
wpsite . ThemeUpdates = Themes
wpsite . save ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 DeploytoProduction ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
statgingID = data [ ' StagingID ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
StagingObj = WPSites . objects . get ( pk = statgingID )
###
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
if ACLManager . checkOwnership ( StagingObj . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
###
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' statgingID ' ] = statgingID
extraArgs [ ' WPid ' ] = WPManagerID
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
background = ApplicationInstaller ( ' DeploytoProduction ' , 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 )
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 WPCreateBackup ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
Backuptype = data [ ' Backuptype ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' WPid ' ] = WPManagerID
extraArgs [ ' Backuptype ' ] = Backuptype
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
background = ApplicationInstaller ( ' WPCreateBackup ' , 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 )
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 RestoreWPbackupNow ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
backupid = data [ ' backupid ' ]
DesSiteID = data [ ' DesSite ' ]
# try:
#
# bwp = WPSites.objects.get(pk=int(backupid))
#
# if ACLManager.checkOwnership(bwp.owner.domain, admin, currentACL) == 1:
# pass
# else:
# return ACLManager.loadError()
#
# except:
# pass
#
# dwp = WPSites.objects.get(pk=int(DesSiteID))
# if ACLManager.checkOwnership(dwp.owner.domain, admin, currentACL) == 1:
# pass
# else:
# return ACLManager.loadError()
Domain = data [ ' Domain ' ]
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' backupid ' ] = backupid
extraArgs [ ' DesSiteID ' ] = DesSiteID
extraArgs [ ' Domain ' ] = Domain
extraArgs [ ' path ' ] = data [ ' path ' ]
extraArgs [ ' home ' ] = data [ ' home ' ]
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
background = ApplicationInstaller ( ' RestoreWPbackupNow ' , 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 )
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 SaveBackupConfig ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
ConfigType = data [ ' type ' ]
if ConfigType == ' SFTP ' :
Hname = data [ ' Hname ' ]
Uname = data [ ' Uname ' ]
Passwd = data [ ' Passwd ' ]
path = data [ ' path ' ]
config = {
" Hostname " : Hname ,
" Username " : Uname ,
" Password " : Passwd ,
" Path " : path
}
elif ConfigType == " S3 " :
Provider = data [ ' Provider ' ]
if Provider == " Backblaze " :
S3keyname = data [ ' S3keyname ' ]
SecertKey = data [ ' SecertKey ' ]
AccessKey = data [ ' AccessKey ' ]
EndUrl = data [ ' EndUrl ' ]
config = {
" Provider " : Provider ,
" S3keyname " : S3keyname ,
" SecertKey " : SecertKey ,
" AccessKey " : AccessKey ,
" EndUrl " : EndUrl
}
else :
S3keyname = data [ ' S3keyname ' ]
SecertKey = data [ ' SecertKey ' ]
AccessKey = data [ ' AccessKey ' ]
config = {
" Provider " : Provider ,
" S3keyname " : S3keyname ,
" SecertKey " : SecertKey ,
" AccessKey " : AccessKey ,
}
mkobj = RemoteBackupConfig ( owner = admin , configtype = ConfigType , config = json . dumps ( config ) )
mkobj . save ( )
time . sleep ( 1 )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 SaveBackupSchedule ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
FileRetention = data [ ' FileRetention ' ]
Backfrequency = data [ ' Backfrequency ' ]
ScheduleName = data [ ' ScheduleName ' ]
RemoteConfigID = data [ ' RemoteConfigID ' ]
BackupType = data [ ' BackupType ' ]
RemoteBackupConfigobj = RemoteBackupConfig . objects . get ( pk = RemoteConfigID )
Rconfig = json . loads ( RemoteBackupConfigobj . config )
try :
# This code is only supposed to run if backups are s3, not for SFTP
provider = Rconfig [ ' Provider ' ]
if provider == " Backblaze " :
EndURl = Rconfig [ ' EndUrl ' ]
elif provider == " Amazon " :
EndURl = " https://s3.us-east-1.amazonaws.com "
elif provider == " Wasabi " :
EndURl = " https://s3.wasabisys.com "
AccessKey = Rconfig [ ' AccessKey ' ]
SecertKey = Rconfig [ ' SecertKey ' ]
session = boto3 . session . Session ( )
client = session . client (
' s3 ' ,
endpoint_url = EndURl ,
aws_access_key_id = AccessKey ,
aws_secret_access_key = SecertKey ,
verify = False
)
############Creating Bucket
BucketName = randomPassword . generate_pass ( ) . lower ( )
try :
client . create_bucket ( Bucket = BucketName )
except BaseException as msg :
logging . CyberCPLogFileWriter . writeToFile ( " Creating Bucket Error: %s " % str ( msg ) )
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
config = {
' BackupType ' : BackupType ,
' BucketName ' : BucketName
}
except BaseException as msg :
config = { ' BackupType ' : BackupType }
pass
svobj = RemoteBackupSchedule ( RemoteBackupConfig = RemoteBackupConfigobj , Name = ScheduleName ,
timeintervel = Backfrequency , fileretention = FileRetention ,
config = json . dumps ( config ) ,
lastrun = str ( time . time ( ) ) )
svobj . save ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 AddWPsiteforRemoteBackup ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPid = data [ ' WpsiteID ' ]
RemoteScheduleID = data [ ' RemoteScheduleID ' ]
wpsiteobj = WPSites . objects . get ( pk = WPid )
WPpath = wpsiteobj . path
VHuser = wpsiteobj . owner . externalApp
PhpVersion = wpsiteobj . owner . phpSelection
php = PHPManager . getPHPString ( PhpVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
####Get DB Name
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp config get DB_NAME --skip-plugins --skip-themes --path= %s ' % (
VHuser , FinalPHPPath , WPpath )
result , stdout = ProcessUtilities . outputExecutioner ( command , None , None , None , 1 )
if stdout . find ( ' Error: ' ) > - 1 :
raise BaseException ( stdout )
else :
Finaldbname = stdout . rstrip ( " \n " )
## Get DB obj
try :
DBobj = Databases . objects . get ( dbName = Finaldbname )
except :
raise BaseException ( str ( " DataBase Not Found " ) )
RemoteScheduleIDobj = RemoteBackupSchedule . objects . get ( pk = RemoteScheduleID )
svobj = RemoteBackupsites ( owner = RemoteScheduleIDobj , WPsites = WPid , database = DBobj . pk )
svobj . save ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 UpdateRemoteschedules ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
ScheduleID = data [ ' ScheduleID ' ]
Frequency = data [ ' Frequency ' ]
FileRetention = data [ ' FileRetention ' ]
scheduleobj = RemoteBackupSchedule . objects . get ( pk = ScheduleID )
scheduleobj . timeintervel = Frequency
scheduleobj . fileretention = FileRetention
scheduleobj . save ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 ScanWordpressSite ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
allweb = Websites . objects . all ( )
childdomain = ChildDomains . objects . all ( )
for web in allweb :
webpath = " /home/ %s /public_html/ " % web . domain
command = " cat %s wp-config.php " % webpath
result = ProcessUtilities . outputExecutioner ( command , web . externalApp )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( result )
if result . find ( ' No such file or directory ' ) == - 1 :
try :
WPSites . objects . get ( path = webpath )
except :
wpobj = WPSites ( owner = web , title = web . domain , path = webpath , FinalURL = web . domain ,
AutoUpdates = " Enabled " , PluginUpdates = " Enabled " ,
ThemeUpdates = " Enabled " , )
wpobj . save ( )
for chlid in childdomain :
childPath = chlid . path . rstrip ( ' / ' )
command = " cat %s /wp-config.php " % childPath
result = ProcessUtilities . outputExecutioner ( command , chlid . master . externalApp )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( result )
if result . find ( ' No such file or directory ' ) == - 1 :
fChildPath = f ' { childPath } / '
try :
WPSites . objects . get ( path = fChildPath )
except :
wpobj = WPSites ( owner = chlid . master , title = chlid . domain , path = fChildPath , FinalURL = chlid . domain ,
AutoUpdates = " Enabled " , PluginUpdates = " Enabled " ,
ThemeUpdates = " Enabled " , )
wpobj . save ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , }
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 installwpcore ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
###fetch WP version
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp core version --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , path )
version = ProcessUtilities . outputExecutioner ( command , None , True )
version = version . rstrip ( " \n " )
###install wp core
command = f " sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp core download --force --skip-content --version= { version } --path= { path } "
output = ProcessUtilities . outputExecutioner ( command )
data_ret = { ' status ' : 1 , ' installStatus ' : 1 , ' error_message ' : ' None ' , ' result ' : output }
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 dataintegrity ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
###fetch WP version
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp core verify-checksums --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , path )
result = ProcessUtilities . outputExecutioner ( command )
data_ret = { ' status ' : 1 , ' installStatus ' : 1 , ' error_message ' : ' None ' , ' result ' : result }
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 UpdatePlugins ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
plugin = data [ ' plugin ' ]
pluginarray = data [ ' pluginarray ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' plugin ' ] = plugin
extraArgs [ ' pluginarray ' ] = pluginarray
extraArgs [ ' FinalPHPPath ' ] = FinalPHPPath
extraArgs [ ' path ' ] = path
extraArgs [ ' Vhuser ' ] = Vhuser
background = ApplicationInstaller ( ' UpdateWPPlugin ' , extraArgs )
background . start ( )
time . sleep ( 2 )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def UpdateThemes ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
Theme = data [ ' Theme ' ]
Themearray = data [ ' Themearray ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' Theme ' ] = Theme
extraArgs [ ' Themearray ' ] = Themearray
extraArgs [ ' FinalPHPPath ' ] = FinalPHPPath
extraArgs [ ' path ' ] = path
extraArgs [ ' Vhuser ' ] = Vhuser
background = ApplicationInstaller ( ' UpdateWPTheme ' , extraArgs )
background . start ( )
time . sleep ( 2 )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def DeletePlugins ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
plugin = data [ ' plugin ' ]
pluginarray = data [ ' pluginarray ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' plugin ' ] = plugin
extraArgs [ ' pluginarray ' ] = pluginarray
extraArgs [ ' FinalPHPPath ' ] = FinalPHPPath
extraArgs [ ' path ' ] = path
extraArgs [ ' Vhuser ' ] = Vhuser
background = ApplicationInstaller ( ' DeletePlugins ' , extraArgs )
background . start ( )
time . sleep ( 2 )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def DeleteThemes ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
Theme = data [ ' Theme ' ]
Themearray = data [ ' Themearray ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' Theme ' ] = Theme
extraArgs [ ' Themearray ' ] = Themearray
extraArgs [ ' FinalPHPPath ' ] = FinalPHPPath
extraArgs [ ' path ' ] = path
extraArgs [ ' Vhuser ' ] = Vhuser
background = ApplicationInstaller ( ' DeleteThemes ' , extraArgs )
background . start ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
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 ChangeStatus ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
plugin = data [ ' plugin ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin status %s --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , plugin , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
if stdoutput . find ( ' Status: Active ' ) > - 1 :
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin deactivate %s --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , plugin , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
time . sleep ( 3 )
else :
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin activate %s --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , plugin , path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
time . sleep ( 3 )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
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 ChangeStatusThemes ( self , userID = None , data = None ) :
try :
# logging.CyberCPLogFileWriter.writeToFile("Error WP ChangeStatusThemes ....... %s")
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPManagerID = data [ ' WPid ' ]
Theme = data [ ' theme ' ]
wpsite = WPSites . objects . get ( pk = WPManagerID )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
path = wpsite . path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' Theme ' ] = Theme
extraArgs [ ' FinalPHPPath ' ] = FinalPHPPath
extraArgs [ ' path ' ] = path
extraArgs [ ' Vhuser ' ] = Vhuser
background = ApplicationInstaller ( ' ChangeStatusThemes ' , extraArgs )
background . start ( )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' }
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 CreateStagingNow ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
extraArgs = { }
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' StagingDomain ' ] = data [ ' StagingDomain ' ]
extraArgs [ ' StagingName ' ] = data [ ' StagingName ' ]
extraArgs [ ' WPid ' ] = data [ ' WPid ' ]
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
wpsite = WPSites . objects . get ( pk = data [ ' WPid ' ] )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
background = ApplicationInstaller ( ' CreateStagingNow ' , 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 )
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 UpdateWPSettings ( self , userID = None , data = None ) :
# Map old setting names to new ones
setting_map = {
' PasswordProtection ' : ' password-protection ' ,
' searchIndex ' : ' search-indexing ' ,
' debugging ' : ' debugging ' ,
' maintenanceMode ' : ' maintenance-mode ' ,
' lscache ' : ' lscache ' ,
' Wpcron ' : ' wpcron ' ,
# Add more mappings as needed
}
siteId = data . get ( ' siteId ' ) or data . get ( ' WPid ' )
if not siteId :
resp = { ' status ' : 0 , ' error_message ' : ' Missing siteId or WPid ' }
return JsonResponse ( resp )
# Accept both new and old setting names
setting = data . get ( ' setting ' )
if not setting :
for old_key in setting_map :
if old_key in data :
setting = old_key
data [ ' settingValue ' ] = data [ old_key ]
break
# Map to new setting name if needed
setting = setting_map . get ( setting , setting )
value = data . get ( ' value ' ) or data . get ( ' settingValue ' )
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
wpsite = WPSites . objects . get ( pk = siteId )
if ACLManager . checkOwnership ( wpsite . owner . domain , admin , currentACL ) != 1 :
return ACLManager . loadError ( )
# Get PHP version and path
Webobj = Websites . objects . get ( pk = wpsite . owner_id )
Vhuser = Webobj . externalApp
PHPVersion = Webobj . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
# Update the appropriate setting based on the setting type
if setting == ' search-indexing ' :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp option update blog_public { value } --skip-plugins --skip-themes --path= { wpsite . path } '
elif setting == ' debugging ' :
if value :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config set WP_DEBUG true --raw --skip-plugins --skip-themes --path= { wpsite . path } '
else :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp config set WP_DEBUG false --raw --skip-plugins --skip-themes --path= { wpsite . path } '
elif setting == ' password-protection ' :
vhostName = wpsite . owner . domain
vhostPassDir = f ' /home/ { vhostName } '
path = f ' { vhostPassDir } / { siteId } '
if value :
tempPath = f ' /home/cyberpanel/ { str ( randint ( 1000 , 9999 ) ) } '
os . makedirs ( tempPath )
htpasswd = f ' { tempPath } /.htpasswd '
htaccess = f ' { tempPath } /.htaccess '
password = randomPassword . generate_pass ( 12 )
command = f " htpasswd -cb { htpasswd } admin { password } "
ProcessUtilities . executioner ( command )
htaccess_content = f """
AuthType Basic
AuthName " Restricted Access "
AuthUserFile { path } / . htpasswd
Require valid - user
"""
with open ( htaccess , ' w ' ) as f :
f . write ( htaccess_content )
command = f " mkdir -p { path } "
ProcessUtilities . executioner ( command , wpsite . owner . externalApp )
command = f " mv { htpasswd } { path } /.htpasswd "
ProcessUtilities . executioner ( command , wpsite . owner . externalApp )
command = f " mv { htaccess } { wpsite . path } /.htaccess "
ProcessUtilities . executioner ( command , wpsite . owner . externalApp )
command = f " rm -rf { tempPath } "
ProcessUtilities . executioner ( command )
else :
if os . path . exists ( path ) :
command = f " rm -rf { path } "
ProcessUtilities . executioner ( command , wpsite . owner . externalApp )
htaccess = f ' { wpsite . path } /.htaccess '
if os . path . exists ( htaccess ) :
command = f " rm -f { htaccess } "
ProcessUtilities . executioner ( command , wpsite . owner . externalApp )
resp = { ' status ' : 1 , ' error_message ' : ' None ' }
if data . get ( ' legacy_response ' ) :
import json
return HttpResponse ( json . dumps ( resp ) )
else :
return JsonResponse ( resp )
elif setting == ' maintenance-mode ' :
if value :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp maintenance-mode activate --skip-plugins --skip-themes --path= { wpsite . path } '
else :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp maintenance-mode deactivate --skip-plugins --skip-themes --path= { wpsite . path } '
elif setting == ' lscache ' :
if value :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp plugin activate litespeed-cache --skip-plugins --skip-themes --path= { wpsite . path } '
else :
command = f ' sudo -u { Vhuser } { FinalPHPPath } -d error_reporting=0 /usr/bin/wp plugin deactivate litespeed-cache --skip-plugins --skip-themes --path= { wpsite . path } '
else :
resp = { ' status ' : 0 , ' error_message ' : ' Invalid setting type ' }
if data . get ( ' legacy_response ' ) :
import json
return HttpResponse ( json . dumps ( resp ) )
else :
return JsonResponse ( resp )
result = ProcessUtilities . outputExecutioner ( command )
if result . find ( ' Error: ' ) > - 1 :
resp = { ' status ' : 0 , ' error_message ' : result }
if data . get ( ' legacy_response ' ) :
import json
return HttpResponse ( json . dumps ( resp ) )
else :
return JsonResponse ( resp )
resp = { ' status ' : 1 , ' error_message ' : ' None ' }
if data . get ( ' legacy_response ' ) :
import json
return HttpResponse ( json . dumps ( resp ) )
else :
return JsonResponse ( resp )
except BaseException as msg :
resp = { ' status ' : 0 , ' error_message ' : str ( msg ) }
if data and data . get ( ' legacy_response ' ) :
import json
return HttpResponse ( json . dumps ( resp ) )
else :
return JsonResponse ( resp )
def submitWorpressCreation ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
extraArgs = { }
extraArgs [ ' currentACL ' ] = currentACL
extraArgs [ ' adminID ' ] = admin . pk
extraArgs [ ' domainName ' ] = data [ ' domain ' ]
extraArgs [ ' WPVersion ' ] = data [ ' WPVersion ' ]
extraArgs [ ' blogTitle ' ] = data [ ' title ' ]
try :
extraArgs [ ' pluginbucket ' ] = data [ ' pluginbucket ' ]
except :
extraArgs [ ' pluginbucket ' ] = ' -1 '
extraArgs [ ' adminUser ' ] = data [ ' adminUser ' ]
extraArgs [ ' PasswordByPass ' ] = data [ ' PasswordByPass ' ]
extraArgs [ ' adminPassword ' ] = data [ ' PasswordByPass ' ]
extraArgs [ ' adminEmail ' ] = data [ ' Email ' ]
extraArgs [ ' updates ' ] = data [ ' AutomaticUpdates ' ]
extraArgs [ ' Plugins ' ] = data [ ' Plugins ' ]
extraArgs [ ' Themes ' ] = data [ ' Themes ' ]
extraArgs [ ' websiteOwner ' ] = data [ ' websiteOwner ' ]
extraArgs [ ' package ' ] = data [ ' package ' ]
extraArgs [ ' home ' ] = data [ ' home ' ]
extraArgs [ ' apacheBackend ' ] = data [ ' apacheBackend ' ]
try :
extraArgs [ ' path ' ] = data [ ' path ' ]
if extraArgs [ ' path ' ] == ' ' :
extraArgs [ ' home ' ] = ' 1 '
except :
pass
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
background = ApplicationInstaller ( ' wordpressInstallNew ' , 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 )
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 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 ' ] . lower ( )
if data [ ' domainName ' ] . find ( " cyberpanel.website " ) > - 1 :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/CreateDomain "
domain_data = {
" name " : " test-domain " ,
" IP " : ACLManager . GetServerIP ( ) ,
" domain " : data [ ' domainName ' ]
}
import requests
response = requests . post ( url , data = json . dumps ( domain_data ) )
domain_status = response . json ( ) [ ' status ' ]
if domain_status == 0 :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : response . json ( ) [ ' error_message ' ] }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
loggedUser = Administrator . objects . get ( pk = userID )
newOwner = Administrator . objects . get ( userName = websiteOwner )
if ACLManager . currentContextPermission ( currentACL , ' createWebsite ' ) == 0 :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if ACLManager . checkOwnerProtection ( currentACL , loggedUser , newOwner ) == 0 :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if currentACL [ ' admin ' ] == 0 :
if ACLManager . CheckDomainBlackList ( domain ) == 0 :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Blacklisted domain. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
if not validators . domain ( domain ) :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Invalid domain. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
if not validators . email ( adminEmail ) or adminEmail . find ( ' -- ' ) > - 1 :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Invalid email. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
try :
HA = data [ ' HA ' ]
externalApp = ' nobody '
except :
externalApp = " " . join ( re . findall ( " [a-zA-Z]+ " , domain ) ) [ : 5 ] + str ( randint ( 1000 , 9999 ) )
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 "
try :
mailDomain = str ( data [ ' mailDomain ' ] )
except :
mailDomain = " 1 "
import pwd
counter = 0
## Create Configurations
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " createVirtualHost --virtualHostName " + domain + \
" --administratorEmail " + adminEmail + " --phpVersion ' " + phpSelection + \
" ' --virtualHostUser " + externalApp + " --ssl " + str ( 1 ) + " --dkimCheck " \
+ str ( 1 ) + " --openBasedir " + str ( data [ ' openBasedir ' ] ) + \
' --websiteOwner " ' + websiteOwner + ' " --package " ' + packageName + ' " --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend + " --mailDomain %s " % (
mailDomain )
ProcessUtilities . popenExecutioner ( execPath )
time . sleep ( 2 )
data_ret = { ' status ' : 1 , ' createWebSiteStatus ' : 1 , ' error_message ' : " None " ,
' tempStatusPath ' : tempStatusPath , ' LinuxUser ' : externalApp }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def submitDomainCreation ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
try :
alias = data [ ' alias ' ]
except :
alias = 0
masterDomain = data [ ' masterDomain ' ]
domain = data [ ' domainName ' ]
if alias == 0 :
phpSelection = data [ ' phpSelection ' ]
path = data [ ' path ' ]
else :
### if master website have apache then create this sub-domain also as ols + apache
apachePath = ApacheVhost . configBasePath + masterDomain + ' .conf '
if os . path . exists ( apachePath ) :
data [ ' apacheBackend ' ] = 1
phpSelection = Websites . objects . get ( domain = masterDomain ) . phpSelection
tempStatusPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
if not validators . domain ( domain ) :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Invalid domain. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
if data [ ' domainName ' ] . find ( " cyberpanel.website " ) > - 1 :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/CreateDomain "
domain_data = {
" name " : " test-domain " ,
" IP " : ACLManager . GetServerIP ( ) ,
" domain " : data [ ' domainName ' ]
}
import requests
response = requests . post ( url , data = json . dumps ( domain_data ) )
domain_status = response . json ( ) [ ' status ' ]
if domain_status == 0 :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : response . json ( ) [ ' error_message ' ] }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
if ACLManager . checkOwnership ( masterDomain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if data [ ' path ' ] . find ( ' .. ' ) > - 1 :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if currentACL [ ' admin ' ] != 1 :
data [ ' openBasedir ' ] = 1
if alias == 0 :
if len ( path ) > 0 :
path = path . lstrip ( " / " )
path = " /home/ " + masterDomain + " / " + path
else :
path = " /home/ " + masterDomain + " / " + domain
else :
path = f ' /home/ { masterDomain } /public_html '
try :
apacheBackend = str ( data [ ' apacheBackend ' ] )
except :
apacheBackend = " 0 "
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " createDomain --masterDomain " + masterDomain + " --virtualHostName " + domain + \
" --phpVersion ' " + phpSelection + " ' --ssl " + str ( 1 ) + " --dkimCheck " + str ( 1 ) \
+ " --openBasedir " + str ( data [ ' openBasedir ' ] ) + ' --path ' + path + ' --websiteOwner ' \
+ admin . userName + ' --tempStatusPath ' + tempStatusPath + " --apache " + apacheBackend + f ' --aliasDomain { str ( alias ) } '
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 )
except BaseException as msg :
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 ' ]
try :
alias = data [ ' alias ' ]
except :
alias = 0
if ACLManager . checkOwnership ( masterDomain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' fetchStatus ' , 0 )
cdManager = ChildDomainManager ( masterDomain )
json_data = cdManager . findChildDomainsJson ( alias )
final_json = json . dumps ( { ' status ' : 1 , ' fetchStatus ' : 1 , ' error_message ' : " None " , " data " : json_data } )
return HttpResponse ( final_json )
except BaseException as msg :
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 ' ] )
except BaseException as msg :
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 )
except BaseException as msg :
dic = { ' status ' : 1 , ' listWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def searchChilds ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
websites = ACLManager . findWebsiteObjects ( currentACL , userID )
childDomains = [ ]
for web in websites :
for child in web . childdomains_set . filter ( domain__istartswith = data [ ' patternAdded ' ] ) :
childDomains . append ( child )
json_data = self . findChildsListJson ( childDomains )
final_dic = { ' status ' : 1 , ' listWebSiteStatus ' : 1 , ' error_message ' : " None " , " data " : json_data }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
except BaseException as msg :
dic = { ' status ' : 1 , ' listWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
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 )
except BaseException as msg :
dic = { ' status ' : 1 , ' listWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def fetchWebsitesList ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
pageNumber = int ( data [ ' page ' ] )
recordsToShow = int ( data [ ' recordsToShow ' ] )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' Fetch sites step 1.. ' )
endPageNumber , finalPageNumber = self . recordsPointer ( pageNumber , recordsToShow )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' Fetch sites step 2.. ' )
websites = ACLManager . findWebsiteObjects ( currentACL , userID )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' Fetch sites step 3.. ' )
pagination = self . getPagination ( len ( websites ) , recordsToShow )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' Fetch sites step 4.. ' )
json_data = self . findWebsitesListJson ( websites [ finalPageNumber : endPageNumber ] )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' Fetch sites step 5.. ' )
final_dic = { ' status ' : 1 , ' listWebSiteStatus ' : 1 , ' error_message ' : " None " , " data " : json_data ,
' pagination ' : pagination }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
except BaseException as msg :
dic = { ' status ' : 1 , ' listWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def 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 . filter ( alais = 0 ) :
if child . domain == f ' mail. { web . domain } ' :
pass
else :
childDomains . append ( child )
pagination = self . getPagination ( len ( childDomains ) , recordsToShow )
json_data = self . findChildsListJson ( childDomains [ finalPageNumber : endPageNumber ] )
final_dic = { ' status ' : 1 , ' listWebSiteStatus ' : 1 , ' error_message ' : " None " , " data " : json_data ,
' pagination ' : pagination }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
except BaseException as msg :
dic = { ' status ' : 1 , ' listWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def findWebsitesListJson ( self , websites ) :
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 "
json_data = [ ]
for website in websites :
wp_sites = [ ]
try :
wp_sites = WPSites . objects . filter ( owner = website )
wp_sites = [ {
' id ' : wp . id ,
' title ' : wp . title ,
' url ' : wp . FinalURL ,
' version ' : wp . version if hasattr ( wp , ' version ' ) else ' Unknown ' ,
' phpVersion ' : wp . phpVersion if hasattr ( wp , ' phpVersion ' ) else ' Unknown '
} for wp in wp_sites ]
except :
pass
# Calculate disk usage
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( website )
diskUsed = " %s MB " % str ( DiskUsage )
# Convert numeric state to text
state = " Active " if website . state == 1 else " Suspended "
2025-08-22 21:00:03 +05:00
# Get SSL status
ssl_status = self . getSSLStatus ( website . domain )
2025-08-01 14:56:30 +05:00
json_data . append ( {
' domain ' : website . domain ,
' adminEmail ' : website . adminEmail ,
' phpVersion ' : website . phpSelection ,
' state ' : state ,
' ipAddress ' : ipAddress ,
' package ' : website . package . packageName ,
' admin ' : website . admin . userName ,
' wp_sites ' : wp_sites ,
2025-08-22 21:00:03 +05:00
' diskUsed ' : diskUsed ,
' ssl ' : ssl_status
2025-08-01 14:56:30 +05:00
} )
return json . dumps ( json_data )
2025-08-22 21:00:03 +05:00
def getSSLStatus ( self , domain ) :
""" Get SSL status for a domain """
try :
import OpenSSL
from datetime import datetime
# Check main domain certificate
filePath = ' /etc/letsencrypt/live/ %s /fullchain.pem ' % domain
if not os . path . exists ( filePath ) :
# Check for wildcard certificate in parent domain
parts = domain . split ( ' . ' )
if len ( parts ) > 2 : # Subdomain like mail.example.com or ftp.example.com
parent_domain = ' . ' . join ( parts [ - 2 : ] )
wildcard_path = ' /etc/letsencrypt/live/ %s /fullchain.pem ' % parent_domain
if os . path . exists ( wildcard_path ) :
# Check if it's actually a wildcard cert
try :
x509 = OpenSSL . crypto . load_certificate (
OpenSSL . crypto . FILETYPE_PEM ,
open ( wildcard_path , ' r ' ) . read ( )
)
cn = None
for component in x509 . get_subject ( ) . get_components ( ) :
if component [ 0 ] . decode ( ' utf-8 ' ) == ' CN ' :
cn = component [ 1 ] . decode ( ' utf-8 ' )
break
if cn and cn . startswith ( ' *. ' ) :
filePath = wildcard_path
is_wildcard = True
else :
return { ' status ' : ' none ' , ' days ' : 0 , ' issuer ' : ' ' , ' is_wildcard ' : False }
except :
return { ' status ' : ' none ' , ' days ' : 0 , ' issuer ' : ' ' , ' is_wildcard ' : False }
else :
return { ' status ' : ' none ' , ' days ' : 0 , ' issuer ' : ' ' , ' is_wildcard ' : False }
else :
return { ' status ' : ' none ' , ' days ' : 0 , ' issuer ' : ' ' , ' is_wildcard ' : False }
else :
is_wildcard = False
# Load and analyze certificate
x509 = OpenSSL . crypto . load_certificate (
OpenSSL . crypto . FILETYPE_PEM ,
open ( filePath , ' r ' ) . read ( )
)
# Get expiration date
expireData = x509 . get_notAfter ( ) . decode ( ' ascii ' )
finalDate = datetime . strptime ( expireData , ' % Y % m %d % H % M % SZ ' )
now = datetime . now ( )
diff = finalDate - now
days = diff . days
# Get issuer
issuer_org = None
for component in x509 . get_issuer ( ) . get_components ( ) :
if component [ 0 ] . decode ( ' utf-8 ' ) == ' O ' :
issuer_org = component [ 1 ] . decode ( ' utf-8 ' )
break
if not issuer_org :
issuer_org = ' Unknown '
# Check if it's a wildcard certificate
if not is_wildcard :
cn = None
for component in x509 . get_subject ( ) . get_components ( ) :
if component [ 0 ] . decode ( ' utf-8 ' ) == ' CN ' :
cn = component [ 1 ] . decode ( ' utf-8 ' )
break
if cn and cn . startswith ( ' *. ' ) :
is_wildcard = True
2025-08-22 21:10:13 +05:00
# Check if it's self-signed by comparing issuer and subject
is_self_signed = False
issuer_cn = None
subject_cn = None
for component in x509 . get_issuer ( ) . get_components ( ) :
if component [ 0 ] . decode ( ' utf-8 ' ) == ' CN ' :
issuer_cn = component [ 1 ] . decode ( ' utf-8 ' )
break
for component in x509 . get_subject ( ) . get_components ( ) :
if component [ 0 ] . decode ( ' utf-8 ' ) == ' CN ' :
subject_cn = component [ 1 ] . decode ( ' utf-8 ' )
break
# Certificate is self-signed if issuer CN equals subject CN
if issuer_cn and subject_cn and issuer_cn == subject_cn :
is_self_signed = True
# Also check if issuer equals subject entirely
if x509 . get_issuer ( ) == x509 . get_subject ( ) :
is_self_signed = True
2025-08-22 21:00:03 +05:00
# Determine status
2025-08-22 21:10:13 +05:00
if is_self_signed :
2025-08-22 21:00:03 +05:00
status = ' self-signed '
elif days < 0 :
status = ' expired '
elif days < = 7 :
status = ' expiring '
elif days < = 30 :
status = ' warning '
else :
status = ' valid '
return {
' status ' : status ,
' days ' : days ,
' issuer ' : issuer_org ,
' is_wildcard ' : is_wildcard
}
except Exception as e :
return { ' status ' : ' none ' , ' days ' : 0 , ' issuer ' : ' ' , ' is_wildcard ' : False }
2025-08-01 14:56:30 +05:00
def findDockersitesListJson ( self , Dockersite ) :
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 "
from plogical . phpUtilities import phpUtilities
for items in Dockersite :
website = Websites . objects . get ( pk = items . admin . pk )
vhFile = f ' /usr/local/lsws/conf/vhosts/ { website . domain } /vhost.conf '
try :
PHPVersionActual = phpUtilities . WrapGetPHPVersionFromFileToGetVersionWithPHP ( website )
except :
PHPVersionActual = ' PHP 8.1 '
if items . state == 0 :
state = " Suspended "
else :
state = " Active "
dpkg = PackageAssignment . objects . get ( user = website . admin )
dic = { ' id ' : items . pk , ' domain ' : website . domain , ' adminEmail ' : website . adminEmail , ' ipAddress ' : ipAddress ,
' admin ' : website . admin . userName , ' package ' : dpkg . package . Name , ' state ' : state ,
' CPU ' : int ( items . CPUsMySQL ) + int ( items . CPUsSite ) , ' Ram ' : int ( items . MemorySite ) + int ( items . MemoryMySQL ) , ' phpVersion ' : PHPVersionActual }
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 findChildsListJson ( self , childs ) :
json_data = " [ "
checker = 0
try :
ipFile = " /etc/cyberpanel/machineIP "
f = open ( ipFile )
ipData = f . read ( )
ipAddress = ipData . split ( ' \n ' , 1 ) [ 0 ]
except BaseException as msg :
logging . CyberCPLogFileWriter . writeToFile ( " Failed to read machine IP, error: " + str ( msg ) )
ipAddress = " 192.168.100.1 "
for items in childs :
dic = { ' domain ' : items . domain , ' masterDomain ' : items . master . domain , ' adminEmail ' : items . master . adminEmail ,
' ipAddress ' : ipAddress ,
' admin ' : items . master . admin . userName , ' package ' : items . master . package . packageName ,
' path ' : items . path }
if checker == 0 :
json_data = json_data + json . dumps ( dic )
checker = 1
else :
json_data = json_data + ' , ' + json . dumps ( dic )
json_data = json_data + ' ] '
return json_data
def recordsPointer ( self , page , toShow ) :
finalPageNumber = ( ( page * toShow ) ) - toShow
endPageNumber = finalPageNumber + toShow
return endPageNumber , finalPageNumber
def getPagination ( self , records , toShow ) :
pages = float ( records ) / float ( toShow )
pagination = [ ]
counter = 1
if pages < = 1.0 :
pages = 1
pagination . append ( counter )
else :
pages = ceil ( pages )
finalPages = int ( pages ) + 1
for i in range ( 1 , finalPages ) :
pagination . append ( counter )
counter = counter + 1
return pagination
def submitWebsiteDeletion ( self , userID = None , data = None ) :
try :
if data [ ' websiteName ' ] . find ( " cyberpanel.website " ) > - 1 :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/DeleteDomain "
domain_data = {
" name " : " test-domain " ,
" IP " : ACLManager . GetServerIP ( ) ,
" domain " : data [ ' websiteName ' ]
}
import requests
response = requests . post ( url , data = json . dumps ( domain_data ) )
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
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + websiteName
ProcessUtilities . popenExecutioner ( execPath )
### delete site from dgdrive backups
try :
from websiteFunctions . models import GDriveSites
GDriveSites . objects . filter ( domain = websiteName ) . delete ( )
except :
pass
data_ret = { ' status ' : 1 , ' websiteDeleteStatus ' : 1 , ' error_message ' : " None " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
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 :
if data [ ' websiteName ' ] . find ( " cyberpanel.website " ) > - 1 :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/DeleteDomain "
domain_data = {
" name " : " test-domain " ,
" IP " : ACLManager . GetServerIP ( ) ,
" domain " : data [ ' websiteName ' ]
}
import requests
response = requests . post ( url , data = json . dumps ( domain_data ) )
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
websiteName = data [ ' websiteName ' ]
try :
DeleteDocRoot = int ( data [ ' DeleteDocRoot ' ] )
except :
DeleteDocRoot = 0
if ACLManager . checkOwnership ( websiteName , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' websiteDeleteStatus ' , 0 )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " deleteDomain --virtualHostName " + websiteName + ' --DeleteDocRoot %s ' % (
str ( DeleteDocRoot ) )
ProcessUtilities . outputExecutioner ( execPath )
data_ret = { ' status ' : 1 , ' websiteDeleteStatus ' : 1 , ' error_message ' : " None " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' websiteDeleteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def submitWebsiteStatus ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
if ACLManager . currentContextPermission ( currentACL , ' suspendWebsite ' ) == 0 :
return ACLManager . loadErrorJson ( ' websiteStatus ' , 0 )
websiteName = data [ ' websiteName ' ]
state = data [ ' state ' ]
website = Websites . objects . get ( domain = websiteName )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( websiteName , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' websiteStatus ' , 0 )
if state == " Suspend " :
confPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + websiteName
vhostConfPath = confPath + " /vhost.conf "
# Ensure suspension page exists and has proper permissions
suspensionPagePath = " /usr/local/CyberCP/websiteFunctions/suspension.html "
if not os . path . exists ( suspensionPagePath ) :
# Create default suspension page if it doesn't exist
defaultSuspensionHTML = """ <!DOCTYPE html>
< html lang = " en " >
< head >
< meta charset = " UTF-8 " >
< meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Website Suspended < / title >
< style >
body {
font - family : Arial , sans - serif ;
background - color : #f5f5f5;
margin : 0 ;
padding : 0 ;
display : flex ;
justify - content : center ;
align - items : center ;
height : 100 vh ;
}
. container {
text - align : center ;
background - color : white ;
padding : 40 px ;
border - radius : 8 px ;
box - shadow : 0 2 px 10 px rgba ( 0 , 0 , 0 , 0.1 ) ;
max - width : 500 px ;
}
h1 {
color : #e74c3c;
margin - bottom : 20 px ;
}
p {
color : #555;
line - height : 1.6 ;
margin - bottom : 20 px ;
}
. contact {
color : #777;
font - size : 14 px ;
}
< / style >
< / head >
< body >
< div class = " container " >
< h1 > Website Suspended < / h1 >
< p > This website has been temporarily suspended . This could be due to various reasons including billing issues , policy violations , or administrative actions . < / p >
< p > If you are the website owner , please contact your hosting provider for more information about why your account was suspended and how to restore service . < / p >
< p class = " contact " > For support , please contact your system administrator . < / p >
< / div >
< / body >
< / html > """
try :
# Create directory if it doesn't exist
dirPath = os . path . dirname ( suspensionPagePath )
if not os . path . exists ( dirPath ) :
command = f " mkdir -p { dirPath } "
ProcessUtilities . executioner ( command )
# Write the HTML content to a temporary file in /home/cyberpanel
tempFile = " /home/cyberpanel/suspension_temp.html "
# Create the file using normal Python file operations
with open ( tempFile , ' w ' ) as f :
f . write ( defaultSuspensionHTML )
# Use ProcessUtilities to move the file to the final location
command = f " mv { tempFile } { suspensionPagePath } "
ProcessUtilities . executioner ( command )
except :
pass
# Set proper permissions for suspension page
try :
command = f " chown lsadm:lsadm { suspensionPagePath } "
ProcessUtilities . executioner ( command )
command = f " chmod 644 { suspensionPagePath } "
ProcessUtilities . executioner ( command )
except :
pass
# Create suspension configuration with end marker
suspensionConf = """ # Website Suspension Configuration
context / {
location $ DOC_ROOT /
allowBrowse 1
rewrite {
enable 1
autoLoadHtaccess 0
rules << < END_rules
RewriteEngine On
RewriteCond % { REQUEST_URI } ! ^ / cyberpanel_suspension_page \. html $
RewriteRule ^ ( . * ) $ / cyberpanel_suspension_page . html [ L ]
END_rules
}
addDefaultCharset off
}
context / cyberpanel_suspension_page . html {
location / usr / local / CyberCP / websiteFunctions / suspension . html
accessible 1
extraHeaders X - Frame - Options : DENY
allowBrowse 1
}
# End Website Suspension Configuration
"""
try :
# Read current vhost configuration
with open ( vhostConfPath , ' r ' ) as f :
vhostContent = f . read ( )
if " # Website Suspension Configuration " not in vhostContent :
# Check if there's an existing rewrite block at the root level
# If so, we need to comment it out to avoid conflicts
# Pattern to find root-level rewrite block
rewrite_pattern = r ' ^(rewrite \ s* \ { [^}]* \ }) '
# Comment out existing root-level rewrite block if found
if re . search ( rewrite_pattern , vhostContent , re . MULTILINE | re . DOTALL ) :
vhostContent = re . sub ( rewrite_pattern ,
lambda m : ' # Commented out during suspension \n # ' + m . group ( 0 ) . replace ( ' \n ' , ' \n # ' ) ,
vhostContent ,
flags = re . MULTILINE | re . DOTALL )
# Add suspension configuration at the beginning
modifiedContent = suspensionConf + " \n " + vhostContent
# Write directly to vhost file
with open ( vhostConfPath , ' w ' ) as f :
f . write ( modifiedContent )
# Set proper ownership
command = f " chown lsadm:lsadm { vhostConfPath } "
ProcessUtilities . executioner ( command )
except IOError as e :
# If direct file access fails, fall back to command-based approach
command = f " cat { vhostConfPath } "
vhostContent = ProcessUtilities . outputExecutioner ( command )
if vhostContent and " # Website Suspension Configuration " not in vhostContent :
# Check if there's an existing rewrite block at the root level
# If so, we need to comment it out to avoid conflicts
# Pattern to find root-level rewrite block
rewrite_pattern = r ' ^(rewrite \ s* \ { [^}]* \ }) '
# Comment out existing root-level rewrite block if found
if re . search ( rewrite_pattern , vhostContent , re . MULTILINE | re . DOTALL ) :
vhostContent = re . sub ( rewrite_pattern ,
lambda m : ' # Commented out during suspension \n # ' + m . group ( 0 ) . replace ( ' \n ' , ' \n # ' ) ,
vhostContent ,
flags = re . MULTILINE | re . DOTALL )
modifiedContent = suspensionConf + " \n " + vhostContent
# Use temp file in /tmp
import tempfile
with tempfile . NamedTemporaryFile ( mode = ' w ' , delete = False , prefix = ' cyberpanel_ ' ) as tmpfile :
tmpfile . write ( modifiedContent )
tempFile = tmpfile . name
# Copy to vhost configuration
command = f " cp { tempFile } { vhostConfPath } "
ProcessUtilities . executioner ( command )
# Set proper ownership
command = f " chown lsadm:lsadm { vhostConfPath } "
ProcessUtilities . executioner ( command )
# Remove temporary file
try :
os . remove ( tempFile )
except :
pass
# Apply same suspension configuration to child domains
childDomains = website . childdomains_set . all ( )
for items in childDomains :
childConfPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + items . domain
childVhostConfPath = childConfPath + " /vhost.conf "
try :
# Try direct file access first
try :
with open ( childVhostConfPath , ' r ' ) as f :
childVhostContent = f . read ( )
if " # Website Suspension Configuration " not in childVhostContent :
childModifiedContent = suspensionConf + " \n " + childVhostContent
with open ( childVhostConfPath , ' w ' ) as f :
f . write ( childModifiedContent )
command = f " chown lsadm:lsadm { childVhostConfPath } "
ProcessUtilities . executioner ( command )
except IOError :
# Fall back to command-based approach
command = f " cat { childVhostConfPath } "
childVhostContent = ProcessUtilities . outputExecutioner ( command )
if childVhostContent and " # Website Suspension Configuration " not in childVhostContent :
childModifiedContent = suspensionConf + " \n " + childVhostContent
import tempfile
with tempfile . NamedTemporaryFile ( mode = ' w ' , delete = False , prefix = ' cyberpanel_child_ ' ) as tmpfile :
tmpfile . write ( childModifiedContent )
childTempFile = tmpfile . name
command = f " cp { childTempFile } { childVhostConfPath } "
ProcessUtilities . executioner ( command )
command = f " chown lsadm:lsadm { childVhostConfPath } "
ProcessUtilities . executioner ( command )
try :
os . remove ( childTempFile )
except :
pass
except Exception as e :
CyberCPLogFileWriter . writeToFile ( f " Error suspending child domain { items . domain } : { str ( e ) } " )
installUtilities . reStartLiteSpeedSocket ( )
website . state = 0
else :
confPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + websiteName
vhostConfPath = confPath + " /vhost.conf "
try :
# Try direct file access first
with open ( vhostConfPath , ' r ' ) as f :
vhostContent = f . read ( )
if " # Website Suspension Configuration " in vhostContent :
# Use regex to remove the suspension configuration block
pattern = r ' # Website Suspension Configuration.*?# End Website Suspension Configuration \ n '
modifiedContent = re . sub ( pattern , ' ' , vhostContent , flags = re . DOTALL )
# Restore any rewrite blocks that were commented out during suspension
commented_rewrite_pattern = r ' # Commented out during suspension \ n((?:#[^ \ n]* \ n)+) '
def restore_commented_block ( match ) :
commented_block = match . group ( 1 )
# Remove the leading # from each line
restored_block = ' \n ' . join ( line [ 1 : ] if line . startswith ( ' # ' ) else line
for line in commented_block . splitlines ( ) )
return restored_block
if re . search ( commented_rewrite_pattern , modifiedContent ) :
modifiedContent = re . sub ( commented_rewrite_pattern ,
restore_commented_block ,
modifiedContent )
with open ( vhostConfPath , ' w ' ) as f :
f . write ( modifiedContent )
command = f " chown lsadm:lsadm { vhostConfPath } "
ProcessUtilities . executioner ( command )
except IOError :
# Fall back to command-based approach
command = f " cat { vhostConfPath } "
vhostContent = ProcessUtilities . outputExecutioner ( command )
if vhostContent and " # Website Suspension Configuration " in vhostContent :
pattern = r ' # Website Suspension Configuration.*?# End Website Suspension Configuration \ n '
modifiedContent = re . sub ( pattern , ' ' , vhostContent , flags = re . DOTALL )
# Restore any rewrite blocks that were commented out during suspension
commented_rewrite_pattern = r ' # Commented out during suspension \ n((?:#[^ \ n]* \ n)+) '
def restore_commented_block ( match ) :
commented_block = match . group ( 1 )
# Remove the leading # from each line
restored_block = ' \n ' . join ( line [ 1 : ] if line . startswith ( ' # ' ) else line
for line in commented_block . splitlines ( ) )
return restored_block
if re . search ( commented_rewrite_pattern , modifiedContent ) :
modifiedContent = re . sub ( commented_rewrite_pattern ,
restore_commented_block ,
modifiedContent )
import tempfile
with tempfile . NamedTemporaryFile ( mode = ' w ' , delete = False , prefix = ' cyberpanel_ ' ) as tmpfile :
tmpfile . write ( modifiedContent )
tempFile = tmpfile . name
command = f " cp { tempFile } { vhostConfPath } "
ProcessUtilities . executioner ( command )
command = f " chown lsadm:lsadm { vhostConfPath } "
ProcessUtilities . executioner ( command )
try :
os . remove ( tempFile )
except :
pass
# Remove suspension configuration from child domains
childDomains = website . childdomains_set . all ( )
for items in childDomains :
childConfPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + items . domain
childVhostConfPath = childConfPath + " /vhost.conf "
try :
# Try direct file access first
try :
with open ( childVhostConfPath , ' r ' ) as f :
childVhostContent = f . read ( )
if " # Website Suspension Configuration " in childVhostContent :
pattern = r ' # Website Suspension Configuration.*?# End Website Suspension Configuration \ n '
childModifiedContent = re . sub ( pattern , ' ' , childVhostContent , flags = re . DOTALL )
with open ( childVhostConfPath , ' w ' ) as f :
f . write ( childModifiedContent )
command = f " chown lsadm:lsadm { childVhostConfPath } "
ProcessUtilities . executioner ( command )
except IOError :
# Fall back to command-based approach
command = f " cat { childVhostConfPath } "
childVhostContent = ProcessUtilities . outputExecutioner ( command )
if childVhostContent and " # Website Suspension Configuration " in childVhostContent :
pattern = r ' # Website Suspension Configuration.*?# End Website Suspension Configuration \ n '
childModifiedContent = re . sub ( pattern , ' ' , childVhostContent , flags = re . DOTALL )
import tempfile
with tempfile . NamedTemporaryFile ( mode = ' w ' , delete = False , prefix = ' cyberpanel_child_ ' ) as tmpfile :
tmpfile . write ( childModifiedContent )
childTempFile = tmpfile . name
command = f " cp { childTempFile } { childVhostConfPath } "
ProcessUtilities . executioner ( command )
command = f " chown lsadm:lsadm { childVhostConfPath } "
ProcessUtilities . executioner ( command )
try :
os . remove ( childTempFile )
except :
pass
except Exception as e :
CyberCPLogFileWriter . writeToFile ( f " Error unsuspending child domain { items . domain } : { str ( e ) } " )
installUtilities . reStartLiteSpeedSocket ( )
website . state = 1
website . save ( )
data_ret = { ' websiteStatus ' : 1 , ' error_message ' : " None " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except Exception as msg :
CyberCPLogFileWriter . writeToFile ( f " Error in submitWebsiteStatus: { str ( msg ) } " )
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 )
except BaseException as msg :
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 )
except BaseException as msg :
dic = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def saveWebsiteChanges ( self , userID = None , data = None ) :
try :
domain = data [ ' domain ' ]
package = data [ ' packForWeb ' ]
email = data [ ' email ' ]
phpVersion = data [ ' phpVersion ' ]
newUser = data [ ' admin ' ]
currentACL = ACLManager . loadedACL ( userID )
if ACLManager . currentContextPermission ( currentACL , ' modifyWebsite ' ) == 0 :
return ACLManager . loadErrorJson ( ' saveStatus ' , 0 )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' websiteDeleteStatus ' , 0 )
newOwner = Administrator . objects . get ( userName = newUser )
if ACLManager . checkUserOwnerShip ( currentACL , admin , newOwner ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' websiteDeleteStatus ' , 0 )
confPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + domain
completePathToConfigFile = confPath + " /vhost.conf "
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
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 ( )
## Update disk quota when package changes - Fix for GitHub issue #1442
if webpack . enforceDiskLimits :
spaceString = f ' { webpack . diskSpace } M { webpack . diskSpace } M '
command = f ' setquota -u { modifyWeb . externalApp } { spaceString } 0 0 / '
ProcessUtilities . executioner ( command )
## Fix https://github.com/usmannasir/cyberpanel/issues/998
# from plogical.IncScheduler import IncScheduler
# isPU = IncScheduler('CalculateAndUpdateDiskUsage', {})
# isPU.start()
command = ' /usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/IncScheduler.py UpdateDiskUsageForce '
ProcessUtilities . outputExecutioner ( command )
##
data_ret = { ' status ' : 1 , ' saveStatus ' : 1 , ' error_message ' : " None " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
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 = { }
from plogical . processUtilities import ProcessUtilities
marketingStatus = emACL . checkIfEMEnabled ( admin . userName )
Data [ ' marketingStatus ' ] = marketingStatus
Data [ ' ftpTotal ' ] = website . package . ftpAccounts
Data [ ' ftpUsed ' ] = website . users_set . all ( ) . count ( )
Data [ ' databasesUsed ' ] = website . databases_set . all ( ) . count ( )
Data [ ' databasesTotal ' ] = website . package . dataBases
Data [ ' domain ' ] = self . domain
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( website )
## bw usage calculations
Data [ ' bwInMBTotal ' ] = website . package . bandwidth
Data [ ' bwInMB ' ] = bwInMB
Data [ ' bwUsage ' ] = bwUsage
if DiskUsagePercentage > 100 :
DiskUsagePercentage = 100
Data [ ' diskUsage ' ] = DiskUsagePercentage
Data [ ' diskInMB ' ] = DiskUsage
Data [ ' diskInMBTotal ' ] = website . package . diskSpace
Data [ ' phps ' ] = PHPManager . findPHPVersions ( )
import os
servicePath = ' /home/cyberpanel/postfix '
if os . path . exists ( servicePath ) :
Data [ ' email ' ] = 1
else :
Data [ ' email ' ] = 0
## 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 )
Data [ ' authority ' ] = x509 . get_issuer ( ) . get_components ( ) [ 1 ] [ 1 ] . decode ( ' utf-8 ' )
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 ' ] )
except BaseException as msg :
Data [ ' viewSSL ' ] = 0
logging . CyberCPLogFileWriter . writeToFile ( str ( msg ) )
servicePath = ' /home/cyberpanel/pureftpd '
if os . path . exists ( servicePath ) :
Data [ ' ftp ' ] = 1
else :
Data [ ' ftp ' ] = 0
# Add-on check logic (copied from sshAccess)
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
addon_data = {
" name " : " all " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
import json
try :
response = requests . post ( url , data = json . dumps ( addon_data ) )
Status = response . json ( ) . get ( ' status ' , 0 )
except Exception :
Status = 0
Data [ ' has_addons ' ] = bool ( ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent )
# SSL check (self-signed logic)
cert_path = ' /etc/letsencrypt/live/ %s /fullchain.pem ' % ( self . domain )
is_selfsigned = False
ssl_issue_link = ' /manageSSL/sslForHostName '
try :
import OpenSSL
with open ( cert_path , ' r ' ) as f :
pem_data = f . read ( )
cert = OpenSSL . crypto . load_certificate ( OpenSSL . crypto . FILETYPE_PEM , pem_data )
# Only check the first cert in the PEM
issuer_org = None
for k , v in cert . get_issuer ( ) . get_components ( ) :
if k . decode ( ) == ' O ' :
issuer_org = v . decode ( )
break
if issuer_org == ' Denial ' :
is_selfsigned = True
else :
is_selfsigned = False
except Exception :
is_selfsigned = True # If cert missing or unreadable, treat as self-signed
Data [ ' is_selfsigned_ssl ' ] = bool ( is_selfsigned )
Data [ ' ssl_issue_link ' ] = ssl_issue_link
# Detect if accessed via IP
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
accessed_via_ip = False
try :
host = request . get_host ( ) . split ( ' : ' ) [ 0 ] # Remove port if present
try :
ipaddress . ip_address ( host )
accessed_via_ip = True
except ValueError :
accessed_via_ip = False
except Exception as e :
accessed_via_ip = False
CyberCPLogFileWriter . writeToFile ( f " Error detecting accessed_via_ip: { str ( e ) } " )
Data [ ' accessed_via_ip ' ] = bool ( accessed_via_ip )
#### update jwt secret if needed
import secrets
fastapi_file = ' /usr/local/CyberCP/fastapi_ssh_server.py '
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
try :
content = ProcessUtilities . outputExecutioner ( f ' cat { fastapi_file } ' )
if ' REPLACE_ME_WITH_INSTALLER ' in content :
new_secret = secrets . token_urlsafe ( 32 )
sed_cmd = f " sed -i ' s|JWT_SECRET = \" REPLACE_ME_WITH_INSTALLER \" |JWT_SECRET = \" { new_secret } \" | ' ' { fastapi_file } ' "
ProcessUtilities . outputExecutioner ( sed_cmd )
command = ' systemctl restart fastapi_ssh_server '
ProcessUtilities . outputExecutioner ( command )
except Exception :
CyberCPLogFileWriter . writeLog ( f " Failed to update JWT secret: { e } " )
pass
#####
#####
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
# Ensure FastAPI SSH server systemd service file is in place
try :
service_path = ' /etc/systemd/system/fastapi_ssh_server.service '
local_service_path = ' fastapi_ssh_server.service '
check_service = ProcessUtilities . outputExecutioner ( f ' test -f { service_path } && echo exists || echo missing ' )
if ' missing ' in check_service :
ProcessUtilities . outputExecutioner ( f ' cp /usr/local/CyberCP/fastapi_ssh_server.service { service_path } ' )
ProcessUtilities . outputExecutioner ( ' systemctl daemon-reload ' )
except Exception as e :
CyberCPLogFileWriter . writeLog ( f " Failed to copy or reload fastapi_ssh_server.service: { e } " )
#####
# Ensure FastAPI SSH server is running using ProcessUtilities
try :
ProcessUtilities . outputExecutioner ( ' systemctl is-active --quiet fastapi_ssh_server ' )
ProcessUtilities . outputExecutioner ( ' systemctl enable --now fastapi_ssh_server ' )
ProcessUtilities . outputExecutioner ( ' systemctl start fastapi_ssh_server ' )
csfPath = ' /etc/csf '
sshPort = ' 8888 '
if os . path . exists ( csfPath ) :
dataIn = { ' protocol ' : ' TCP_IN ' , ' ports ' : sshPort }
# self.modifyPorts is a method in the firewallManager.py file so how can we call it here?
# we need to call the method from the firewallManager.py file
from firewall . firewallManager import FirewallManager
firewallManager = FirewallManager ( )
firewallManager . modifyPorts ( dataIn )
dataIn = { ' protocol ' : ' TCP_OUT ' , ' ports ' : sshPort }
firewallManager . modifyPorts ( dataIn )
else :
from plogical . firewallUtilities import FirewallUtilities
from firewall . models import FirewallRules
try :
updateFW = FirewallRules . objects . get ( name = " WebTerminalPort " )
FirewallUtilities . deleteRule ( " tcp " , updateFW . port , " 0.0.0.0/0 " )
updateFW . port = sshPort
updateFW . save ( )
FirewallUtilities . addRule ( ' tcp ' , sshPort , " 0.0.0.0/0 " )
except :
try :
newFireWallRule = FirewallRules ( name = " WebTerminalPort " , port = sshPort , proto = " tcp " )
newFireWallRule . save ( )
FirewallUtilities . addRule ( ' tcp ' , sshPort , " 0.0.0.0/0 " )
except BaseException as msg :
CyberCPLogFileWriter . writeToFile ( str ( msg ) )
except Exception as e :
CyberCPLogFileWriter . writeLog ( f " Failed to ensure fastapi_ssh_server is running: { e } " )
proc = httpProc ( request , ' websiteFunctions/website.html ' , Data )
return proc . render ( )
else :
proc = httpProc ( request , ' websiteFunctions/website.html ' ,
{ " error " : 1 , " domain " : " This domain does not exists. " } )
return proc . render ( )
def launchChild ( self , request = None , userID = None , data = None ) :
if ChildDomains . objects . filter ( domain = self . childDomain ) . exists ( ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
website = Websites . objects . get ( domain = self . domain )
Data = { }
Data [ ' ftpTotal ' ] = website . package . ftpAccounts
Data [ ' ftpUsed ' ] = website . users_set . all ( ) . count ( )
Data [ ' databasesUsed ' ] = website . databases_set . all ( ) . count ( )
Data [ ' databasesTotal ' ] = website . package . dataBases
Data [ ' domain ' ] = self . domain
Data [ ' childDomain ' ] = self . childDomain
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( website )
## bw usage calculations
Data [ ' bwInMBTotal ' ] = website . package . bandwidth
Data [ ' bwInMB ' ] = bwInMB
Data [ ' bwUsage ' ] = bwUsage
if DiskUsagePercentage > 100 :
DiskUsagePercentage = 100
Data [ ' diskUsage ' ] = DiskUsagePercentage
Data [ ' diskInMB ' ] = DiskUsage
Data [ ' diskInMBTotal ' ] = website . package . diskSpace
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
## Getting SSL Information
try :
import OpenSSL
from datetime import datetime
filePath = ' /etc/letsencrypt/live/ %s /fullchain.pem ' % ( self . childDomain )
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 )
Data [ ' authority ' ] = x509 . get_issuer ( ) . get_components ( ) [ 1 ] [ 1 ] . decode ( ' utf-8 ' )
if Data [ ' authority ' ] == ' Denial ' :
Data [ ' authority ' ] = ' %s has SELF-SIGNED SSL. ' % ( self . childDomain )
else :
Data [ ' authority ' ] = ' %s has SSL from %s . ' % ( self . childDomain , Data [ ' authority ' ] )
except BaseException as msg :
Data [ ' viewSSL ' ] = 0
logging . CyberCPLogFileWriter . writeToFile ( str ( msg ) )
proc = httpProc ( request , ' websiteFunctions/launchChild.html ' , Data )
return proc . render ( )
else :
proc = httpProc ( request , ' websiteFunctions/launchChild.html ' ,
{ " error " : 1 , " domain " : " This child domain does not exists " } )
return proc . render ( )
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 "
command = ' ls -la %s ' % fileName
result = ProcessUtilities . outputExecutioner ( command )
if result . find ( ' -> ' ) > - 1 :
final_json = json . dumps (
{ ' status ' : 0 , ' logstatus ' : 0 ,
' error_message ' : " Symlink attack. " } )
return HttpResponse ( final_json )
## get Logs
website = Websites . objects . get ( domain = self . domain )
output = virtualHostUtilities . getAccessLogs ( fileName , page , website . externalApp )
if output . find ( " 1,None " ) > - 1 :
final_json = json . dumps (
{ ' status ' : 0 , ' logstatus ' : 0 ,
' error_message ' : " Not able to fetch logs, see CyberPanel main log file, Error: %s " % ( output ) } )
return HttpResponse ( final_json )
## get log ends here.
data = output . split ( " \n " )
json_data = " [ "
checker = 0
for items in reversed ( data ) :
if len ( items ) > 10 :
logData = items . split ( " " )
domain = logData [ 5 ] . strip ( ' " ' )
ipAddress = logData [ 0 ] . strip ( ' " ' )
time = ( logData [ 3 ] ) . strip ( " [ " ) . strip ( " ] " )
resource = logData [ 6 ] . strip ( ' " ' )
size = logData [ 9 ] . replace ( ' " ' , ' ' )
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 "
command = ' ls -la %s ' % fileName
result = ProcessUtilities . outputExecutioner ( command )
if result . find ( ' -> ' ) > - 1 :
final_json = json . dumps (
{ ' status ' : 0 , ' logstatus ' : 0 ,
' error_message ' : " Symlink attack. " } )
return HttpResponse ( final_json )
## get Logs
website = Websites . objects . get ( domain = self . domain )
output = virtualHostUtilities . getErrorLogs ( fileName , page , website . externalApp )
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 )
command = ' cat %s ' % ( ' /usr/local/lsws/conf/dvhost_redis.conf ' )
if ProcessUtilities . outputExecutioner ( command ) . find ( ' 127.0.0.1 ' ) == - 1 :
filePath = installUtilities . Server_root_path + " /conf/vhosts/ " + self . domain + " /vhost.conf "
command = ' cat ' + filePath
configData = ProcessUtilities . outputExecutioner ( command , ' lsadm ' )
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 )
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 ' ]
if len ( configData ) == 0 :
status = { " configstatus " : 0 , ' error_message ' : ' Error: you are trying to save empty vhost file, your website will stop working. ' }
final_json = json . dumps ( status )
return HttpResponse ( final_json )
command = ' cat %s ' % ( ' /usr/local/lsws/conf/dvhost_redis.conf ' )
if ProcessUtilities . outputExecutioner ( command ) . find ( ' 127.0.0.1 ' ) == - 1 :
mailUtilities . checkHome ( )
tempPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
vhost = open ( tempPath , " w " )
vhost . write ( configData )
vhost . close ( )
## writing data temporary to file
filePath = installUtilities . Server_root_path + " /conf/vhosts/ " + self . domain + " /vhost.conf "
## save configuration data
execPath = " /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 )
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 '
externalApp = childDom . master . externalApp
except :
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
filePath = " /home/ " + self . domain + " /public_html/.htaccess "
try :
command = ' cat %s ' % ( filePath )
rewriteRules = ProcessUtilities . outputExecutioner ( command , externalApp )
if len ( rewriteRules ) == 0 :
status = { " rewriteStatus " : 1 , " error_message " : " Rules file is currently empty " }
final_json = json . dumps ( status )
return HttpResponse ( final_json )
status = { " rewriteStatus " : 1 , " rewriteRules " : rewriteRules }
final_json = json . dumps ( status )
return HttpResponse ( final_json )
except BaseException as msg :
status = { " rewriteStatus " : 1 , " error_message " : str ( msg ) , " rewriteRules " : " " }
final_json = json . dumps ( status )
return HttpResponse ( final_json )
def saveRewriteRules ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' virtualHost ' ]
rewriteRules = data [ ' rewriteRules ' ] . encode ( ' utf-8 ' )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' rewriteStatus ' , 0 )
## writing data temporary to file
mailUtilities . checkHome ( )
tempPath = " /tmp/ " + str ( randint ( 1000 , 9999 ) )
vhost = open ( tempPath , " wb " )
vhost . write ( rewriteRules )
vhost . close ( )
## writing data temporary to file
try :
childDomain = ChildDomains . objects . get ( domain = self . domain )
filePath = childDomain . path + ' /.htaccess '
externalApp = childDomain . master . externalApp
except :
filePath = " /home/ " + self . domain + " /public_html/.htaccess "
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
## save configuration data
command = ' cp %s %s ' % ( tempPath , filePath )
ProcessUtilities . executioner ( command , externalApp )
command = ' rm -f %s ' % ( tempPath )
ProcessUtilities . executioner ( command , ' cyberpanel ' )
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 )
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
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
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 "
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " changePHP --phpVersion ' " + phpVersion + " ' --path " + completePathToConfigFile
ProcessUtilities . popenExecutioner ( execPath )
try :
website = Websites . objects . get ( domain = self . domain )
website . phpSelection = data [ ' phpSelection ' ]
website . save ( )
### check if there are any alias domains under the main website and then change php for them too
for alias in website . childdomains_set . filter ( alais = 1 ) :
try :
confPath = virtualHostUtilities . Server_root + " /conf/vhosts/ " + alias . domain
completePathToConfigFile = confPath + " /vhost.conf "
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " changePHP --phpVersion ' " + phpVersion + " ' --path " + completePathToConfigFile
ProcessUtilities . popenExecutioner ( execPath )
except BaseException as msg :
logging . CyberCPLogFileWriter . writeToFile ( f ' Error changing PHP for alias: { str ( msg ) } ' )
except :
website = ChildDomains . objects . get ( domain = self . domain )
website . phpSelection = data [ ' phpSelection ' ]
website . save ( )
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 = [ ]
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/cronUtil.py "
execPath = execPath + " getWebsiteCron --externalApp " + website . externalApp
f = ProcessUtilities . outputExecutioner ( execPath , website . externalApp )
CronUtil . CronPrem ( 0 )
if ProcessUtilities . decideDistro ( ) == ProcessUtilities . centos or ProcessUtilities . decideDistro ( ) == ProcessUtilities . cent8 :
cronPath = " /var/spool/cron/ " + website . externalApp
else :
cronPath = " /var/spool/cron/crontabs/ " + website . externalApp
if f . find ( ' Permission denied ' ) > - 1 :
command = ' chmod 644 %s ' % ( cronPath )
ProcessUtilities . executioner ( command )
command = ' chown %s : %s %s ' % ( website . externalApp , website . externalApp , cronPath )
ProcessUtilities . executioner ( command )
f = ProcessUtilities . outputExecutioner ( execPath , website . externalApp )
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 )
except BaseException as msg :
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 )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/cronUtil.py "
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 )
except BaseException as msg :
print ( msg )
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 )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/cronUtil.py "
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 )
except BaseException as msg :
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 )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/cronUtil.py "
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 )
except BaseException as msg :
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 )
if ProcessUtilities . decideDistro ( ) == ProcessUtilities . centos or ProcessUtilities . decideDistro ( ) == ProcessUtilities . cent8 :
cronPath = " /var/spool/cron/ " + website . externalApp
else :
cronPath = " /var/spool/cron/crontabs/ " + website . externalApp
commandT = ' touch %s ' % ( cronPath )
ProcessUtilities . executioner ( commandT , ' root ' )
commandT = ' chown %s : %s %s ' % ( website . externalApp , website . externalApp , cronPath )
ProcessUtilities . executioner ( commandT , ' root ' )
CronUtil . CronPrem ( 1 )
finalCron = " %s %s %s %s %s %s " % ( minute , hour , monthday , month , weekday , command )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/cronUtil.py "
execPath = execPath + " addNewCron --externalApp " + website . externalApp + " --finalCron ' " + finalCron + " ' "
output = ProcessUtilities . outputExecutioner ( execPath , website . externalApp )
if ProcessUtilities . decideDistro ( ) == ProcessUtilities . ubuntu or ProcessUtilities . decideDistro ( ) == ProcessUtilities . ubuntu20 :
command = ' chmod 600 %s ' % ( cronPath )
ProcessUtilities . executioner ( command )
command = ' systemctl restart cron '
ProcessUtilities . executioner ( command )
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 )
except BaseException as msg :
dic = { ' addNewCron ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( dic )
return HttpResponse ( json_data )
def submitAliasCreation ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' masterDomain ' ]
aliasDomain = data [ ' aliasDomain ' ]
ssl = data [ ' ssl ' ]
if not validators . domain ( aliasDomain ) :
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
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " createAlias --masterDomain " + self . domain + " --aliasDomain " + aliasDomain + " --ssl " + str (
ssl ) + " --sslPath " + sslpath + " --administratorEmail " + admin . email + ' --websiteOwner ' + admin . userName
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 )
except BaseException as msg :
data_ret = { ' createAliasStatus ' : 0 , ' error_message ' : str ( msg ) , " existsStatus " : 0 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def issueAliasSSL ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' masterDomain ' ]
aliasDomain = data [ ' aliasDomain ' ]
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' sslStatus ' , 0 )
if ACLManager . AliasDomainCheck ( currentACL , aliasDomain , self . domain ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' sslStatus ' , 0 )
sslpath = " /home/ " + self . domain + " /public_html "
## Create Configurations
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
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 )
except BaseException as msg :
data_ret = { ' sslStatus ' : 0 , ' error_message ' : str ( msg ) , " existsStatus " : 0 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def delateAlias ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' masterDomain ' ]
aliasDomain = data [ ' aliasDomain ' ]
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' deleteAlias ' , 0 )
if ACLManager . AliasDomainCheck ( currentACL , aliasDomain , self . domain ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' deleteAlias ' , 0 )
## Create Configurations
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
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 )
except BaseException as msg :
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 )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
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 )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' changeOpenBasedir ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def wordpressInstall ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/installWordPress.html ' , { ' domainName ' : self . domain } )
return proc . render ( )
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 )
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 installWordpressStatus ( self , userID = None , data = None ) :
try :
statusFile = data [ ' statusFile ' ]
if ACLManager . CheckStatusFilleLoc ( statusFile ) :
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 ( )
lastLine = statusData [ - 1 ]
if lastLine . find ( ' [200] ' ) > - 1 :
command = ' rm -f ' + statusFile
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 ' : ProcessUtilities . outputExecutioner ( " cat " + statusFile ) . splitlines ( ) }
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 )
except BaseException as msg :
data_ret = { ' abort ' : 0 , ' installStatus ' : 0 , ' installationProgress ' : " 0 " , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def joomlaInstall ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/installJoomla.html ' , { ' domainName ' : self . domain } )
return proc . render ( )
def installJoomla ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' domain ' ]
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' installStatus ' , 0 )
extraArgs = { }
extraArgs [ ' password ' ] = data [ ' passwordByPass ' ]
extraArgs [ ' prefix ' ] = data [ ' prefix ' ]
extraArgs [ ' domain ' ] = data [ ' domain ' ]
extraArgs [ ' home ' ] = data [ ' home ' ]
extraArgs [ ' siteName ' ] = data [ ' siteName ' ]
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
mailUtilities . checkHome ( )
if data [ ' home ' ] == ' 0 ' :
extraArgs [ ' path ' ] = data [ ' path ' ]
background = ApplicationInstaller ( ' joomla ' , 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 :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def setupGit ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
website = Websites . objects . get ( domain = self . domain )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( )
path = ' /home/cyberpanel/ ' + self . domain + ' .git '
if os . path . exists ( path ) :
ipFile = " /etc/cyberpanel/machineIP "
f = open ( ipFile )
ipData = f . read ( )
ipAddress = ipData . split ( ' \n ' , 1 ) [ 0 ]
port = ProcessUtilities . fetchCurrentPort ( )
webhookURL = ' https:// ' + ipAddress + ' : %s /websites/ ' % ( port ) + self . domain + ' /gitNotify '
proc = httpProc ( request , ' websiteFunctions/setupGit.html ' ,
{ ' domainName ' : self . domain , ' installed ' : 1 , ' webhookURL ' : webhookURL } )
return proc . render ( )
else :
command = " ssh-keygen -f /home/ %s /.ssh/ %s -t rsa -N ' ' " % ( self . domain , website . externalApp )
ProcessUtilities . executioner ( command , website . externalApp )
###
configContent = """ Host github.com
IdentityFile / home / % s / . ssh / % s
StrictHostKeyChecking no
""" % (self.domain, website.externalApp)
path = " /home/cyberpanel/config "
writeToFile = open ( path , ' w ' )
writeToFile . writelines ( configContent )
writeToFile . close ( )
command = ' mv %s /home/ %s /.ssh/config ' % ( path , self . domain )
ProcessUtilities . executioner ( command )
command = ' chown %s : %s /home/ %s /.ssh/config ' % ( website . externalApp , website . externalApp , self . domain )
ProcessUtilities . executioner ( command )
command = ' cat /home/ %s /.ssh/ %s .pub ' % ( self . domain , website . externalApp )
deploymentKey = ProcessUtilities . outputExecutioner ( command , website . externalApp )
proc = httpProc ( request , ' websiteFunctions/setupGit.html ' ,
{ ' domainName ' : self . domain , ' deploymentKey ' : deploymentKey , ' installed ' : 0 } )
return proc . render ( )
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 )
except BaseException as msg :
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 )
except BaseException as msg :
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 )
except BaseException as msg :
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 )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def installPrestaShop ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/installPrestaShop.html ' , { ' domainName ' : self . domain } )
return proc . render ( )
def installMagento ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/installMagento.html ' , { ' domainName ' : self . domain } )
return proc . render ( )
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
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 installMautic ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/installMautic.html ' , { ' domainName ' : self . domain } )
return proc . render ( )
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 )
#### Before installing mautic change php to 8.1
completePathToConfigFile = f ' /usr/local/lsws/conf/vhosts/ { self . domain } /vhost.conf '
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " changePHP --phpVersion ' PHP 8.1 ' --path " + completePathToConfigFile
ProcessUtilities . executioner ( execPath )
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 :
data_ret = { ' status ' : 0 , ' installStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
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 ' ]
#### Before installing Prestashop change php to 8.3
completePathToConfigFile = f ' /usr/local/lsws/conf/vhosts/ { self . domain } /vhost.conf '
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " changePHP --phpVersion ' PHP 8.3 ' --path " + completePathToConfigFile
ProcessUtilities . executioner ( execPath )
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
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 createWebsiteAPI ( self , data = None ) :
try :
adminUser = data [ ' adminUser ' ]
adminPass = data [ ' adminPass ' ]
adminEmail = data [ ' ownerEmail ' ]
websiteOwner = data [ ' websiteOwner ' ]
ownerPassword = data [ ' ownerPassword ' ]
data [ ' ssl ' ] = 1
data [ ' dkimCheck ' ] = 1
data [ ' openBasedir ' ] = 1
data [ ' adminEmail ' ] = data [ ' ownerEmail ' ]
try :
data [ ' phpSelection ' ] = data [ ' phpSelection ' ]
except :
data [ ' phpSelection ' ] = " PHP 7.4 "
data [ ' package ' ] = data [ ' packageName ' ]
try :
websitesLimit = data [ ' websitesLimit ' ]
except :
websitesLimit = 1
try :
apiACL = data [ ' acl ' ]
except :
apiACL = ' user '
admin = Administrator . objects . get ( userName = adminUser )
if hashPassword . check_password ( admin . password , adminPass ) :
if adminEmail is None :
data [ ' adminEmail ' ] = " example@example.org "
try :
acl = ACL . objects . get ( name = apiACL )
websiteOwn = Administrator ( userName = websiteOwner ,
password = hashPassword . hash_password ( ownerPassword ) ,
email = adminEmail , type = 3 , owner = admin . pk ,
initWebsitesLimit = websitesLimit , acl = acl , api = 1 )
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 )
except BaseException as msg :
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 = [ ]
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 websites :
if items . state == 0 :
state = " Suspended "
else :
state = " Active "
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( items )
vhFile = f ' /usr/local/lsws/conf/vhosts/ { items . domain } /vhost.conf '
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( vhFile )
try :
from plogical . phpUtilities import phpUtilities
PHPVersionActual = phpUtilities . WrapGetPHPVersionFromFileToGetVersionWithPHP ( vhFile )
except :
PHPVersionActual = ' PHP 8.1 '
diskUsed = " %s MB " % str ( DiskUsage )
# Get WordPress sites for this website
wp_sites = [ ]
try :
wp_sites = WPSites . objects . filter ( owner = items )
wp_sites = [ {
' id ' : wp . id ,
' title ' : wp . title ,
' url ' : wp . FinalURL ,
' version ' : wp . version if hasattr ( wp , ' version ' ) else ' Unknown ' ,
' phpVersion ' : wp . phpVersion if hasattr ( wp , ' phpVersion ' ) else ' Unknown '
} for wp in wp_sites ]
except :
pass
json_data . append ( {
' domain ' : items . domain ,
' adminEmail ' : items . adminEmail ,
' ipAddress ' : ipAddress ,
' admin ' : items . admin . userName ,
' package ' : items . package . packageName ,
' state ' : state ,
' diskUsed ' : diskUsed ,
' phpVersion ' : PHPVersionActual ,
' wp_sites ' : wp_sites
} )
return json . dumps ( 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 ]
except BaseException as msg :
logging . CyberCPLogFileWriter . writeToFile ( " Failed to read machine IP, error: " + str ( msg ) )
ipAddress = " 192.168.100.1 "
for items in websites :
if items . state == 0 :
state = " Suspended "
else :
state = " Active "
DiskUsage , DiskUsagePercentage , bwInMB , bwUsage = virtualHostUtilities . FindStats ( items )
diskUsed = " %s MB " % str ( DiskUsage )
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
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 DockersitePagination ( self , currentACL , userID ) :
websites = DockerSites . objects . all ( )
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
data [ ' configData ' ] = ProcessUtilities . outputExecutioner ( f ' cat { finalConfPath } ' )
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 )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' saveStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def switchServer ( self , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
domainName = data [ ' domainName ' ]
phpVersion = data [ ' phpSelection ' ]
server = data [ ' server ' ]
if ACLManager . checkOwnership ( domainName , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( )
tempStatusPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " switchServer --phpVersion ' " + phpVersion + " ' --server " + str (
server ) + " --virtualHostName " + domainName + " --tempStatusPath " + tempStatusPath
ProcessUtilities . popenExecutioner ( execPath )
time . sleep ( 3 )
data_ret = { ' status ' : 1 , ' tempStatusPath ' : tempStatusPath }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def tuneSettings ( self , userID = None , data = None ) :
try :
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 ) )
if ProcessUtilities . decideDistro ( ) == ProcessUtilities . centos or ProcessUtilities . decideDistro ( ) == ProcessUtilities . cent8 :
sockPath = ' /var/run/php-fpm/ '
group = ' nobody '
else :
sockPath = ' /var/run/php/ '
group = ' nogroup '
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 )
phpFPMConf = phpFPMConf . replace ( ' {sockPath} ' , sockPath )
phpFPMConf = phpFPMConf . replace ( ' {group} ' , group )
writeToFile = open ( tempStatusPath , ' w ' )
writeToFile . writelines ( phpFPMConf )
writeToFile . close ( )
command = ' sudo mv %s %s ' % ( tempStatusPath , phpPath )
ProcessUtilities . executioner ( command )
phpPath = phpPath . split ( ' / ' )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' PHP path in tune settings { phpPath } ' )
if ProcessUtilities . decideDistro ( ) == ProcessUtilities . centos or ProcessUtilities . decideDistro ( ) == ProcessUtilities . cent8 :
if phpPath [ 1 ] == ' etc ' :
phpVersion = phpPath [ 4 ] [ 3 ] + phpPath [ 4 ] [ 4 ]
phpVersion = f ' PHP { phpPath [ 4 ] [ 3 ] } . { phpPath [ 4 ] [ 4 ] } '
else :
phpVersion = phpPath [ 3 ] [ 3 ] + phpPath [ 3 ] [ 4 ]
phpVersion = f ' PHP { phpPath [ 3 ] [ 3 ] } . { phpPath [ 3 ] [ 4 ] } '
else :
phpVersion = f ' PHP { phpPath [ 2 ] } '
# php = PHPManager.getPHPString(phpVersion)
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' PHP Version in tune settings { phpVersion } ' )
phpService = ApacheVhost . DecideFPMServiceName ( phpVersion )
if os . path . exists ( ProcessUtilities . debugPath ) :
logging . CyberCPLogFileWriter . writeToFile ( f ' PHP service in tune settings { phpService } ' )
command = f " systemctl stop { phpService } "
ProcessUtilities . normalExecutioner ( command )
command = f " systemctl restart { phpService } "
ProcessUtilities . normalExecutioner ( command )
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def sshAccess ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
#### update jwt secret if needed
import secrets
import re
import os
from plogical . processUtilities import ProcessUtilities
fastapi_file = ' /usr/local/CyberCP/fastapi_ssh_server.py '
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
try :
content = ProcessUtilities . outputExecutioner ( f ' cat { fastapi_file } ' )
if ' REPLACE_ME_WITH_INSTALLER ' in content :
new_secret = secrets . token_urlsafe ( 32 )
sed_cmd = f " sed -i ' s|JWT_SECRET = \" REPLACE_ME_WITH_INSTALLER \" |JWT_SECRET = \" { new_secret } \" | ' ' { fastapi_file } ' "
ProcessUtilities . outputExecutioner ( sed_cmd )
command = ' systemctl restart fastapi_ssh_server '
ProcessUtilities . outputExecutioner ( command )
except Exception :
CyberCPLogFileWriter . writeLog ( f " Failed to update JWT secret: { e } " )
pass
#####
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
# Ensure FastAPI SSH server systemd service file is in place
try :
service_path = ' /etc/systemd/system/fastapi_ssh_server.service '
local_service_path = ' fastapi_ssh_server.service '
check_service = ProcessUtilities . outputExecutioner ( f ' test -f { service_path } && echo exists || echo missing ' )
if ' missing ' in check_service :
ProcessUtilities . outputExecutioner ( f ' cp /usr/local/CyberCP/fastapi_ssh_server.service { service_path } ' )
ProcessUtilities . outputExecutioner ( ' systemctl daemon-reload ' )
except Exception as e :
CyberCPLogFileWriter . writeLog ( f " Failed to copy or reload fastapi_ssh_server.service: { e } " )
# Ensure FastAPI SSH server is running using ProcessUtilities
try :
ProcessUtilities . outputExecutioner ( ' systemctl is-active --quiet fastapi_ssh_server ' )
ProcessUtilities . outputExecutioner ( ' systemctl enable --now fastapi_ssh_server ' )
ProcessUtilities . outputExecutioner ( ' systemctl start fastapi_ssh_server ' )
csfPath = ' /etc/csf '
sshPort = ' 8888 '
if os . path . exists ( csfPath ) :
dataIn = { ' protocol ' : ' TCP_IN ' , ' ports ' : sshPort }
# self.modifyPorts is a method in the firewallManager.py file so how can we call it here?
# we need to call the method from the firewallManager.py file
from firewall . firewallManager import FirewallManager
firewallManager = FirewallManager ( )
firewallManager . modifyPorts ( dataIn )
dataIn = { ' protocol ' : ' TCP_OUT ' , ' ports ' : sshPort }
firewallManager . modifyPorts ( dataIn )
else :
from plogical . firewallUtilities import FirewallUtilities
from firewall . models import FirewallRules
try :
updateFW = FirewallRules . objects . get ( name = " WebTerminalPort " )
FirewallUtilities . deleteRule ( " tcp " , updateFW . port , " 0.0.0.0/0 " )
updateFW . port = sshPort
updateFW . save ( )
FirewallUtilities . addRule ( ' tcp ' , sshPort , " 0.0.0.0/0 " )
except :
try :
newFireWallRule = FirewallRules ( name = " WebTerminalPort " , port = sshPort , proto = " tcp " )
newFireWallRule . save ( )
FirewallUtilities . addRule ( ' tcp ' , sshPort , " 0.0.0.0/0 " )
except BaseException as msg :
CyberCPLogFileWriter . writeToFile ( str ( msg ) )
except Exception as e :
CyberCPLogFileWriter . writeLog ( f " Failed to ensure fastapi_ssh_server is running: { e } " )
# Add-on check logic
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " all " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
import json
try :
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) . get ( ' status ' , 0 )
except Exception :
Status = 0
has_addons = ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent
from plogical . CyberCPLogFileWriter import CyberCPLogFileWriter
#CyberCPLogFileWriter.writeToFile(f"has_addons: {has_addons}")
# SSL check
cert_path = ' /usr/local/lscp/conf/cert.pem '
is_selfsigned = False
ssl_issue_link = ' /manageSSL/sslForHostName '
try :
import OpenSSL
cert_content = ProcessUtilities . outputExecutioner ( f ' cat { cert_path } ' )
cert = OpenSSL . crypto . load_certificate ( OpenSSL . crypto . FILETYPE_PEM , cert_content )
ssl_provider = cert . get_issuer ( ) . get_components ( ) [ 1 ] [ 1 ] . decode ( ' utf-8 ' )
CyberCPLogFileWriter . writeToFile ( f " ssl_provider: { ssl_provider } " )
if ssl_provider == ' Denial ' :
is_selfsigned = True
else :
is_selfsigned = False
except Exception as e :
is_selfsigned = True # If cert missing or unreadable, treat as self-signed
CyberCPLogFileWriter . writeToFile ( f " is_selfsigned: { is_selfsigned } . Error: { str ( e ) } " )
# Detect if accessed via IP
accessed_via_ip = False
try :
host = request . get_host ( ) . split ( ' : ' ) [ 0 ] # Remove port if present
try :
ipaddress . ip_address ( host )
accessed_via_ip = True
except ValueError :
accessed_via_ip = False
except Exception as e :
accessed_via_ip = False
CyberCPLogFileWriter . writeToFile ( f " Error detecting accessed_via_ip: { str ( e ) } " )
proc = httpProc ( request , ' websiteFunctions/sshAccess.html ' ,
{ ' domainName ' : self . domain , ' externalApp ' : externalApp , ' has_addons ' : has_addons , ' is_selfsigned_ssl ' : is_selfsigned , ' ssl_issue_link ' : ssl_issue_link , ' accessed_via_ip ' : accessed_via_ip } )
return proc . render ( )
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 )
# if website.externalApp != data['externalApp']:
# data_ret = {'status': 0, 'error_message': 'External app mis-match.'}
# json_data = json.dumps(data_ret)
# return HttpResponse(json_data)
uBuntuPath = ' /etc/lsb-release '
if os . path . exists ( uBuntuPath ) :
command = " echo ' %s : %s ' | chpasswd " % ( website . externalApp , data [ ' password ' ] )
else :
command = ' echo " %s " | passwd --stdin %s ' % ( data [ ' password ' ] , website . externalApp )
ProcessUtilities . executioner ( command )
data_ret = { ' status ' : 1 , ' error_message ' : ' None ' , ' LinuxUser ' : website . externalApp }
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 setupStaging ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
proc = httpProc ( request , ' websiteFunctions/setupStaging.html ' ,
{ ' domainName ' : self . domain , ' externalApp ' : externalApp } )
return proc . render ( )
def startCloning ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' masterDomain ' ]
if not validators . domain ( self . domain ) :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Invalid domain. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
if not validators . domain ( data [ ' domainName ' ] ) :
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 )
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 syncToMaster ( self , request = None , userID = None , data = None , childDomain = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
website = Websites . objects . get ( domain = self . domain )
externalApp = website . externalApp
proc = httpProc ( request , ' websiteFunctions/syncMaster.html ' ,
{ ' domainName ' : self . domain , ' externalApp ' : externalApp , ' childDomain ' : childDomain } )
return proc . render ( )
def startSync ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if not validators . domain ( data [ ' childDomain ' ] ) :
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 )
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 convertDomainToSite ( self , userID = None , request = None ) :
try :
extraArgs = { }
extraArgs [ ' request ' ] = request
extraArgs [ ' tempStatusPath ' ] = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
background = ApplicationInstaller ( ' convertDomainToSite ' , extraArgs )
background . start ( )
data_ret = { ' status ' : 1 , ' createWebSiteStatus ' : 1 , ' tempStatusPath ' : extraArgs [ ' tempStatusPath ' ] }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def manageGIT ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
try :
website = Websites . objects . get ( domain = self . domain )
folders = [ ' /home/ %s /public_html ' % ( self . domain ) ]
databases = website . databases_set . all ( )
# for database in databases:
# basePath = '/var/lib/mysql/'
# folders.append('%s%s' % (basePath, database.dbName))
except :
self . childWebsite = ChildDomains . objects . get ( domain = self . domain )
folders = [ self . childWebsite . path ]
databases = self . childWebsite . master . databases_set . all ( )
# for database in databases:
# basePath = '/var/lib/mysql/'
# folders.append('%s%s' % (basePath, database.dbName))
proc = httpProc ( request , ' websiteFunctions/manageGIT.html ' ,
{ ' domainName ' : self . domain , ' folders ' : folders } )
return proc . render ( )
def folderCheck ( self ) :
try :
###
domainPath = ' /home/ %s /public_html ' % ( self . domain )
vhRoot = ' /home/ %s ' % ( self . domain )
vmailPath = ' /home/vmail/ %s ' % ( self . domain )
##
try :
website = Websites . objects . get ( domain = self . domain )
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
self . home = 0
if self . folder == ' /home/ %s /public_html ' % ( self . domain ) :
self . home = 1
except :
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
self . home = 0
if self . folder == website . path :
self . home = 1
### 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. "
##
if self . folder == domainPath :
self . externalApp = externalApp
return 1
##
if self . folder == vhRoot :
self . externalApp = externalApp
return 1
##
try :
childDomain = ChildDomains . objects . get ( domain = self . domain )
if self . folder == childDomain . path :
self . externalApp = externalApp
return 1
except :
pass
##
if self . folder == vmailPath :
self . externalApp = ' vmail '
return 1
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
return 0
except BaseException as msg :
logging . CyberCPLogFileWriter . writeToFile ( ' %s . [folderCheck:3002] ' % ( str ( msg ) ) )
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 ( )
gitPath = ' %s /.git ' % ( self . folder )
command = ' ls -la %s ' % ( gitPath )
if ProcessUtilities . outputExecutioner ( command , self . externalAppLocal ) . find (
' No such file or directory ' ) > - 1 :
command = ' cat /home/ %s /.ssh/ %s .pub ' % ( self . masterDomain , self . externalAppLocal )
deploymentKey = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
if deploymentKey . find ( ' No such file or directory ' ) > - 1 :
command = " ssh-keygen -f /home/ %s /.ssh/ %s -t rsa -N ' ' " % ( self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalAppLocal )
command = ' cat /home/ %s /.ssh/ %s .pub ' % ( self . masterDomain , self . externalAppLocal )
deploymentKey = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
data_ret = { ' status ' : 1 , ' repo ' : 0 , ' deploymentKey ' : deploymentKey , ' home ' : self . home }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
## Find git branches
command = ' git -C %s branch ' % ( self . folder )
branches = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal ) . split ( ' \n ' ) [ : - 1 ]
## Fetch key
command = ' cat /home/ %s /.ssh/ %s .pub ' % ( self . domain , self . externalAppLocal )
deploymentKey = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
if deploymentKey . find ( ' No such file or directory ' ) > - 1 :
command = " ssh-keygen -f /home/ %s /.ssh/ %s -t rsa -N ' ' " % ( self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalAppLocal )
command = ' cat /home/ %s /.ssh/ %s .pub ' % ( self . masterDomain , self . externalAppLocal )
deploymentKey = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
## Find Remote if any
command = ' git -C %s remote -v ' % ( self . folder )
remoteResult = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
remote = 1
if remoteResult . find ( ' origin ' ) == - 1 :
remote = 0
remoteResult = ' Remote currently not set. '
## Find Total commits on current branch
command = ' git -C %s rev-list --count HEAD ' % ( self . folder )
totalCommits = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
if totalCommits . find ( ' fatal ' ) > - 1 :
totalCommits = ' 0 '
##
port = ProcessUtilities . fetchCurrentPort ( )
webHookURL = ' https:// %s : %s /websites/ %s /webhook ' % ( ACLManager . fetchIP ( ) , port , self . domain )
data_ret = { ' status ' : 1 , ' repo ' : 1 , ' finalBranches ' : branches , ' deploymentKey ' : deploymentKey ,
' remote ' : remote , ' remoteResult ' : remoteResult , ' totalCommits ' : totalCommits ,
' home ' : self . home ,
' webHookURL ' : webHookURL , ' autoCommitCurrent ' : self . autoCommitCurrent ,
' autoPushCurrent ' : self . autoPushCurrent , ' emailLogsCurrent ' : self . emailLogsCurrent ,
' commands ' : self . commands , " webhookCommandCurrent " : self . webhookCommandCurrent }
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 ( )
website = Websites . objects . get ( domain = self . masterDomain )
command = ' git -C %s init ' % ( self . folder )
result = ProcessUtilities . outputExecutioner ( command , website . externalApp )
if result . find ( ' Initialized empty Git repository in ' ) > - 1 :
command = ' git -C %s config --local user.email %s ' % ( self . folder , self . adminEmail )
ProcessUtilities . executioner ( command , website . externalApp )
command = ' git -C %s config --local user.name " %s %s " ' % (
self . folder , self . firstName , self . lastName )
ProcessUtilities . executioner ( command , website . externalApp )
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
data_ret = { ' status ' : 0 , ' error_message ' : result }
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 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 )
## Security checks
if self . folderCheck ( ) :
pass
else :
return ACLManager . loadErrorJson ( )
if self . gitHost . find ( ' : ' ) > - 1 :
gitHostDomain = self . gitHost . split ( ' : ' ) [ 0 ]
gitHostPort = self . gitHost . split ( ' : ' ) [ 1 ]
if not validators . domain ( gitHostDomain ) :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
try :
gitHostPort = int ( gitHostPort )
except :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
else :
if not validators . domain ( self . gitHost ) :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
if ACLManager . validateInput ( self . gitUsername ) and ACLManager . validateInput ( self . gitReponame ) :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
### set default ssh key
command = ' git -C %s config --local core.sshCommand " ssh -i /home/ %s /.ssh/ %s -o " StrictHostKeyChecking=no " " ' % (
self . folder , self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalAppLocal )
## Check if remote exists
command = ' git -C %s remote -v ' % ( self . folder )
remoteResult = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
## 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 :
command = ' git -C %s remote set-url origin git@ %s : %s / %s .git ' % (
self . folder , self . gitHost , self . gitUsername , self . gitReponame )
possibleError = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
## Check if set correctly.
command = ' git -C %s remote -v ' % ( self . folder )
remoteResult = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
if remoteResult . find ( self . gitUsername ) > - 1 :
# ## Fix permissions
#
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
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 )
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 ( )
## Security check
if ACLManager . validateInput ( self . branchName ) :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
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 )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s checkout %s ' % ( self . folder , self . branchName . strip ( ' ' ) )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( ' Switched to branch ' ) > - 1 :
# ## Fix permissions
#
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
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 )
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 ( )
## Security check
if ACLManager . validateInput ( self . newBranchName ) :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
##
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s checkout -b " %s " ' % ( self . folder , self . newBranchName )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( self . newBranchName ) > - 1 :
# ## Fix permissions
#
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
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 :
return ACLManager . loadErrorJson ( ' status ' , 0 )
# security check
if ACLManager . validateInput ( self . commitMessage ) :
pass
else :
return ACLManager . loadErrorJson ( )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
## Check if remote exists
command = ' git -C %s add -A ' % ( self . folder )
ProcessUtilities . outputExecutioner ( command , self . externalApp )
command = ' git -C %s commit -m " %s " ' % ( self . folder , self . commitMessage . replace ( ' " ' , ' ' ) )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( ' nothing to commit ' ) == - 1 :
try :
if self . commands != ' NONE ' :
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Running commands after successful git commit.. ' ) . save ( )
if self . commands . find ( ' \n ' ) > - 1 :
commands = self . commands . split ( ' \n ' )
for command in commands :
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Running: %s ' % ( command ) ) . save ( )
result = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Result: %s ' % ( result ) ) . save ( )
else :
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Running: %s ' % ( self . commands ) ) . save ( )
result = ProcessUtilities . outputExecutioner ( self . commands , self . externalAppLocal )
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Result: %s ' % ( result ) ) . save ( )
GitLogs ( owner = self . masterWebsite , type = ' INFO ' ,
message = ' Finished running commands. ' ) . save ( )
except :
pass
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
data_ret = { ' status ' : 1 , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
data_ret = { ' status ' : 0 , ' error_message ' : ' Nothing to commit. ' , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) , ' commandStatus ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
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 ( )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
### set default ssh key
command = ' git -C %s config --local core.sshCommand " ssh -i /home/ %s /.ssh/ %s -o " StrictHostKeyChecking=no " " ' % (
self . folder , self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalApp )
## Check if remote exists
command = ' git -C %s pull ' % ( self . folder )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( ' Already up to date ' ) == - 1 :
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
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 ( )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
### set default ssh key
command = ' git -C %s config --local core.sshCommand " ssh -i /home/ %s /.ssh/ %s -o " StrictHostKeyChecking=no " " ' % (
self . folder , self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalApp )
##
command = ' git -C %s push ' % ( self . folder )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp , False )
if commandStatus . find ( ' has no upstream branch ' ) > - 1 :
command = ' git -C %s rev-parse --abbrev-ref HEAD ' % ( self . folder )
currentBranch = ProcessUtilities . outputExecutioner ( command , self . externalApp , False ) . rstrip ( ' \n ' )
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 )
command = ' git -C %s push --set-upstream origin %s ' % ( self . folder , currentBranch )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp , False )
if commandStatus . find ( ' Everything up-to-date ' ) == - 1 and commandStatus . find (
' rejected ' ) == - 1 and commandStatus . find ( ' Permission denied ' ) == - 1 :
data_ret = { ' status ' : 1 , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
data_ret = { ' status ' : 0 , ' error_message ' : ' Push failed. ' , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) , ' commandStatus ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
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 ' ]
try :
self . overrideData = data [ ' overrideData ' ]
except :
self . overrideData = False
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , 0 )
if self . folderCheck ( ) :
pass
else :
return ACLManager . loadErrorJson ( )
if self . gitHost . find ( ' : ' ) > - 1 :
gitHostDomain = self . gitHost . split ( ' : ' ) [ 0 ]
gitHostPort = self . gitHost . split ( ' : ' ) [ 1 ]
if not validators . domain ( gitHostDomain ) :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
try :
gitHostPort = int ( gitHostPort )
except :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
else :
if not validators . domain ( self . gitHost ) :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
## Security check
if ACLManager . validateInput ( self . gitUsername ) and ACLManager . validateInput ( self . gitReponame ) :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
##
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
if self . overrideData :
command = ' rm -rf %s ' % ( self . folder )
ProcessUtilities . executioner ( command , self . externalApp )
## Set defauly key
command = ' git config --global core.sshCommand " ssh -i /home/ %s /.ssh/ %s -o " StrictHostKeyChecking=no " " ' % (
self . masterDomain , self . externalAppLocal )
ProcessUtilities . executioner ( command , self . externalApp )
##
command = ' git clone git@ %s : %s / %s .git %s ' % ( self . gitHost , self . gitUsername , self . gitReponame , self . folder )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( ' already exists ' ) == - 1 and commandStatus . find ( ' Permission denied ' ) == - 1 :
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
command = ' git -C %s config --local user.email %s ' % ( self . folder , self . adminEmail )
ProcessUtilities . executioner ( command , self . externalApp )
command = ' git -C %s config --local user.name " %s %s " ' % ( self . folder , self . firstName , self . lastName )
ProcessUtilities . executioner ( command , self . externalApp )
data_ret = { ' status ' : 1 , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
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 ( )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' rm -rf %s /.git ' % ( self . folder )
ProcessUtilities . executioner ( command , self . externalApp )
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 , self . externalApp )
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def 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 )
gitIgnoreContent = ProcessUtilities . outputExecutioner ( command , self . externalAppLocal )
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
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' mv %s %s /.gitignore ' % ( tempPath , self . folder )
ProcessUtilities . executioner ( command , self . externalApp )
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def 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 ( )
initCommand = """ log --pretty=format: " % h| %s | %c n| %c d " -50 """
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s %s ' % ( self . folder , initCommand )
commits = ProcessUtilities . outputExecutioner ( command , self . externalApp ) . split ( ' \n ' )
json_data = " [ "
checker = 0
id = 1
for commit in commits :
cm = commit . split ( ' | ' )
dic = { ' id ' : str ( id ) , ' commit ' : cm [ 0 ] , ' message ' : cm [ 1 ] . replace ( ' " ' , " ' " ) , ' name ' : cm [ 2 ] , ' date ' : cm [ 3 ] }
id = id + 1
if checker == 0 :
json_data = json_data + json . dumps ( dic )
checker = 1
else :
json_data = json_data + ' , ' + json . dumps ( dic )
commits = json_data + ' ] '
data_ret = { ' status ' : 1 , ' commits ' : commits }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except IndexError :
data_ret = { ' status ' : 0 , ' error_message ' : ' No commits found. ' }
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 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 ( )
## Security check
if ACLManager . validateInput ( self . commit ) :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
##
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s diff-tree --no-commit-id --name-only -r %s ' % ( self . folder , self . commit )
files = ProcessUtilities . outputExecutioner ( command , self . externalApp ) . split ( ' \n ' )
FinalFiles = [ ]
for items in files :
if items != ' ' :
FinalFiles . append ( items . rstrip ( ' \n ' ) . lstrip ( ' \n ' ) )
data_ret = { ' status ' : 1 , ' files ' : FinalFiles }
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 ( )
## security check
if ACLManager . validateInput ( self . commit ) and self . file . find ( ' .. ' ) == - 1 :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , ' Invalid characters in your input. ' )
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s show %s -- %s / %s ' % (
self . folder , self . commit , self . folder , self . file . strip ( ' \n ' ) . strip ( ' ' ) )
fileChangedContent = ProcessUtilities . outputExecutioner ( command , self . externalApp ) . split ( ' \n ' )
initialNumber = 0
## Find initial line numbers
for items in fileChangedContent :
if len ( items ) == 0 :
initialNumber = initialNumber + 1
elif items [ 0 ] == ' @ ' :
break
else :
initialNumber = initialNumber + 1
try :
lineNumber = int ( fileChangedContent [ initialNumber ] . split ( ' + ' ) [ 1 ] . split ( ' , ' ) [ 0 ] )
except :
lineNumber = int ( fileChangedContent [ initialNumber ] . split ( ' + ' ) [ 1 ] . split ( ' ' ) [ 0 ] )
fileLen = len ( fileChangedContent )
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 ] )
for i in range ( initialNumber + 1 , fileLen - 1 ) :
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
else :
if fileChangedContent [ i ] [ 0 ] == ' + ' :
content = ' <p style= " color:green " > %s </p> ' % (
fileChangedContent [ i ] . replace ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 ] == ' - ' :
content = ' <p style= " color:red " > %s </p> ' % (
fileChangedContent [ i ] . replace ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 :
content = ' <p> %s </p> ' % ( fileChangedContent [ i ] . replace ( ' < ' , " < " ) . replace ( ' > ' , " > " ) )
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 }
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 )
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 = { }
dic [ ' domain ' ] = self . domain
dic [ ' autoCommit ' ] = data [ ' autoCommit ' ]
try :
dic [ ' autoPush ' ] = data [ ' autoPush ' ]
except :
dic [ ' autoPush ' ] = ' Never '
try :
dic [ ' emailLogs ' ] = data [ ' emailLogs ' ]
except :
dic [ ' emailLogs ' ] = False
try :
dic [ ' commands ' ] = data [ ' commands ' ]
except :
dic [ ' commands ' ] = ' NONE '
try :
dic [ ' webhookCommand ' ] = data [ ' webhookCommand ' ]
except :
dic [ ' webhookCommand ' ] = False
dic [ ' folder ' ] = self . folder
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , 0 )
if self . folderCheck ( ) :
pass
else :
return ACLManager . loadErrorJson ( )
##
if self . confCheck == 1 :
gitConfFolder = ' /home/cyberpanel/git '
gitConFile = ' %s / %s ' % ( gitConfFolder , self . masterDomain )
self . finalFile = ' %s / %s ' % ( gitConFile , str ( randint ( 1000 , 9999 ) ) )
if not os . path . exists ( gitConfFolder ) :
os . mkdir ( gitConfFolder )
if not os . path . exists ( gitConFile ) :
os . mkdir ( gitConFile )
writeToFile = open ( self . finalFile , ' w ' )
writeToFile . write ( json . dumps ( dic ) )
writeToFile . close ( )
data_ret = { ' status ' : 1 }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def getLogsInJson ( self , logs ) :
json_data = " [ "
checker = 0
counter = 1
for items in logs :
dic = { ' type ' : items . type , ' date ' : items . date . strftime ( ' % m. %d . % Y_ % H- % M- % S ' ) , ' message ' : items . message }
if checker == 0 :
json_data = json_data + json . dumps ( dic )
checker = 1
else :
json_data = json_data + ' , ' + json . dumps ( dic )
counter = counter + 1
json_data = json_data + ' ] '
return json_data
def fetchGitLogs ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
self . domain = data [ ' domain ' ]
self . folder = data [ ' folder ' ]
recordsToShow = int ( data [ ' recordsToShow ' ] )
page = int ( data [ ' page ' ] )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , 0 )
if self . folderCheck ( ) :
pass
else :
return ACLManager . loadErrorJson ( )
logs = self . masterWebsite . gitlogs_set . all ( ) . order_by ( ' -id ' )
from s3Backups . s3Backups import S3Backups
pagination = S3Backups . getPagination ( len ( logs ) , recordsToShow )
endPageNumber , finalPageNumber = S3Backups . recordsPointer ( page , recordsToShow )
jsonData = self . getLogsInJson ( logs [ finalPageNumber : endPageNumber ] )
data_ret = { ' status ' : 1 , ' logs ' : jsonData , ' pagination ' : pagination }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except IndexError :
data_ret = { ' status ' : 0 , ' error_message ' : ' Not a text file. ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
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
try :
web = Websites . objects . get ( domain = self . domain )
self . web = web
self . folder = ' /home/ %s /public_html ' % ( domain )
self . masterDomain = domain
except :
web = ChildDomains . objects . get ( domain = self . domain )
self . folder = web . path
self . masterDomain = web . master . domain
self . web = web . master
## Check if remote exists
self . externalApp = ACLManager . FetchExternalApp ( self . domain )
command = ' git -C %s pull ' % ( self . folder )
commandStatus = ProcessUtilities . outputExecutioner ( command , self . externalApp )
if commandStatus . find ( ' Already up to date ' ) == - 1 :
message = ' [Webhook Fired] Status: %s . ' % ( commandStatus )
GitLogs ( owner = self . web , type = ' INFO ' , message = message ) . save ( )
### Fetch git configurations
found = 0
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 :
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 ' :
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Running commands after successful git commit.. ' ) . save ( )
if gitConf [ ' commands ' ] . find ( ' \n ' ) > - 1 :
commands = gitConf [ ' commands ' ] . split ( ' \n ' )
for command in commands :
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Running: %s ' % ( command ) ) . save ( )
result = ProcessUtilities . outputExecutioner ( command , self . web . externalApp , None ,
self . folder )
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Result: %s ' % ( result ) ) . save ( )
else :
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Running: %s ' % ( gitConf [ ' commands ' ] ) ) . save ( )
result = ProcessUtilities . outputExecutioner ( gitConf [ ' commands ' ] ,
self . web . externalApp , None , self . folder )
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Result: %s ' % ( result ) ) . save ( )
GitLogs ( owner = self . web , type = ' INFO ' ,
message = ' Finished running commands. ' ) . save ( )
except :
pass
## Fix permissions
# from filemanager.filemanager import FileManager
#
# fm = FileManager(None, None)
# fm.fixPermissions(self.masterDomain)
data_ret = { ' status ' : 1 , ' commandStatus ' : commandStatus }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
else :
message = ' [Webhook Fired] Status: %s . ' % ( commandStatus )
GitLogs ( owner = self . web , type = ' ERROR ' , message = message ) . save ( )
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 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 )
website = Websites . objects . get ( domain = domain )
command = f ' chown { website . externalApp } : { website . externalApp } { pathToKeyFile } '
ProcessUtilities . outputExecutioner ( command )
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/firewallUtilities.py "
execPath = execPath + " deleteSSHKey --key ' %s ' --path %s " % ( key , pathToKeyFile )
output = ProcessUtilities . outputExecutioner ( execPath , website . externalApp )
if output . find ( " 1,None " ) > - 1 :
final_dic = { ' status ' : 1 , ' delete_status ' : 1 }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
else :
final_dic = { ' status ' : 1 , ' delete_status ' : 1 , " error_mssage " : output }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
except BaseException as msg :
final_dic = { ' status ' : 0 , ' delete_status ' : 0 , ' error_mssage ' : str ( msg ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
def addSSHKey ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
domain = data [ ' domain ' ]
website = Websites . objects . get ( domain = domain )
if ACLManager . checkOwnership ( domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadErrorJson ( ' status ' , 0 )
key = data [ ' key ' ]
pathToKeyFile = " /home/ %s /.ssh/authorized_keys " % ( domain )
command = ' mkdir -p /home/ %s /.ssh/ ' % ( domain )
ProcessUtilities . executioner ( command )
command = ' chown %s : %s /home/ %s /.ssh/ ' % ( website . externalApp , website . externalApp , domain )
ProcessUtilities . executioner ( command )
tempPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
writeToFile = open ( tempPath , " w " )
writeToFile . write ( key )
writeToFile . close ( )
execPath = " sudo /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/firewallUtilities.py "
execPath = execPath + " addSSHKey --tempPath %s --path %s " % ( tempPath , pathToKeyFile )
output = ProcessUtilities . outputExecutioner ( execPath )
if output . find ( " 1,None " ) > - 1 :
final_dic = { ' status ' : 1 , ' add_status ' : 1 }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
else :
final_dic = { ' status ' : 0 , ' add_status ' : 0 , " error_mssage " : output }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
except BaseException as msg :
final_dic = { ' status ' : 0 , ' add_status ' : 0 , ' error_mssage ' : str ( msg ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
def ApacheManager ( self , request = None , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
if ACLManager . checkOwnership ( self . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
phps = PHPManager . findPHPVersions ( )
apachePHPs = PHPManager . findApachePHPVersions ( )
if ACLManager . CheckForPremFeature ( ' all ' ) :
apachemanager = 1
else :
apachemanager = 0
proc = httpProc ( request , ' websiteFunctions/ApacheManager.html ' ,
{ ' domainName ' : self . domain , ' phps ' : phps , ' apachemanager ' : apachemanager , ' apachePHPs ' : apachePHPs } )
return proc . render ( )
def saveApacheConfigsToFile ( self , userID = None , data = None ) :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] != 1 :
return ACLManager . loadErrorJson ( ' configstatus ' , 0 )
configData = data [ ' configData ' ]
self . domain = data [ ' domainName ' ]
mailUtilities . checkHome ( )
tempPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
vhost = open ( tempPath , " w " )
vhost . write ( configData )
vhost . close ( )
## writing data temporary to file
filePath = ApacheVhost . configBasePath + self . domain + ' .conf '
## save configuration data
execPath = " /usr/local/CyberCP/bin/python " + virtualHostUtilities . cyberPanel + " /plogical/virtualHostUtilities.py "
execPath = execPath + " saveApacheConfigsToFile --path " + filePath + " --tempPath " + tempPath
output = ProcessUtilities . outputExecutioner ( execPath )
if output . find ( " 1,None " ) > - 1 :
status = { " status " : 1 }
final_json = json . dumps ( status )
return HttpResponse ( final_json )
else :
final_dic = { ' status ' : 0 , ' error_message ' : output }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
def CreateDockerPackage ( self , request = None , userID = None , data = None , DeleteID = None ) :
Data = { }
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
try :
if DeleteID != None :
DockerPackagesDelete = DockerPackages . objects . get ( pk = DeleteID )
DockerPackagesDelete . delete ( )
except :
pass
Data [ ' packages ' ] = DockerPackages . objects . all ( )
proc = httpProc ( request , ' websiteFunctions/CreateDockerPackage.html ' ,
Data , ' createWebsite ' )
return proc . render ( )
def AssignPackage ( self , request = None , userID = None , data = None , DeleteID = None ) :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
try :
if DeleteID != None :
DockerPackagesDelete = PackageAssignment . objects . get ( pk = DeleteID )
DockerPackagesDelete . delete ( )
except :
pass
adminNames = ACLManager . loadAllUsers ( userID )
dockerpackages = DockerPackages . objects . all ( )
assignpackage = PackageAssignment . objects . all ( )
Data = { ' adminNames ' : adminNames , ' DockerPackages ' : dockerpackages , ' assignpackage ' : assignpackage }
proc = httpProc ( request , ' websiteFunctions/assignPackage.html ' ,
Data , ' createWebsite ' )
return proc . render ( )
def CreateDockersite ( self , request = None , userID = None , data = None ) :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " docker-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
adminNames = ACLManager . loadAllUsers ( userID )
Data = { ' adminNames ' : adminNames }
if PackageAssignment . objects . all ( ) . count ( ) == 0 :
name = ' Default '
cpu = 2
Memory = 1024
Bandwidth = ' 100 '
disk = ' 100 '
saveobj = DockerPackages ( Name = name , CPUs = cpu , Ram = Memory , Bandwidth = Bandwidth , DiskSpace = disk , config = ' ' )
saveobj . save ( )
userobj = Administrator . objects . get ( pk = 1 )
sv = PackageAssignment ( user = userobj , package = saveobj )
sv . save ( )
proc = httpProc ( request , ' websiteFunctions/CreateDockerSite.html ' ,
Data , ' createWebsite ' )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def AddDockerpackage ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
admin = Administrator . objects . get ( pk = userID )
name = data [ ' name ' ]
cpu = data [ ' cpu ' ]
Memory = data [ ' Memory ' ]
Bandwidth = data [ ' Bandwidth ' ]
disk = data [ ' disk ' ]
saveobj = DockerPackages ( Name = name , CPUs = cpu , Ram = Memory , Bandwidth = Bandwidth , DiskSpace = disk , config = ' ' )
saveobj . save ( )
status = { " status " : 1 , ' error_message ' : None }
final_json = json . dumps ( status )
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 Getpackage ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
admin = Administrator . objects . get ( pk = userID )
id = data [ ' id ' ]
docker_package = DockerPackages . objects . get ( pk = id )
# Convert DockerPackages object to dictionary
package_data = {
' Name ' : docker_package . Name ,
' CPU ' : docker_package . CPUs ,
' Memory ' : docker_package . Ram ,
' Bandwidth ' : docker_package . Bandwidth ,
' DiskSpace ' : docker_package . DiskSpace ,
}
rdata = { ' obj ' : package_data }
status = { " status " : 1 , ' error_message ' : rdata }
final_json = json . dumps ( status )
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 Updatepackage ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
admin = Administrator . objects . get ( pk = userID )
id = data [ ' id ' ]
CPU = data [ ' CPU ' ]
RAM = data [ ' RAM ' ]
Bandwidth = data [ ' Bandwidth ' ]
DiskSpace = data [ ' DiskSpace ' ]
docker_package = DockerPackages . objects . get ( pk = id )
docker_package . CPUs = CPU
docker_package . Ram = RAM
docker_package . Bandwidth = Bandwidth
docker_package . DiskSpace = DiskSpace
docker_package . save ( )
status = { " status " : 1 , ' error_message ' : None }
final_json = json . dumps ( status )
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 AddAssignment ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
if currentACL [ ' admin ' ] == 1 :
pass
else :
return ACLManager . loadError ( )
admin = Administrator . objects . get ( pk = userID )
package = data [ ' package ' ]
user = data [ ' user ' ]
userobj = Administrator . objects . get ( userName = user )
try :
delasg = PackageAssignment . objects . get ( user = userobj )
delasg . delete ( )
except :
pass
docker_package = DockerPackages . objects . get ( pk = int ( package ) )
sv = PackageAssignment ( user = userobj , package = docker_package )
sv . save ( )
status = { " status " : 1 , ' error_message ' : None }
final_json = json . dumps ( status )
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 submitDockerSiteCreation ( self , userID = None , data = None ) :
try :
admin = Administrator . objects . get ( pk = userID )
currentACL = ACLManager . loadedACL ( userID )
sitename = data [ ' sitename ' ]
Owner = data [ ' Owner ' ]
Domain = data [ ' Domain ' ]
MysqlCPU = int ( data [ ' MysqlCPU ' ] )
MYsqlRam = int ( data [ ' MYsqlRam ' ] )
SiteCPU = int ( data [ ' SiteCPU ' ] )
SiteRam = int ( data [ ' SiteRam ' ] )
App = data [ ' App ' ]
WPusername = data [ ' WPusername ' ]
WPemal = data [ ' WPemal ' ]
WPpasswd = data [ ' WPpasswd ' ]
if int ( MYsqlRam ) < 256 :
final_dic = { ' status ' : 0 , ' error_message ' : ' Minimum MySQL ram should be 256MB. ' }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
if int ( SiteRam ) < 256 :
final_dic = { ' status ' : 0 , ' error_message ' : ' Minimum site ram should be 256MB. ' }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
pattern = r " ^[a-z0-9][a-z0-9]*$ "
if re . match ( pattern , sitename ) :
pass
else :
final_dic = { ' status ' : 0 , ' error_message ' : f ' invalid site name " { sitename } " : must consist only of lowercase alphanumeric characters, as well as start with a letter or number. ' }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
loggedUser = Administrator . objects . get ( pk = userID )
newOwner = Administrator . objects . get ( userName = Owner )
try :
pkaobj = PackageAssignment . objects . get ( user = newOwner )
except :
final_dic = { ' status ' : 0 , ' error_message ' : str ( ' Please assign package to selected user ' ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
Dpkgobj = DockerPackages . objects . get ( pk = pkaobj . package . id )
pkg_cpu = Dpkgobj . CPUs
pkg_Ram = Dpkgobj . Ram
totalcup = SiteCPU + MysqlCPU
totalRam = SiteRam + MYsqlRam
if ( totalcup > pkg_cpu ) :
final_dic = { ' status ' : 0 , ' error_message ' : str ( f ' You can add { pkg_cpu } or less then { pkg_cpu } CPUs. ' ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
if ( totalRam > pkg_Ram ) :
final_dic = { ' status ' : 0 , ' error_message ' : str ( f ' You can add { pkg_Ram } or less then { pkg_Ram } Ram. ' ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
if ACLManager . currentContextPermission ( currentACL , ' createWebsite ' ) == 0 :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if ACLManager . checkOwnerProtection ( currentACL , loggedUser , newOwner ) == 0 :
return ACLManager . loadErrorJson ( ' createWebSiteStatus ' , 0 )
if ACLManager . CheckDomainBlackList ( Domain ) == 0 :
data_ret = { ' status ' : 0 , ' createWebSiteStatus ' : 0 , ' error_message ' : " Blacklisted domain. " }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
tempStatusPath = " /home/cyberpanel/ " + str ( randint ( 1000 , 9999 ) )
data = { }
data [ ' JobID ' ] = tempStatusPath
data [ ' Domain ' ] = Domain
data [ ' WPemal ' ] = WPemal
data [ ' Owner ' ] = Owner
data [ ' userID ' ] = userID
data [ ' MysqlCPU ' ] = MysqlCPU
data [ ' MYsqlRam ' ] = MYsqlRam
data [ ' SiteCPU ' ] = SiteCPU
data [ ' SiteRam ' ] = SiteRam
data [ ' sitename ' ] = sitename
data [ ' WPusername ' ] = WPusername
data [ ' WPpasswd ' ] = WPpasswd
data [ ' externalApp ' ] = " " . join ( re . findall ( " [a-zA-Z]+ " , Domain ) ) [ : 5 ] + str ( randint ( 1000 , 9999 ) )
data [ ' App ' ] = App
background = Docker_Sites ( ' SubmitDockersiteCreation ' , data )
background . start ( )
time . sleep ( 2 )
data_ret = { ' status ' : 1 , ' installStatus ' : 1 , ' error_message ' : ' None ' ,
' tempStatusPath ' : tempStatusPath }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
final_dic = { ' status ' : 0 , ' error_message ' : str ( msg ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
def ListDockerSites ( self , request = None , userID = None , data = None , DeleteID = None ) :
admin = Administrator . objects . get ( pk = userID )
currentACL = ACLManager . loadedACL ( userID )
fdata = { }
try :
if DeleteID != None :
DockerSitesDelete = DockerSites . objects . get ( pk = DeleteID )
if ACLManager . checkOwnership ( DockerSitesDelete . admin . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
passdata = { }
passdata [ " domain " ] = DockerSitesDelete . admin . domain
passdata [ " JobID " ] = None
passdata [ ' name ' ] = DockerSitesDelete . SiteName
da = Docker_Sites ( None , passdata )
da . DeleteDockerApp ( )
DockerSitesDelete . delete ( )
fdata [ ' Deleted ' ] = 1
except BaseException as msg :
fdata [ ' LPError ' ] = 1
fdata [ ' LPMessage ' ] = str ( msg )
fdata [ ' pagination ' ] = self . DockersitePagination ( currentACL , userID )
proc = httpProc ( request , ' websiteFunctions/ListDockersite.html ' ,
fdata )
return proc . render ( )
def fetchDockersite ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
pageNumber = int ( data [ ' page ' ] )
recordsToShow = int ( data [ ' recordsToShow ' ] )
endPageNumber , finalPageNumber = self . recordsPointer ( pageNumber , recordsToShow )
dockersites = ACLManager . findDockersiteObjects ( currentACL , userID )
pagination = self . getPagination ( len ( dockersites ) , recordsToShow )
logging . CyberCPLogFileWriter . writeToFile ( " Our dockersite " + str ( dockersites ) )
json_data = self . findDockersitesListJson ( dockersites [ 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 :
final_dic = { ' status ' : 0 , ' listWebSiteStatus ' : 1 , ' error_message ' : str ( msg ) }
final_json = json . dumps ( final_dic )
return HttpResponse ( final_json )
def Dockersitehome ( self , request = None , userID = None , data = None , DeleteID = None ) :
url = " https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission "
data = {
" name " : " docker-manager " ,
" IP " : ACLManager . GetServerIP ( )
}
import requests
response = requests . post ( url , data = json . dumps ( data ) )
Status = response . json ( ) [ ' status ' ]
if ( Status == 1 ) or ProcessUtilities . decideServer ( ) == ProcessUtilities . ent :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
ds = DockerSites . objects . get ( pk = self . domain )
if ACLManager . checkOwnership ( ds . admin . domain , admin , currentACL ) == 1 :
pass
else :
return ACLManager . loadError ( )
proc = httpProc ( request , ' websiteFunctions/DockerSiteHome.html ' ,
{ ' dockerSite ' : ds } )
return proc . render ( )
else :
from django . shortcuts import reverse
return redirect ( reverse ( ' pricing ' ) )
def fetchWPSitesForDomain ( 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 :
return ACLManager . loadErrorJson ( ' fetchStatus ' , 0 )
wp_sites = WPSites . objects . filter ( owner = website )
sites = [ ]
Vhuser = website . externalApp
PHPVersion = website . phpSelection
php = ACLManager . getPHPString ( PHPVersion )
FinalPHPPath = ' /usr/local/lsws/lsphp %s /bin/php ' % ( php )
for site in wp_sites :
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp core version --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , site . path )
version = ProcessUtilities . outputExecutioner ( command , None , True )
version = html . escape ( version )
# Get current theme
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp theme list --status=active --field=name --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , site . path )
currentTheme = ProcessUtilities . outputExecutioner ( command , None , True )
currentTheme = currentTheme . strip ( )
# Get number of plugins
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp plugin list --field=name --skip-plugins --skip-themes --path= %s 2>/dev/null ' % (
Vhuser , FinalPHPPath , site . path )
plugins = ProcessUtilities . outputExecutioner ( command , None , True )
pluginCount = len ( [ p for p in plugins . split ( ' \n ' ) if p . strip ( ) ] )
# Generate screenshot URL
site_url = site . FinalURL
if not site_url . startswith ( ( ' http:// ' , ' https:// ' ) ) :
site_url = f ' https:// { site_url } '
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp config list --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , site . path )
stdout = ProcessUtilities . outputExecutioner ( command )
debugging = 0
for items in stdout . split ( ' \n ' ) :
if items . find ( ' WP_DEBUG true constant ' ) > - 1 :
debugging = 1
break
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp option get blog_public --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , site . path )
stdoutput = ProcessUtilities . outputExecutioner ( command )
searchindex = int ( stdoutput . splitlines ( ) [ - 1 ] )
command = ' sudo -u %s %s -d error_reporting=0 /usr/bin/wp maintenance-mode status --skip-plugins --skip-themes --path= %s ' % (
Vhuser , FinalPHPPath , site . path )
maintenanceMod = ProcessUtilities . outputExecutioner ( command )
result = maintenanceMod . splitlines ( ) [ - 1 ]
if result . find ( ' not active ' ) > - 1 :
maintenanceMode = 0
else :
maintenanceMode = 1
sites . append ( {
' id ' : site . id ,
' title ' : site . title ,
' url ' : site . FinalURL ,
' path ' : site . path ,
' version ' : version ,
' phpVersion ' : site . owner . phpSelection ,
' theme ' : currentTheme ,
' activePlugins ' : pluginCount ,
' debugging ' : debugging ,
' searchIndex ' : searchindex ,
' maintenanceMode ' : maintenanceMode ,
' screenshot ' : f ' https://api.microlink.io/?url= { site_url } &screenshot=true&meta=false&embed=screenshot.url '
} )
data_ret = { ' status ' : 1 , ' fetchStatus ' : 1 , ' error_message ' : " None " , " sites " : sites }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
except BaseException as msg :
data_ret = { ' status ' : 0 , ' fetchStatus ' : 0 , ' error_message ' : str ( msg ) }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
def fetchWPBackups ( self , userID = None , data = None ) :
try :
currentACL = ACLManager . loadedACL ( userID )
admin = Administrator . objects . get ( pk = userID )
WPid = data [ ' WPid ' ]
# Get the WordPress site
wpsite = WPSites . objects . get ( pk = WPid )
# Check ownership
if currentACL [ ' admin ' ] != 1 :
if wpsite . owner != admin :
data_ret = { ' status ' : 0 , ' error_message ' : ' Not authorized to view this site backups ' }
json_data = json . dumps ( data_ret )
return HttpResponse ( json_data )
# Get backups for this WordPress site
backups = WPSitesBackup . objects . filter ( WPSiteID = WPid ) . order_by ( ' -id ' )
backup_list = [ ]
for backup in backups :
try :
config = json . loads ( backup . config )
# Extract date from backup name (format: backup-wpsite.com-11.28.23_01-12-36)
backup_name = config . get ( ' name ' , ' Unknown ' )
date_str = ' Unknown '
if ' backup- ' in backup_name :
try :
# Extract date part from name
date_part = backup_name . split ( ' - ' ) [ - 1 ] # Gets "11.28.23_01-12-36"
date_components = date_part . split ( ' _ ' )
if len ( date_components ) == 2 :
date_str = date_components [ 0 ] . replace ( ' . ' , ' / ' ) + ' ' + date_components [ 1 ] . replace ( ' - ' , ' : ' )
except :
date_str = backup_name
backup_list . append ( {
' id ' : backup . id ,
' name ' : backup_name ,
' date ' : date_str ,
' type ' : config . get ( ' Backuptype ' , ' Full Backup ' ) ,
' size ' : config . get ( ' size ' , ' 0 ' )
} )
except Exception as e :
logging . CyberCPLogFileWriter . writeToFile ( f " Error parsing backup config: { str ( e ) } " )
continue
data_ret = { ' status ' : 1 , ' backups ' : backup_list }
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 )