This commit is contained in:
Usman Nasir
2019-08-13 16:27:56 +05:00
parent 4d4b0c7e03
commit d495ce4160
49 changed files with 26567 additions and 15706 deletions

View File

@@ -675,6 +675,9 @@ class BackupManager:
command = "mv " + tempCronPath + " " + path
ProcessUtilities.executioner(command)
command = 'chown root:root %s' % (path)
ProcessUtilities.executioner(command)
command = "systemctl restart crond"
ProcessUtilities.executioner(command)
@@ -707,6 +710,9 @@ class BackupManager:
command = "sudo mv " + tempCronPath + " " + path
ProcessUtilities.executioner(command)
command = 'chown root:root %s' % (path)
ProcessUtilities.executioner(command)
command = "sudo systemctl restart crond"
ProcessUtilities.executioner(command)
@@ -762,8 +768,10 @@ class BackupManager:
command = "sudo mv " + tempCronPath + " " + path
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)
destination = dest.objects.get(destLoc=backupDest)

View File

@@ -126,6 +126,9 @@ app.controller('adminController', function($scope,$http,$timeout) {
if(!Boolean(response.data.createNewUser)){
$('.createNewUser').hide();
}
if(!Boolean(response.data.listUsers)){
$('.listUsers').hide();
}
if(!Boolean(response.data.resellerCenter)){
$('.resellerCenter').hide();
}
@@ -158,6 +161,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
$('.createPackage').hide();
}
if(!Boolean(response.data.listPackages)){
$('.listPackages').hide();
}
if(!Boolean(response.data.deletePackage)){
$('.deletePackage').hide();
}
@@ -208,6 +215,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
$('.emailAsWhole').hide();
}
if(!Boolean(response.data.listEmails)){
$('.listEmails').hide();
}
if(!Boolean(response.data.createEmail)){
$('.createEmail').hide();
}

View File

@@ -319,7 +319,7 @@
</div>
</div>
<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>
@@ -373,6 +373,9 @@
<li class="createNewUser"><a href="{% url 'createUser' %}"
title="{% trans 'Create New User' %}"><span>{% trans "Create New User" %}</span></a>
</li>
<li class="listUsers"><a href="{% url 'listUsers' %}"
title="{% trans 'List Users' %}"><span>{% trans "List Users" %}</span></a>
</li>
<li><a href="{% url 'modifyUsers' %}"
title="{% trans 'Modify User' %}"><span>{% trans "Modify User" %}</span></a></li>
<li class="deleteUser"><a href="{% url 'deleteUser' %}"
@@ -439,6 +442,9 @@
<li class="createPackage"><a href="{% url 'createPackage' %}"
title="{% trans 'Create Package' %}"><span>{% trans "Create Package" %}</span></a>
</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' %}"
title="{% trans 'Delete Package' %}"><span>{% trans "Delete Package" %}</span></a>
</li>
@@ -511,6 +517,9 @@
<li class="createEmail"><a href="{% url 'createEmailAccount' %}"
title="{% trans 'Create Email Account' %}"><span>{% trans "Create Email" %}</span></a>
</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' %}"
title="{% trans 'Delete Email Account' %}"><span>{% trans "Delete Email" %}</span></a>
</li>

View File

