@@ -26,6 +26,8 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
2626 $scope . entity = '' ;
2727 $scope . password = '' ;
2828 $scope . username = '' ;
29+ $scope . readers = [ ] ;
30+ $scope . owners = [ ] ;
2931
3032 $scope . hasCredential = ( ) => {
3133 return Array . isArray ( $scope . credentialInfo ) && $scope . credentialInfo . length ;
@@ -35,7 +37,7 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
3537 $http . get ( baseUrlSrv . getRestApiBase ( ) + '/credential' )
3638 . success ( function ( data , status , headers , config ) {
3739 $scope . credentialInfo . length = 0 ; // keep the ref while cleaning
38- const returnedCredentials = data . body . userCredentials ;
40+ const returnedCredentials = data . body ;
3941
4042 for ( let key in returnedCredentials ) {
4143 if ( returnedCredentials . hasOwnProperty ( key ) ) {
@@ -44,6 +46,8 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
4446 entity : key ,
4547 password : value . password ,
4648 username : value . username ,
49+ readers : value . readers ,
50+ owners : value . owners ,
4751 } ) ;
4852 }
4953 }
@@ -75,8 +79,16 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
7579 'entity' : $scope . entity ,
7680 'username' : $scope . username ,
7781 'password' : $scope . password ,
82+ 'owners' : angular . element ( '#NewCredentialOwners' ) . val ( ) ,
83+ 'readers' : angular . element ( '#NewCredentialReaders' ) . val ( ) ,
7884 } ;
7985
86+ for ( let i = 0 ; i < newCredential . owners . length ; i ++ ) {
87+ newCredential . owners [ i ] = newCredential . owners [ i ] . trim ( ) ;
88+ }
89+ for ( let i = 0 ; i < newCredential . readers . length ; i ++ ) {
90+ newCredential . readers [ i ] = newCredential . readers [ i ] . trim ( ) ;
91+ }
8092 $http . put ( baseUrlSrv . getRestApiBase ( ) + '/credential' , newCredential )
8193 . success ( function ( data , status , headers , config ) {
8294 showToast ( 'Successfully saved credentials.' , 'success' ) ;
@@ -115,8 +127,21 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
115127 $scope . toggleAddNewCredentialInfo = function ( ) {
116128 if ( $scope . showAddNewCredentialInfo ) {
117129 $scope . showAddNewCredentialInfo = false ;
130+ angular . element ( '#NewCredentialOwners' ) . select2 ( { } ) ;
131+ angular . element ( '#NewCredentialReaders' ) . select2 ( { } ) ;
118132 } else {
133+ let initialOwner = $rootScope . ticket . principal === 'anonymous' ? [ ] : [ $rootScope . ticket . principal ] ;
119134 $scope . showAddNewCredentialInfo = true ;
135+ $scope . owners = initialOwner ;
136+ $scope . readers = [ ] ;
137+ angular . element ( '#NewCredentialOwners' ) . select2 ( getSelectJson ( ) ) ;
138+ angular . element ( '#NewCredentialReaders' ) . select2 ( getSelectJson ( ) ) ;
139+ if ( initialOwner . length ) {
140+ let initialOwnerOption = new Option ( initialOwner [ 0 ] , initialOwner [ 0 ] , true , false ) ;
141+ angular . element ( '#NewCredentialOwners' ) . append ( initialOwnerOption ) . trigger ( 'change' ) ;
142+ }
143+ angular . element ( '#NewCredentialOwners' ) . val ( null ) . trigger ( 'change' ) ;
144+ angular . element ( '#NewCredentialReaders' ) . val ( null ) . trigger ( 'change' ) ;
120145 }
121146 } ;
122147
@@ -129,12 +154,19 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
129154 $scope . entity = '' ;
130155 $scope . username = '' ;
131156 $scope . password = '' ;
157+ $scope . readers = [ ] ;
158+ $scope . owners = [ ] ;
132159 } ;
133160
134161 $scope . copyOriginCredentialsInfo = function ( ) {
135162 showToast ( 'Since entity is a unique key, you can edit only username & password' , 'info' ) ;
136163 } ;
137164
165+ let renderOwnersReadersSelect2 = function ( entity ) {
166+ angular . element ( '#' + entity + 'Owners' ) . select2 ( getSelectJson ( ) ) ;
167+ angular . element ( '#' + entity + 'Readers' ) . select2 ( getSelectJson ( ) ) ;
168+ } ;
169+
138170 $scope . updateCredentialInfo = function ( form , data , entity ) {
139171 if ( ! data . username || ! data . password ) {
140172 showToast ( 'Username \\ Password can not be empty.' , 'danger' ) ;
@@ -145,18 +177,32 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
145177 entity : entity ,
146178 username : data . username ,
147179 password : data . password ,
180+ owners : angular . element ( '#' + entity + 'Owners' ) . val ( ) ,
181+ readers : angular . element ( '#' + entity + 'Readers' ) . val ( ) ,
148182 } ;
149183
184+ for ( let i = 0 ; i < credential . owners . length ; i ++ ) {
185+ credential . owners [ i ] = credential . owners [ i ] . trim ( ) ;
186+ }
187+ for ( let i = 0 ; i < credential . readers . length ; i ++ ) {
188+ credential . readers [ i ] = credential . readers [ i ] . trim ( ) ;
189+ }
150190 $http . put ( baseUrlSrv . getRestApiBase ( ) + '/credential/' , credential )
151191 . success ( function ( data , status , headers , config ) {
152192 const index = $scope . credentialInfo . findIndex ( ( elem ) => elem . entity === entity ) ;
153193 $scope . credentialInfo [ index ] = credential ;
194+ setTimeout ( function ( ) {
195+ renderOwnersReadersSelect2 ( entity ) ;
196+ } , 100 ) ;
154197 return true ;
155198 } )
156199 . error ( function ( data , status , headers , config ) {
157200 showToast ( 'We could not save the credential' , 'danger' ) ;
158201 console . log ( 'Error %o %o' , status , data . message ) ;
159202 form . $show ( ) ;
203+ setTimeout ( function ( ) {
204+ renderOwnersReadersSelect2 ( entity ) ;
205+ } , 100 ) ;
160206 } ) ;
161207 return false ;
162208 } ;
@@ -198,6 +244,68 @@ function CredentialController($scope, $rootScope, $http, baseUrlSrv, ngToast) {
198244 }
199245 }
200246
247+ let getSelectJson = function ( ) {
248+ let selectJson = {
249+ tags : true ,
250+ minimumInputLength : 3 ,
251+ multiple : true ,
252+ tokenSeparators : [ ',' , ' ' ] ,
253+ ajax : {
254+ url : function ( params ) {
255+ if ( ! params . term ) {
256+ return false ;
257+ }
258+ return baseUrlSrv . getRestApiBase ( ) + '/security/userlist/' + params . term ;
259+ } ,
260+ delay : 250 ,
261+ processResults : function ( data , params ) {
262+ let results = [ ] ;
263+
264+ if ( data . body . users . length !== 0 ) {
265+ let users = [ ] ;
266+ for ( let len = 0 ; len < data . body . users . length ; len ++ ) {
267+ users . push ( {
268+ 'id' : data . body . users [ len ] ,
269+ 'text' : data . body . users [ len ] ,
270+ } ) ;
271+ }
272+ results . push ( {
273+ 'text' : 'Users :' ,
274+ 'children' : users ,
275+ } ) ;
276+ }
277+ if ( data . body . roles . length !== 0 ) {
278+ let roles = [ ] ;
279+ for ( let len = 0 ; len < data . body . roles . length ; len ++ ) {
280+ roles . push ( {
281+ 'id' : data . body . roles [ len ] ,
282+ 'text' : data . body . roles [ len ] ,
283+ } ) ;
284+ }
285+ results . push ( {
286+ 'text' : 'Roles :' ,
287+ 'children' : roles ,
288+ } ) ;
289+ }
290+ return {
291+ results : results ,
292+ pagination : {
293+ more : false ,
294+ } ,
295+ } ;
296+ } ,
297+ cache : false ,
298+ } ,
299+ } ;
300+ return selectJson ;
301+ } ;
302+
303+ $scope . $on ( 'ngRenderFinished' , function ( event , data ) {
304+ for ( let credential = 0 ; credential < $scope . credentialInfo . length ; credential ++ ) {
305+ renderOwnersReadersSelect2 ( $scope . credentialInfo [ credential ] . entity ) ;
306+ }
307+ } ) ;
308+
201309 $scope . getCredentialDocsLink = function ( ) {
202310 const currentVersion = $rootScope . zeppelinVersion ;
203311 const isVersionOver0Point7 = currentVersion && currentVersion . split ( '.' ) [ 1 ] > 7 ;
0 commit comments