Group.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. 'use strict';
  19. angular.module('ambariAdminConsole')
  20. .factory('Group', ['$http', '$q', 'Settings', 'GroupConstants', '$translate', function($http, $q, Settings, GroupConstants, $translate) {
  21. var $t = $translate.instant;
  22. function Group(item){
  23. if(typeof item === 'string'){
  24. this.group_name = item;
  25. } else if(typeof item === 'object'){
  26. angular.extend(this, item.Groups);
  27. this.getMembers();
  28. }
  29. }
  30. Group.prototype.isLDAP = function() {
  31. var deferred = $q.defer();
  32. var self = this;
  33. if( typeof this.ldap_group === 'boolean' ){
  34. deferred.resolve(this.ldap_group)
  35. } else {
  36. $http({
  37. method: 'GET',
  38. url: Settings.baseUrl + '/groups/'+this.group_name
  39. }).
  40. success(function(data) {
  41. self.ldap_group = data.Groups.ldap_group;
  42. deferred.resolve(self.ldap_group);
  43. });
  44. }
  45. return deferred.promise;
  46. }
  47. Group.prototype.getGroupType = function() {
  48. var deferred = $q.defer();
  49. var self = this;
  50. $http({
  51. method: 'GET',
  52. url: Settings.baseUrl + '/groups/'+this.group_name
  53. }).
  54. success(function(data) {
  55. self.group_type = data.Groups.group_type;
  56. deferred.resolve(self.group_type);
  57. });
  58. return deferred.promise;
  59. }
  60. Group.prototype.save = function() {
  61. return $http({
  62. method : 'POST',
  63. url: Settings.baseUrl + '/groups',
  64. data:{
  65. 'Groups/group_name': this.group_name
  66. }
  67. });
  68. };
  69. Group.prototype.destroy = function() {
  70. var deferred = $q.defer();
  71. $http.delete(Settings.baseUrl + '/groups/' +this.group_name)
  72. .success(function() {
  73. deferred.resolve();
  74. })
  75. .error(function(data) {
  76. deferred.reject(data);
  77. });
  78. return deferred.promise;
  79. };
  80. Group.prototype.getMembers = function() {
  81. var deferred = $q.defer();
  82. var self = this;
  83. $http({
  84. method: 'GET',
  85. url: Settings.baseUrl + '/groups/' + this.group_name + '/members'
  86. })
  87. .success(function(data) {
  88. self.members = [];
  89. angular.forEach(data.items, function(member) {
  90. self.members.push(member.MemberInfo.user_name);
  91. });
  92. deferred.resolve(self.members);
  93. })
  94. .error(function(data) {
  95. deferred.reject(data);
  96. });
  97. return deferred.promise;
  98. };
  99. Group.prototype.saveMembers = function() {
  100. var self = this;
  101. var deferred = $q.defer();
  102. var members = [];
  103. angular.forEach(this.members, function(member) {
  104. members.push({
  105. 'MemberInfo/user_name' : member,
  106. 'MemberInfo/group_name' : self.group_name
  107. });
  108. });
  109. $http({
  110. method: 'PUT',
  111. url: Settings.baseUrl + '/groups/' + this.group_name + '/members',
  112. data: members
  113. })
  114. .success(function(data) {
  115. deferred.resolve(data);
  116. })
  117. .error(function(data) {
  118. deferred.reject(data);
  119. });
  120. return deferred.promise;
  121. }
  122. Group.prototype.addMember = function(memberName) {
  123. var deferred = $q.defer();
  124. $http({
  125. method: 'POST',
  126. url: Settings.baseUrl + '/groups/' + this.group_name + '/members' + '/'+ encodeURIComponent(member.user_name)
  127. })
  128. .success(function(data) {
  129. deferred.resolve(data)
  130. })
  131. .error(function(data) {
  132. deferred.reject(data);
  133. });
  134. return deferred.promise;
  135. };
  136. Group.prototype.removeMember = function(memberId) {
  137. return $http.delete(Settings.baseUrl + '/groups/'+this.group_name+'/members/'+memberId);
  138. };
  139. Group.removeMemberFromGroup = function(groupName, memberName) {
  140. return $http.delete(Settings.baseUrl + '/groups/'+groupName + '/members/'+memberName);
  141. };
  142. Group.addMemberToGroup = function(groupName, memberName) {
  143. return $http.post(Settings.baseUrl + '/groups/' + groupName + '/members/'+memberName);
  144. };
  145. Group.all = function(params) {
  146. var deferred = $q.defer();
  147. $http.get(Settings.baseUrl + '/groups?'
  148. + 'Groups/group_name.matches(.*'+params.searchString+'.*)'
  149. + '&fields=*'
  150. + '&from='+ (params.currentPage-1)*params.groupsPerPage
  151. + '&page_size=' + params.groupsPerPage
  152. + (params.group_type === '*' ? '' : '&Groups/group_type=' + params.group_type)
  153. )
  154. .success(function(data) {
  155. var groups = [];
  156. if(Array.isArray(data.items)){
  157. angular.forEach(data.items, function(item) {
  158. groups.push(new Group(item));
  159. });
  160. }
  161. groups.itemTotal = data.itemTotal;
  162. deferred.resolve(groups);
  163. })
  164. .error(function(data) {
  165. deferred.reject(data);
  166. });
  167. return deferred.promise;
  168. };
  169. Group.listByName = function(name) {
  170. return $http.get(Settings.baseUrl + '/groups?'
  171. + 'Groups/group_name.matches(.*'+name+'.*)'
  172. );
  173. };
  174. Group.getPrivileges = function(groupId) {
  175. return $http.get(Settings.baseUrl + '/groups/' + groupId + '/privileges', {
  176. params:{
  177. 'fields': '*'
  178. }
  179. });
  180. };
  181. /**
  182. * Generate group info to display by response data from API.
  183. * Generally this is a single point to manage all required and useful data
  184. * needed to use as context for views/controllers.
  185. *
  186. * @param {Object} group - object from API response
  187. * @returns {Object}
  188. */
  189. Group.makeGroup = function(group) {
  190. group.groupTypeName = $t(GroupConstants.TYPES[group.group_type].LABEL_KEY);
  191. return group;
  192. };
  193. return Group;
  194. }]);