mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-01 02:46:20 +01:00
Integration of Github webhooks.
This commit is contained in:
@@ -9,13 +9,13 @@ from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
|||||||
import subprocess
|
import subprocess
|
||||||
import shlex
|
import shlex
|
||||||
from vhost import vhost
|
from vhost import vhost
|
||||||
from loginSystem.models import Administrator
|
|
||||||
from websiteFunctions.models import ChildDomains, Websites
|
from websiteFunctions.models import ChildDomains, Websites
|
||||||
import randomPassword
|
import randomPassword
|
||||||
from mysqlUtilities import mysqlUtilities
|
from mysqlUtilities import mysqlUtilities
|
||||||
from databases.models import Databases
|
from databases.models import Databases
|
||||||
from installUtilities import installUtilities
|
from installUtilities import installUtilities
|
||||||
import shutil
|
import shutil
|
||||||
|
from plogical.mailUtilities import mailUtilities
|
||||||
|
|
||||||
|
|
||||||
class ApplicationInstaller(multi.Thread):
|
class ApplicationInstaller(multi.Thread):
|
||||||
@@ -33,11 +33,12 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
self.installJoomla()
|
self.installJoomla()
|
||||||
elif self.installApp == 'git':
|
elif self.installApp == 'git':
|
||||||
self.setupGit()
|
self.setupGit()
|
||||||
|
elif self.installApp == 'pull':
|
||||||
|
self.gitPull()
|
||||||
|
|
||||||
except BaseException, msg:
|
except BaseException, msg:
|
||||||
logging.writeToFile( str(msg) + ' [ApplicationInstaller.run]')
|
logging.writeToFile( str(msg) + ' [ApplicationInstaller.run]')
|
||||||
|
|
||||||
|
|
||||||
def installWPCLI(self):
|
def installWPCLI(self):
|
||||||
try:
|
try:
|
||||||
command = 'sudo wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'
|
command = 'sudo wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'
|
||||||
@@ -52,7 +53,7 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
except BaseException, msg:
|
except BaseException, msg:
|
||||||
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installWPCLI]')
|
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installWPCLI]')
|
||||||
|
|
||||||
def installGit(self, tempStatusPath):
|
def installGit(self):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
command = 'sudo yum -y install http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm'
|
command = 'sudo yum -y install http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm'
|
||||||
@@ -64,7 +65,6 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
except BaseException, msg:
|
except BaseException, msg:
|
||||||
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installGit]')
|
logging.writeToFile( str(msg) + ' [ApplicationInstaller.installGit]')
|
||||||
|
|
||||||
|
|
||||||
def installWordPress(self):
|
def installWordPress(self):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
@@ -305,7 +305,6 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
def setupGit(self):
|
def setupGit(self):
|
||||||
try:
|
try:
|
||||||
admin = self.extraArgs['admin']
|
admin = self.extraArgs['admin']
|
||||||
@@ -325,30 +324,30 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
### Check git
|
### Check git
|
||||||
|
|
||||||
try:
|
try:
|
||||||
command = 'sudo /usr/local/bin/git --help'
|
command = 'sudo git --help'
|
||||||
res = subprocess.call(shlex.split(command))
|
res = subprocess.call(shlex.split(command))
|
||||||
|
|
||||||
if res == 1:
|
if res == 1:
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('Installing GIT..,0')
|
statusFile.writelines('Installing GIT..,0')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
self.installGit(tempStatusPath)
|
self.installGit()
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('GIT successfully installed,40')
|
statusFile.writelines('GIT successfully installed,20')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('Installing GIT..,0')
|
statusFile.writelines('Installing GIT..,0')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
self.installGit(tempStatusPath)
|
self.installGit()
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('GIT successfully installed.,40')
|
statusFile.writelines('GIT successfully installed.,20')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
|
|
||||||
## Open Status File
|
## Open Status File
|
||||||
|
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('Setting up directories..,40')
|
statusFile.writelines('Setting up directories..,20')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -396,7 +395,7 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines("Target directory should be empty before installation, otherwise data loss could occur." + " [404]")
|
statusFile.writelines("Target directory should be empty before attaching GIT, otherwise data loss could occur." + " [404]")
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
elif len(dirFiles) == 0:
|
elif len(dirFiles) == 0:
|
||||||
@@ -404,7 +403,7 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
else:
|
else:
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines(
|
statusFile.writelines(
|
||||||
"Target directory should be empty before installation, otherwise data loss could occur." + " [404]")
|
"Target directory should be empty before attaching GIT, otherwise data loss could occur." + " [404]")
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -416,13 +415,13 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
command = 'sudo GIT_SSH_COMMAND="ssh -i /root/.ssh/cyberpanel -o StrictHostKeyChecking=no" /usr/local/bin/git clone ' \
|
command = 'sudo GIT_SSH_COMMAND="ssh -i /root/.ssh/cyberpanel -o StrictHostKeyChecking=no" git clone ' \
|
||||||
'--depth 1 --no-single-branch git@github.com:' + username + '/' + reponame + '.git -b ' + branch + ' ' + finalPath
|
'--depth 1 --no-single-branch git@github.com:' + username + '/' + reponame + '.git -b ' + branch + ' ' + finalPath
|
||||||
subprocess.call(shlex.split(command))
|
result = subprocess.check_output(shlex.split(command))
|
||||||
|
|
||||||
except subprocess.CalledProcessError, msg:
|
except subprocess.CalledProcessError, msg:
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines('Failed to clone repository. [404]')
|
statusFile.writelines('Failed to clone repository, make sure you deployed your key to repository. [404]')
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -435,18 +434,50 @@ class ApplicationInstaller(multi.Thread):
|
|||||||
vhost.addRewriteRules(domainName)
|
vhost.addRewriteRules(domainName)
|
||||||
installUtilities.reStartLiteSpeed()
|
installUtilities.reStartLiteSpeed()
|
||||||
|
|
||||||
|
mailUtilities.checkHome()
|
||||||
|
|
||||||
|
gitPath = '/home/cyberpanel/' + domainName + '.git'
|
||||||
|
writeToFile = open(gitPath, 'w')
|
||||||
|
writeToFile.write(username + ':' + reponame)
|
||||||
|
writeToFile.close()
|
||||||
|
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines("Successfully Installed. [200]")
|
statusFile.writelines("GIT Repository successfully attached. [200]")
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
except BaseException, msg:
|
except BaseException, msg:
|
||||||
|
|
||||||
|
os.remove('/home/cyberpanel/' + domainName + '.git')
|
||||||
|
|
||||||
statusFile = open(tempStatusPath, 'w')
|
statusFile = open(tempStatusPath, 'w')
|
||||||
statusFile.writelines(str(msg) + " [404]")
|
statusFile.writelines(str(msg) + " [404]")
|
||||||
statusFile.close()
|
statusFile.close()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def gitPull(self):
|
||||||
|
try:
|
||||||
|
domain = self.extraArgs['domain']
|
||||||
|
|
||||||
|
command = 'sudo GIT_SSH_COMMAND="ssh -i /root/.ssh/cyberpanel -o StrictHostKeyChecking=no" git -C /home/' + domain + '/public_html/ pull'
|
||||||
|
subprocess.check_output(shlex.split(command))
|
||||||
|
|
||||||
|
website = Websites.objects.get(domain=domain)
|
||||||
|
externalApp = website.externalApp
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
command = "sudo chown -R " + externalApp + ":" + externalApp + " " + '/home/' + domain + '/public_html/'
|
||||||
|
cmd = shlex.split(command)
|
||||||
|
subprocess.call(cmd)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
except BaseException, msg:
|
||||||
|
logging.writeToFile(str(msg)+ " [ApplicationInstaller.gitPull]")
|
||||||
|
return 0
|
||||||
|
|
||||||
def installJoomla(self):
|
def installJoomla(self):
|
||||||
|
|
||||||
|
|||||||
@@ -4245,6 +4245,8 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = true;
|
$scope.gitLoading = true;
|
||||||
$scope.githubBranch = 'master';
|
$scope.githubBranch = 'master';
|
||||||
$scope.installProg = true;
|
$scope.installProg = true;
|
||||||
|
$scope.goBackDisable = true;
|
||||||
|
|
||||||
|
|
||||||
var statusFile;
|
var statusFile;
|
||||||
var domain = $("#domainNamePage").text();
|
var domain = $("#domainNamePage").text();
|
||||||
@@ -4306,6 +4308,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
|
|
||||||
$("#installProgress").css("width", "0%");
|
$("#installProgress").css("width", "0%");
|
||||||
$scope.installPercentage = "0";
|
$scope.installPercentage = "0";
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4326,6 +4329,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
|
|
||||||
$scope.canNotFetch = true;
|
$scope.canNotFetch = true;
|
||||||
$scope.couldNotConnect = false;
|
$scope.couldNotConnect = false;
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4343,7 +4347,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = false;
|
$scope.gitLoading = false;
|
||||||
$scope.installProg = false;
|
$scope.installProg = false;
|
||||||
|
|
||||||
$scope.currentStatus = "Starting installation..";
|
$scope.currentStatus = "Attaching GIT..";
|
||||||
|
|
||||||
url = "/websites/setupGitRepo";
|
url = "/websites/setupGitRepo";
|
||||||
|
|
||||||
@@ -4380,6 +4384,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = true;
|
$scope.gitLoading = true;
|
||||||
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4394,4 +4399,17 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$scope.goBack = function () {
|
||||||
|
$scope.installationDetailsForm = false;
|
||||||
|
$scope.installationProgress = true;
|
||||||
|
$scope.installProg = true;
|
||||||
|
$scope.installationFailed = true;
|
||||||
|
$scope.installationSuccessfull = true;
|
||||||
|
$scope.couldNotConnect = true;
|
||||||
|
$scope.gitLoading = true;
|
||||||
|
$scope.goBackDisable = true;
|
||||||
|
$("#installProgress").css("width", "0%");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -4245,6 +4245,8 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = true;
|
$scope.gitLoading = true;
|
||||||
$scope.githubBranch = 'master';
|
$scope.githubBranch = 'master';
|
||||||
$scope.installProg = true;
|
$scope.installProg = true;
|
||||||
|
$scope.goBackDisable = true;
|
||||||
|
|
||||||
|
|
||||||
var statusFile;
|
var statusFile;
|
||||||
var domain = $("#domainNamePage").text();
|
var domain = $("#domainNamePage").text();
|
||||||
@@ -4282,7 +4284,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.installationSuccessfull = false;
|
$scope.installationSuccessfull = false;
|
||||||
$scope.couldNotConnect = true;
|
$scope.couldNotConnect = true;
|
||||||
$scope.gitLoading = true;
|
$scope.gitLoading = true;
|
||||||
$scope.goBackDisable = false;
|
$scope.goBackDisable = true;
|
||||||
|
|
||||||
$scope.installationURL = domain;
|
$scope.installationURL = domain;
|
||||||
|
|
||||||
@@ -4306,6 +4308,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
|
|
||||||
$("#installProgress").css("width", "0%");
|
$("#installProgress").css("width", "0%");
|
||||||
$scope.installPercentage = "0";
|
$scope.installPercentage = "0";
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4326,6 +4329,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
|
|
||||||
$scope.canNotFetch = true;
|
$scope.canNotFetch = true;
|
||||||
$scope.couldNotConnect = false;
|
$scope.couldNotConnect = false;
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4343,7 +4347,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = false;
|
$scope.gitLoading = false;
|
||||||
$scope.installProg = false;
|
$scope.installProg = false;
|
||||||
|
|
||||||
$scope.currentStatus = "Starting installation..";
|
$scope.currentStatus = "Attaching GIT..";
|
||||||
|
|
||||||
url = "/websites/setupGitRepo";
|
url = "/websites/setupGitRepo";
|
||||||
|
|
||||||
@@ -4380,6 +4384,7 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
$scope.gitLoading = true;
|
$scope.gitLoading = true;
|
||||||
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
|
$scope.goBackDisable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4394,4 +4399,17 @@ app.controller('setupGit', function($scope, $http, $timeout) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$scope.goBack = function () {
|
||||||
|
$scope.installationDetailsForm = false;
|
||||||
|
$scope.installationProgress = true;
|
||||||
|
$scope.installProg = true;
|
||||||
|
$scope.installationFailed = true;
|
||||||
|
$scope.installationSuccessfull = true;
|
||||||
|
$scope.couldNotConnect = true;
|
||||||
|
$scope.gitLoading = true;
|
||||||
|
$scope.goBackDisable = true;
|
||||||
|
$("#installProgress").css("width", "0%");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -97,11 +97,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-hide="installationFailed" class="alert alert-danger">
|
<div ng-hide="installationFailed" class="alert alert-danger">
|
||||||
<p>{% trans "Installation failed. Error message:" %} {$ errorMessage $}</p>
|
<p>{% trans "Error message:" %} {$ errorMessage $}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-hide="installationSuccessfull" class="alert alert-success">
|
<div ng-hide="installationSuccessfull" class="alert alert-success">
|
||||||
<p>{% trans "Installation successful. Visit:" %} {$ installationURL $}</p>
|
<p>{% trans "GIT Successfully attached. Visit:" %} {$ installationURL $}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -114,6 +114,14 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div ng-hide="installationProgress" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<button type="button" ng-disabled="goBackDisable" ng-click="goBack()" class="btn btn-primary btn-lg btn-block">{% trans "Go Back" %}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -93,5 +93,8 @@ urlpatterns = [
|
|||||||
url(r'^(?P<domain>([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?)/setupGit$', views.setupGit, name='setupGit'),
|
url(r'^(?P<domain>([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?)/setupGit$', views.setupGit, name='setupGit'),
|
||||||
url(r'^setupGitRepo$', views.setupGitRepo, name='setupGitRepo'),
|
url(r'^setupGitRepo$', views.setupGitRepo, name='setupGitRepo'),
|
||||||
|
|
||||||
|
url(r'^(?P<domain>([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?)/gitNotify$', views.gitNotify, name='gitNotify'),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
@@ -2561,3 +2561,30 @@ def setupGitRepo(request):
|
|||||||
status = {"installStatus":0,"error":str(msg)}
|
status = {"installStatus":0,"error":str(msg)}
|
||||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installWordpress]")
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + "[installWordpress]")
|
||||||
return HttpResponse("Not Logged in as admin")
|
return HttpResponse("Not Logged in as admin")
|
||||||
|
|
||||||
|
|
||||||
|
def gitNotify(request, domain):
|
||||||
|
try:
|
||||||
|
if request.method == 'POST':
|
||||||
|
try:
|
||||||
|
|
||||||
|
extraArgs = {}
|
||||||
|
extraArgs['domain'] = 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, msg:
|
||||||
|
data_ret = {'pulled': 0, 'error_message': str(msg)}
|
||||||
|
json_data = json.dumps(data_ret)
|
||||||
|
return HttpResponse(json_data)
|
||||||
|
|
||||||
|
|
||||||
|
except KeyError, msg:
|
||||||
|
data_ret = {"pulled":0,"error":str(msg)}
|
||||||
|
json_data = json.dumps(data_ret)
|
||||||
|
return HttpResponse(json_data)
|
||||||
Reference in New Issue
Block a user