This is an automated email from the ASF dual-hosted git repository. bhaisaab pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 1b898d6 CLOUDSTACK-8961: Changes related to the UI of VPN Users
management. (#2130)
1b898d6 is described below
commit 1b898d610c7c8fe6da34e299052d71faee64bbeb
Author: Nitin Kumar Maharana <[email protected]>
AuthorDate: Thu Aug 3 03:44:53 2017 +0530
CLOUDSTACK-8961: Changes related to the UI of VPN Users management. (#2130)
The current VPN users are added in the VPN tab inside the public IP after
the VPN is enabled. For each network(for which VPN is supported and enabled),
the VPN users are shared. As the Cloudstack doc says “ The account owner can
create and manage users for their VPN. CloudStack does not use its account
database for this purpose but uses a separate table. The VPN user database is
shared across all the VPNs created by the account owner. All VPN users get
access to all VPNs created by th [...]
The current implementation of going inside each network and adding VPN
users give the first feel as if the users are network based. To fix this,
Shifted the VPN users to networks tab view.
---
ui/l10n/en.js | 3 +
ui/scripts/network.js | 393 ++++++++++++++++++++++++++++++++++++++------------
2 files changed, 303 insertions(+), 93 deletions(-)
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index bd6ac0a..a579784 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -1777,6 +1777,7 @@ var dictionary = {"ICMP.code":"ICMP Code",
"label.vpn":"VPN",
"label.vpn.customer.gateway":"VPN Customer Gateway",
"label.vpn.force.encapsulation":"Force UDP Encapsulation of ESP Packets",
+"label.vpn.users":"VPN Users",
"label.vsmctrlvlanid":"Control VLAN ID",
"label.vsmpktvlanid":"Packet VLAN ID",
"label.vsmstoragevlanid":"Storage VLAN ID",
@@ -1847,6 +1848,7 @@ var dictionary = {"ICMP.code":"ICMP Code",
"message.action.delete.template":"Please confirm that you want to delete this
template.",
"message.action.delete.template.for.all.zones":"The template is used by all
zones. Please confirm that you want to delete it from all zones.",
"message.action.delete.volume":"Please confirm that you want to delete this
volume.",
+"message.action.delete.vpn.user":"Please confirm that you want to delete the
VPN user.",
"message.action.delete.zone":"Please confirm that you want to delete this
zone.",
"message.action.destroy.instance":"Please confirm that you want to destroy
this instance.",
"message.action.destroy.systemvm":"Please confirm that you want to destroy
this System VM.",
@@ -2077,6 +2079,7 @@ var dictionary = {"ICMP.code":"ICMP Code",
"message.enable.vpn.access":"VPN is currently disabled for this IP Address.
Would you like to enable VPN access?",
"message.enabled.vpn":"Your Remote Access VPN is currently enabled and can be
accessed via the IP",
"message.enabled.vpn.ip.sec":"Your IPSec pre-shared key is",
+"message.enabled.vpn.note":"Note: VPN users are now accessed by changing views
at the networks tab.",
"message.enabling.network.offering":"Enabling network offering",
"message.enabling.security.group.provider":"Enabling Security Group provider",
"message.enabling.vpc.offering":"Enabling VPC offering",
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index f365cf5..7f27373 100644
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -400,6 +400,23 @@
}
}
}
+ //Ajax call to check if VPN is enabled.
+ $.ajax({
+ url: createURL('listRemoteAccessVpns'),
+ data: {
+ account: g_account,
+ domainid: g_domainid,
+ listAll: true
+ },
+ async: false,
+ success: function(vpnResponse) {
+ var isVPNEnabled =
vpnResponse.listremoteaccessvpnsresponse.count;
+
+ if (isVPNEnabled) {
+ sectionsToShow.push('vpnuser');
+ }
+ }
+ });
}
});
@@ -4259,99 +4276,11 @@
$('<li>').addClass('psk').html(_l('message.enabled.vpn.ip.sec') + ' ')
.append($('<strong>').html(psk))
)
- ).multiEdit({
- context: args.context,
- noSelect: true,
- fields: {
- 'username': {
- edit: true,
- label: 'label.username'
- },
- 'password': {
- edit: true,
- isPassword: true,
- label: 'label.password'
- },
- 'add-user': {
- addButton: true,
- label: 'label.add.user'
- }
- },
- add: {
- label: 'label.add.user',
- action: function(args) {
- $.ajax({
- url:
createURL('addVpnUser'),
- data: $.extend(args.data, {
- domainid:
args.context.ipAddresses[0].domainid,
- account:
args.context.ipAddresses[0].account
- }),
- dataType: 'json',
- type: "POST",
- success: function(data) {
- args.response.success({
- _custom: {
- jobId:
data.addvpnuserresponse.jobid
- },
- notification: {
- label:
'label.add.vpn.user',
- poll:
pollAsyncJobResult
- }
- });
- },
- error: function(data) {
-
args.response.error(parseXMLHttpResponse(data));
- }
- });
- }
- },
- actions: {
- destroy: {
- label:
'label.action.delete.user',
- action: function(args) {
- $.ajax({
- url:
createURL('removeVpnUser'),
- data: {
- domainid:
args.context.multiRule[0].domainid,
- account:
args.context.multiRule[0].account,
- username:
args.context.multiRule[0].username
- },
- dataType: 'json',
- async: true,
- success:
function(data) {
- var jobID =
data.removevpnuserresponse.jobid;
-
-
args.response.success({
- _custom: {
- jobId:
jobID
- },
- notification: {
- label:
'label.delete.vpn.user',
- poll:
pollAsyncJobResult
- }
- });
- }
- });
- }
- }
- },
- dataProvider: function(args) {
- $.ajax({
- url: createURL('listVpnUsers'),
- data: {
- domainid:
args.context.ipAddresses[0].domainid,
- account:
args.context.ipAddresses[0].account
- },
- dataType: 'json',
- async: true,
- success: function(data) {
- args.response.success({
- data:
data.listvpnusersresponse.vpnuser
- });
- }
- });
- }
- });
+ .append(
+ //Note
+
$('<li>').html(_l('message.enabled.vpn.note'))
+ )
+ )
}
}
}
@@ -6349,6 +6278,284 @@
}
}
}
+ },
+ vpnuser: {
+ type: 'select',
+ title: 'label.vpn.users',
+ listView: {
+ id: 'vpnUsers',
+ label: 'label.vpn.users',
+ fields: {
+ username: {
+ label: 'label.name'
+ },
+ domain: {
+ label: 'label.domain'
+ },
+ state: {
+ label: 'label.state'
+ }
+ },
+
+ dataProvider: function(args) {
+ var data = {};
+ listViewDataProvider(args, data);
+
+ $.ajax({
+ url: createURL('listVpnUsers'),
+ data: data,
+ dataType: 'json',
+ success: function(json) {
+ var items = json.listvpnusersresponse.vpnuser;
+ args.response.success({
+ data: items
+ });
+ }
+ });
+ },
+
+ actions:{
+ destroy: {
+ label: 'label.action.delete.user',
+ messages: {
+ confirm: function(args) {
+ return 'message.action.delete.vpn.user'
+ },
+ notification: function(args) {
+ return 'label.delete.vpn.user'
+ }
+ },
+ action: function(args) {
+ console.log(args.context);
+ $.ajax({
+ url: createURL('removeVpnUser'),
+ data: {
+ domainid:
args.context.vpnuser[0].domainid,
+ account:
args.context.vpnuser[0].account,
+ username:
args.context.vpnuser[0].username
+ },
+ dataType: 'json',
+ async: true,
+ success: function(json) {
+ var jobID =
json.removevpnuserresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jobID
+ }
+ });
+ }
+ });
+ },
+ notification: {
+ poll: pollAsyncJobResult
+ }
+ },
+ add: {
+ label: 'label.add.user',
+ messages: {
+ notification: function(args) {
+ return 'label.add.vpn.user';
+ }
+ },
+ createForm:{
+ title: 'label.add.vpn.user',
+ fields: {
+ username: {
+ edit: true,
+ label: 'label.username',
+ validation: {
+ required: true
+ }
+ },
+ password: {
+ edit: true,
+ isPassword: true,
+ label: 'label.password',
+ validation: {
+ required: true
+ }
+ },
+ domain: {
+ label: 'label.domain',
+ isHidden: function(args) {
+ if (isAdmin() || isDomainAdmin())
+ return false;
+ else
+ return true;
+ },
+ select: function(args) {
+ if (isAdmin() || isDomainAdmin()) {
+ $.ajax({
+ url:
createURL("listDomains&listAll=true"),
+ success: function(json) {
+ var items = [];
+ items.push({
+ id: "",
+ description: ""
+ });
+ var domainObjs =
json.listdomainsresponse.domain;
+
$(domainObjs).each(function() {
+ items.push({
+ id: this.id,
+ description:
this.path
+ });
+ });
+ items.sort(function(a,
b) {
+ return
a.description.localeCompare(b.description);
+ });
+ args.response.success({
+ data: items
+ });
+ }
+ });
+ args.$select.change(function()
{
+ var $form =
$(this).closest('form');
+ if ($(this).val() == "") {
+
$form.find('.form-item[rel=account]').hide();
+ } else {
+
$form.find('.form-item[rel=account]').css('display', 'inline-block');
+ }
+ });
+ } else {
+ args.response.success({
+ data: null
+ });
+ }
+ }
+ },
+ account: {
+ label: 'label.account',
+ validation: {
+ required: true
+ },
+ isHidden: function(args) {
+ if (isAdmin() || isDomainAdmin()) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+ }
+ },
+ action: function(args) {
+ var data = {
+ username: args.data.username,
+ password: args.data.password
+ };
+
+ if (args.data.domain != null &&
args.data.domain.length > 0) {
+ $.extend(data, {
+ domainid: args.data.domain
+ });
+ if (args.data.account != null &&
args.data.account.length > 0) {
+ $.extend(data, {
+ account: args.data.account
+ });
+ }
+ }
+
+ $.ajax({
+ url: createURL('addVpnUser'),
+ data: data,
+ dataType: 'json',
+ async: true,
+ success: function(json) {
+ var jid =
json.addvpnuserresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jid,
+ getUpdatedItem: function(json)
{
+ return
json.queryasyncjobresultresponse.jobresult.vpnuser;
+ }
+ }
+ });
+ }
+ });
+ },
+ notification: {
+ poll: pollAsyncJobResult
+ }
+ }
+ },
+
+ detailView: {
+ name: 'label.details',
+ actions: {
+ destroy: {
+ label: 'label.action.delete.user',
+ messages: {
+ confirm: function(args) {
+ return
'message.action.delete.vpn.user';
+ },
+ notification: function(args) {
+ return 'label.delete.vpn.user';
+ }
+ },
+ action: function(args) {
+ $.ajax({
+ url: createURL("removeVpnUser"),
+ data: {
+ domainid:
args.context.vpnuser[0].domainid,
+ account:
args.context.vpnuser[0].account,
+ username:
args.context.vpnuser[0].username
+ },
+ dataType: 'json',
+ async: true,
+ success: function(json) {
+ var jid =
json.removevpnuserresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jid
+ }
+ });
+ }
+ });
+ },
+ notification: {
+ poll: pollAsyncJobResult
+ }
+ }
+ },
+
+ tabs: {
+ details: {
+ title: 'label.details',
+ fields: [{
+ username: {
+ label: 'label.name',
+ validation: {
+ required: true
+ }
+ }
+ }, {
+ domain: {
+ label: 'label.domain'
+ },
+ state: {
+ label: 'label.state'
+ },
+ }],
+
+ dataProvider: function(args) {
+ $.ajax({
+ url: createURL("listVpnUsers"),
+ data: {
+ id: args.context.vpnuser[0].id
+ },
+ success: function(json) {
+ var item =
json.listvpnusersresponse.vpnuser[0];
+
+ args.response.success({
+ data: item
+ });
+ }
+ });
+ }
+ }
+ }
+ }
+ }
}
}
};
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].
