mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1417 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1417 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| (function(cloudStack) {
 | |
|   
 | |
| 	var domainObjs;
 | |
| 	var rootDomainId;
 | |
| 
 | |
|   cloudStack.sections.accounts = {
 | |
|     title: 'label.accounts',
 | |
|     id: 'accounts',
 | |
|     sectionSelect: {
 | |
|       label: 'Select View',
 | |
|       preFilter: function() {
 | |
|         return ['accounts'];
 | |
|       }
 | |
|     },
 | |
|     sections: {
 | |
|       accounts: {
 | |
|         type: 'select',
 | |
|         id: 'accounts',
 | |
|         title: 'label.accounts',
 | |
|         listView: {
 | |
|           id: 'accounts',
 | |
|           fields: {
 | |
|             name: { label: 'label.name' },
 | |
|             accounttype: {
 | |
|               label: 'label.role',
 | |
|               converter: function(args){
 | |
|                 return cloudStack.converters.toRole(args);
 | |
|               }
 | |
|             },
 | |
|             domain: { label: 'label.domain' },
 | |
|             state: {
 | |
|               converter: function(str) {
 | |
|                 // For localization
 | |
|                 return str;
 | |
|               },
 | |
|               label: 'label.state',             
 | |
|               indicator: {
 | |
|                 'enabled': 'on',
 | |
|                 'Destroyed': 'off',
 | |
|                 'disabled': 'off'
 | |
|               }
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           actions: {
 | |
|             add: {
 | |
|               label: 'label.add.account',
 | |
|               preFilter: function(args) {
 | |
|                 if(isAdmin())
 | |
|                   return true;
 | |
|                 else
 | |
|                   return false;
 | |
|               },
 | |
|               messages: {
 | |
|                 notification: function(args) {
 | |
|                   return 'label.add.account';
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               createForm: {
 | |
|                 title: 'label.add.account',
 | |
|                 desc: 'label.add.account',
 | |
|                 fields: {
 | |
|                   username: {
 | |
|                     label: 'label.username',
 | |
|                     validation: { required: true },
 | |
|                     docID: 'helpAccountUsername'
 | |
|                   },
 | |
|                   password: {
 | |
|                     label: 'label.password',
 | |
|                     validation: { required: true },
 | |
|                     isPassword: true,
 | |
|                     id: 'password',
 | |
|                     docID: 'helpAccountPassword'
 | |
|                   },
 | |
|                   'password-confirm': {
 | |
|                     label: 'label.confirm.password',
 | |
|                     validation: {
 | |
|                       required: true,
 | |
|                       equalTo: '#password'
 | |
|                     },
 | |
|                     isPassword: true,
 | |
|                     docID: 'helpAccountConfirmPassword'
 | |
|                   },
 | |
|                   email: {
 | |
|                     label: 'label.email',
 | |
|                     validation: { required: true, email:true },
 | |
|                     docID: 'helpAccountEmail'
 | |
|                   },
 | |
|                   firstname: {
 | |
|                     label: 'label.first.name',
 | |
|                     validation: { required: true },
 | |
|                     docID: 'helpAccountFirstName'
 | |
|                   },
 | |
|                   lastname: {
 | |
|                     label: 'label.last.name',
 | |
|                     validation: { required: true },
 | |
|                     docID: 'helpAccountLastName'
 | |
|                   },                  
 | |
|                   domainid: {
 | |
|                     label: 'label.domain',
 | |
|                     docID: 'helpAccountDomain',
 | |
|                     validation: { required: true },
 | |
|                     select: function(args) {
 | |
|                       var data = {};
 | |
| 
 | |
|                       if (args.context.users) { // In accounts section
 | |
|                         data.listAll = true;
 | |
|                       } else if (args.context.domains) { // In domain section (use specific domain)
 | |
|                         data.id = args.context.domains[0].id;
 | |
|                       }
 | |
| 
 | |
|                       $.ajax({
 | |
|                         url: createURL("listDomains"),
 | |
|                         data: data,
 | |
|                         dataType: "json",
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                           var items = [];
 | |
|                           domainObjs = json.listdomainsresponse.domain;
 | |
|                           $(domainObjs).each(function() {
 | |
|                             items.push({ id: this.id, description: this.path });
 | |
| 
 | |
|                             if(this.level == 0)
 | |
|                               rootDomainId = this.id;
 | |
|                           });
 | |
|                           args.response.success({ data: items });
 | |
|                         }
 | |
|                       });
 | |
|                     }
 | |
|                   },
 | |
|                   account: {
 | |
|                     label: 'label.account',
 | |
|                     docID: 'helpAccountAccount'
 | |
|                   },
 | |
|                   accounttype: {
 | |
|                     label: 'label.type',
 | |
|                     docID: 'helpAccountType',
 | |
|                     validation: { required: true },
 | |
|                     select: function(args) {
 | |
|                       var items = [];
 | |
|                       items.push({id:0, description: "User"});  //regular-user
 | |
|                       items.push({id:1, description: "Admin"}); //root-admin
 | |
|                       args.response.success({data: items});
 | |
|                     }
 | |
|                   },
 | |
|                   timezone: {
 | |
|                     label: 'label.timezone',
 | |
|                     docID: 'helpAccountTimezone',
 | |
|                     select: function(args) {
 | |
|                       var items = [];
 | |
|                       items.push({id: "", description: ""});
 | |
|                       for(var p in timezoneMap)
 | |
|                         items.push({id: p, description: timezoneMap[p]});
 | |
|                       args.response.success({data: items});
 | |
|                     }
 | |
|                   },
 | |
|                   networkdomain: {
 | |
|                     label: 'label.network.domain',
 | |
|                     docID: 'helpAccountNetworkDomain',
 | |
|                     validation: { required: false }
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               action: function(args) {
 | |
|                 var data = {
 | |
| 								  username: args.data.username,
 | |
| 								};															               
 | |
|                
 | |
|                 var password = args.data.password;
 | |
|                 if (md5Hashed) {
 | |
|                   password = $.md5(password);		
 | |
|                 }									
 | |
| 								$.extend(data, {
 | |
|                   password: password
 | |
|                 });								
 | |
| 								
 | |
|                 $.extend(data, {
 | |
| 								  email: args.data.email,
 | |
|                   firstname: args.data.firstname,
 | |
|                   lastname: args.data.lastname,                 
 | |
|                   domainid: args.data.domainid									
 | |
| 								});								              
 | |
| 
 | |
|                 var account = args.data.account;
 | |
|                 if(account == null || account.length == 0) {
 | |
|                   account = args.data.username;
 | |
| 								}
 | |
| 								$.extend(data, {
 | |
| 								  account: account
 | |
| 								});
 | |
|                
 | |
|                 var accountType = args.data.accounttype;							
 | |
|                 if (args.data.accounttype == "1" && args.data.domainid != rootDomainId) { //if account type is admin, but domain is not Root domain
 | |
|                   accountType = "2"; // Change accounttype from root-domain("1") to domain-admin("2") 
 | |
| 								}
 | |
| 								$.extend(data, {
 | |
| 								  accounttype: accountType
 | |
| 								});
 | |
|                
 | |
|                 if(args.data.timezone != null && args.data.timezone.length > 0) {
 | |
| 								  $.extend(data, {
 | |
| 									  timezone: args.data.timezone
 | |
| 									});                  
 | |
| 								}
 | |
| 
 | |
|                 if(args.data.networkdomain != null && args.data.networkdomain.length > 0) {
 | |
| 								  $.extend(data, {
 | |
| 									  networkdomain: args.data.networkdomain
 | |
| 									});                  
 | |
| 								}
 | |
| 
 | |
|                 $.ajax({
 | |
|                   url: createURL('createAccount'),
 | |
|                   type: "POST",
 | |
|                   data: data,
 | |
|                   success: function(json) {
 | |
|                     var item = json.createaccountresponse.account;
 | |
|                     args.response.success({data:item});
 | |
|                   },
 | |
|                   error: function(XMLHttpResponse) {                    
 | |
|                     args.response.error(parseXMLHttpResponse(XMLHttpResponse));
 | |
|                   }
 | |
|                 });
 | |
|               },
 | |
| 
 | |
|               notification: {
 | |
|                 poll: function(args) {
 | |
|                   args.complete({
 | |
|                     actionFilter: accountActionfilter
 | |
|                   });
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           dataProvider: function(args) {
 | |
|             var data = {};
 | |
| 						listViewDataProvider(args, data);			
 | |
| 						
 | |
|             if("domains" in args.context) {
 | |
| 						  $.extend(data, {
 | |
| 							  domainid: args.context.domains[0].id
 | |
| 							});
 | |
| 						}
 | |
| 						
 | |
|             $.ajax({
 | |
|               url: createURL('listAccounts'),
 | |
|               data: data,
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var items = json.listaccountsresponse.account;
 | |
|                 args.response.success({
 | |
|                   actionFilter: accountActionfilter,
 | |
|                   data:items
 | |
|                 });
 | |
|               }
 | |
|             });
 | |
|           },
 | |
| 
 | |
|           detailView: {
 | |
|             name: 'Account details',
 | |
|             viewAll: { path: 'accounts.users', label: 'label.users' },
 | |
| 
 | |
|             actions: {
 | |
|               edit: {
 | |
|                 label: 'message.edit.account',
 | |
|                 compactLabel: 'label.edit',
 | |
|                 action: function(args) {                  
 | |
|                   var accountObj = args.context.accounts[0];
 | |
| 
 | |
|                   var data = {
 | |
| 									  domainid: accountObj.domainid,
 | |
| 										account: accountObj.name,
 | |
| 										newname: args.data.name,
 | |
| 										networkdomain: args.data.networkdomain                    
 | |
| 									};
 | |
|                 
 | |
|                   $.ajax({
 | |
|                     url: createURL('updateAccount'),
 | |
|                     data: data,
 | |
|                     async: false,
 | |
|                     success: function(json) {
 | |
|                       accountObj = json.updateaccountresponse.account;
 | |
|                     },
 | |
|                     error: function(json) {
 | |
|                       var errorMsg = parseXMLHttpResponse(json);
 | |
|                       args.response.error(errorMsg);
 | |
|                     } 
 | |
|                   });
 | |
| 
 | |
| 									if(args.data.vmLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 0,
 | |
| 											max: args.data.vmLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name											
 | |
| 										};									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["vmLimit"] = args.data.vmLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.ipLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 1,
 | |
| 											max: args.data.ipLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name		
 | |
| 										};									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["ipLimit"] = args.data.ipLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.volumeLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 2,
 | |
| 											max: args.data.volumeLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name	
 | |
| 										};									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["volumeLimit"] = args.data.volumeLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.snapshotLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 3,
 | |
| 											max: args.data.snapshotLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name	
 | |
| 										};									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["snapshotLimit"] = args.data.snapshotLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
|  
 | |
|                   if(args.data.templateLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 4,
 | |
| 											max: args.data.templateLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name	
 | |
| 										};									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["templateLimit"] = args.data.templateLimit;
 | |
| 											}
 | |
| 										});
 | |
|                   }
 | |
| 									
 | |
| 									if(args.data.vpcLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 7,
 | |
| 											max: args.data.vpcLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name	
 | |
| 										};
 | |
| 									
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["vpcLimit"] = args.data.vpcLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.cpuLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 8,
 | |
| 											max: args.data.cpuLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name
 | |
| 										};
 | |
| 
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["cpuLimit"] = args.data.cpuLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.memoryLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 9,
 | |
| 											max: args.data.memoryLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name
 | |
| 										};
 | |
| 
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["memoryLimit"] = args.data.memoryLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.primaryStorageLimit != null) {
 | |
| 									  var data = {
 | |
| 										  resourceType: 10,
 | |
| 											max: args.data.primaryStorageLimit,
 | |
| 											domainid: accountObj.domainid,
 | |
| 											account: accountObj.name
 | |
| 										};
 | |
| 
 | |
| 										$.ajax({
 | |
| 											url: createURL('updateResourceLimit'),
 | |
| 											data: data,
 | |
| 											async: false,
 | |
| 											success: function(json) {
 | |
| 												accountObj["primaryStorageLimit"] = args.data.primaryStorageLimit;
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 
 | |
| 									if(args.data.secondaryStorageLimit != null) {
 | |
| 										  var data = {
 | |
| 											  resourceType: 11,
 | |
| 												max: args.data.secondaryStorageLimit,
 | |
| 												domainid: accountObj.domainid,
 | |
| 												account: accountObj.name
 | |
| 											};
 | |
| 
 | |
| 											$.ajax({
 | |
| 												url: createURL('updateResourceLimit'),
 | |
| 												data: data,
 | |
| 												async: false,
 | |
| 												success: function(json) {
 | |
| 													accountObj["secondaryStorageLimit"] = args.data.secondaryStorageLimit;
 | |
| 												}
 | |
| 											});
 | |
| 										}
 | |
|                   args.response.success({data: accountObj});
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               updateResourceCount: {
 | |
|                 label: 'label.action.update.resource.count',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.update.resource.count';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.update.resource.count';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
|                   var accountObj = args.context.accounts[0];
 | |
| 									var data = {
 | |
| 									  domainid: accountObj.domainid,
 | |
| 										account: accountObj.name
 | |
| 									};
 | |
| 									
 | |
|                   $.ajax({
 | |
|                     url: createURL('updateResourceCount'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       //var resourcecounts= json.updateresourcecountresponse.resourcecount;   //do nothing
 | |
|                       args.response.success();
 | |
|                     },
 | |
|                     error: function(json) {
 | |
|                       args.response.error(parseXMLHttpResponse(json));
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete();
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               disable: {
 | |
|                 label: 'label.action.disable.account',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.disable.account';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.disable.account';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
|                   var accountObj = args.context.accounts[0];
 | |
| 									var data = {
 | |
| 									  lock: false,
 | |
| 										domainid: accountObj.domainid,
 | |
| 										account: accountObj.name
 | |
| 									};
 | |
| 									
 | |
|                   $.ajax({
 | |
|                     url: createURL('disableAccount'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       var jid = json.disableaccountresponse.jobid;
 | |
|                       args.response.success(
 | |
|                         {_custom:
 | |
|                          {jobId: jid,
 | |
|                           getUpdatedItem: function(json) {
 | |
|                             return json.queryasyncjobresultresponse.jobresult.account;
 | |
|                           },
 | |
|                           getActionFilter: function() {
 | |
|                             return accountActionfilter;
 | |
|                           }
 | |
|                          }
 | |
|                         }
 | |
|                       );
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: pollAsyncJobResult
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               lock: {
 | |
|                 label: 'label.action.lock.account',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.lock.account';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.lock.account';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
|                   var accountObj = args.context.accounts[0];
 | |
| 									var data = {
 | |
| 									  lock: true,
 | |
| 										domainid: accountObj.domainid,
 | |
| 										account: accountObj.name
 | |
| 									};
 | |
| 									
 | |
|                   $.ajax({
 | |
|                     url: createURL('disableAccount'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       var jid = json.disableaccountresponse.jobid;
 | |
|                       args.response.success(
 | |
|                         {_custom:
 | |
|                          {jobId: jid,
 | |
|                           getUpdatedItem: function(json) {
 | |
|                             return json.queryasyncjobresultresponse.jobresult.account;
 | |
|                           },
 | |
|                           getActionFilter: function() {
 | |
|                             return accountActionfilter;
 | |
|                           }
 | |
|                          }
 | |
|                         }
 | |
|                       );
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: pollAsyncJobResult
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               enable: {
 | |
|                 label: 'label.action.enable.account',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.enable.account';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.enable.account';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
|                   var accountObj = args.context.accounts[0];
 | |
| 									var data = {
 | |
| 									  domainid: accountObj.domainid,
 | |
| 										account: accountObj.name
 | |
| 									};									
 | |
|                   $.ajax({
 | |
|                     url: createURL('enableAccount'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       args.response.success({data: json.enableaccountresponse.account});
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete({
 | |
|                       data: { state: 'enabled' }
 | |
|                     });
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               remove: {
 | |
|                 label: 'label.action.delete.account',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.delete.account';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.delete.account';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.accounts[0].id
 | |
| 									};								
 | |
|                   $.ajax({
 | |
|                     url: createURL('deleteAccount'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       var jid = json.deleteaccountresponse.jobid;
 | |
|                       args.response.success(
 | |
|                         {_custom:
 | |
|                          {jobId: jid,
 | |
|                           getUpdatedItem: function(json) {
 | |
|                             return {}; //nothing in this account needs to be updated, in fact, this whole account has being deleted
 | |
|                           },
 | |
|                           getActionFilter: function() {
 | |
|                             return accountActionfilter;
 | |
|                           }
 | |
|                          }
 | |
|                         }
 | |
|                       );
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: pollAsyncJobResult
 | |
|                 }
 | |
|               }
 | |
| 
 | |
|             },
 | |
| 
 | |
|             tabs: {
 | |
|               details: {
 | |
|                 title: 'label.details',
 | |
| 
 | |
|                 fields: [
 | |
|                   {
 | |
|                     name: {
 | |
|                       label: 'label.name',
 | |
|                       isEditable: true,
 | |
| 					            validation: { required: true }
 | |
|                     }
 | |
|                   },
 | |
|                   {
 | |
|                     id: { label: 'ID' },
 | |
|                     accounttype: {
 | |
|                       label: 'label.role',
 | |
|                       converter: function(args){
 | |
|                         return cloudStack.converters.toRole(args);
 | |
|                       }
 | |
|                     },                    
 | |
|                     domain: { label: 'label.domain' },
 | |
|                     state: { label: 'label.state' },
 | |
|                     networkdomain: {
 | |
|                      label: 'label.network.domain',
 | |
|                      isEditable: true
 | |
|                     },
 | |
|                     vmLimit: {
 | |
|                       label: 'label.instance.limits',
 | |
|                       isEditable: function(context) {
 | |
| 
 | |
|                                    if(context.accounts == undefined)
 | |
|                                          return false;
 | |
|                                                else {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 				                        						}	}
 | |
|                     },
 | |
|                     ipLimit: {
 | |
|                       label: 'label.ip.limits',
 | |
|                       isEditable: function(context) {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 											}
 | |
|                     },
 | |
|                     volumeLimit: {
 | |
|                       label: 'label.volume.limits',
 | |
|                       isEditable: function(context) {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 											}
 | |
|                     },
 | |
|                     snapshotLimit: {
 | |
|                       label: 'label.snapshot.limits',
 | |
|                       isEditable: function(context) {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 											}
 | |
|                     },
 | |
|                     templateLimit: {
 | |
|                       label: 'label.template.limits',
 | |
|                       isEditable: function(context) {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 											}
 | |
|                     },
 | |
|                     vpcLimit: {
 | |
|                       label: 'VPC limits',
 | |
|                       isEditable: function(context) {											  
 | |
| 											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
| 												  return true;
 | |
| 												else
 | |
| 												  return false;
 | |
| 											}
 | |
|                     },
 | |
|                     cpuLimit: {
 | |
|                       label: 'label.cpu.limits',
 | |
|                       isEditable: function(context) {
 | |
|   											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
|   												  return true;
 | |
|   												else
 | |
|   												  return false;
 | |
|   											}
 | |
|                     },
 | |
|                     memoryLimit: {
 | |
|                       label: 'label.memory.limits',
 | |
|                       isEditable: function(context) {
 | |
|   											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
|   												  return true;
 | |
|   												else
 | |
|   												  return false;
 | |
|   											}
 | |
|                     },
 | |
|                     primaryStorageLimit: {
 | |
|                       label: 'label.primary.storage.limits',
 | |
|                       isEditable: function(context) {
 | |
|   											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
|   												  return true;
 | |
|   												else
 | |
|   												  return false;
 | |
|   											}
 | |
|                     },
 | |
|                     secondaryStorageLimit: {
 | |
|                       label: 'label.secondary.storage.limits',
 | |
|                       isEditable: function(context) {
 | |
|   											  if (context.accounts[0].accounttype == roleTypeUser || context.accounts[0].accounttype == roleTypeDomainAdmin) //updateResourceLimits is only allowed on account whose type is user or domain-admin
 | |
|   												  return true;
 | |
|   												else
 | |
|   												  return false;
 | |
|   											}
 | |
|                     },
 | |
| 
 | |
|                     vmtotal: { label: 'label.total.of.vm' },
 | |
|                     iptotal: { label: 'label.total.of.ip' },
 | |
|                     receivedbytes: {
 | |
|                       label: 'label.bytes.received',
 | |
|                       converter: function(args) {
 | |
|                         if (args == null || args == 0)
 | |
|                           return "";
 | |
|                         else
 | |
|                           return cloudStack.converters.convertBytes(args);
 | |
|                       }
 | |
|                     },
 | |
|                     sentbytes: {
 | |
|                       label: 'label.bytes.sent',
 | |
|                       converter: function(args) {
 | |
|                         if (args == null || args == 0)
 | |
|                           return "";
 | |
|                         else
 | |
|                           return cloudStack.converters.convertBytes(args);
 | |
|                       }
 | |
|                     }
 | |
|                   }
 | |
|                 ],
 | |
| 
 | |
|                 dataProvider: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.accounts[0].id
 | |
| 									};
 | |
| 									$.ajax({
 | |
| 										url: createURL('listAccounts'),
 | |
| 										data: data,
 | |
| 										success: function(json) {
 | |
| 											var accountObj = json.listaccountsresponse.account[0];
 | |
|                       var data = {
 | |
| 											  domainid: accountObj.domainid,
 | |
| 												account: accountObj.name
 | |
| 											};
 | |
| 											$.ajax({
 | |
| 												url: createURL('listResourceLimits'),
 | |
| 												data: data,
 | |
| 												success: function(json) {
 | |
| 													var limits = json.listresourcelimitsresponse.resourcelimit;													
 | |
| 													if (limits != null) {
 | |
| 														for (var i = 0; i < limits.length; i++) {
 | |
| 															var limit = limits[i];
 | |
| 															switch (limit.resourcetype) {
 | |
| 															case "0":
 | |
| 																accountObj["vmLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "1":
 | |
| 																accountObj["ipLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "2":
 | |
| 																accountObj["volumeLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "3":
 | |
| 																accountObj["snapshotLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "4":
 | |
| 																accountObj["templateLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "7":
 | |
| 																accountObj["vpcLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "8":
 | |
| 																accountObj["cpuLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "9":
 | |
| 																accountObj["memoryLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "10":
 | |
| 																accountObj["primaryStorageLimit"] = limit.max;
 | |
| 																break;
 | |
| 															case "11":
 | |
| 																accountObj["secondaryStorageLimit"] = limit.max;
 | |
| 																break;
 | |
| 															}
 | |
| 														}
 | |
| 													}
 | |
| 													args.response.success(
 | |
| 														{
 | |
| 															actionFilter: accountActionfilter,
 | |
| 															data: accountObj 
 | |
| 														}
 | |
| 													);
 | |
| 												}
 | |
| 											});
 | |
| 										}
 | |
| 									});
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       users: {
 | |
|         type: 'select',
 | |
|         id: 'users',
 | |
|         title: 'label.users',
 | |
|         listView: {
 | |
|           id: 'users',
 | |
|           fields: {
 | |
|             username: { label: 'label.username', editable: true },
 | |
|             firstname: { label: 'label.first.name' },
 | |
|             lastname: { label: 'label.last.name' }
 | |
|           },
 | |
|           dataProvider: function(args) {    
 | |
|             var accountObj = args.context.accounts[0];
 | |
| 						
 | |
| 						if(isAdmin() || isDomainAdmin()) {
 | |
| 						  var data = {
 | |
| 							  domainid: accountObj.domainid,
 | |
| 								account: accountObj.name								
 | |
| 							};
 | |
| 							listViewDataProvider(args, data);		
 | |
| 							
 | |
| 							$.ajax({
 | |
| 								url: createURL('listUsers'),
 | |
| 								data: data,
 | |
| 								success: function(json) {
 | |
| 									args.response.success({
 | |
| 										actionFilter: userActionfilter,
 | |
| 										data: json.listusersresponse.user
 | |
| 									});
 | |
| 								}
 | |
| 							})
 | |
| 						}
 | |
| 						else { //normal user doesn't have access listUsers API until Bug 14127 is fixed.
 | |
| 							args.response.success({
 | |
| 								actionFilter: userActionfilter,
 | |
| 								data: accountObj.user
 | |
| 							});
 | |
| 						}
 | |
|           },
 | |
|           actions: {
 | |
|             add: {
 | |
|               label: 'label.add.user',
 | |
| 
 | |
|               preFilter: function(args) {
 | |
|                 if(isAdmin())
 | |
|                   return true;
 | |
|                 else
 | |
|                   return false;
 | |
|               },
 | |
| 
 | |
|               messages: {
 | |
|                 notification: function(args) {
 | |
|                   return 'label.add.user';
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               createForm: {
 | |
|                 title: 'label.add.user',
 | |
|                 fields: {
 | |
|                   username: {
 | |
|                     label: 'label.username',
 | |
|                     validation: { required: true },
 | |
|                     docID: 'helpUserUsername'
 | |
|                   },
 | |
|                   password: {
 | |
|                     label: 'label.password',
 | |
|                     isPassword: true,
 | |
|                     validation: { required: true },
 | |
|                     id: 'password',
 | |
|                     docID: 'helpUserPassword'
 | |
|                   },
 | |
|                   'password-confirm': {
 | |
|                     label: 'label.confirm.password',
 | |
|                     docID: 'helpUserConfirmPassword',
 | |
|                     validation: {
 | |
|                       required: true,
 | |
|                       equalTo: '#password'
 | |
|                     },
 | |
|                     isPassword: true
 | |
|                   },
 | |
|                   email: {
 | |
|                     label: 'label.email',
 | |
|                     docID: 'helpUserEmail',
 | |
|                     validation: { required: true, email: true }
 | |
|                   },
 | |
|                   firstname: {
 | |
|                     label: 'label.first.name',
 | |
|                     docID: 'helpUserFirstName',
 | |
|                     validation: { required: true }
 | |
|                   },
 | |
|                   lastname: {
 | |
|                     label: 'label.last.name',
 | |
|                     docID: 'helpUserLastName',
 | |
|                     validation: { required: true }
 | |
|                   },
 | |
|                   timezone: {
 | |
|                     label: 'label.timezone',
 | |
|                     docID: 'helpUserTimezone',
 | |
|                     select: function(args) {
 | |
|                       var items = [];
 | |
|                       items.push({id: "", description: ""});
 | |
|                       for(var p in timezoneMap)
 | |
|                         items.push({id: p, description: timezoneMap[p]});
 | |
|                       args.response.success({data: items});
 | |
|                     }
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               action: function(args) {
 | |
|                 var accountObj = args.context.accounts[0];
 | |
| 
 | |
|                 var data = {
 | |
| 								  username: args.data.username									
 | |
| 								};
 | |
| 								
 | |
|                 var password = args.data.password;
 | |
|                 if (md5Hashed) {
 | |
|                   password = $.md5(password);     
 | |
|                 }									
 | |
| 								$.extend(data, {
 | |
|                   password: password
 | |
|                 });			
 | |
|                
 | |
| 								$.extend(data, {
 | |
| 								  email: args.data.email,
 | |
| 									firstname: args.data.firstname,
 | |
| 									lastname: args.data.lastname
 | |
| 								});
 | |
| 								
 | |
|                 if(args.data.timezone != null && args.data.timezone.length > 0) {
 | |
| 								  $.extend(data, {
 | |
| 									  timezone: args.data.timezone
 | |
| 									});								
 | |
| 								}
 | |
|                
 | |
| 								$.extend(data, {
 | |
| 								  domainid: accountObj.domainid,
 | |
|                   account: accountObj.name,
 | |
| 									accounttype: accountObj.accounttype
 | |
| 								});
 | |
| 								
 | |
|                 $.ajax({
 | |
|                   url: createURL('createUser'),
 | |
|                   type: "POST",
 | |
|                   data: data,
 | |
|                   success: function(json) {
 | |
|                     var item = json.createuserresponse.user;
 | |
|                     args.response.success({data: item});
 | |
|                   },
 | |
|                   error: function(XMLHttpResponse) {
 | |
|                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                     args.response.error(errorMsg);
 | |
|                   }
 | |
|                 });
 | |
|               },
 | |
| 
 | |
|               notification: {
 | |
|                 poll: function(args) {
 | |
|                   args.complete();
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           detailView: {
 | |
|             name: 'User details',
 | |
|             isMaximized: true,
 | |
|             actions: {
 | |
|               edit: {
 | |
|                 label: 'label.edit',
 | |
|                 action: function(args) {
 | |
|                   var data = {
 | |
| 									  id: args.context.users[0].id,
 | |
| 									  username: args.data.username,
 | |
| 										email: args.data.email,
 | |
| 										firstname: args.data.firstname,
 | |
| 										lastname: args.data.lastname,
 | |
| 										timezone: args.data.timezone
 | |
| 									};                                  
 | |
|                   $.ajax({
 | |
|                     url: createURL('updateUser'),
 | |
|                     data: data,
 | |
|                     success: function(json) {
 | |
|                       var item = json.updateuserresponse.user;
 | |
|                       args.response.success({data:item});
 | |
|                     },
 | |
|                     error: function(data) {
 | |
|                       args.response.error(parseXMLHttpResponse(data));
 | |
|                     }
 | |
|                   });
 | |
| 
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               changePassword: {
 | |
|                 label: 'label.action.change.password',
 | |
|                 messages: {
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.change.password';
 | |
|                   }
 | |
|                 },
 | |
|                 createForm: {
 | |
|                   title: 'label.action.change.password',
 | |
|                   fields: {
 | |
|                     newPassword: {
 | |
|                       label: 'label.new.password',
 | |
|                       isPassword: true,
 | |
|                       validation: { required: true },
 | |
| 					            id: 'newPassword'
 | |
|                     },
 | |
| 					          'password-confirm': {
 | |
| 						          label: 'label.confirm.password',
 | |
| 						          validation: {
 | |
| 							          required: true,
 | |
| 							          equalTo: '#newPassword'
 | |
| 						          },
 | |
| 						          isPassword: true
 | |
| 					          }
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
|                   var password = args.data.newPassword;
 | |
|                   if (md5Hashed)
 | |
|                     password = $.md5(password);
 | |
|                   
 | |
| 									var data = {
 | |
| 									  id: args.context.users[0].id,
 | |
| 										password: password 
 | |
| 									};
 | |
| 									
 | |
|                   $.ajax({
 | |
|                     url: createURL('updateUser'),
 | |
|                     data: data,
 | |
|                     async: true,
 | |
|                     success: function(json) {
 | |
|                       args.response.success({data: json.updateuserresponse.user});
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete();
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               generateKeys: {
 | |
|                 label: 'label.action.generate.keys',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.generate.keys';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.generate.keys';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.users[0].id
 | |
| 									};								
 | |
|                   $.ajax({
 | |
|                     url: createURL('registerUserKeys'),
 | |
|                     data: data,                    
 | |
|                     success: function(json) {
 | |
|                       args.response.success({data: json.registeruserkeysresponse.userkeys});
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete();
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               disable: {
 | |
|                 label: 'label.action.disable.user',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.disable.user';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.disable.user';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.users[0].id
 | |
| 									};								
 | |
|                   $.ajax({
 | |
|                     url: createURL('disableUser'),
 | |
|                     data: data,                   
 | |
|                     success: function(json) {
 | |
|                       var jid = json.disableuserresponse.jobid;
 | |
|                       args.response.success(
 | |
|                         {_custom:
 | |
|                          {jobId: jid,
 | |
|                           getUpdatedItem: function(json) {
 | |
|                             return json.queryasyncjobresultresponse.jobresult.user;
 | |
|                           },
 | |
|                           getActionFilter: function() {
 | |
|                             return userActionfilter;
 | |
|                           }
 | |
|                          }
 | |
|                         }
 | |
|                       );
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: pollAsyncJobResult
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               enable: {
 | |
|                 label: 'label.action.enable.user',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.enable.user';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.enable.user';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.users[0].id 
 | |
| 									};								
 | |
|                   $.ajax({
 | |
|                     url: createURL('enableUser'),
 | |
|                     data: data,                   
 | |
|                     success: function(json) {
 | |
|                       args.response.success({data: json.enableuserresponse.user});
 | |
|                     },
 | |
|                     error: function(json) {
 | |
|                       args.response.error(parseXMLHttpResponse(json));
 | |
|                     }
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete();
 | |
|                   }
 | |
|                 }
 | |
|               },
 | |
| 
 | |
|               remove: {
 | |
|                 label: 'label.action.delete.user',
 | |
|                 messages: {
 | |
|                   confirm: function(args) {
 | |
|                     return 'message.delete.user';
 | |
|                   },
 | |
|                   notification: function(args) {
 | |
|                     return 'label.action.delete.user';
 | |
|                   }
 | |
|                 },
 | |
|                 action: function(args) {
 | |
| 								  var data = {
 | |
| 									  id: args.context.users[0].id
 | |
| 									};								
 | |
|                   $.ajax({
 | |
|                     url: createURL('deleteUser'),
 | |
|                     data: data,                    
 | |
|                     success: function(json) {
 | |
| 										  args.response.success();
 | |
| 										}
 | |
|                   });
 | |
|                 },
 | |
|                 notification: {
 | |
|                   poll: function(args) {
 | |
|                     args.complete();
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             tabs: {
 | |
|               details: {
 | |
|                 title: 'label.details',
 | |
| 
 | |
|                 fields: [
 | |
|                   {
 | |
|                     username: {
 | |
|                       label: 'label.name',
 | |
|                       isEditable: true,
 | |
| 					            validation: { required: true }
 | |
|                     }
 | |
|                   },
 | |
|                   {
 | |
|                     id: { label: 'ID' },
 | |
|                     state: { label: 'label.state' },
 | |
|                     apikey: { label: 'label.api.key' },
 | |
|                     secretkey: { label: 'label.secret.key' },
 | |
|                     account: { label: 'label.account.name' },
 | |
|                     accounttype: {
 | |
|                       label: 'label.role',
 | |
|                       converter: function(args) {
 | |
|                         return cloudStack.converters.toRole(args);
 | |
|                       }
 | |
|                     },
 | |
|                     domain: { label: 'label.domain' },
 | |
|                     email: {
 | |
|                       label: 'label.email',
 | |
|                       isEditable: true,
 | |
| 					            validation: { required: true, email: true }
 | |
|                     },
 | |
|                     firstname: {
 | |
|                       label: 'label.first.name',
 | |
|                       isEditable: true,
 | |
| 					            validation: { required: true }
 | |
|                     },
 | |
|                     lastname: {
 | |
|                       label: 'label.last.name',
 | |
|                       isEditable: true,
 | |
| 					            validation: { required: true }
 | |
|                     },
 | |
|                     timezone: {
 | |
|                       label: 'label.timezone',
 | |
|                       converter: function(args) {
 | |
|                         if(args == null || args.length == 0)
 | |
|                           return "";
 | |
|                         else
 | |
|                           return args;
 | |
|                       },
 | |
|                       isEditable: true,
 | |
|                       select: function(args) {
 | |
|                         var items = [];
 | |
|                         items.push({id: "", description: ""});
 | |
|                         for(var p in timezoneMap)
 | |
|                           items.push({id: p, description: timezoneMap[p]});
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     }
 | |
|                   }
 | |
|                 ],
 | |
| 
 | |
|                 dataProvider: function(args) {
 | |
| 								  if(isAdmin() || isDomainAdmin()) {								
 | |
| 										$.ajax({
 | |
| 											url: createURL('listUsers'),
 | |
| 											data: {
 | |
| 												id: args.context.users[0].id
 | |
| 											},
 | |
| 											success: function(json) {
 | |
| 												args.response.success({
 | |
| 													actionFilter: userActionfilter,
 | |
| 													data: json.listusersresponse.user[0]
 | |
| 												});
 | |
| 											}
 | |
| 										});
 | |
| 									}
 | |
| 									else { //normal user doesn't have access listUsers API until Bug 14127 is fixed.							
 | |
| 									  args.response.success({
 | |
| 											actionFilter: userActionfilter,
 | |
| 											data: args.context.users[0]
 | |
| 										});		
 | |
| 									}									
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   var accountActionfilter = function(args) {
 | |
|     var jsonObj = args.context.item;
 | |
|     var allowedActions = [];
 | |
| 
 | |
|     if (jsonObj.state == 'Destroyed') return [];
 | |
| 
 | |
|     if(isAdmin()) {
 | |
|         allowedActions.push("edit"); //updating networkdomain is allowed on any account, including system-generated default admin account 
 | |
|         if(!(jsonObj.domain == "ROOT" && jsonObj.name == "admin" && jsonObj.accounttype == 1)) { //if not system-generated default admin account    
 | |
|             if(jsonObj.state == "enabled") {
 | |
|                 allowedActions.push("disable");
 | |
|                 allowedActions.push("lock");
 | |
|             } else if(jsonObj.state == "disabled" || jsonObj.state == "locked") {
 | |
|                 allowedActions.push("enable");
 | |
|             }
 | |
|             allowedActions.push("remove");
 | |
|         }
 | |
|         allowedActions.push("updateResourceCount");
 | |
|     } else if(isDomainAdmin()) {
 | |
|         allowedActions.push("updateResourceCount");
 | |
|     }
 | |
|     return allowedActions;
 | |
|   }
 | |
| 
 | |
|   var userActionfilter = function(args) {
 | |
|     var jsonObj = args.context.item;
 | |
|     var allowedActions = [];
 | |
|     if(isAdmin()) {
 | |
|       allowedActions.push("edit");
 | |
|       allowedActions.push("changePassword");
 | |
|       allowedActions.push("generateKeys");
 | |
|       if(!(jsonObj.domain == "ROOT" && jsonObj.account == "admin" && jsonObj.accounttype == 1)) { //if not system-generated default admin account user 
 | |
|         if(jsonObj.state == "enabled")
 | |
|           allowedActions.push("disable");
 | |
|         if(jsonObj.state == "disabled")
 | |
|           allowedActions.push("enable");
 | |
|         allowedActions.push("remove");
 | |
|       }
 | |
|     } else {
 | |
|         if(isSelfOrChildDomainUser(jsonObj.username, jsonObj.accounttype, jsonObj.domainid, jsonObj.iscallerchilddomain)) {
 | |
|             allowedActions.push("changePassword");
 | |
|             allowedActions.push("generateKeys");
 | |
|         }
 | |
|     }
 | |
|     return allowedActions;
 | |
|   }
 | |
| 
 | |
| })(cloudStack);
 |