@@ -519,13 +519,11 @@ class DNSManager:
delRecord = Records.objects.get(id=id)
admin = Administrator.objects.get(pk=userID)
if currentACL['admin'] == 1:
pass
elif delRecord.domainOwner.admin == admin:
if ACLManager.checkOwnership(delRecord.domainOwner.name, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
return ACLManager.loadError()
delRecord.delete()

View File

@@ -952,7 +952,7 @@ class preFlightsChecks:
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"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'CyberPanel Download',
@@ -961,7 +961,7 @@ class preFlightsChecks:
##
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"
preFlightsChecks.call(command, self.distro, '[download_install_CyberPanel]',
'Extract CyberPanel',1, 1, os.EX_OSERR)
@@ -1054,7 +1054,7 @@ class preFlightsChecks:
path = "/usr/local/CyberCP/version.txt"
writeToFile = open(path, 'w')
writeToFile.writelines('1.8\n')
writeToFile.writelines('2')
writeToFile.writelines('9')
writeToFile.close()
except:
pass
@@ -1362,6 +1362,40 @@ enabled=1"""
preFlightsChecks.stdOut("Dovecot and Dovecot-MySQL successfully installed!")
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:
logging.InstallLog.writeToFile(str(msg) + " [install_postfix_davecot]")
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

View File

@@ -14,6 +14,7 @@ class ACL(models.Model):
## User Management
createNewUser = models.IntegerField(default=0)
listUsers = models.IntegerField(default=0)
deleteUser = models.IntegerField(default=0)
resellerCenter = models.IntegerField(default=0)
changeUserACL = models.IntegerField(default=0)
@@ -28,6 +29,7 @@ class ACL(models.Model):
## Package Management
createPackage = models.IntegerField(default=0)
listPackages = models.IntegerField(default=0)
deletePackage = models.IntegerField(default=0)
modifyPackage = models.IntegerField(default=0)
@@ -47,6 +49,7 @@ class ACL(models.Model):
## Email Management
createEmail = models.IntegerField(default=1)
listEmails = models.IntegerField(default=1)
deleteEmail = models.IntegerField(default=1)
emailForwarding = models.IntegerField(default=1)
changeEmailPassword = models.IntegerField(default=1)

View 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();
}
};
});

View File

@@ -113,7 +113,7 @@
</div>
<div class="form-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">
<i class="glyph-icon icon-unlock-alt"></i>
</span>

View File

@@ -218,7 +218,7 @@ def loadLoginPage(request):
firstName="Cyber",lastName="Panel", acl=acl, token=token)
admin.save()
vers = version(currentVersion="1.8", build=8)
vers = version(currentVersion="1.8", build=9)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -58,6 +58,26 @@ class MailServerManager:
logging.CyberCPLogFileWriter.writeToFile(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):
try:
@@ -347,6 +367,53 @@ class MailServerManager:
json_data = json.dumps(data_ret)
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):

View File

@@ -1107,4 +1107,180 @@ 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 */

View 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">&times;
</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 %}

View File

@@ -4,7 +4,9 @@ import views
urlpatterns = [
url(r'^$', views.loadEmailHome, name='loadEmailHome'),
url(r'^createEmailAccount', views.createEmailAccount, name='createEmailAccount'),
url(r'^listEmails$', views.listEmails, name='listEmails'),
url(r'^submitEmailCreation', views.submitEmailCreation, name='submitEmailCreation'),
url(r'^fetchEmails$', views.fetchEmails, name='fetchEmails'),
## Mail Forwardings

View File

@@ -22,6 +22,21 @@ def createEmailAccount(request):
except KeyError:
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):
try:

View File

@@ -218,3 +218,59 @@ class PackagesManager:
data_ret = {'status': 0, 'saveStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
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)

View File

@@ -49,7 +49,7 @@ app.controller('createPackage', function ($scope, $http) {
var dataBases = $scope.dataBases;
var emails = $scope.emails;
if($scope.allowFullDomain === undefined){
if ($scope.allowFullDomain === undefined) {
$scope.allowFullDomain = 0;
}
@@ -240,7 +240,7 @@ app.controller('modifyPackages', function ($scope, $http) {
$scope.allowFullDomain = false;
}
$scope.modifyButton = "Save Details"
$scope.modifyButton = "Save Details";
$("#packageDetailsToBeModified").fadeIn();
@@ -333,3 +333,199 @@ app.controller('modifyPackages', function ($scope, $http) {
/* 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'
});
}
};
});

View 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">&times;
</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 %}

View File

@@ -6,7 +6,8 @@ urlpatterns = [
url(r'^createPackage$', views.createPacakge, name='createPackage'),
url(r'^deletePacakge$', views.deletePacakge, name='deletePackage'),
url(r'^modifyPackage$', views.modifyPackage, name='modifyPackage'),
url(r'^listPackages$', views.listPackages, name='listPackages'),
url(r'^fetchPackagesTable$', views.fetchPackagesTable, name='fetchPackagesTable'),
# Pacakge Modification URLs

View File

@@ -108,3 +108,23 @@ def saveChanges(request):
return coreResult
except KeyError:
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)

View File

@@ -34,7 +34,7 @@ class ACLManager:
serverIPAddress = "192.168.100.1"
finalResponse['serverIPAddress'] = serverIPAddress
finalResponse['adminName'] = admin.firstName + " " + admin.lastName[:3]
finalResponse['adminName'] = admin.firstName
if admin.acl.adminStatus == 1:
finalResponse['admin'] = 1
@@ -47,6 +47,7 @@ class ACLManager:
## User Management
finalResponse['createNewUser'] = acl.createNewUser
finalResponse['listUsers'] = acl.listUsers
finalResponse['deleteUser'] = acl.deleteUser
finalResponse['changeUserACL'] = acl.changeUserACL
finalResponse['resellerCenter'] = acl.resellerCenter
@@ -62,6 +63,7 @@ class ACLManager:
finalResponse['createPackage'] = acl.createPackage
finalResponse['listPackages'] = acl.listPackages
finalResponse['deletePackage'] = acl.deletePackage
finalResponse['modifyPackage'] = acl.modifyPackage
@@ -81,6 +83,7 @@ class ACLManager:
## Email Management
finalResponse['createEmail'] = acl.createEmail
finalResponse['listEmails'] = acl.listEmails
finalResponse['deleteEmail'] = acl.deleteEmail
finalResponse['emailForwarding'] = acl.emailForwarding
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
@@ -119,7 +122,6 @@ class ACLManager:
else:
return 0
@staticmethod
def currentContextPermission(currentACL, context):
try:
@@ -261,6 +263,22 @@ class ACLManager:
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
def loadDeletionUsers(userID, finalResponse):
admin = Administrator.objects.get(pk=userID)
@@ -426,22 +444,22 @@ class ACLManager:
domainsList = []
if currentACL['admin'] == 1:
domains = Domains.objects.all()
domains = Websites.objects.all()
for items in domains:
domainsList.append(items.name)
domainsList.append(items.domain)
else:
admin = Administrator.objects.get(pk=userID)
domains = admin.domains_set.all()
domains = admin.websites_set.all()
for items in domains:
domainsList.append(items.name)
domainsList.append(items.domain)
admins = Administrator.objects.filter(owner=admin.pk)
for items in admins:
doms = items.domains_set.all()
doms = items.websites_set.all()
for dom in doms:
domainsList.append(dom.name)
domainsList.append(dom.domain)
return domainsList

View File

@@ -31,7 +31,7 @@ def main():
firstName="Cyber", lastName="Panel", acl=acl, token=token)
admin.save()
vers = version(currentVersion="1.8", build=8)
vers = version(currentVersion="1.8", build=9)
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,

View File

@@ -724,16 +724,20 @@ class cPanelImporter:
message = 'Detecting email format from %s.' % (self.backupFile)
logging.statusWriter(self.logFile, message, 1)
Format = open(FormatPath, 'r').read()
try:
if Format.find('mdbox') > -1:
self.mailFormat = cPanelImporter.MdBox
message = 'Mdbox format detected from %s.' % (self.backupFile)
logging.statusWriter(self.logFile, message, 1)
else:
Format = open(FormatPath, 'r').read()
if Format.find('mdbox') > -1:
self.mailFormat = cPanelImporter.MdBox
message = 'Mdbox format detected from %s.' % (self.backupFile)
logging.statusWriter(self.logFile, message, 1)
else:
self.mailFormat = cPanelImporter.MailDir
message = 'Maildir format detected from %s.' % (self.backupFile)
logging.statusWriter(self.logFile, message, 1)
except:
self.mailFormat = cPanelImporter.MailDir
message = 'Maildir format detected from %s.' % (self.backupFile)
logging.statusWriter(self.logFile, message, 1)
####

View File

@@ -597,6 +597,22 @@ class Upgrade:
except:
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:
connection.close()
except:
@@ -1083,6 +1099,12 @@ class Upgrade:
except:
pass
query = "ALTER TABLE packages_package ADD COLUMN allowFullDomain INT DEFAULT 1;"
try:
cursor.execute(query)
except:
pass
try:
connection.close()
except:

View File

@@ -126,6 +126,9 @@ app.controller('adminController', function($scope,$http,$timeout) {
if(!Boolean(response.data.createNewUser)){
$('.createNewUser').hide();
}
if(!Boolean(response.data.listUsers)){
$('.listUsers').hide();
}
if(!Boolean(response.data.resellerCenter)){
$('.resellerCenter').hide();
}
@@ -158,6 +161,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
$('.createPackage').hide();
}
if(!Boolean(response.data.listPackages)){
$('.listPackages').hide();
}
if(!Boolean(response.data.deletePackage)){
$('.deletePackage').hide();
}
@@ -208,6 +215,10 @@ app.controller('adminController', function($scope,$http,$timeout) {
$('.emailAsWhole').hide();
}
if(!Boolean(response.data.listEmails)){
$('.listEmails').hide();
}
if(!Boolean(response.data.createEmail)){
$('.createEmail').hide();
}

11
static/loginSystem/login-systen.js Executable file → Normal file
View 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();
}
};
});

View File

@@ -1107,4 +1107,180 @@ 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 */

529
static/packages/packages.js Executable file → Normal file
View File

@@ -3,13 +3,11 @@
*/
/**
* Created by usman on 7/25/17.
*/
/* Utilities */
function getCookie(name) {
@@ -31,72 +29,74 @@ function getCookie(name) {
/* Utilities ends here */
/* Java script code to create Pacakge */
$("#packageCreationFailed").hide();
$("#packageCreated").hide();
app.controller('createPackage', function($scope,$http) {
app.controller('createPackage', function ($scope, $http) {
//$scope.pname = /([A-Z]){3,10}/gi;
$scope.insertPackInDB = function(){
var packageName = $scope.packageName;
var diskSpace = $scope.diskSpace;
var bandwidth = $scope.bandwidth;
var ftpAccounts = $scope.ftpAccounts;
var dataBases = $scope.dataBases;
var emails = $scope.emails;
$scope.insertPackInDB = function () {
url = "/packages/submitPackage";
var packageName = $scope.packageName;
var diskSpace = $scope.diskSpace;
var bandwidth = $scope.bandwidth;
var ftpAccounts = $scope.ftpAccounts;
var dataBases = $scope.dataBases;
var emails = $scope.emails;
var data = {
packageName: packageName,
diskSpace: diskSpace,
bandwidth: bandwidth,
ftpAccounts: ftpAccounts,
dataBases: dataBases,
emails:emails,
allowedDomains:$scope.allowedDomains
};
var config = {
headers : {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
if ($scope.allowFullDomain === undefined) {
$scope.allowFullDomain = 0;
}
function ListInitialDatas(response) {
console.log(response.data)
url = "/packages/submitPackage";
if (response.data.saveStatus == 0)
{
$scope.errorMessage = response.data.error_message;
$("#packageCreationFailed").fadeIn();
$("#packageCreated").hide();
var data = {
packageName: packageName,
diskSpace: diskSpace,
bandwidth: bandwidth,
ftpAccounts: ftpAccounts,
dataBases: dataBases,
emails: emails,
allowedDomains: $scope.allowedDomains,
allowFullDomain: $scope.allowFullDomain
};
}
else{
$("#packageCreationFailed").hide();
$("#packageCreated").fadeIn();
$scope.createdPackage = $scope.packageName;
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
}
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
function ListInitialDatas(response) {
console.log(response.data)
if (response.data.saveStatus == 0) {
$scope.errorMessage = response.data.error_message;
$("#packageCreationFailed").fadeIn();
$("#packageCreated").hide();
} else {
$("#packageCreationFailed").hide();
$("#packageCreated").fadeIn();
$scope.createdPackage = $scope.packageName;
}
}
function cantLoadInitialDatas(response) {
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 delete Pacakge */
@@ -117,62 +116,60 @@ $("#deleteSuccess").hide();
$("#deletePackageButton").hide();
app.controller('deletePackage', function($scope,$http) {
app.controller('deletePackage', function ($scope, $http) {
$scope.deletePackage = function(){
$scope.deletePackage = function () {
$("#deletePackageButton").fadeIn();
};
$scope.deletePackageFinal = function(){
$scope.deletePackageFinal = function () {
var packageName = $scope.packageToBeDeleted;
var packageName = $scope.packageToBeDeleted;
url = "/packages/submitDelete";
url = "/packages/submitDelete";
var data = {
packageName: packageName,
};
var data = {
packageName: packageName,
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
var config = {
headers : {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas);
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
console.log(response.data)
function ListInitialDatas(response) {
console.log(response.data)
if (response.data.deleteStatus == 0)
{
$scope.errorMessage = response.data.error_message;
$("#deleteFailure").fadeIn();
$("#deleteSuccess").hide();
$("#deletePackageButton").hide();
if (response.data.deleteStatus == 0) {
$scope.errorMessage = response.data.error_message;
$("#deleteFailure").fadeIn();
$("#deleteSuccess").hide();
$("#deletePackageButton").hide();
}
else{
$("#deleteFailure").hide();
$("#deleteSuccess").fadeIn();
$("#deletePackageButton").hide();
$scope.deletedPackage = packageName;
} else {
$("#deleteFailure").hide();
$("#deleteSuccess").fadeIn();
$("#deletePackageButton").hide();
$scope.deletedPackage = packageName;
}
}
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
}
function cantLoadInitialDatas(response) {
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 modify package */
$("#packageDetailsToBeModified").hide();
@@ -194,9 +189,9 @@ $("#modifyButton").hide();
$("#packageLoading").hide();
$("#successfullyModified").hide();
app.controller('modifyPackages', function($scope,$http) {
app.controller('modifyPackages', function ($scope, $http) {
$scope.fetchDetails = function(){
$scope.fetchDetails = function () {
$("#packageLoading").show();
$("#successfullyModified").hide();
@@ -207,63 +202,65 @@ app.controller('modifyPackages', function($scope,$http) {
url = "/packages/submitModify";
var data = {
packageName: packageName,
};
var data = {
packageName: packageName,
};
var config = {
headers : {
'X-CSRFToken': getCookie('csrftoken')
}
};
var config = {
headers: {
'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)
{
$scope.errorMessage = response.data.error_message;
$("#modifyFailure").fadeIn();
$("#modifySuccess").hide();
$("#modifyButton").hide();
$("#packageLoading").hide();
if (response.data.modifyStatus === 0) {
$scope.errorMessage = response.data.error_message;
$("#modifyFailure").fadeIn();
$("#modifySuccess").hide();
$("#modifyButton").hide();
$("#packageLoading").hide();
}
else{
$("#modifyButton").show();
$scope.diskSpace = response.data.diskSpace;
$scope.bandwidth = response.data.bandwidth;
$scope.ftpAccounts = response.data.ftpAccounts;
$scope.dataBases = response.data.dataBases;
$scope.emails = response.data.emails;
$scope.allowedDomains = response.data.allowedDomains;
$scope.modifyButton = "Save Details"
$("#packageDetailsToBeModified").fadeIn();
$("#modifyFailure").hide();
$("#modifySuccess").fadeIn();
$("#packageLoading").hide();
}
} else {
$("#modifyButton").show();
$scope.diskSpace = response.data.diskSpace;
$scope.bandwidth = response.data.bandwidth;
$scope.ftpAccounts = response.data.ftpAccounts;
$scope.dataBases = response.data.dataBases;
$scope.emails = response.data.emails;
$scope.allowedDomains = response.data.allowedDomains;
if (response.data.allowFullDomain === 1) {
$scope.allowFullDomain = true;
} else {
$scope.allowFullDomain = false;
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
$scope.modifyButton = "Save Details";
$("#packageDetailsToBeModified").fadeIn();
$("#modifyFailure").hide();
$("#modifySuccess").fadeIn();
$("#packageLoading").hide();
}
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
};
$scope.modifyPackageFunc = function () {
var packageName = $scope.packageToBeModified;
@@ -281,56 +278,53 @@ app.controller('modifyPackages', function($scope,$http) {
url = "/packages/saveChanges";
var data = {
packageName: packageName,
diskSpace:diskSpace,
bandwidth:bandwidth,
ftpAccounts:ftpAccounts,
dataBases:dataBases,
emails:emails,
allowedDomains:$scope.allowedDomains,
};
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')
}
};
var config = {
headers: {
'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)
{
$scope.errorMessage = response.data.error_message;
$("#modifyFailure").fadeIn();
$("#modifySuccess").hide();
$("#modifyButton").hide();
$("#packageLoading").hide();
if (response.data.saveStatus === 0) {
$scope.errorMessage = response.data.error_message;
$("#modifyFailure").fadeIn();
$("#modifySuccess").hide();
$("#modifyButton").hide();
$("#packageLoading").hide();
}
else{
$("#modifyButton").hide();
} else {
$("#modifyButton").hide();
$("#successfullyModified").fadeIn();
$("#modifyFailure").hide();
$("#packageLoading").hide();
$scope.packageModified = packageName;
$("#successfullyModified").fadeIn();
$("#modifyFailure").hide();
$("#packageLoading").hide();
$scope.packageModified = packageName;
}
}
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
}
function cantLoadInitialDatas(response) {
console.log("not good");
}
};
@@ -338,5 +332,200 @@ app.controller('modifyPackages', function($scope,$http) {
});
/* 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

View File

@@ -286,7 +286,6 @@ app.controller('listWebsites', function ($scope, $http) {
} else {
$("#listFail").fadeIn();
$scope.errorMessage = response.data.error_message;
console.log(response.data);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -66,6 +66,15 @@
</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>
<div class="col-sm-9">
<div class="checkbox">
<label>
@@ -145,6 +154,15 @@
</div>
</div>
<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="checkbox">
<label>
@@ -246,6 +264,15 @@
</div>
</div>
<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="checkbox">
<label>

View 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">&times;
</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 %}

View File

@@ -3,426 +3,450 @@
{% block title %}{% trans "Modify an ACL - 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 "Modify an ACL" %}</h2>
<p>{% trans "On this page you can modify an existing ACL." %}</p>
</div>
<div class="panel">
<div ng-controller="modifyACLCtrl" class="panel-body">
<h3 class="content-box-header">
{% trans "ACL Details" %} - <img ng-hide="aclLoading" src="{% static 'images/loading.gif' %}">
</h3>
<div class="example-box-wrapper">
<form action="/" class="form-horizontal bordered-row panel-body">
<div class="form-group">
<label class="col-sm-3 control-label">{% trans "Select ACL" %} </label>
<div class="col-sm-6">
<select ng-change="fetchDetails()" ng-model="aclToModify" class="form-control">
{% for items in aclNames %}
<option>{{ items }}</option>
{% endfor %}
</select>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-change="adminHook()" ng-model="makeAdmin" type="checkbox" value="">
{% trans "Make Admin" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Version Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="versionManagement" type="checkbox" value="">
{% trans "Version Management" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "User Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createNewUser" type="checkbox" value="">
{% trans "Create New User" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="resellerCenter" type="checkbox" value="">
{% trans "Reseller Center" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteUser" type="checkbox" value="">
{% trans "Delete User" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="changeUserACL" type="checkbox" value="">
{% trans "Change User ACL" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Website Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createWebsite" type="checkbox" value="">
{% trans "Create Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="modifyWebsite" type="checkbox" value="">
{% trans "Modify Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="suspendWebsite" type="checkbox" value="">
{% trans "Suspend Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteWebsite" type="checkbox" value="">
{% trans "Delete Website" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Package Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createPackage" type="checkbox" value="">
{% trans "Create Package" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deletePackage" type="checkbox" value="">
{% trans "Delete Package" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="modifyPackage" type="checkbox" value="">
{% trans "Modify Package" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Database Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createDatabase" type="checkbox" value="">
{% trans "Create Database" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteDatabase" type="checkbox" value="">
{% trans "Delete Database" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="listDatabases" type="checkbox" value="">
{% trans "List Databases" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "DNS Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createNameServer" type="checkbox" value="">
{% trans "Create Nameserver" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createDNSZone" type="checkbox" value="">
{% trans "Delete DNS Zone" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteZone" type="checkbox" value="">
{% trans "Delete Zone" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="addDeleteRecords" type="checkbox" value="">
{% trans "Add/Delete" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Email Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createEmail" type="checkbox" value="">
{% trans "Create Email" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteEmail" type="checkbox" value="">
{% trans "Delete Email" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="emailForwarding" type="checkbox" value="">
{% trans "Email Forwarding" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="changeEmailPassword" type="checkbox" value="">
{% trans "Change Email Password" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="dkimManager" type="checkbox" value="">
{% trans "DKIM Manager" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "FTP Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createFTPAccount" type="checkbox" value="">
{% trans "Create FTP Account" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteFTPAccount" type="checkbox" value="">
{% trans "Delete FTP Account" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="listFTPAccounts" type="checkbox" value="">
{% trans "List FTP Accounts" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Backup Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createBackup" type="checkbox" value="">
{% trans "Create Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="restoreBackup" type="checkbox" value="">
{% trans "Restore Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="addDeleteDestinations" type="checkbox" value="">
{% trans "Add/Delete Destination" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="scheDuleBackups" type="checkbox" value="">
{% trans "Achedule Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="remoteBackups" type="checkbox" value="">
{% trans "Remote Back ups" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "SSL Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="manageSSL" type="checkbox" value="">
{% trans "Manage SSL" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="hostnameSSL" type="checkbox" value="">
{% trans "Hostname SSL" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="mailServerSSL" type="checkbox" value="">
{% trans "MailServer SSL" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label"></label>
<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>
</div>
</div>
</form>
{% load static %}
{% get_current_language as LANGUAGE_CODE %}
<!-- Current language: {{ LANGUAGE_CODE }} -->
<div class="container">
<div id="page-title">
<h2>{% trans "Modify an ACL" %}</h2>
<p>{% trans "On this page you can modify an existing ACL." %}</p>
</div>
<div class="panel">
<div ng-controller="modifyACLCtrl" class="panel-body">
<h3 class="content-box-header">
{% trans "ACL Details" %} - <img ng-hide="aclLoading" src="{% static 'images/loading.gif' %}">
</h3>
<div class="example-box-wrapper">
<form action="/" class="form-horizontal bordered-row panel-body">
<div class="form-group">
<label class="col-sm-3 control-label">{% trans "Select ACL" %} </label>
<div class="col-sm-6">
<select ng-change="fetchDetails()" ng-model="aclToModify" class="form-control">
{% for items in aclNames %}
<option>{{ items }}</option>
{% endfor %}
</select>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-change="adminHook()" ng-model="makeAdmin" type="checkbox" value="">
{% trans "Make Admin" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Version Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="versionManagement" type="checkbox" value="">
{% trans "Version Management" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "User Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createNewUser" type="checkbox" value="">
{% trans "Create New User" %}
</label>
</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>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="resellerCenter" type="checkbox" value="">
{% trans "Reseller Center" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteUser" type="checkbox" value="">
{% trans "Delete User" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="changeUserACL" type="checkbox" value="">
{% trans "Change User ACL" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Website Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createWebsite" type="checkbox" value="">
{% trans "Create Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="modifyWebsite" type="checkbox" value="">
{% trans "Modify Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="suspendWebsite" type="checkbox" value="">
{% trans "Suspend Website" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteWebsite" type="checkbox" value="">
{% trans "Delete Website" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Package Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createPackage" type="checkbox" value="">
{% trans "Create Package" %}
</label>
</div>
</div>
<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="checkbox">
<label>
<input ng-model="deletePackage" type="checkbox" value="">
{% trans "Delete Package" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="modifyPackage" type="checkbox" value="">
{% trans "Modify Package" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Database Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createDatabase" type="checkbox" value="">
{% trans "Create Database" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteDatabase" type="checkbox" value="">
{% trans "Delete Database" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="listDatabases" type="checkbox" value="">
{% trans "List Databases" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "DNS Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createNameServer" type="checkbox" value="">
{% trans "Create Nameserver" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createDNSZone" type="checkbox" value="">
{% trans "Delete DNS Zone" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteZone" type="checkbox" value="">
{% trans "Delete Zone" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="addDeleteRecords" type="checkbox" value="">
{% trans "Add/Delete" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Email Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createEmail" type="checkbox" value="">
{% trans "Create Email" %}
</label>
</div>
</div>
<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="checkbox">
<label>
<input ng-model="deleteEmail" type="checkbox" value="">
{% trans "Delete Email" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="emailForwarding" type="checkbox" value="">
{% trans "Email Forwarding" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="changeEmailPassword" type="checkbox" value="">
{% trans "Change Email Password" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="dkimManager" type="checkbox" value="">
{% trans "DKIM Manager" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "FTP Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createFTPAccount" type="checkbox" value="">
{% trans "Create FTP Account" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="deleteFTPAccount" type="checkbox" value="">
{% trans "Delete FTP Account" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="listFTPAccounts" type="checkbox" value="">
{% trans "List FTP Accounts" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "Backup Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="createBackup" type="checkbox" value="">
{% trans "Create Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="restoreBackup" type="checkbox" value="">
{% trans "Restore Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="addDeleteDestinations" type="checkbox" value="">
{% trans "Add/Delete Destination" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="scheDuleBackups" type="checkbox" value="">
{% trans "Schedule Back up" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="remoteBackups" type="checkbox" value="">
{% trans "Remote Back ups" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label">{% trans "SSL Management" %}</label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="manageSSL" type="checkbox" value="">
{% trans "Manage SSL" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="hostnameSSL" type="checkbox" value="">
{% trans "Hostname SSL" %}
</label>
</div>
</div>
<label class="col-sm-3 control-label"></label>
<div class="col-sm-9">
<div class="checkbox">
<label>
<input ng-model="mailServerSSL" type="checkbox" value="">
{% trans "MailServer SSL" %}
</label>
</div>
</div>
</div>
<div ng-hide="aclDetails" class="form-group">
<label class="col-sm-3 control-label"></label>
<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>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -30,4 +30,6 @@ urlpatterns = [
url(r'^saveResellerChanges$',views.saveResellerChanges,name="saveResellerChanges"),
url(r'^apiAccess$', views.apiAccess, name="apiAccess"),
url(r'^saveChangesAPIAccess$', views.saveChangesAPIAccess, name="saveChangesAPIAccess"),
url(r'^listUsers$', views.listUsers, name="listUsers"),
url(r'^fetchTableUsers$', views.fetchTableUsers, name="fetchTableUsers"),
]

View File

@@ -9,7 +9,7 @@ import json
from plogical import hashPassword
from plogical import CyberCPLogFileWriter as logging
from plogical.acl import ACLManager
from plogical.virtualHostUtilities import virtualHostUtilities
# Create your views here.
@@ -68,6 +68,7 @@ def createUser(request):
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return redirect(loadLoginPage)
def apiAccess(request):
try:
userID = request.session['userID']
@@ -144,7 +145,6 @@ def submitUserCreation(request):
password = hashPassword.hash_password(password)
currentAdmin = Administrator.objects.get(pk=userID)
if ACLManager.websitesLimitCheck(currentAdmin, websitesLimit) == 0:
data_ret = {'status': 0, 'createStatus': 0,
'error_message': "You've reached maximum websites limit as a reseller."}
@@ -370,6 +370,12 @@ def submitUserDeletion(request):
if ACLManager.checkUserOwnerShip(currentACL, currentUser, userInQuestion):
user = Administrator.objects.get(userName=accountUsername)
childUsers = Administrator.objects.filter(owner=user.pk)
for items in childUsers:
items.delete()
user.delete()
data_ret = {'status': 1, 'deleteStatus': 1, 'error_message': 'None'}
@@ -422,6 +428,7 @@ def createACLFunc(request):
## User Management
createNewUser=int(data['createNewUser']),
listUsers=int(data['listUsers']),
resellerCenter=int(data['resellerCenter']),
deleteUser=int(data['deleteUser']),
changeUserACL=int(data['changeUserACL']),
@@ -436,6 +443,7 @@ def createACLFunc(request):
## Package Management
createPackage=int(data['createPackage']),
listPackages=int(data['listPackages']),
deletePackage=int(data['deletePackage']),
modifyPackage=int(data['modifyPackage']),
@@ -455,6 +463,7 @@ def createACLFunc(request):
## Email Management
createEmail=int(data['createEmail']),
listEmails=int(data['listEmails']),
deleteEmail=int(data['deleteEmail']),
emailForwarding=int(data['emailForwarding']),
changeEmailPassword=int(data['changeEmailPassword']),
@@ -507,6 +516,7 @@ def deleteACL(request):
except KeyError:
return redirect(loadLoginPage)
def deleteACLFunc(request):
try:
val = request.session['userID']
@@ -521,7 +531,8 @@ def deleteACLFunc(request):
acl.delete()
finalResponse = {'status': 1}
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:
return ACLManager.loadErrorJson()
@@ -566,6 +577,7 @@ def fetchACLDetails(request):
## User Management
finalResponse['createNewUser'] = acl.createNewUser
finalResponse['listUsers'] = acl.listUsers
finalResponse['resellerCenter'] = acl.resellerCenter
finalResponse['deleteUser'] = acl.deleteUser
finalResponse['changeUserACL'] = acl.changeUserACL
@@ -579,8 +591,8 @@ def fetchACLDetails(request):
## Package Management
finalResponse['createPackage'] = acl.createPackage
finalResponse['listPackages'] = acl.listPackages
finalResponse['deletePackage'] = acl.deletePackage
finalResponse['modifyPackage'] = acl.modifyPackage
@@ -600,6 +612,7 @@ def fetchACLDetails(request):
## Email Management
finalResponse['createEmail'] = acl.createEmail
finalResponse['listEmails'] = acl.listEmails
finalResponse['deleteEmail'] = acl.deleteEmail
finalResponse['emailForwarding'] = acl.emailForwarding
finalResponse['changeEmailPassword'] = acl.changeEmailPassword
@@ -655,6 +668,7 @@ def submitACLModifications(request):
## User Management
acl.createNewUser = int(data['createNewUser'])
acl.listUsers = int(data['listUsers'])
acl.resellerCenter = int(data['resellerCenter'])
acl.deleteUser = int(data['deleteUser'])
acl.changeUserACL = int(data['changeUserACL'])
@@ -669,6 +683,7 @@ def submitACLModifications(request):
## Package Management
acl.createPackage = int(data['createPackage'])
acl.listPackages = int(data['listPackages'])
acl.deletePackage = int(data['deletePackage'])
acl.modifyPackage = int(data['modifyPackage'])
@@ -688,6 +703,7 @@ def submitACLModifications(request):
## Email Management
acl.createEmail = int(data['createEmail'])
acl.listEmails = int(data['listEmails'])
acl.deleteEmail = int(data['deleteEmail'])
acl.emailForwarding = int(data['emailForwarding'])
acl.changeEmailPassword = int(data['changeEmailPassword'])
@@ -850,16 +866,21 @@ def saveResellerChanges(request):
userToBeModified = Administrator.objects.get(userName=data['userToBeModified'])
newOwner = Administrator.objects.get(userName=data['newOwner'])
if ACLManager.websitesLimitCheck(newOwner, data['websitesLimit'], userToBeModified) == 0:
finalResponse = {'status': 0,
'errorMessage': "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)
return HttpResponse(json_data)
try:
if ACLManager.websitesLimitCheck(newOwner, data['websitesLimit'], userToBeModified) == 0:
finalResponse = {'status': 0,
'errorMessage': "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)
return HttpResponse(json_data)
except:
pass
userToBeModified.owner = newOwner.pk
userToBeModified.initWebsitesLimit = data['websitesLimit']
try:
userToBeModified.initWebsitesLimit = data['websitesLimit']
except:
pass
userToBeModified.save()
finalResponse = {'status': 1}
@@ -869,3 +890,84 @@ def saveResellerChanges(request):
finalResponse = {'status': 0, 'errorMessage': str(msg), 'error_message': str(msg)}
json_data = json.dumps(finalResponse)
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)