keycloak-memoizeit

Merge pull request #3733 from stianst/KEYCLOAK-4180 KEYCLOAK-4180

1/10/2017 6:33:04 AM

Details

diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
index 3974462..f8ec7fe 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
@@ -989,8 +989,10 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
     }
 
     if (!$scope.create) {
-        $scope.client = angular.copy(client);
+        $scope.client = client;
         updateProperties();
+
+        $scope.clientEdit = angular.copy(client);
     }
 
 
@@ -1002,6 +1004,8 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
             $scope.client = data;
             updateProperties();
             $scope.importing = true;
+
+            $scope.clientEdit = angular.copy(client);
         });
     };
 
@@ -1023,50 +1027,50 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
 
     $scope.changeAccessType = function() {
         if ($scope.accessType == "confidential") {
-            $scope.client.bearerOnly = false;
-            $scope.client.publicClient = false;
+            $scope.clientEdit.bearerOnly = false;
+            $scope.clientEdit.publicClient = false;
         } else if ($scope.accessType == "public") {
-            $scope.client.bearerOnly = false;
-            $scope.client.publicClient = true;
+            $scope.clientEdit.bearerOnly = false;
+            $scope.clientEdit.publicClient = true;
         } else if ($scope.accessType == "bearer-only") {
-            $scope.client.bearerOnly = true;
-            $scope.client.publicClient = false;
+            $scope.clientEdit.bearerOnly = true;
+            $scope.clientEdit.publicClient = false;
         }
     };
 
     $scope.changeProtocol = function() {
         if ($scope.protocol == "openid-connect") {
-            $scope.client.protocol = "openid-connect";
+            $scope.clientEdit.protocol = "openid-connect";
         } else if ($scope.protocol == "saml") {
-            $scope.client.protocol = "saml";
+            $scope.clientEdit.protocol = "saml";
         }
     };
 
     $scope.changeAlgorithm = function() {
-        $scope.client.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
+        $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
     };
 
     $scope.changeNameIdFormat = function() {
-        $scope.client.attributes['saml_name_id_format'] = $scope.nameIdFormat;
+        $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat;
     };
 
     $scope.changeSamlSigKeyNameTranformer = function() {
-        $scope.client.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] = $scope.samlXmlKeyNameTranformer;
+        $scope.clientEdit.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] = $scope.samlXmlKeyNameTranformer;
     };
 
     $scope.changeUserInfoSignedResponseAlg = function() {
         if ($scope.userInfoSignedResponseAlg === 'unsigned') {
-            $scope.client.attributes['user.info.response.signature.alg'] = null;
+            $scope.clientEdit.attributes['user.info.response.signature.alg'] = null;
         } else {
-            $scope.client.attributes['user.info.response.signature.alg'] = $scope.userInfoSignedResponseAlg;
+            $scope.clientEdit.attributes['user.info.response.signature.alg'] = $scope.userInfoSignedResponseAlg;
         }
     };
 
     $scope.changeRequestObjectSignatureAlg = function() {
         if ($scope.requestObjectSignatureAlg === 'any') {
-            $scope.client.attributes['request.object.signature.alg'] = null;
+            $scope.clientEdit.attributes['request.object.signature.alg'] = null;
         } else {
-            $scope.client.attributes['request.object.signature.alg'] = $scope.requestObjectSignatureAlg;
+            $scope.clientEdit.attributes['request.object.signature.alg'] = $scope.requestObjectSignatureAlg;
         }
     };
 
