KEYCLOAK-4180 When you turn on authorization for client Clustering tab appears without saving

This commit is contained in:
Stian Thorgersen 2017-01-10 06:59:40 +01:00
parent 8a02ef1859
commit ab0a669662
2 changed files with 89 additions and 85 deletions

View file

@ -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) {

View file

@ -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>