mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-09 14:56:10 +01:00
v1.8.9
This commit is contained in:
@@ -675,6 +675,9 @@ class BackupManager:
|
|||||||
command = "mv " + tempCronPath + " " + path
|
command = "mv " + tempCronPath + " " + path
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
|
command = 'chown root:root %s' % (path)
|
||||||
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
command = "systemctl restart crond"
|
command = "systemctl restart crond"
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
@@ -707,6 +710,9 @@ class BackupManager:
|
|||||||
command = "sudo mv " + tempCronPath + " " + path
|
command = "sudo mv " + tempCronPath + " " + path
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
|
command = 'chown root:root %s' % (path)
|
||||||
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
command = "sudo systemctl restart crond"
|
command = "sudo systemctl restart crond"
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
@@ -762,8 +768,10 @@ class BackupManager:
|
|||||||
command = "sudo mv " + tempCronPath + " " + path
|
command = "sudo mv " + tempCronPath + " " + path
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
command = "sudo systemctl restart crond"
|
command = 'chown root:root %s' % (path)
|
||||||
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
|
command = "sudo systemctl restart crond"
|
||||||
ProcessUtilities.executioner(command)
|
ProcessUtilities.executioner(command)
|
||||||
|
|
||||||
destination = dest.objects.get(destLoc=backupDest)
|
destination = dest.objects.get(destLoc=backupDest)
|
||||||
|
|||||||
@@ -126,6 +126,9 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
if(!Boolean(response.data.createNewUser)){
|
if(!Boolean(response.data.createNewUser)){
|
||||||
$('.createNewUser').hide();
|
$('.createNewUser').hide();
|
||||||
}
|
}
|
||||||
|
if(!Boolean(response.data.listUsers)){
|
||||||
|
$('.listUsers').hide();
|
||||||
|
}
|
||||||
if(!Boolean(response.data.resellerCenter)){
|
if(!Boolean(response.data.resellerCenter)){
|
||||||
$('.resellerCenter').hide();
|
$('.resellerCenter').hide();
|
||||||
}
|
}
|
||||||
@@ -158,6 +161,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
$('.createPackage').hide();
|
$('.createPackage').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!Boolean(response.data.listPackages)){
|
||||||
|
$('.listPackages').hide();
|
||||||
|
}
|
||||||
|
|
||||||
if(!Boolean(response.data.deletePackage)){
|
if(!Boolean(response.data.deletePackage)){
|
||||||
$('.deletePackage').hide();
|
$('.deletePackage').hide();
|
||||||
}
|
}
|
||||||
@@ -208,6 +215,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
$('.emailAsWhole').hide();
|
$('.emailAsWhole').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!Boolean(response.data.listEmails)){
|
||||||
|
$('.listEmails').hide();
|
||||||
|
}
|
||||||
|
|
||||||
if(!Boolean(response.data.createEmail)){
|
if(!Boolean(response.data.createEmail)){
|
||||||
$('.createEmail').hide();
|
$('.createEmail').hide();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -319,7 +319,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a class="header-btn" id="logout-btn" href="{% url 'logout' %}" title="{% trans 'Logout' %}">
|
<a class="header-btn" id="logout-btn" href="{% url 'logout' %}" title="{% trans 'Logout' %}">
|
||||||
<i class="glyph-icon icon-linecons-lock"></i>
|
<i class="glyph-icon icon-power-off"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
@@ -373,6 +373,9 @@
|
|||||||
<li class="createNewUser"><a href="{% url 'createUser' %}"
|
<li class="createNewUser"><a href="{% url 'createUser' %}"
|
||||||
title="{% trans 'Create New User' %}"><span>{% trans "Create New User" %}</span></a>
|
title="{% trans 'Create New User' %}"><span>{% trans "Create New User" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="listUsers"><a href="{% url 'listUsers' %}"
|
||||||
|
title="{% trans 'List Users' %}"><span>{% trans "List Users" %}</span></a>
|
||||||
|
</li>
|
||||||
<li><a href="{% url 'modifyUsers' %}"
|
<li><a href="{% url 'modifyUsers' %}"
|
||||||
title="{% trans 'Modify User' %}"><span>{% trans "Modify User" %}</span></a></li>
|
title="{% trans 'Modify User' %}"><span>{% trans "Modify User" %}</span></a></li>
|
||||||
<li class="deleteUser"><a href="{% url 'deleteUser' %}"
|
<li class="deleteUser"><a href="{% url 'deleteUser' %}"
|
||||||
@@ -439,6 +442,9 @@
|
|||||||
<li class="createPackage"><a href="{% url 'createPackage' %}"
|
<li class="createPackage"><a href="{% url 'createPackage' %}"
|
||||||
title="{% trans 'Create Package' %}"><span>{% trans "Create Package" %}</span></a>
|
title="{% trans 'Create Package' %}"><span>{% trans "Create Package" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="listPackages"><a href="{% url 'listPackages' %}"
|
||||||
|
title="{% trans 'List Packages' %}"><span>{% trans "List Packages" %}</span></a>
|
||||||
|
</li>
|
||||||
<li class="deletePackage"><a href="{% url 'deletePackage' %}"
|
<li class="deletePackage"><a href="{% url 'deletePackage' %}"
|
||||||
title="{% trans 'Delete Package' %}"><span>{% trans "Delete Package" %}</span></a>
|
title="{% trans 'Delete Package' %}"><span>{% trans "Delete Package" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
@@ -511,6 +517,9 @@
|
|||||||
<li class="createEmail"><a href="{% url 'createEmailAccount' %}"
|
<li class="createEmail"><a href="{% url 'createEmailAccount' %}"
|
||||||
title="{% trans 'Create Email Account' %}"><span>{% trans "Create Email" %}</span></a>
|
title="{% trans 'Create Email Account' %}"><span>{% trans "Create Email" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="listEmails"><a href="{% url 'listEmails' %}"
|
||||||
|
title="{% trans 'List Emails' %}"><span>{% trans "List Emails" %}</span></a>
|
||||||
|
</li>
|
||||||
<li class="deleteEmail"><a href="{% url 'deleteEmailAccount' %}"
|
<li class="deleteEmail"><a href="{% url 'deleteEmailAccount' %}"
|
||||||
title="{% trans 'Delete Email Account' %}"><span>{% trans "Delete Email" %}</span></a>
|
title="{% trans 'Delete Email Account' %}"><span>{% trans "Delete Email" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -519,13 +519,11 @@ class DNSManager:
|
|||||||
delRecord = Records.objects.get(id=id)
|
delRecord = Records.objects.get(id=id)
|
||||||
|
|
||||||
admin = Administrator.objects.get(pk=userID)
|
admin = Administrator.objects.get(pk=userID)
|
||||||
if currentACL['admin'] == 1:
|
|
||||||
pass
|
if ACLManager.checkOwnership(delRecord.domainOwner.name, admin, currentACL) == 1:
|
||||||
elif delRecord.domainOwner.admin == admin:
|
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return ACLManager.loadErrorJson()
|
return ACLManager.loadError()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delRecord.delete()
|
delRecord.delete()
|
||||||
|
|||||||
@@ -952,7 +952,7 @@ class preFlightsChecks:
|
|||||||
|
|
||||||
os.chdir(self.path)
|
os.chdir(self.path)
|
||||||
|
|
||||||
command = "wget http://cyberpanel.sh/CyberPanel.1.8.8.tar.gz"
|
command = "wget http://cyberpanel.sh/CyberPanel.1.8.9.tar.gz"
|
||||||
#command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz"
|
#command = "wget http://cyberpanel.sh/CyberPanelTemp.tar.gz"
|
||||||
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
|
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
|
||||||
'CyberPanel Download',
|
'CyberPanel Download',
|
||||||
@@ -961,7 +961,7 @@ class preFlightsChecks:
|
|||||||
##
|
##
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
command = "tar zxf CyberPanel.1.8.8.tar.gz"
|
command = "tar zxf CyberPanel.1.8.9.tar.gz"
|
||||||
#command = "tar zxf CyberPanelTemp.tar.gz"
|
#command = "tar zxf CyberPanelTemp.tar.gz"
|
||||||
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
|
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
|
||||||
'Extract CyberPanel',1, 1, os.EX_OSERR)
|
'Extract CyberPanel',1, 1, os.EX_OSERR)
|
||||||
@@ -1054,7 +1054,7 @@ class preFlightsChecks:
|
|||||||
path = "/usr/local/CyberCP/version.txt"
|
path = "/usr/local/CyberCP/version.txt"
|
||||||
writeToFile = open(path, 'w')
|
writeToFile = open(path, 'w')
|
||||||
writeToFile.writelines('1.8\n')
|
writeToFile.writelines('1.8\n')
|
||||||
writeToFile.writelines('2')
|
writeToFile.writelines('9')
|
||||||
writeToFile.close()
|
writeToFile.close()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
@@ -1362,6 +1362,40 @@ enabled=1"""
|
|||||||
preFlightsChecks.stdOut("Dovecot and Dovecot-MySQL successfully installed!")
|
preFlightsChecks.stdOut("Dovecot and Dovecot-MySQL successfully installed!")
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
if self.distro != centos:
|
||||||
|
command = 'curl https://repo.dovecot.org/DOVECOT-REPO-GPG | gpg --import'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
command = 'gpg --export ED409DA1 > /etc/apt/trusted.gpg.d/dovecot.gpg'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
debPath = '/etc/apt/sources.list.d/dovecot.list'
|
||||||
|
writeToFile = open(debPath, 'w')
|
||||||
|
writeToFile.write('deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/bionic bionic main\n')
|
||||||
|
writeToFile.close()
|
||||||
|
|
||||||
|
try:
|
||||||
|
command = 'apt update -y'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
command = 'dpkg --configure -a'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
command = 'apt --fix-broken install -y'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
command = 'DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical sudo apt-get -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" --only-upgrade install dovecot-mysql -y'
|
||||||
|
subprocess.call(command, shell=True)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
except OSError, msg:
|
except OSError, msg:
|
||||||
logging.InstallLog.writeToFile(str(msg) + " [install_postfix_davecot]")
|
logging.InstallLog.writeToFile(str(msg) + " [install_postfix_davecot]")
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ class ACL(models.Model):
|
|||||||
|
|
||||||
## User Management
|
## User Management
|
||||||
createNewUser = models.IntegerField(default=0)
|
createNewUser = models.IntegerField(default=0)
|
||||||
|
listUsers = models.IntegerField(default=0)
|
||||||
deleteUser = models.IntegerField(default=0)
|
deleteUser = models.IntegerField(default=0)
|
||||||
resellerCenter = models.IntegerField(default=0)
|
resellerCenter = models.IntegerField(default=0)
|
||||||
changeUserACL = models.IntegerField(default=0)
|
changeUserACL = models.IntegerField(default=0)
|
||||||
@@ -28,6 +29,7 @@ class ACL(models.Model):
|
|||||||
## Package Management
|
## Package Management
|
||||||
|
|
||||||
createPackage = models.IntegerField(default=0)
|
createPackage = models.IntegerField(default=0)
|
||||||
|
listPackages = models.IntegerField(default=0)
|
||||||
deletePackage = models.IntegerField(default=0)
|
deletePackage = models.IntegerField(default=0)
|
||||||
modifyPackage = models.IntegerField(default=0)
|
modifyPackage = models.IntegerField(default=0)
|
||||||
|
|
||||||
@@ -47,6 +49,7 @@ class ACL(models.Model):
|
|||||||
## Email Management
|
## Email Management
|
||||||
|
|
||||||
createEmail = models.IntegerField(default=1)
|
createEmail = models.IntegerField(default=1)
|
||||||
|
listEmails = models.IntegerField(default=1)
|
||||||
deleteEmail = models.IntegerField(default=1)
|
deleteEmail = models.IntegerField(default=1)
|
||||||
emailForwarding = models.IntegerField(default=1)
|
emailForwarding = models.IntegerField(default=1)
|
||||||
changeEmailPassword = models.IntegerField(default=1)
|
changeEmailPassword = models.IntegerField(default=1)
|
||||||
|
|||||||
@@ -91,6 +91,17 @@ application.controller('loginSystem', function($scope,$http,$window) {
|
|||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.initiateLogin = function($event){
|
||||||
|
var keyCode = $event.which || $event.keyCode;
|
||||||
|
if (keyCode === 13) {
|
||||||
|
$scope.verifyLoginCredentials();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input ng-model="password" type="password" class="form-control" id="password" placeholder="Password" required>
|
<input ng-keypress="initiateLogin($event)" ng-model="password" type="password" class="form-control" id="password" placeholder="Password" required>
|
||||||
<span class="input-group-addon bg-blue">
|
<span class="input-group-addon bg-blue">
|
||||||
<i class="glyph-icon icon-unlock-alt"></i>
|
<i class="glyph-icon icon-unlock-alt"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ def loadLoginPage(request):
|
|||||||
firstName="Cyber",lastName="Panel", acl=acl, token=token)
|
firstName="Cyber",lastName="Panel", acl=acl, token=token)
|
||||||
admin.save()
|
admin.save()
|
||||||
|
|
||||||
vers = version(currentVersion="1.8", build=8)
|
vers = version(currentVersion="1.8", build=9)
|
||||||
vers.save()
|
vers.save()
|
||||||
|
|
||||||
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
||||||
|
|||||||
@@ -58,6 +58,26 @@ class MailServerManager:
|
|||||||
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||||||
return HttpResponse(str(msg))
|
return HttpResponse(str(msg))
|
||||||
|
|
||||||
|
|
||||||
|
def listEmails(self):
|
||||||
|
try:
|
||||||
|
userID = self.request.session['userID']
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if ACLManager.currentContextPermission(currentACL, 'listEmails') == 0:
|
||||||
|
return ACLManager.loadError()
|
||||||
|
|
||||||
|
if not os.path.exists('/home/cyberpanel/postfix'):
|
||||||
|
return render(self.request, "mailServer/listEmails.html", {"status": 0})
|
||||||
|
|
||||||
|
websitesName = ACLManager.findAllSites(currentACL, userID)
|
||||||
|
websitesName = websitesName + ACLManager.findChildDomains(websitesName)
|
||||||
|
|
||||||
|
return render(self.request, 'mailServer/listEmails.html',
|
||||||
|
{'websiteList': websitesName, "status": 1})
|
||||||
|
except BaseException, msg:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
def submitEmailCreation(self):
|
def submitEmailCreation(self):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
@@ -347,6 +367,53 @@ class MailServerManager:
|
|||||||
json_data = json.dumps(data_ret)
|
json_data = json.dumps(data_ret)
|
||||||
return HttpResponse(json_data)
|
return HttpResponse(json_data)
|
||||||
|
|
||||||
|
|
||||||
|
def fetchEmails(self):
|
||||||
|
try:
|
||||||
|
userID = self.request.session['userID']
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if ACLManager.currentContextPermission(currentACL, 'listEmails') == 0:
|
||||||
|
return ACLManager.loadErrorJson('status', 0)
|
||||||
|
|
||||||
|
data = json.loads(self.request.body)
|
||||||
|
selectedDomain = data['selectedDomain']
|
||||||
|
|
||||||
|
admin = Administrator.objects.get(pk=userID)
|
||||||
|
if ACLManager.checkOwnership(selectedDomain, admin, currentACL) == 1:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return ACLManager.loadErrorJson()
|
||||||
|
try:
|
||||||
|
|
||||||
|
emailDomain = Domains.objects.get(domain=selectedDomain)
|
||||||
|
except:
|
||||||
|
raise BaseException('No emails exist for this domain.')
|
||||||
|
|
||||||
|
records = emailDomain.eusers_set.all()
|
||||||
|
|
||||||
|
json_data = "["
|
||||||
|
checker = 0
|
||||||
|
|
||||||
|
for items in records:
|
||||||
|
dic = {'email': items.email,
|
||||||
|
}
|
||||||
|
|
||||||
|
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, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
except BaseException, msg:
|
||||||
|
final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)}
|
||||||
|
final_json = json.dumps(final_dic)
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
#######
|
#######
|
||||||
|
|
||||||
def changeEmailAccountPassword(self):
|
def changeEmailAccountPassword(self):
|
||||||
|
|||||||
@@ -1108,3 +1108,179 @@ app.controller('emailForwarding', function ($scope, $http) {
|
|||||||
|
|
||||||
});
|
});
|
||||||
/* Java script for email forwarding */
|
/* Java script for email forwarding */
|
||||||
|
|
||||||
|
|
||||||
|
/* Java script code for List Emails */
|
||||||
|
|
||||||
|
app.controller('listEmails', function ($scope, $http) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
|
||||||
|
$scope.populateCurrentRecords = function () {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
|
||||||
|
url = "/email/fetchEmails";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
selectedDomain: $scope.selectedDomain,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
$scope.emailsAccounts = false;
|
||||||
|
$scope.records = JSON.parse(response.data.data);
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Emails Successfully Fetched.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
$scope.errorMessage = response.data.error_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.deleteEmailAccountFinal = function (email) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
var url = "/email/submitEmailDeletion";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
email: email,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
if (response.data.deleteEmailStatus === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Email Successfully deleted.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.changePasswordInitial = function (email) {
|
||||||
|
$scope.email = email;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.changePassword = function () {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
|
||||||
|
var url = "/email/submitPasswordChange";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
domain: $scope.selectedDomain,
|
||||||
|
email: $scope.email,
|
||||||
|
passwordByPass: $scope.password,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Password Successfully changed.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* Java script code for List Emails Ends here */
|
||||||
164
mailServer/templates/mailServer/listEmails.html
Executable file
164
mailServer/templates/mailServer/listEmails.html
Executable file
@@ -0,0 +1,164 @@
|
|||||||
|
{% extends "baseTemplate/index.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% block title %}{% trans "List Email Accounts - CyberPanel" %}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div id="page-title">
|
||||||
|
<h2>{% trans "List Email Accounts" %}</h2>
|
||||||
|
<p>{% trans "List Emails Accounts. Change their passwords or delete them." %}</p>
|
||||||
|
</div>
|
||||||
|
<div ng-controller="listEmails" class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<h3 class="title-hero">
|
||||||
|
{% trans "List Email Accounts" %} <img ng-hide="cyberpanelLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h3>
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
{% if not status %}
|
||||||
|
|
||||||
|
<div class="col-md-12 text-center" style="margin-bottom: 2%;">
|
||||||
|
<h3>{% trans "Postfix is disabled." %}
|
||||||
|
<a href="{% url 'managePostfix' %}">
|
||||||
|
<button class="btn btn-alt btn-hover btn-blue-alt">
|
||||||
|
<span>{% trans "Enable Now" %}</span>
|
||||||
|
<i class="glyph-icon icon-arrow-right"></i>
|
||||||
|
</button>
|
||||||
|
</a></h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
<form action="/" class="form-horizontal bordered-row">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Select Domain" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<select ng-change="populateCurrentRecords()" ng-model="selectedDomain"
|
||||||
|
class="form-control">
|
||||||
|
{% for items in websiteList %}
|
||||||
|
<option>{{ items }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
<div ng-hide="emailsAccounts" class="form-group">
|
||||||
|
|
||||||
|
<div class="col-sm-12">
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Emails" %}</th>
|
||||||
|
<th>{% trans "Actions" %}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="record in records track by $index">
|
||||||
|
<td ng-bind="record.email"></td>
|
||||||
|
<td>
|
||||||
|
<a data-toggle="modal" data-target="#settings"
|
||||||
|
ng-click="changePasswordInitial(record.email)"
|
||||||
|
class="btn btn-border btn-alt border-purple btn-link font-purple"
|
||||||
|
href="#"
|
||||||
|
title=""><span>{% trans 'Change Password' %}</span></a>
|
||||||
|
<a ng-click="deleteEmailAccountFinal(record.email)" class="btn btn-border btn-alt border-red btn-link font-red" href="#"
|
||||||
|
title=""><span>{% trans 'Delete' %}</span></a>
|
||||||
|
|
||||||
|
<!--- Modal --->
|
||||||
|
<div id="settings" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
|
||||||
|
<!-- Modal content-->
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close"
|
||||||
|
data-dismiss="modal">×
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">Change Password
|
||||||
|
<img ng-hide="cyberpanelLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<form name="containerSettingsForm" action="/"
|
||||||
|
class="form-horizontal">
|
||||||
|
<div ng-hide="installationDetailsForm"
|
||||||
|
class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Email" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input name="name" type="text"
|
||||||
|
class="form-control"
|
||||||
|
ng-model="email" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm"
|
||||||
|
class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Password" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="password"
|
||||||
|
class="form-control"
|
||||||
|
ng-model="$parent.password">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" ng-disabled="savingSettings"
|
||||||
|
class="btn btn-primary"
|
||||||
|
ng-click="changePassword()"
|
||||||
|
data-dismiss="modal">
|
||||||
|
Save
|
||||||
|
</button>
|
||||||
|
<button type="button" ng-disabled="savingSettings"
|
||||||
|
class="btn btn-default" data-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--- Modal End--->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -4,7 +4,9 @@ import views
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', views.loadEmailHome, name='loadEmailHome'),
|
url(r'^$', views.loadEmailHome, name='loadEmailHome'),
|
||||||
url(r'^createEmailAccount', views.createEmailAccount, name='createEmailAccount'),
|
url(r'^createEmailAccount', views.createEmailAccount, name='createEmailAccount'),
|
||||||
|
url(r'^listEmails$', views.listEmails, name='listEmails'),
|
||||||
url(r'^submitEmailCreation', views.submitEmailCreation, name='submitEmailCreation'),
|
url(r'^submitEmailCreation', views.submitEmailCreation, name='submitEmailCreation'),
|
||||||
|
url(r'^fetchEmails$', views.fetchEmails, name='fetchEmails'),
|
||||||
|
|
||||||
|
|
||||||
## Mail Forwardings
|
## Mail Forwardings
|
||||||
|
|||||||
@@ -22,6 +22,21 @@ def createEmailAccount(request):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return redirect(loadLoginPage)
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
def listEmails(request):
|
||||||
|
try:
|
||||||
|
msM = MailServerManager(request)
|
||||||
|
return msM.listEmails()
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
|
def fetchEmails(request):
|
||||||
|
try:
|
||||||
|
msM = MailServerManager(request)
|
||||||
|
return msM.fetchEmails()
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
def submitEmailCreation(request):
|
def submitEmailCreation(request):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
|||||||
@@ -218,3 +218,59 @@ class PackagesManager:
|
|||||||
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
|
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
|
||||||
json_data = json.dumps(data_ret)
|
json_data = json.dumps(data_ret)
|
||||||
return HttpResponse(json_data)
|
return HttpResponse(json_data)
|
||||||
|
|
||||||
|
|
||||||
|
def listPackages(self):
|
||||||
|
try:
|
||||||
|
userID = self.request.session['userID']
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if ACLManager.currentContextPermission(currentACL, 'listPackages') == 0:
|
||||||
|
return ACLManager.loadError()
|
||||||
|
|
||||||
|
packageList = ACLManager.loadPackages(userID, currentACL)
|
||||||
|
return render(self.request, 'packages/listPackages.html', {"packList": packageList})
|
||||||
|
|
||||||
|
except BaseException, msg:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
def fetchPackagesTable(self):
|
||||||
|
try:
|
||||||
|
userID = self.request.session['userID']
|
||||||
|
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if ACLManager.currentContextPermission(currentACL, 'listPackages') == 0:
|
||||||
|
return ACLManager.loadErrorJson()
|
||||||
|
|
||||||
|
|
||||||
|
packages = ACLManager.loadPackageObjects(userID, currentACL)
|
||||||
|
|
||||||
|
json_data = "["
|
||||||
|
checker = 0
|
||||||
|
|
||||||
|
for items in packages:
|
||||||
|
|
||||||
|
dic = {'package': items.packageName,
|
||||||
|
'diskSpace': items.diskSpace,
|
||||||
|
'bandwidth': items.bandwidth,
|
||||||
|
'emailAccounts': items.emailAccounts,
|
||||||
|
'dataBases': items.dataBases,
|
||||||
|
'ftpAccounts': items.ftpAccounts,
|
||||||
|
'allowedDomains': items.allowedDomains,
|
||||||
|
'allowFullDomain': items.allowFullDomain
|
||||||
|
}
|
||||||
|
|
||||||
|
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, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ app.controller('createPackage', function ($scope, $http) {
|
|||||||
var dataBases = $scope.dataBases;
|
var dataBases = $scope.dataBases;
|
||||||
var emails = $scope.emails;
|
var emails = $scope.emails;
|
||||||
|
|
||||||
if($scope.allowFullDomain === undefined){
|
if ($scope.allowFullDomain === undefined) {
|
||||||
$scope.allowFullDomain = 0;
|
$scope.allowFullDomain = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ app.controller('modifyPackages', function ($scope, $http) {
|
|||||||
$scope.allowFullDomain = false;
|
$scope.allowFullDomain = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.modifyButton = "Save Details"
|
$scope.modifyButton = "Save Details";
|
||||||
|
|
||||||
$("#packageDetailsToBeModified").fadeIn();
|
$("#packageDetailsToBeModified").fadeIn();
|
||||||
|
|
||||||
@@ -333,3 +333,199 @@ app.controller('modifyPackages', function ($scope, $http) {
|
|||||||
|
|
||||||
|
|
||||||
/* Java script code to Modify Pacakge ends here */
|
/* Java script code to Modify Pacakge ends here */
|
||||||
|
|
||||||
|
|
||||||
|
app.controller('listPackageTables', function ($scope, $http) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
$scope.populateCurrentRecords = function () {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
url = "/packages/fetchPackagesTable";
|
||||||
|
|
||||||
|
var data = {};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
|
||||||
|
$scope.records = JSON.parse(response.data.data);
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Packages successfully fetched!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
|
||||||
|
$scope.deletePackageFinal = function (packageToBeDeleted) {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
|
||||||
|
url = "/packages/submitDelete";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
packageName: packageToBeDeleted,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Package successfully deleted!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.editInitial = function (package, diskSpace, bandwidth,
|
||||||
|
emailAccounts, dataBases, ftpAccounts, allowedDomains, allowFullDomain) {
|
||||||
|
$scope.name = package;
|
||||||
|
$scope.diskSpace = diskSpace;
|
||||||
|
$scope.bandwidth = bandwidth;
|
||||||
|
$scope.emails = emailAccounts;
|
||||||
|
$scope.dataBases = dataBases;
|
||||||
|
$scope.ftpAccounts = ftpAccounts;
|
||||||
|
$scope.allowedDomains = allowedDomains;
|
||||||
|
$scope.allowFullDomain = allowFullDomain;
|
||||||
|
|
||||||
|
if (allowFullDomain === 1) {
|
||||||
|
$scope.allowFullDomain = true;
|
||||||
|
} else {
|
||||||
|
$scope.allowFullDomain = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.saveChanges = function () {
|
||||||
|
|
||||||
|
var packageName = $scope.name;
|
||||||
|
var diskSpace = $scope.diskSpace;
|
||||||
|
var bandwidth = $scope.bandwidth;
|
||||||
|
var ftpAccounts = $scope.ftpAccounts;
|
||||||
|
var dataBases = $scope.dataBases;
|
||||||
|
var emails = $scope.emails;
|
||||||
|
|
||||||
|
url = "/packages/saveChanges";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
packageName: packageName,
|
||||||
|
diskSpace: diskSpace,
|
||||||
|
bandwidth: bandwidth,
|
||||||
|
ftpAccounts: ftpAccounts,
|
||||||
|
dataBases: dataBases,
|
||||||
|
emails: emails,
|
||||||
|
allowedDomains: $scope.allowedDomains,
|
||||||
|
allowFullDomain: $scope.allowFullDomain
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.saveStatus === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Package successfully updated!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
204
packages/templates/packages/listPackages.html
Executable file
204
packages/templates/packages/listPackages.html
Executable file
@@ -0,0 +1,204 @@
|
|||||||
|
{% extends "baseTemplate/index.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% block title %}{% trans "List Packages - CyberPanel" %}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div id="page-title">
|
||||||
|
<h2>{% trans "List Packages" %}</h2>
|
||||||
|
<p>{% trans "List Packages and delete or edit them." %}</p>
|
||||||
|
</div>
|
||||||
|
<div ng-controller="listPackageTables" class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<h3 class="content-box-header">
|
||||||
|
{% trans "List Packages" %} <img ng-hide="cyberpanelLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h3>
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
<div class="col-sm-12">
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Package" %}</th>
|
||||||
|
<th>{% trans "Diskspace" %}</th>
|
||||||
|
<th>{% trans "Bandwidth" %}</th>
|
||||||
|
<th>{% trans "Email Accounts" %}</th>
|
||||||
|
<th>{% trans "Databases" %}</th>
|
||||||
|
<th>{% trans "FTPs" %}</th>
|
||||||
|
<th>{% trans "Child Domains" %}</th>
|
||||||
|
<th>{% trans "Allow FQDN as Childs" %}</th>
|
||||||
|
<th>{% trans "Actions" %}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="record in records track by $index">
|
||||||
|
<td ng-bind="record.package"></td>
|
||||||
|
<td ng-bind="record.diskSpace"></td>
|
||||||
|
<td ng-bind="record.bandwidth"></td>
|
||||||
|
<td ng-bind="record.emailAccounts"></td>
|
||||||
|
<td ng-bind="record.dataBases"></td>
|
||||||
|
<td ng-bind="record.ftpAccounts"></td>
|
||||||
|
<td ng-bind="record.allowedDomains"></td>
|
||||||
|
<td><span ng-hide="record.allowFullDomain==0">Enabled</span><span
|
||||||
|
ng-hide="record.allowFullDomain">Disabled</span></td>
|
||||||
|
<td>
|
||||||
|
<a data-toggle="modal" data-target="#settings"
|
||||||
|
ng-click="editInitial(record.package, record.diskSpace, record.bandwidth,
|
||||||
|
record.emailAccounts, record.dataBases, record.ftpAccounts, record.allowedDomains, record.allowFullDomain)"
|
||||||
|
class="btn btn-border btn-alt border-purple btn-link font-purple" href="#"
|
||||||
|
title=""><span>{% trans 'Edit' %}</span></a>
|
||||||
|
<a ng-click="deletePackageFinal(record.package)"
|
||||||
|
class="btn btn-border btn-alt border-red btn-link font-red" href="#"
|
||||||
|
title=""><span>{% trans 'Delete' %}</span></a>
|
||||||
|
|
||||||
|
<!--- Modal --->
|
||||||
|
<div id="settings" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
|
||||||
|
<!-- Modal content-->
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal">×
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">Edit Package
|
||||||
|
<img ng-hide="cyberpanelLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<form name="containerSettingsForm" action="/"
|
||||||
|
class="form-horizontal">
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Name" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input name="name" type="text" class="form-control"
|
||||||
|
ng-model="name" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Domains" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.allowedDomains" required>
|
||||||
|
</div>
|
||||||
|
<div class="current-pack"> {% trans "(0 = Unlimited)" %} </div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Disk Space" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.diskSpace" required>
|
||||||
|
</div>
|
||||||
|
<div class="current-pack"> {% trans "MB (0 = Unlimited)" %} </div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Bandwidth" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.bandwidth" required>
|
||||||
|
</div>
|
||||||
|
<div class="current-pack"> {% trans "MB (0 = Unlimited)" %} </div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "FTP Accounts" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.ftpAccounts" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Databases" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.dataBases" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Emails" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="number" class="form-control"
|
||||||
|
ng-model="$parent.emails" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Additional" %}</label>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="$parent.allowFullDomain"
|
||||||
|
type="checkbox" value="">
|
||||||
|
Allow Creation of Fully Qualified Domain as
|
||||||
|
Child-Domains
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" ng-disabled="savingSettings"
|
||||||
|
class="btn btn-primary"
|
||||||
|
ng-click="saveChanges()"
|
||||||
|
data-dismiss="modal">
|
||||||
|
Save
|
||||||
|
</button>
|
||||||
|
<button type="button" ng-disabled="savingSettings"
|
||||||
|
class="btn btn-default" data-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--- Modal End--->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -6,7 +6,8 @@ urlpatterns = [
|
|||||||
url(r'^createPackage$', views.createPacakge, name='createPackage'),
|
url(r'^createPackage$', views.createPacakge, name='createPackage'),
|
||||||
url(r'^deletePacakge$', views.deletePacakge, name='deletePackage'),
|
url(r'^deletePacakge$', views.deletePacakge, name='deletePackage'),
|
||||||
url(r'^modifyPackage$', views.modifyPackage, name='modifyPackage'),
|
url(r'^modifyPackage$', views.modifyPackage, name='modifyPackage'),
|
||||||
|
url(r'^listPackages$', views.listPackages, name='listPackages'),
|
||||||
|
url(r'^fetchPackagesTable$', views.fetchPackagesTable, name='fetchPackagesTable'),
|
||||||
|
|
||||||
# Pacakge Modification URLs
|
# Pacakge Modification URLs
|
||||||
|
|
||||||
|
|||||||
@@ -108,3 +108,23 @@ def saveChanges(request):
|
|||||||
return coreResult
|
return coreResult
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return redirect(loadLoginPage)
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
|
def listPackages(request):
|
||||||
|
try:
|
||||||
|
pm = PackagesManager(request)
|
||||||
|
return pm.listPackages()
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def fetchPackagesTable(request):
|
||||||
|
try:
|
||||||
|
|
||||||
|
pm = PackagesManager(request)
|
||||||
|
coreResult = pm.fetchPackagesTable()
|
||||||
|
|
||||||
|
return coreResult
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class ACLManager:
|
|||||||
serverIPAddress = "192.168.100.1"
|
serverIPAddress = "192.168.100.1"
|
||||||
|
|
||||||
finalResponse['serverIPAddress'] = serverIPAddress
|
finalResponse['serverIPAddress'] = serverIPAddress
|
||||||
finalResponse['adminName'] = admin.firstName + " " + admin.lastName[:3]
|
finalResponse['adminName'] = admin.firstName
|
||||||
|
|
||||||
if admin.acl.adminStatus == 1:
|
if admin.acl.adminStatus == 1:
|
||||||
finalResponse['admin'] = 1
|
finalResponse['admin'] = 1
|
||||||
@@ -47,6 +47,7 @@ class ACLManager:
|
|||||||
## User Management
|
## User Management
|
||||||
|
|
||||||
finalResponse['createNewUser'] = acl.createNewUser
|
finalResponse['createNewUser'] = acl.createNewUser
|
||||||
|
finalResponse['listUsers'] = acl.listUsers
|
||||||
finalResponse['deleteUser'] = acl.deleteUser
|
finalResponse['deleteUser'] = acl.deleteUser
|
||||||
finalResponse['changeUserACL'] = acl.changeUserACL
|
finalResponse['changeUserACL'] = acl.changeUserACL
|
||||||
finalResponse['resellerCenter'] = acl.resellerCenter
|
finalResponse['resellerCenter'] = acl.resellerCenter
|
||||||
@@ -62,6 +63,7 @@ class ACLManager:
|
|||||||
|
|
||||||
|
|
||||||
finalResponse['createPackage'] = acl.createPackage
|
finalResponse['createPackage'] = acl.createPackage
|
||||||
|
finalResponse['listPackages'] = acl.listPackages
|
||||||
finalResponse['deletePackage'] = acl.deletePackage
|
finalResponse['deletePackage'] = acl.deletePackage
|
||||||
finalResponse['modifyPackage'] = acl.modifyPackage
|
finalResponse['modifyPackage'] = acl.modifyPackage
|
||||||
|
|
||||||
@@ -81,6 +83,7 @@ class ACLManager:
|
|||||||
## Email Management
|
## Email Management
|
||||||
|
|
||||||
finalResponse['createEmail'] = acl.createEmail
|
finalResponse['createEmail'] = acl.createEmail
|
||||||
|
finalResponse['listEmails'] = acl.listEmails
|
||||||
finalResponse['deleteEmail'] = acl.deleteEmail
|
finalResponse['deleteEmail'] = acl.deleteEmail
|
||||||
finalResponse['emailForwarding'] = acl.emailForwarding
|
finalResponse['emailForwarding'] = acl.emailForwarding
|
||||||
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
|
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
|
||||||
@@ -119,7 +122,6 @@ class ACLManager:
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def currentContextPermission(currentACL, context):
|
def currentContextPermission(currentACL, context):
|
||||||
try:
|
try:
|
||||||
@@ -261,6 +263,22 @@ class ACLManager:
|
|||||||
|
|
||||||
return adminObjects
|
return adminObjects
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def fetchTableUserObjects(userID):
|
||||||
|
admin = Administrator.objects.get(pk=userID)
|
||||||
|
adminObjects = []
|
||||||
|
|
||||||
|
finalResponse = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if finalResponse['admin'] == 1:
|
||||||
|
return Administrator.objects.all().exclude(pk=userID)
|
||||||
|
else:
|
||||||
|
admins = Administrator.objects.filter(owner=admin.pk)
|
||||||
|
for items in admins:
|
||||||
|
adminObjects.append(items)
|
||||||
|
|
||||||
|
return adminObjects
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def loadDeletionUsers(userID, finalResponse):
|
def loadDeletionUsers(userID, finalResponse):
|
||||||
admin = Administrator.objects.get(pk=userID)
|
admin = Administrator.objects.get(pk=userID)
|
||||||
@@ -426,22 +444,22 @@ class ACLManager:
|
|||||||
domainsList = []
|
domainsList = []
|
||||||
|
|
||||||
if currentACL['admin'] == 1:
|
if currentACL['admin'] == 1:
|
||||||
domains = Domains.objects.all()
|
domains = Websites.objects.all()
|
||||||
for items in domains:
|
for items in domains:
|
||||||
domainsList.append(items.name)
|
domainsList.append(items.domain)
|
||||||
else:
|
else:
|
||||||
admin = Administrator.objects.get(pk=userID)
|
admin = Administrator.objects.get(pk=userID)
|
||||||
domains = admin.domains_set.all()
|
domains = admin.websites_set.all()
|
||||||
|
|
||||||
for items in domains:
|
for items in domains:
|
||||||
domainsList.append(items.name)
|
domainsList.append(items.domain)
|
||||||
|
|
||||||
admins = Administrator.objects.filter(owner=admin.pk)
|
admins = Administrator.objects.filter(owner=admin.pk)
|
||||||
|
|
||||||
for items in admins:
|
for items in admins:
|
||||||
doms = items.domains_set.all()
|
doms = items.websites_set.all()
|
||||||
for dom in doms:
|
for dom in doms:
|
||||||
domainsList.append(dom.name)
|
domainsList.append(dom.domain)
|
||||||
|
|
||||||
return domainsList
|
return domainsList
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ def main():
|
|||||||
firstName="Cyber", lastName="Panel", acl=acl, token=token)
|
firstName="Cyber", lastName="Panel", acl=acl, token=token)
|
||||||
admin.save()
|
admin.save()
|
||||||
|
|
||||||
vers = version(currentVersion="1.8", build=8)
|
vers = version(currentVersion="1.8", build=9)
|
||||||
vers.save()
|
vers.save()
|
||||||
|
|
||||||
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
package = Package(admin=admin, packageName="Default", diskSpace=1000,
|
||||||
|
|||||||
@@ -724,6 +724,8 @@ class cPanelImporter:
|
|||||||
message = 'Detecting email format from %s.' % (self.backupFile)
|
message = 'Detecting email format from %s.' % (self.backupFile)
|
||||||
logging.statusWriter(self.logFile, message, 1)
|
logging.statusWriter(self.logFile, message, 1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
Format = open(FormatPath, 'r').read()
|
Format = open(FormatPath, 'r').read()
|
||||||
|
|
||||||
if Format.find('mdbox') > -1:
|
if Format.find('mdbox') > -1:
|
||||||
@@ -734,6 +736,8 @@ class cPanelImporter:
|
|||||||
self.mailFormat = cPanelImporter.MailDir
|
self.mailFormat = cPanelImporter.MailDir
|
||||||
message = 'Maildir format detected from %s.' % (self.backupFile)
|
message = 'Maildir format detected from %s.' % (self.backupFile)
|
||||||
logging.statusWriter(self.logFile, message, 1)
|
logging.statusWriter(self.logFile, message, 1)
|
||||||
|
except:
|
||||||
|
self.mailFormat = cPanelImporter.MailDir
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
|
|||||||
@@ -597,6 +597,22 @@ class Upgrade:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
cursor.execute("ALTER TABLE loginSystem_acl ADD COLUMN listUsers INT DEFAULT 0;")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
cursor.execute("ALTER TABLE loginSystem_acl ADD COLUMN listEmails INT DEFAULT 1;")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
cursor.execute("ALTER TABLE loginSystem_acl ADD COLUMN listPackages INT DEFAULT 0;")
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
connection.close()
|
connection.close()
|
||||||
except:
|
except:
|
||||||
@@ -1083,6 +1099,12 @@ class Upgrade:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
query = "ALTER TABLE packages_package ADD COLUMN allowFullDomain INT DEFAULT 1;"
|
||||||
|
try:
|
||||||
|
cursor.execute(query)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
connection.close()
|
connection.close()
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -126,6 +126,9 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
if(!Boolean(response.data.createNewUser)){
|
if(!Boolean(response.data.createNewUser)){
|
||||||
$('.createNewUser').hide();
|
$('.createNewUser').hide();
|
||||||
}
|
}
|
||||||
|
if(!Boolean(response.data.listUsers)){
|
||||||
|
$('.listUsers').hide();
|
||||||
|
}
|
||||||
if(!Boolean(response.data.resellerCenter)){
|
if(!Boolean(response.data.resellerCenter)){
|
||||||
$('.resellerCenter').hide();
|
$('.resellerCenter').hide();
|
||||||
}
|
}
|
||||||
@@ -158,6 +161,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
$('.createPackage').hide();
|
$('.createPackage').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!Boolean(response.data.listPackages)){
|
||||||
|
$('.listPackages').hide();
|
||||||
|
}
|
||||||
|
|
||||||
if(!Boolean(response.data.deletePackage)){
|
if(!Boolean(response.data.deletePackage)){
|
||||||
$('.deletePackage').hide();
|
$('.deletePackage').hide();
|
||||||
}
|
}
|
||||||
@@ -208,6 +215,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
|
|||||||
$('.emailAsWhole').hide();
|
$('.emailAsWhole').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!Boolean(response.data.listEmails)){
|
||||||
|
$('.listEmails').hide();
|
||||||
|
}
|
||||||
|
|
||||||
if(!Boolean(response.data.createEmail)){
|
if(!Boolean(response.data.createEmail)){
|
||||||
$('.createEmail').hide();
|
$('.createEmail').hide();
|
||||||
}
|
}
|
||||||
|
|||||||
11
static/loginSystem/login-systen.js
Executable file → Normal file
11
static/loginSystem/login-systen.js
Executable file → Normal file
@@ -91,6 +91,17 @@ application.controller('loginSystem', function($scope,$http,$window) {
|
|||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.initiateLogin = function($event){
|
||||||
|
var keyCode = $event.which || $event.keyCode;
|
||||||
|
if (keyCode === 13) {
|
||||||
|
$scope.verifyLoginCredentials();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1108,3 +1108,179 @@ app.controller('emailForwarding', function ($scope, $http) {
|
|||||||
|
|
||||||
});
|
});
|
||||||
/* Java script for email forwarding */
|
/* Java script for email forwarding */
|
||||||
|
|
||||||
|
|
||||||
|
/* Java script code for List Emails */
|
||||||
|
|
||||||
|
app.controller('listEmails', function ($scope, $http) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
|
||||||
|
$scope.populateCurrentRecords = function () {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
|
||||||
|
url = "/email/fetchEmails";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
selectedDomain: $scope.selectedDomain,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
$scope.emailsAccounts = false;
|
||||||
|
$scope.records = JSON.parse(response.data.data);
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Emails Successfully Fetched.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
$scope.errorMessage = response.data.error_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
$scope.emailsAccounts = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.deleteEmailAccountFinal = function (email) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
var url = "/email/submitEmailDeletion";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
email: email,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
if (response.data.deleteEmailStatus === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Email Successfully deleted.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.changePasswordInitial = function (email) {
|
||||||
|
$scope.email = email;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.changePassword = function () {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
|
||||||
|
var url = "/email/submitPasswordChange";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
domain: $scope.selectedDomain,
|
||||||
|
email: $scope.email,
|
||||||
|
passwordByPass: $scope.password,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Password Successfully changed.',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* Java script code for List Emails Ends here */
|
||||||
301
static/packages/packages.js
Executable file → Normal file
301
static/packages/packages.js
Executable file → Normal file
@@ -3,13 +3,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by usman on 7/25/17.
|
* Created by usman on 7/25/17.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Utilities */
|
/* Utilities */
|
||||||
|
|
||||||
function getCookie(name) {
|
function getCookie(name) {
|
||||||
@@ -31,20 +29,18 @@ function getCookie(name) {
|
|||||||
/* Utilities ends here */
|
/* Utilities ends here */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Java script code to create Pacakge */
|
/* Java script code to create Pacakge */
|
||||||
|
|
||||||
$("#packageCreationFailed").hide();
|
$("#packageCreationFailed").hide();
|
||||||
$("#packageCreated").hide();
|
$("#packageCreated").hide();
|
||||||
|
|
||||||
|
|
||||||
|
app.controller('createPackage', function ($scope, $http) {
|
||||||
app.controller('createPackage', function($scope,$http) {
|
|
||||||
|
|
||||||
//$scope.pname = /([A-Z]){3,10}/gi;
|
//$scope.pname = /([A-Z]){3,10}/gi;
|
||||||
|
|
||||||
$scope.insertPackInDB = function(){
|
$scope.insertPackInDB = function () {
|
||||||
|
|
||||||
|
|
||||||
var packageName = $scope.packageName;
|
var packageName = $scope.packageName;
|
||||||
var diskSpace = $scope.diskSpace;
|
var diskSpace = $scope.diskSpace;
|
||||||
@@ -53,6 +49,10 @@ app.controller('createPackage', function($scope,$http) {
|
|||||||
var dataBases = $scope.dataBases;
|
var dataBases = $scope.dataBases;
|
||||||
var emails = $scope.emails;
|
var emails = $scope.emails;
|
||||||
|
|
||||||
|
if ($scope.allowFullDomain === undefined) {
|
||||||
|
$scope.allowFullDomain = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
url = "/packages/submitPackage";
|
url = "/packages/submitPackage";
|
||||||
|
|
||||||
@@ -62,30 +62,29 @@ app.controller('createPackage', function($scope,$http) {
|
|||||||
bandwidth: bandwidth,
|
bandwidth: bandwidth,
|
||||||
ftpAccounts: ftpAccounts,
|
ftpAccounts: ftpAccounts,
|
||||||
dataBases: dataBases,
|
dataBases: dataBases,
|
||||||
emails:emails,
|
emails: emails,
|
||||||
allowedDomains:$scope.allowedDomains
|
allowedDomains: $scope.allowedDomains,
|
||||||
|
allowFullDomain: $scope.allowFullDomain
|
||||||
};
|
};
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
headers : {
|
headers: {
|
||||||
'X-CSRFToken': getCookie('csrftoken')
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
function ListInitialDatas(response) {
|
function ListInitialDatas(response) {
|
||||||
console.log(response.data)
|
console.log(response.data)
|
||||||
|
|
||||||
if (response.data.saveStatus == 0)
|
if (response.data.saveStatus == 0) {
|
||||||
{
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
$("#packageCreationFailed").fadeIn();
|
$("#packageCreationFailed").fadeIn();
|
||||||
$("#packageCreated").hide();
|
$("#packageCreated").hide();
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$("#packageCreationFailed").hide();
|
$("#packageCreationFailed").hide();
|
||||||
$("#packageCreated").fadeIn();
|
$("#packageCreated").fadeIn();
|
||||||
$scope.createdPackage = $scope.packageName;
|
$scope.createdPackage = $scope.packageName;
|
||||||
@@ -94,6 +93,7 @@ app.controller('createPackage', function($scope,$http) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function cantLoadInitialDatas(response) {
|
function cantLoadInitialDatas(response) {
|
||||||
console.log("not good");
|
console.log("not good");
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,6 @@ app.controller('createPackage', function($scope,$http) {
|
|||||||
/* Java script code to to create Pacakge ends here */
|
/* Java script code to to create Pacakge ends here */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Java script code to delete Pacakge */
|
/* Java script code to delete Pacakge */
|
||||||
|
|
||||||
|
|
||||||
@@ -117,23 +116,22 @@ $("#deleteSuccess").hide();
|
|||||||
$("#deletePackageButton").hide();
|
$("#deletePackageButton").hide();
|
||||||
|
|
||||||
|
|
||||||
app.controller('deletePackage', function($scope,$http) {
|
app.controller('deletePackage', function ($scope, $http) {
|
||||||
|
|
||||||
|
|
||||||
$scope.deletePackage = function(){
|
$scope.deletePackage = function () {
|
||||||
|
|
||||||
$("#deletePackageButton").fadeIn();
|
$("#deletePackageButton").fadeIn();
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.deletePackageFinal = function(){
|
$scope.deletePackageFinal = function () {
|
||||||
|
|
||||||
|
|
||||||
var packageName = $scope.packageToBeDeleted;
|
var packageName = $scope.packageToBeDeleted;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
url = "/packages/submitDelete";
|
url = "/packages/submitDelete";
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
@@ -141,26 +139,24 @@ app.controller('deletePackage', function($scope,$http) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
headers : {
|
headers: {
|
||||||
'X-CSRFToken': getCookie('csrftoken')
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
function ListInitialDatas(response) {
|
function ListInitialDatas(response) {
|
||||||
console.log(response.data)
|
console.log(response.data)
|
||||||
|
|
||||||
if (response.data.deleteStatus == 0)
|
if (response.data.deleteStatus == 0) {
|
||||||
{
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
$("#deleteFailure").fadeIn();
|
$("#deleteFailure").fadeIn();
|
||||||
$("#deleteSuccess").hide();
|
$("#deleteSuccess").hide();
|
||||||
$("#deletePackageButton").hide();
|
$("#deletePackageButton").hide();
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$("#deleteFailure").hide();
|
$("#deleteFailure").hide();
|
||||||
$("#deleteSuccess").fadeIn();
|
$("#deleteSuccess").fadeIn();
|
||||||
$("#deletePackageButton").hide();
|
$("#deletePackageButton").hide();
|
||||||
@@ -170,6 +166,7 @@ app.controller('deletePackage', function($scope,$http) {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function cantLoadInitialDatas(response) {
|
function cantLoadInitialDatas(response) {
|
||||||
console.log("not good");
|
console.log("not good");
|
||||||
}
|
}
|
||||||
@@ -180,11 +177,9 @@ app.controller('deletePackage', function($scope,$http) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Java script code to delete package ends here */
|
/* Java script code to delete package ends here */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Java script code modify package */
|
/* Java script code modify package */
|
||||||
|
|
||||||
$("#packageDetailsToBeModified").hide();
|
$("#packageDetailsToBeModified").hide();
|
||||||
@@ -194,9 +189,9 @@ $("#modifyButton").hide();
|
|||||||
$("#packageLoading").hide();
|
$("#packageLoading").hide();
|
||||||
$("#successfullyModified").hide();
|
$("#successfullyModified").hide();
|
||||||
|
|
||||||
app.controller('modifyPackages', function($scope,$http) {
|
app.controller('modifyPackages', function ($scope, $http) {
|
||||||
|
|
||||||
$scope.fetchDetails = function(){
|
$scope.fetchDetails = function () {
|
||||||
|
|
||||||
$("#packageLoading").show();
|
$("#packageLoading").show();
|
||||||
$("#successfullyModified").hide();
|
$("#successfullyModified").hide();
|
||||||
@@ -212,18 +207,17 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
headers : {
|
headers: {
|
||||||
'X-CSRFToken': getCookie('csrftoken')
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
function ListInitialDatas(response) {
|
function ListInitialDatas(response) {
|
||||||
|
|
||||||
if (response.data.modifyStatus == 0)
|
if (response.data.modifyStatus === 0) {
|
||||||
{
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
$("#modifyFailure").fadeIn();
|
$("#modifyFailure").fadeIn();
|
||||||
$("#modifySuccess").hide();
|
$("#modifySuccess").hide();
|
||||||
@@ -231,8 +225,7 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
$("#packageLoading").hide();
|
$("#packageLoading").hide();
|
||||||
|
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$("#modifyButton").show();
|
$("#modifyButton").show();
|
||||||
$scope.diskSpace = response.data.diskSpace;
|
$scope.diskSpace = response.data.diskSpace;
|
||||||
$scope.bandwidth = response.data.bandwidth;
|
$scope.bandwidth = response.data.bandwidth;
|
||||||
@@ -241,7 +234,13 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
$scope.emails = response.data.emails;
|
$scope.emails = response.data.emails;
|
||||||
$scope.allowedDomains = response.data.allowedDomains;
|
$scope.allowedDomains = response.data.allowedDomains;
|
||||||
|
|
||||||
$scope.modifyButton = "Save Details"
|
if (response.data.allowFullDomain === 1) {
|
||||||
|
$scope.allowFullDomain = true;
|
||||||
|
} else {
|
||||||
|
$scope.allowFullDomain = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.modifyButton = "Save Details";
|
||||||
|
|
||||||
$("#packageDetailsToBeModified").fadeIn();
|
$("#packageDetailsToBeModified").fadeIn();
|
||||||
|
|
||||||
@@ -250,12 +249,11 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
$("#packageLoading").hide();
|
$("#packageLoading").hide();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function cantLoadInitialDatas(response) {
|
function cantLoadInitialDatas(response) {
|
||||||
console.log("not good");
|
console.log("not good");
|
||||||
}
|
}
|
||||||
@@ -263,7 +261,6 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$scope.modifyPackageFunc = function () {
|
$scope.modifyPackageFunc = function () {
|
||||||
|
|
||||||
var packageName = $scope.packageToBeModified;
|
var packageName = $scope.packageToBeModified;
|
||||||
@@ -283,27 +280,27 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
packageName: packageName,
|
packageName: packageName,
|
||||||
diskSpace:diskSpace,
|
diskSpace: diskSpace,
|
||||||
bandwidth:bandwidth,
|
bandwidth: bandwidth,
|
||||||
ftpAccounts:ftpAccounts,
|
ftpAccounts: ftpAccounts,
|
||||||
dataBases:dataBases,
|
dataBases: dataBases,
|
||||||
emails:emails,
|
emails: emails,
|
||||||
allowedDomains:$scope.allowedDomains,
|
allowedDomains: $scope.allowedDomains,
|
||||||
|
allowFullDomain: $scope.allowFullDomain
|
||||||
};
|
};
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
headers : {
|
headers: {
|
||||||
'X-CSRFToken': getCookie('csrftoken')
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
function ListInitialDatas(response) {
|
function ListInitialDatas(response) {
|
||||||
|
|
||||||
if (response.data.saveStatus == 0)
|
if (response.data.saveStatus === 0) {
|
||||||
{
|
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
$("#modifyFailure").fadeIn();
|
$("#modifyFailure").fadeIn();
|
||||||
$("#modifySuccess").hide();
|
$("#modifySuccess").hide();
|
||||||
@@ -311,8 +308,7 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
$("#packageLoading").hide();
|
$("#packageLoading").hide();
|
||||||
|
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
$("#modifyButton").hide();
|
$("#modifyButton").hide();
|
||||||
|
|
||||||
$("#successfullyModified").fadeIn();
|
$("#successfullyModified").fadeIn();
|
||||||
@@ -321,22 +317,215 @@ app.controller('modifyPackages', function($scope,$http) {
|
|||||||
$scope.packageModified = packageName;
|
$scope.packageModified = packageName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function cantLoadInitialDatas(response) {
|
function cantLoadInitialDatas(response) {
|
||||||
console.log("not good");
|
console.log("not good");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Java script code to Modify Pacakge ends here */
|
/* Java script code to Modify Pacakge ends here */
|
||||||
|
|
||||||
|
|
||||||
|
app.controller('listPackageTables', function ($scope, $http) {
|
||||||
|
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
$scope.populateCurrentRecords = function () {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
url = "/packages/fetchPackagesTable";
|
||||||
|
|
||||||
|
var data = {};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
|
||||||
|
$scope.records = JSON.parse(response.data.data);
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Packages successfully fetched!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
|
||||||
|
$scope.deletePackageFinal = function (packageToBeDeleted) {
|
||||||
|
$scope.cyberpanelLoading = false;
|
||||||
|
|
||||||
|
|
||||||
|
url = "/packages/submitDelete";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
packageName: packageToBeDeleted,
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.status === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Package successfully deleted!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.editInitial = function (package, diskSpace, bandwidth,
|
||||||
|
emailAccounts, dataBases, ftpAccounts, allowedDomains, allowFullDomain) {
|
||||||
|
$scope.name = package;
|
||||||
|
$scope.diskSpace = diskSpace;
|
||||||
|
$scope.bandwidth = bandwidth;
|
||||||
|
$scope.emails = emailAccounts;
|
||||||
|
$scope.dataBases = dataBases;
|
||||||
|
$scope.ftpAccounts = ftpAccounts;
|
||||||
|
$scope.allowedDomains = allowedDomains;
|
||||||
|
$scope.allowFullDomain = allowFullDomain;
|
||||||
|
|
||||||
|
if (allowFullDomain === 1) {
|
||||||
|
$scope.allowFullDomain = true;
|
||||||
|
} else {
|
||||||
|
$scope.allowFullDomain = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.saveChanges = function () {
|
||||||
|
|
||||||
|
var packageName = $scope.name;
|
||||||
|
var diskSpace = $scope.diskSpace;
|
||||||
|
var bandwidth = $scope.bandwidth;
|
||||||
|
var ftpAccounts = $scope.ftpAccounts;
|
||||||
|
var dataBases = $scope.dataBases;
|
||||||
|
var emails = $scope.emails;
|
||||||
|
|
||||||
|
url = "/packages/saveChanges";
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
packageName: packageName,
|
||||||
|
diskSpace: diskSpace,
|
||||||
|
bandwidth: bandwidth,
|
||||||
|
ftpAccounts: ftpAccounts,
|
||||||
|
dataBases: dataBases,
|
||||||
|
emails: emails,
|
||||||
|
allowedDomains: $scope.allowedDomains,
|
||||||
|
allowFullDomain: $scope.allowFullDomain
|
||||||
|
};
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': getCookie('csrftoken')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
|
||||||
|
|
||||||
|
|
||||||
|
function ListInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
|
||||||
|
if (response.data.saveStatus === 1) {
|
||||||
|
$scope.populateCurrentRecords();
|
||||||
|
|
||||||
|
new PNotify({
|
||||||
|
title: 'Success!',
|
||||||
|
text: 'Package successfully updated!',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: response.data.error_message,
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function cantLoadInitialDatas(response) {
|
||||||
|
$scope.cyberpanelLoading = true;
|
||||||
|
new PNotify({
|
||||||
|
title: 'Error!',
|
||||||
|
text: 'Could not connect to server, please refresh this page.',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -286,7 +286,6 @@ app.controller('listWebsites', function ($scope, $http) {
|
|||||||
} else {
|
} else {
|
||||||
$("#listFail").fadeIn();
|
$("#listFail").fadeIn();
|
||||||
$scope.errorMessage = response.data.error_message;
|
$scope.errorMessage = response.data.error_message;
|
||||||
console.log(response.data);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -66,6 +66,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listUsers" type="checkbox" value="">
|
||||||
|
{% trans "List Users" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
@@ -145,6 +154,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listPackages" type="checkbox" value="">
|
||||||
|
{% trans "List Packages" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
@@ -246,6 +264,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listEmails" type="checkbox" value="">
|
||||||
|
{% trans "List Emails" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
|
|||||||
136
userManagment/templates/userManagment/listUsers.html
Executable file
136
userManagment/templates/userManagment/listUsers.html
Executable file
@@ -0,0 +1,136 @@
|
|||||||
|
{% extends "baseTemplate/index.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% block title %}{% trans "List Users - CyberPanel" %}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div id="page-title">
|
||||||
|
<h2>{% trans "List Users" %}</h2>
|
||||||
|
<p>{% trans "List Users that you own." %}</p>
|
||||||
|
</div>
|
||||||
|
<div ng-controller="listTableUsers" class="panel">
|
||||||
|
<div class="panel-body">
|
||||||
|
<h3 class="content-box-header">
|
||||||
|
{% trans "List Users" %} <img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}">
|
||||||
|
</h3>
|
||||||
|
<div class="example-box-wrapper">
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
<div class="col-sm-12">
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Username" %}</th>
|
||||||
|
<th>{% trans "Websites Limit" %}</th>
|
||||||
|
<th>{% trans "Disk Usage" %}</th>
|
||||||
|
<th>{% trans "ACL" %}</th>
|
||||||
|
<th>{% trans "Owner" %}</th>
|
||||||
|
<th>{% trans "Actions" %}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="record in records track by $index">
|
||||||
|
<td ng-bind="record.name"></td>
|
||||||
|
<td ng-bind="record.websites"></td>
|
||||||
|
<td ng-bind="record.diskUsage"></td>
|
||||||
|
<td ng-bind="record.acl"></td>
|
||||||
|
<td ng-bind="record.owner"></td>
|
||||||
|
<td>
|
||||||
|
<a data-toggle="modal" data-target="#settings"
|
||||||
|
ng-click="editInitial(record.name)"
|
||||||
|
class="btn btn-border btn-alt border-purple btn-link font-purple" href="#"
|
||||||
|
title=""><span>{% trans 'Edit' %}</span></a>
|
||||||
|
<a ng-click="deleteUserFinal(record.name)"
|
||||||
|
class="btn btn-border btn-alt border-red btn-link font-red" href="#"
|
||||||
|
title=""><span>{% trans 'Delete' %}</span></a>
|
||||||
|
|
||||||
|
<!--- Modal --->
|
||||||
|
<div id="settings" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
|
||||||
|
<!-- Modal content-->
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal">×
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">Edit User
|
||||||
|
<img ng-hide="cyberpanelLoading"
|
||||||
|
src="{% static 'images/loading.gif' %}">
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<form name="containerSettingsForm" action="/"
|
||||||
|
class="form-horizontal">
|
||||||
|
<div ng-hide="installationDetailsForm" class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Name" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input name="name" type="text" class="form-control"
|
||||||
|
ng-model="name" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "New Owner" %} </label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<select ng-change="saveResellerChanges()"
|
||||||
|
ng-model="$parent.newOwner"
|
||||||
|
class="form-control">
|
||||||
|
{% for items in resellerPrivUsers %}
|
||||||
|
<option>{{ items }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">{% trans "Select ACL" %} </label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<select ng-change="changeACLFunc()"
|
||||||
|
ng-model="$parent.selectedACL"
|
||||||
|
class="form-control">
|
||||||
|
{% for items in aclNames %}
|
||||||
|
<option>{{ items }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--- Modal End--->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!------ List of records --------------->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -3,17 +3,17 @@
|
|||||||
{% block title %}{% trans "Modify an ACL - CyberPanel" %}{% endblock %}
|
{% block title %}{% trans "Modify an ACL - CyberPanel" %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
<!-- Current language: {{ LANGUAGE_CODE }} -->
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div id="page-title">
|
<div id="page-title">
|
||||||
<h2>{% trans "Modify an ACL" %}</h2>
|
<h2>{% trans "Modify an ACL" %}</h2>
|
||||||
<p>{% trans "On this page you can modify an existing ACL." %}</p>
|
<p>{% trans "On this page you can modify an existing ACL." %}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<div ng-controller="modifyACLCtrl" class="panel-body">
|
<div ng-controller="modifyACLCtrl" class="panel-body">
|
||||||
<h3 class="content-box-header">
|
<h3 class="content-box-header">
|
||||||
{% trans "ACL Details" %} - <img ng-hide="aclLoading" src="{% static 'images/loading.gif' %}">
|
{% trans "ACL Details" %} - <img ng-hide="aclLoading" src="{% static 'images/loading.gif' %}">
|
||||||
@@ -69,7 +69,15 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listUsers" type="checkbox" value="">
|
||||||
|
{% trans "List Users" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
@@ -79,7 +87,6 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
@@ -151,6 +158,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listPackages" type="checkbox" value="">
|
||||||
|
{% trans "List Packages" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
@@ -252,6 +268,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input ng-model="listEmails" type="checkbox" value="">
|
||||||
|
{% trans "List Emails" %}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
@@ -357,7 +382,7 @@
|
|||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input ng-model="scheDuleBackups" type="checkbox" value="">
|
<input ng-model="scheDuleBackups" type="checkbox" value="">
|
||||||
{% trans "Achedule Back up" %}
|
{% trans "Schedule Back up" %}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -407,22 +432,21 @@
|
|||||||
<div ng-hide="aclDetails" class="form-group">
|
<div ng-hide="aclDetails" class="form-group">
|
||||||
<label class="col-sm-3 control-label"></label>
|
<label class="col-sm-3 control-label"></label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<button type="button" ng-click="saveChanges()" class="btn btn-primary btn-lg">{% trans "Save Changes" %} <img ng-hide="aclLoading" src="{% static 'images/loading.gif' %}"></button>
|
<button type="button" ng-click="saveChanges()"
|
||||||
|
class="btn btn-primary btn-lg">{% trans "Save Changes" %} <img
|
||||||
|
ng-hide="aclLoading" src="{% static 'images/loading.gif' %}"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -30,4 +30,6 @@ urlpatterns = [
|
|||||||
url(r'^saveResellerChanges$',views.saveResellerChanges,name="saveResellerChanges"),
|
url(r'^saveResellerChanges$',views.saveResellerChanges,name="saveResellerChanges"),
|
||||||
url(r'^apiAccess$', views.apiAccess, name="apiAccess"),
|
url(r'^apiAccess$', views.apiAccess, name="apiAccess"),
|
||||||
url(r'^saveChangesAPIAccess$', views.saveChangesAPIAccess, name="saveChangesAPIAccess"),
|
url(r'^saveChangesAPIAccess$', views.saveChangesAPIAccess, name="saveChangesAPIAccess"),
|
||||||
|
url(r'^listUsers$', views.listUsers, name="listUsers"),
|
||||||
|
url(r'^fetchTableUsers$', views.fetchTableUsers, name="fetchTableUsers"),
|
||||||
]
|
]
|
||||||
@@ -9,7 +9,7 @@ import json
|
|||||||
from plogical import hashPassword
|
from plogical import hashPassword
|
||||||
from plogical import CyberCPLogFileWriter as logging
|
from plogical import CyberCPLogFileWriter as logging
|
||||||
from plogical.acl import ACLManager
|
from plogical.acl import ACLManager
|
||||||
|
from plogical.virtualHostUtilities import virtualHostUtilities
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
@@ -68,6 +68,7 @@ def createUser(request):
|
|||||||
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||||||
return redirect(loadLoginPage)
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
def apiAccess(request):
|
def apiAccess(request):
|
||||||
try:
|
try:
|
||||||
userID = request.session['userID']
|
userID = request.session['userID']
|
||||||
@@ -144,7 +145,6 @@ def submitUserCreation(request):
|
|||||||
password = hashPassword.hash_password(password)
|
password = hashPassword.hash_password(password)
|
||||||
currentAdmin = Administrator.objects.get(pk=userID)
|
currentAdmin = Administrator.objects.get(pk=userID)
|
||||||
|
|
||||||
|
|
||||||
if ACLManager.websitesLimitCheck(currentAdmin, websitesLimit) == 0:
|
if ACLManager.websitesLimitCheck(currentAdmin, websitesLimit) == 0:
|
||||||
data_ret = {'status': 0, 'createStatus': 0,
|
data_ret = {'status': 0, 'createStatus': 0,
|
||||||
'error_message': "You've reached maximum websites limit as a reseller."}
|
'error_message': "You've reached maximum websites limit as a reseller."}
|
||||||
@@ -370,6 +370,12 @@ def submitUserDeletion(request):
|
|||||||
|
|
||||||
if ACLManager.checkUserOwnerShip(currentACL, currentUser, userInQuestion):
|
if ACLManager.checkUserOwnerShip(currentACL, currentUser, userInQuestion):
|
||||||
user = Administrator.objects.get(userName=accountUsername)
|
user = Administrator.objects.get(userName=accountUsername)
|
||||||
|
|
||||||
|
childUsers = Administrator.objects.filter(owner=user.pk)
|
||||||
|
|
||||||
|
for items in childUsers:
|
||||||
|
items.delete()
|
||||||
|
|
||||||
user.delete()
|
user.delete()
|
||||||
|
|
||||||
data_ret = {'status': 1, 'deleteStatus': 1, 'error_message': 'None'}
|
data_ret = {'status': 1, 'deleteStatus': 1, 'error_message': 'None'}
|
||||||
@@ -422,6 +428,7 @@ def createACLFunc(request):
|
|||||||
|
|
||||||
## User Management
|
## User Management
|
||||||
createNewUser=int(data['createNewUser']),
|
createNewUser=int(data['createNewUser']),
|
||||||
|
listUsers=int(data['listUsers']),
|
||||||
resellerCenter=int(data['resellerCenter']),
|
resellerCenter=int(data['resellerCenter']),
|
||||||
deleteUser=int(data['deleteUser']),
|
deleteUser=int(data['deleteUser']),
|
||||||
changeUserACL=int(data['changeUserACL']),
|
changeUserACL=int(data['changeUserACL']),
|
||||||
@@ -436,6 +443,7 @@ def createACLFunc(request):
|
|||||||
## Package Management
|
## Package Management
|
||||||
|
|
||||||
createPackage=int(data['createPackage']),
|
createPackage=int(data['createPackage']),
|
||||||
|
listPackages=int(data['listPackages']),
|
||||||
deletePackage=int(data['deletePackage']),
|
deletePackage=int(data['deletePackage']),
|
||||||
modifyPackage=int(data['modifyPackage']),
|
modifyPackage=int(data['modifyPackage']),
|
||||||
|
|
||||||
@@ -455,6 +463,7 @@ def createACLFunc(request):
|
|||||||
## Email Management
|
## Email Management
|
||||||
|
|
||||||
createEmail=int(data['createEmail']),
|
createEmail=int(data['createEmail']),
|
||||||
|
listEmails=int(data['listEmails']),
|
||||||
deleteEmail=int(data['deleteEmail']),
|
deleteEmail=int(data['deleteEmail']),
|
||||||
emailForwarding=int(data['emailForwarding']),
|
emailForwarding=int(data['emailForwarding']),
|
||||||
changeEmailPassword=int(data['changeEmailPassword']),
|
changeEmailPassword=int(data['changeEmailPassword']),
|
||||||
@@ -507,6 +516,7 @@ def deleteACL(request):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return redirect(loadLoginPage)
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
def deleteACLFunc(request):
|
def deleteACLFunc(request):
|
||||||
try:
|
try:
|
||||||
val = request.session['userID']
|
val = request.session['userID']
|
||||||
@@ -521,7 +531,8 @@ def deleteACLFunc(request):
|
|||||||
acl.delete()
|
acl.delete()
|
||||||
finalResponse = {'status': 1}
|
finalResponse = {'status': 1}
|
||||||
else:
|
else:
|
||||||
finalResponse = {'status': 0, 'errorMesssage': 'This ACL is currently in used by existing users.', 'error_message': 'This ACL is currently in used by existing users.'}
|
finalResponse = {'status': 0, 'errorMesssage': 'This ACL is currently in used by existing users.',
|
||||||
|
'error_message': 'This ACL is currently in used by existing users.'}
|
||||||
else:
|
else:
|
||||||
return ACLManager.loadErrorJson()
|
return ACLManager.loadErrorJson()
|
||||||
|
|
||||||
@@ -566,6 +577,7 @@ def fetchACLDetails(request):
|
|||||||
## User Management
|
## User Management
|
||||||
|
|
||||||
finalResponse['createNewUser'] = acl.createNewUser
|
finalResponse['createNewUser'] = acl.createNewUser
|
||||||
|
finalResponse['listUsers'] = acl.listUsers
|
||||||
finalResponse['resellerCenter'] = acl.resellerCenter
|
finalResponse['resellerCenter'] = acl.resellerCenter
|
||||||
finalResponse['deleteUser'] = acl.deleteUser
|
finalResponse['deleteUser'] = acl.deleteUser
|
||||||
finalResponse['changeUserACL'] = acl.changeUserACL
|
finalResponse['changeUserACL'] = acl.changeUserACL
|
||||||
@@ -579,8 +591,8 @@ def fetchACLDetails(request):
|
|||||||
|
|
||||||
## Package Management
|
## Package Management
|
||||||
|
|
||||||
|
|
||||||
finalResponse['createPackage'] = acl.createPackage
|
finalResponse['createPackage'] = acl.createPackage
|
||||||
|
finalResponse['listPackages'] = acl.listPackages
|
||||||
finalResponse['deletePackage'] = acl.deletePackage
|
finalResponse['deletePackage'] = acl.deletePackage
|
||||||
finalResponse['modifyPackage'] = acl.modifyPackage
|
finalResponse['modifyPackage'] = acl.modifyPackage
|
||||||
|
|
||||||
@@ -600,6 +612,7 @@ def fetchACLDetails(request):
|
|||||||
## Email Management
|
## Email Management
|
||||||
|
|
||||||
finalResponse['createEmail'] = acl.createEmail
|
finalResponse['createEmail'] = acl.createEmail
|
||||||
|
finalResponse['listEmails'] = acl.listEmails
|
||||||
finalResponse['deleteEmail'] = acl.deleteEmail
|
finalResponse['deleteEmail'] = acl.deleteEmail
|
||||||
finalResponse['emailForwarding'] = acl.emailForwarding
|
finalResponse['emailForwarding'] = acl.emailForwarding
|
||||||
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
|
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
|
||||||
@@ -655,6 +668,7 @@ def submitACLModifications(request):
|
|||||||
## User Management
|
## User Management
|
||||||
|
|
||||||
acl.createNewUser = int(data['createNewUser'])
|
acl.createNewUser = int(data['createNewUser'])
|
||||||
|
acl.listUsers = int(data['listUsers'])
|
||||||
acl.resellerCenter = int(data['resellerCenter'])
|
acl.resellerCenter = int(data['resellerCenter'])
|
||||||
acl.deleteUser = int(data['deleteUser'])
|
acl.deleteUser = int(data['deleteUser'])
|
||||||
acl.changeUserACL = int(data['changeUserACL'])
|
acl.changeUserACL = int(data['changeUserACL'])
|
||||||
@@ -669,6 +683,7 @@ def submitACLModifications(request):
|
|||||||
## Package Management
|
## Package Management
|
||||||
|
|
||||||
acl.createPackage = int(data['createPackage'])
|
acl.createPackage = int(data['createPackage'])
|
||||||
|
acl.listPackages = int(data['listPackages'])
|
||||||
acl.deletePackage = int(data['deletePackage'])
|
acl.deletePackage = int(data['deletePackage'])
|
||||||
acl.modifyPackage = int(data['modifyPackage'])
|
acl.modifyPackage = int(data['modifyPackage'])
|
||||||
|
|
||||||
@@ -688,6 +703,7 @@ def submitACLModifications(request):
|
|||||||
## Email Management
|
## Email Management
|
||||||
|
|
||||||
acl.createEmail = int(data['createEmail'])
|
acl.createEmail = int(data['createEmail'])
|
||||||
|
acl.listEmails = int(data['listEmails'])
|
||||||
acl.deleteEmail = int(data['deleteEmail'])
|
acl.deleteEmail = int(data['deleteEmail'])
|
||||||
acl.emailForwarding = int(data['emailForwarding'])
|
acl.emailForwarding = int(data['emailForwarding'])
|
||||||
acl.changeEmailPassword = int(data['changeEmailPassword'])
|
acl.changeEmailPassword = int(data['changeEmailPassword'])
|
||||||
@@ -850,16 +866,21 @@ def saveResellerChanges(request):
|
|||||||
userToBeModified = Administrator.objects.get(userName=data['userToBeModified'])
|
userToBeModified = Administrator.objects.get(userName=data['userToBeModified'])
|
||||||
newOwner = Administrator.objects.get(userName=data['newOwner'])
|
newOwner = Administrator.objects.get(userName=data['newOwner'])
|
||||||
|
|
||||||
|
try:
|
||||||
if ACLManager.websitesLimitCheck(newOwner, data['websitesLimit'], userToBeModified) == 0:
|
if ACLManager.websitesLimitCheck(newOwner, data['websitesLimit'], userToBeModified) == 0:
|
||||||
finalResponse = {'status': 0,
|
finalResponse = {'status': 0,
|
||||||
'errorMessage': "You've reached maximum websites limit as a reseller.",
|
'errorMessage': "You've reached maximum websites limit as a reseller.",
|
||||||
'error_message': "You've reached maximum websites limit as a reseller."}
|
'error_message': "You've reached maximum websites limit as a reseller."}
|
||||||
json_data = json.dumps(finalResponse)
|
json_data = json.dumps(finalResponse)
|
||||||
return HttpResponse(json_data)
|
return HttpResponse(json_data)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
userToBeModified.owner = newOwner.pk
|
userToBeModified.owner = newOwner.pk
|
||||||
|
try:
|
||||||
userToBeModified.initWebsitesLimit = data['websitesLimit']
|
userToBeModified.initWebsitesLimit = data['websitesLimit']
|
||||||
|
except:
|
||||||
|
pass
|
||||||
userToBeModified.save()
|
userToBeModified.save()
|
||||||
|
|
||||||
finalResponse = {'status': 1}
|
finalResponse = {'status': 1}
|
||||||
@@ -869,3 +890,84 @@ def saveResellerChanges(request):
|
|||||||
finalResponse = {'status': 0, 'errorMessage': str(msg), 'error_message': str(msg)}
|
finalResponse = {'status': 0, 'errorMessage': str(msg), 'error_message': str(msg)}
|
||||||
json_data = json.dumps(finalResponse)
|
json_data = json.dumps(finalResponse)
|
||||||
return HttpResponse(json_data)
|
return HttpResponse(json_data)
|
||||||
|
|
||||||
|
|
||||||
|
def listUsers(request):
|
||||||
|
try:
|
||||||
|
userID = request.session['userID']
|
||||||
|
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if currentACL['admin'] == 1:
|
||||||
|
aclNames = ACLManager.unFileteredACLs()
|
||||||
|
elif currentACL['changeUserACL'] == 1:
|
||||||
|
aclNames = ACLManager.unFileteredACLs()
|
||||||
|
elif currentACL['createNewUser'] == 1:
|
||||||
|
aclNames = ['user']
|
||||||
|
else:
|
||||||
|
aclNames = []
|
||||||
|
|
||||||
|
if currentACL['admin'] == 1:
|
||||||
|
resellerPrivUsers = ACLManager.userWithResellerPriv(userID)
|
||||||
|
elif currentACL['resellerCenter'] == 1:
|
||||||
|
resellerPrivUsers = ACLManager.userWithResellerPriv(userID)
|
||||||
|
else:
|
||||||
|
resellerPrivUsers = []
|
||||||
|
|
||||||
|
if currentACL['admin'] == 1:
|
||||||
|
return render(request, 'userManagment/listUsers.html', {'aclNames': aclNames, 'resellerPrivUsers': resellerPrivUsers})
|
||||||
|
elif currentACL['listUsers'] == 1:
|
||||||
|
return render(request, 'userManagment/listUsers.html', {'aclNames': aclNames, 'resellerPrivUsers': resellerPrivUsers})
|
||||||
|
else:
|
||||||
|
return ACLManager.loadError()
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
|
||||||
|
def fetchTableUsers(request):
|
||||||
|
try:
|
||||||
|
userID = request.session['userID']
|
||||||
|
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if currentACL['admin'] == 1:
|
||||||
|
users = ACLManager.fetchTableUserObjects(userID)
|
||||||
|
elif currentACL['listUsers'] == 1:
|
||||||
|
users = ACLManager.fetchTableUserObjects(userID)
|
||||||
|
else:
|
||||||
|
return ACLManager.loadErrorJson()
|
||||||
|
|
||||||
|
json_data = "["
|
||||||
|
checker = 0
|
||||||
|
|
||||||
|
for items in users:
|
||||||
|
|
||||||
|
diskUsage = 0
|
||||||
|
|
||||||
|
for webs in items.websites_set.all():
|
||||||
|
diskUsage = virtualHostUtilities.getDiskUsage("/home/" + webs.domain, webs.package.diskSpace)[0] + diskUsage
|
||||||
|
|
||||||
|
owner = Administrator.objects.get(pk=items.owner)
|
||||||
|
|
||||||
|
dic = {'id': items.pk,
|
||||||
|
'name': items.userName,
|
||||||
|
'owner': owner.userName,
|
||||||
|
'acl': items.acl.name,
|
||||||
|
'diskUsage': '%sMB' % str(diskUsage),
|
||||||
|
'websites': items.initWebsitesLimit
|
||||||
|
}
|
||||||
|
|
||||||
|
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, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|||||||
Reference in New Issue
Block a user