@@ -1077,7 +1081,7 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
     });
 
     function isChanged() {
-        if (!angular.equals($scope.client, client)) {
+        if (!angular.equals($scope.client, $scope.clientEdit)) {
             return true;
         }
         if ($scope.newRedirectUri && $scope.newRedirectUri.length > 0) {
@@ -1090,18 +1094,18 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
     }
 
     function configureAuthorizationServices() {
-        if ($scope.client.authorizationServicesEnabled) {
+        if ($scope.clientEdit.authorizationServicesEnabled) {
             if ($scope.accessType == 'public') {
                 $scope.accessType = 'confidential';
             }
-            $scope.client.publicClient = false;
-            $scope.client.serviceAccountsEnabled = true;
-        } else if ($scope.client.bearerOnly) {
-            $scope.client.serviceAccountsEnabled = false;
+            $scope.clientEdit.publicClient = false;
+            $scope.clientEdit.serviceAccountsEnabled = true;
+        } else if ($scope.clientEdit.bearerOnly) {
+            $scope.clientEdit.serviceAccountsEnabled = false;
         }
     }
 
-    $scope.$watch('client', function() {
+    $scope.$watch('clientEdit', function() {
         $scope.changed = isChanged();
         configureAuthorizationServices();
     }, true);
@@ -1116,18 +1120,18 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
     }, true);
 
     $scope.deleteWebOrigin = function(index) {
-        $scope.client.webOrigins.splice(index, 1);
+        $scope.clientEdit.webOrigins.splice(index, 1);
     }
     $scope.addWebOrigin = function() {
-        $scope.client.webOrigins.push($scope.newWebOrigin);
+        $scope.clientEdit.webOrigins.push($scope.newWebOrigin);
         $scope.newWebOrigin = "";
     }
     $scope.deleteRedirectUri = function(index) {
-        $scope.client.redirectUris.splice(index, 1);
+        $scope.clientEdit.redirectUris.splice(index, 1);
     }
 
     $scope.addRedirectUri = function() {
-        $scope.client.redirectUris.push($scope.newRedirectUri);
+        $scope.clientEdit.redirectUris.push($scope.newRedirectUri);
         $scope.newRedirectUri = "";
     }
 
@@ -1141,68 +1145,68 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, templates,
         }
 
         if ($scope.samlServerSignature == true) {
-            $scope.client.attributes["saml.server.signature"] = "true";
+            $scope.clientEdit.attributes["saml.server.signature"] = "true";
         } else {
-            $scope.client.attributes["saml.server.signature"] = "false";
+            $scope.clientEdit.attributes["saml.server.signature"] = "false";
         }
         if ($scope.samlServerSignatureEnableKeyInfoExtension == true) {
-            $scope.client.attributes["saml.server.signature.keyinfo.ext"] = "true";
+            $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "true";
         } else {
-            $scope.client.attributes["saml.server.signature.keyinfo.ext"] = "false";
+            $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "false";
         }
         if ($scope.samlAssertionSignature == true) {
-            $scope.client.attributes["saml.assertion.signature"] = "true";
+            $scope.clientEdit.attributes["saml.assertion.signature"] = "true";
         } else {
-            $scope.client.attributes["saml.assertion.signature"] = "false";
+            $scope.clientEdit.attributes["saml.assertion.signature"] = "false";
         }
         if ($scope.samlClientSignature == true) {
-            $scope.client.attributes["saml.client.signature"] = "true";
+            $scope.clientEdit.attributes["saml.client.signature"] = "true";
         } else {
-            $scope.client.attributes["saml.client.signature"] = "false";
+            $scope.clientEdit.attributes["saml.client.signature"] = "false";
 
         }
         if ($scope.samlEncrypt == true) {
-            $scope.client.attributes["saml.encrypt"] = "true";
+            $scope.clientEdit.attributes["saml.encrypt"] = "true";
         } else {
-            $scope.client.attributes["saml.encrypt"] = "false";
+            $scope.clientEdit.attributes["saml.encrypt"] = "false";
 
         }
         if ($scope.samlAuthnStatement == true) {
-            $scope.client.attributes["saml.authnstatement"] = "true";
+            $scope.clientEdit.attributes["saml.authnstatement"] = "true";
         } else {
-            $scope.client.attributes["saml.authnstatement"] = "false";
+            $scope.clientEdit.attributes["saml.authnstatement"] = "false";
 
         }
         if ($scope.samlForceNameIdFormat == true) {
-            $scope.client.attributes["saml_force_name_id_format"] = "true";
+            $scope.clientEdit.attributes["saml_force_name_id_format"] = "true";
         } else {
-            $scope.client.attributes["saml_force_name_id_format"] = "false";
+            $scope.clientEdit.attributes["saml_force_name_id_format"] = "false";
 
         }
         if ($scope.samlMultiValuedRoles == true) {
-            $scope.client.attributes["saml.multivalued.roles"] = "true";
+            $scope.clientEdit.attributes["saml.multivalued.roles"] = "true";
         } else {
-            $scope.client.attributes["saml.multivalued.roles"] = "false";
+            $scope.clientEdit.attributes["saml.multivalued.roles"] = "false";
 
         }
         if ($scope.samlForcePostBinding == true) {
-            $scope.client.attributes["saml.force.post.binding"] = "true";
+            $scope.clientEdit.attributes["saml.force.post.binding"] = "true";
         } else {
-            $scope.client.attributes["saml.force.post.binding"] = "false";
+            $scope.clientEdit.attributes["saml.force.post.binding"] = "false";
 
         }
 
-        $scope.client.protocol = $scope.protocol;
-        $scope.client.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
-        $scope.client.attributes['saml_name_id_format'] = $scope.nameIdFormat;
+        $scope.clientEdit.protocol = $scope.protocol;
+        $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm;
+        $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat;
 
-        if ($scope.client.protocol != 'saml' && !$scope.client.bearerOnly && ($scope.client.standardFlowEnabled || $scope.client.implicitFlowEnabled) && (!$scope.client.redirectUris || $scope.client.redirectUris.length == 0)) {
+        if ($scope.clientEdit.protocol != 'saml' && !$scope.clientEdit.bearerOnly && ($scope.clientEdit.standardFlowEnabled || $scope.clientEdit.implicitFlowEnabled) && (!$scope.clientEdit.redirectUris || $scope.clientEdit.redirectUris.length == 0)) {
             Notifications.error("You must specify at least one redirect uri");
         } else {
             Client.update({
                 realm : realm.realm,
                 client : client.id
-            }, $scope.client, function() {
+            }, $scope.clientEdit, function() {
                 $route.reload();
                 Notifications.success("Your changes have been saved to the client.");
             }, function(error) {
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
index af99e7d..4ceb7cb 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
@@ -12,35 +12,35 @@
             <div class="form-group">
                 <label class="col-md-2 control-label" for="clientId">{{:: 'client-id' | translate}}</label>
                 <div class="col-sm-6">
-                    <input class="form-control" type="text" id="clientId" name="clientId" data-ng-model="client.clientId" autofocus required>
+                    <input class="form-control" type="text" id="clientId" name="clientId" data-ng-model="clientEdit.clientId" autofocus required>
                 </div>
                 <kc-tooltip>{{:: 'client-id.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group">
                 <label class="col-md-2 control-label" for="name">{{:: 'name' | translate}} </label>
                 <div class="col-sm-6">
-                    <input class="form-control" type="text" id="name" name="name" data-ng-model="client.name" autofocus>
+                    <input class="form-control" type="text" id="name" name="name" data-ng-model="clientEdit.name" autofocus>
                 </div>
                 <kc-tooltip>{{:: 'client.name.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group">
                 <label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
                 <div class="col-sm-6">
-                    <input class="form-control" type="text" id="description" name="description" data-ng-model="client.description">
+                    <input class="form-control" type="text" id="description" name="description" data-ng-model="clientEdit.description">
                 </div>
                 <kc-tooltip>{{:: 'client.description.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block">
                 <label class="col-md-2 control-label" for="enabled">{{:: 'enabled' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.enabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.enabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
                 <kc-tooltip>{{:: 'client.enabled.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block">
                 <label class="col-md-2 control-label" for="consentRequired">{{:: 'consent-required' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.consentRequired" name="consentRequired" id="consentRequired" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.consentRequired" name="consentRequired" id="consentRequired" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
                 <kc-tooltip>{{:: 'consent-required.tooltip' | translate}}</kc-tooltip>
             </div>
@@ -62,7 +62,7 @@
                 <div class="col-sm-6">
                     <div>
                         <select class="form-control" id="template"
-                                ng-model="client.clientTemplate"
+                                ng-model="clientEdit.clientTemplate"
                                 ng-options="template.name as template.name for template in templates">
                         </select>
                     </div>
@@ -82,39 +82,39 @@
                 </div>
                 <kc-tooltip>{{:: 'access-type.tooltip' | translate}}</kc-tooltip>
             </div>
-            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !client.bearerOnly">
+            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="standardFlowEnabled">{{:: 'standard-flow-enabled' | translate}}</label>
                 <kc-tooltip>{{:: 'standard-flow-enabled.tooltip' | translate}}</kc-tooltip>
                 <div class="col-md-6">
-                    <input ng-model="client.standardFlowEnabled" name="standardFlowEnabled" id="standardFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.standardFlowEnabled" name="standardFlowEnabled" id="standardFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
             </div>
-            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !client.bearerOnly">
+            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="implicitFlowEnabled">{{:: 'implicit-flow-enabled' | translate}}</label>
                 <kc-tooltip>{{:: 'implicit-flow-enabled.tooltip' | translate}}</kc-tooltip>
                 <div class="col-md-6">
-                    <input ng-model="client.implicitFlowEnabled" name="implicitFlowEnabled" id="implicitFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.implicitFlowEnabled" name="implicitFlowEnabled" id="implicitFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
             </div>
-            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !client.bearerOnly">
+            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="directAccessGrantsEnabled">{{:: 'direct-access-grants-enabled' | translate}}</label>
                 <kc-tooltip>{{:: 'direct-access-grants-enabled.tooltip' | translate}}</kc-tooltip>
                 <div class="col-md-6">
-                    <input ng-model="client.directAccessGrantsEnabled" name="directAccessGrantsEnabled" id="directAccessGrantsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.directAccessGrantsEnabled" name="directAccessGrantsEnabled" id="directAccessGrantsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
             </div>
-            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !client.publicClient && !client.bearerOnly">
+            <div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.publicClient && !clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="serviceAccountsEnabled">{{:: 'service-accounts-enabled' | translate}}</label>
                 <kc-tooltip>{{:: 'service-accounts-enabled.tooltip' | translate}}</kc-tooltip>
                 <div class="col-md-6">
-                    <input ng-model="client.serviceAccountsEnabled" name="serviceAccountsEnabled" id="serviceAccountsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.serviceAccountsEnabled" name="serviceAccountsEnabled" id="serviceAccountsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
             </div>
             <div class="form-group" data-ng-show="serverInfo.profileInfo.disabledFeatures.indexOf('AUTHORIZATION') == -1 && protocol == 'openid-connect'">
                 <label class="col-md-2 control-label" for="authorizationServicesEnabled">{{:: 'authz-authorization-services-enabled' | translate}}</label>
                 <kc-tooltip>{{:: 'authz-authorization-services-enabled.tooltip' | translate}}</kc-tooltip>
                 <div class="col-md-6">
-                    <input ng-model="client.authorizationServicesEnabled" name="authorizationServicesEnabled" id="authorizationServicesEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.authorizationServicesEnabled" name="authorizationServicesEnabled" id="authorizationServicesEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
@@ -176,7 +176,7 @@
                 <div class="col-sm-6">
                     <div>
                         <select class="form-control" id="canonicalization"
-                                ng-model="client.attributes['saml_signature_canonicalization_method']"
+                                ng-model="clientEdit.attributes['saml_signature_canonicalization_method']"
                                 ng-options="canon.value as canon.name for canon in canonicalization">
                         </select>
                     </div>
@@ -207,7 +207,7 @@
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="frontchannelLogout">{{:: 'front-channel-logout' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.frontchannelLogout" name="frontchannelLogout" id="frontchannelLogout" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
+                    <input ng-model="clientEdit.frontchannelLogout" name="frontchannelLogout" id="frontchannelLogout" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
                 </div>
                 <kc-tooltip>{{:: 'front-channel-logout.tooltip' | translate}}</kc-tooltip>
             </div>
@@ -232,20 +232,20 @@
                 <kc-tooltip>{{:: 'name-id-format.tooltip' | translate}}</kc-tooltip>
             </div>
 
-            <div class="form-group" data-ng-show="!client.bearerOnly">
+            <div class="form-group" data-ng-show="!clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="rootUrl">{{:: 'root-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input class="form-control" type="text" name="rootUrl" id="rootUrl" data-ng-model="client.rootUrl">
+                    <input class="form-control" type="text" name="rootUrl" id="rootUrl" data-ng-model="clientEdit.rootUrl">
                 </div>
                 <kc-tooltip>{{:: 'root-url.tooltip' | translate}}</kc-tooltip>
             </div>
 
-            <div class="form-group clearfix block" data-ng-hide="client.bearerOnly || (!client.standardFlowEnabled && !client.implicitFlowEnabled)">
+            <div class="form-group clearfix block" data-ng-hide="clientEdit.bearerOnly || (!clientEdit.standardFlowEnabled && !clientEdit.implicitFlowEnabled)">
                 <label class="col-md-2 control-label" for="newRedirectUri"><span class="required" data-ng-show="protocol != 'saml'">*</span> {{:: 'valid-redirect-uris' | translate}}</label>
 
                 <div class="col-sm-6">
-                    <div class="input-group" ng-repeat="(i, redirectUri) in client.redirectUris track by $index">
-                        <input class="form-control" ng-model="client.redirectUris[i]">
+                    <div class="input-group" ng-repeat="(i, redirectUri) in clientEdit.redirectUris track by $index">
+                        <input class="form-control" ng-model="clientEdit.redirectUris[i]">
                         <div class="input-group-btn">
                             <button class="btn btn-default" type="button" data-ng-click="deleteRedirectUri($index)"><span class="fa fa-minus"></span></button>
                         </div>
@@ -262,10 +262,10 @@
                 <kc-tooltip>{{:: 'valid-redirect-uris.tooltip' | translate}}</kc-tooltip>
             </div>
 
-            <div class="form-group" data-ng-show="!client.bearerOnly">
+            <div class="form-group" data-ng-show="!clientEdit.bearerOnly">
                 <label class="col-md-2 control-label" for="baseUrl">{{:: 'base-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input class="form-control" type="text" name="baseUrl" id="baseUrl" data-ng-model="client.baseUrl">
+                    <input class="form-control" type="text" name="baseUrl" id="baseUrl" data-ng-model="clientEdit.baseUrl">
                 </div>
                 <kc-tooltip>{{:: 'base-url.tooltip' | translate}}</kc-tooltip>
             </div>
@@ -273,7 +273,7 @@
                 <label class="col-md-2 control-label" for="adminUrl">{{:: 'admin-url' | translate}}</label>
                 <div class="col-sm-6">
                     <input class="form-control" type="text" name="adminUrl" id="adminUrl"
-                           data-ng-model="client.adminUrl">
+                           data-ng-model="clientEdit.adminUrl">
                 </div>
                 <kc-tooltip>{{:: 'admin-url.tooltip' | translate}}</kc-tooltip>
             </div>
@@ -281,30 +281,30 @@
                 <label class="col-md-2 control-label" for="masterSamlUrl">{{:: 'master-saml-processing-url' | translate}}</label>
                 <div class="col-sm-6">
                     <input class="form-control" type="text" name="masterSamlUrl" id="masterSamlUrl"
-                           data-ng-model="client.adminUrl">
+                           data-ng-model="clientEdit.adminUrl">
                 </div>
                 <kc-tooltip>{{:: 'master-saml-processing-url.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="urlReferenceName">{{:: 'idp-sso-url-ref' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_idp_initiated_sso_url_name" class="form-control" type="text" name="urlReferenceName" id="urlReferenceName" />
+                    <input ng-model="clientEdit.attributes.saml_idp_initiated_sso_url_name" class="form-control" type="text" name="urlReferenceName" id="urlReferenceName" />
                 </div>
                 <kc-tooltip>{{:: 'idp-sso-url-ref.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="idpInitiatedRelayState">{{:: 'idp-sso-relay-state' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_idp_initiated_sso_relay_state" class="form-control" type="text" name="idpInitiatedRelayState" id="idpInitiatedRelayState" />
+                    <input ng-model="clientEdit.attributes.saml_idp_initiated_sso_relay_state" class="form-control" type="text" name="idpInitiatedRelayState" id="idpInitiatedRelayState" />
                 </div>
                 <kc-tooltip>{{:: 'idp-sso-relay-state.tooltip' | translate}}</kc-tooltip>
             </div>
-            <div class="form-group" data-ng-show="!client.bearerOnly && protocol == 'openid-connect' && (client.standardFlowEnabled || client.implicitFlowEnabled)">
+            <div class="form-group" data-ng-show="!clientEdit.bearerOnly && protocol == 'openid-connect' && (clientEdit.standardFlowEnabled || clientEdit.implicitFlowEnabled)">
                 <label class="col-md-2 control-label" for="newWebOrigin">{{:: 'web-origins' | translate}}</label>
 
                 <div class="col-sm-6">
-                    <div class="input-group" ng-repeat="(i, webOrigin) in client.webOrigins track by $index">
-                        <input class="form-control" ng-model="client.webOrigins[i]">
+                    <div class="input-group" ng-repeat="(i, webOrigin) in clientEdit.webOrigins track by $index">
+                        <input class="form-control" ng-model="clientEdit.webOrigins[i]">
                         <div class="input-group-btn">
                             <button class="btn btn-default" type="button" data-ng-click="deleteWebOrigin($index)"><span class="fa fa-minus"></span></button>
                         </div>
@@ -326,28 +326,28 @@
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="consumerServicePost">{{:: 'assertion-consumer-post-binding-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_assertion_consumer_url_post" class="form-control" type="text" name="consumerServicePost" id="consumerServicePost" />
+                    <input ng-model="clientEdit.attributes.saml_assertion_consumer_url_post" class="form-control" type="text" name="consumerServicePost" id="consumerServicePost" />
                 </div>
                 <kc-tooltip>{{:: 'assertion-consumer-post-binding-url.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="consumerServiceRedirect">{{:: 'assertion-consumer-redirect-binding-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_assertion_consumer_url_redirect" class="form-control" type="text" name="consumerServiceRedirect" id="consumerServiceRedirect" />
+                    <input ng-model="clientEdit.attributes.saml_assertion_consumer_url_redirect" class="form-control" type="text" name="consumerServiceRedirect" id="consumerServiceRedirect" />
                 </div>
                 <kc-tooltip>{{:: 'assertion-consumer-redirect-binding-url.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="logoutPostBinding">{{:: 'logout-service-post-binding-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_single_logout_service_url_post" class="form-control" type="text" name="logoutPostBinding" id="logoutPostBinding" />
+                    <input ng-model="clientEdit.attributes.saml_single_logout_service_url_post" class="form-control" type="text" name="logoutPostBinding" id="logoutPostBinding" />
                 </div>
                 <kc-tooltip>{{:: 'logout-service-post-binding-url.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
                 <label class="col-md-2 control-label" for="logoutPostBinding">{{:: 'logout-service-redir-binding-url' | translate}}</label>
                 <div class="col-sm-6">
-                    <input ng-model="client.attributes.saml_single_logout_service_url_redirect" class="form-control" type="text" name="logoutRedirectBinding" id="logoutRedirectBinding" />
+                    <input ng-model="clientEdit.attributes.saml_single_logout_service_url_redirect" class="form-control" type="text" name="logoutRedirectBinding" id="logoutRedirectBinding" />
                 </div>
                 <kc-tooltip>{{:: 'logout-service-redir-binding-url.tooltip' | translate}}</kc-tooltip>
             </div>