Merge pull request #1737 from thomasdarimont/issue/KEYCLOAK-1918
KEYCLOAK-1918 - Add description field to client definition.
This commit is contained in:
commit
7de4051c9b
18 changed files with 99 additions and 2 deletions
|
@ -10,6 +10,7 @@
|
|||
|
||||
<addColumn tableName="CLIENT">
|
||||
<column name="ROOT_URL" type="VARCHAR(255)"/>
|
||||
<column name="DESCRIPTION" type="VARCHAR(255)"/>
|
||||
</addColumn>
|
||||
|
||||
<createTable tableName="OFFLINE_USER_SESSION">
|
||||
|
|
|
@ -11,6 +11,7 @@ public class ClientRepresentation {
|
|||
protected String id;
|
||||
protected String clientId;
|
||||
protected String name;
|
||||
protected String description;
|
||||
protected String rootUrl;
|
||||
protected String adminUrl;
|
||||
protected String baseUrl;
|
||||
|
@ -51,6 +52,14 @@ public class ClientRepresentation {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
|
|
@ -160,7 +160,7 @@ select-file=de Select file
|
|||
view-details=de View details
|
||||
clear-import=de Clear import
|
||||
client-id.tooltip=de Specifies ID referenced in URI and tokens. For example 'my-client'
|
||||
client.name.tooltip=de Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example: ${my_client}
|
||||
client.name.tooltip=de Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\: ${my_client}
|
||||
client.enabled.tooltip=de Disabled clients cannot initiate a login or have obtain access tokens.
|
||||
consent-required=de Consent Required
|
||||
consent-required.tooltip=de If enabled users have to consent to client access.
|
||||
|
@ -460,3 +460,4 @@ realm=de Realm
|
|||
identity-provider-mappers=de Identity Provider Mappers
|
||||
create-identity-provider-mapper=de Create Identity Provider Mapper
|
||||
add-identity-provider-mapper=de Add Identity Provider Mapper
|
||||
client.description.tooltip=de Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description}
|
||||
|
|
|
@ -160,7 +160,7 @@ select-file=Select file
|
|||
view-details=View details
|
||||
clear-import=Clear import
|
||||
client-id.tooltip=Specifies ID referenced in URI and tokens. For example 'my-client'
|
||||
client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example: ${my_client}
|
||||
client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\: ${my_client}
|
||||
client.enabled.tooltip=Disabled clients cannot initiate a login or have obtain access tokens.
|
||||
consent-required=Consent Required
|
||||
consent-required.tooltip=If enabled users have to consent to client access.
|
||||
|
@ -458,3 +458,4 @@ realm=Realm
|
|||
identity-provider-mappers=Identity Provider Mappers
|
||||
create-identity-provider-mapper=Create Identity Provider Mapper
|
||||
add-identity-provider-mapper=Add Identity Provider Mapper
|
||||
client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description}
|
||||
|
|
|
@ -38,6 +38,13 @@
|
|||
</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">
|
||||
</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">
|
||||
|
|
|
@ -28,6 +28,10 @@ public interface ClientModel extends RoleContainerModel {
|
|||
|
||||
void setName(String name);
|
||||
|
||||
String getDescription();
|
||||
|
||||
void setDescription(String description);
|
||||
|
||||
boolean isEnabled();
|
||||
|
||||
void setEnabled(boolean enabled);
|
||||
|
|
|
@ -12,6 +12,7 @@ public class ClientEntity extends AbstractIdentifiableEntity {
|
|||
|
||||
private String clientId;
|
||||
private String name;
|
||||
private String description;
|
||||
private String realmId;
|
||||
private boolean enabled;
|
||||
private String clientAuthenticatorType;
|
||||
|
@ -61,6 +62,10 @@ public class ClientEntity extends AbstractIdentifiableEntity {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() { return description; }
|
||||
|
||||
public void setDescription(String description) { this.description = description; }
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
|
|
@ -299,6 +299,7 @@ public class ModelToRepresentation {
|
|||
rep.setId(clientModel.getId());
|
||||
rep.setClientId(clientModel.getClientId());
|
||||
rep.setName(clientModel.getName());
|
||||
rep.setDescription(clientModel.getDescription());
|
||||
rep.setEnabled(clientModel.isEnabled());
|
||||
rep.setAdminUrl(clientModel.getManagementUrl());
|
||||
rep.setPublicClient(clientModel.isPublicClient());
|
||||
|
|
|
@ -692,6 +692,7 @@ public class RepresentationToModel {
|
|||
|
||||
ClientModel client = resourceRep.getId()!=null ? realm.addClient(resourceRep.getId(), resourceRep.getClientId()) : realm.addClient(resourceRep.getClientId());
|
||||
if (resourceRep.getName() != null) client.setName(resourceRep.getName());
|
||||
if(resourceRep.getDescription() != null) client.setDescription(resourceRep.getDescription());
|
||||
if (resourceRep.isEnabled() != null) client.setEnabled(resourceRep.isEnabled());
|
||||
client.setManagementUrl(resourceRep.getAdminUrl());
|
||||
if (resourceRep.isSurrogateAuthRequired() != null)
|
||||
|
@ -793,6 +794,7 @@ public class RepresentationToModel {
|
|||
public static void updateClient(ClientRepresentation rep, ClientModel resource) {
|
||||
if (rep.getClientId() != null) resource.setClientId(rep.getClientId());
|
||||
if (rep.getName() != null) resource.setName(rep.getName());
|
||||
if (rep.getDescription() != null) resource.setDescription(rep.getDescription());
|
||||
if (rep.isEnabled() != null) resource.setEnabled(rep.isEnabled());
|
||||
if (rep.isBearerOnly() != null) resource.setBearerOnly(rep.isBearerOnly());
|
||||
if (rep.isConsentRequired() != null) resource.setConsentRequired(rep.isConsentRequired());
|
||||
|
|
|
@ -78,6 +78,12 @@ public class ClientAdapter implements ClientModel {
|
|||
entity.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() { return entity.getDescription(); }
|
||||
|
||||
@Override
|
||||
public void setDescription(String description) { entity.setDescription(description); }
|
||||
|
||||
@Override
|
||||
public Set<String> getWebOrigins() {
|
||||
Set<String> result = new HashSet<String>();
|
||||
|
|
|
@ -321,6 +321,18 @@ public class ClientAdapter implements ClientModel {
|
|||
updated.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
if (updated != null) return updated.getDescription();
|
||||
return cached.getDescription();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDescription(String description) {
|
||||
getDelegateForUpdate();
|
||||
updated.setDescription(description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSurrogateAuthRequired() {
|
||||
if (updated != null) return updated.isSurrogateAuthRequired();
|
||||
|
|
|
@ -25,6 +25,7 @@ public class CachedClient implements Serializable {
|
|||
private String id;
|
||||
private String clientId;
|
||||
private String name;
|
||||
private String description;
|
||||
private String realm;
|
||||
private Set<String> redirectUris = new HashSet<String>();
|
||||
private boolean enabled;
|
||||
|
@ -58,6 +59,7 @@ public class CachedClient implements Serializable {
|
|||
secret = model.getSecret();
|
||||
clientId = model.getClientId();
|
||||
name = model.getName();
|
||||
description = model.getDescription();
|
||||
this.realm = realm.getId();
|
||||
enabled = model.isEnabled();
|
||||
protocol = model.getProtocol();
|
||||
|
@ -103,6 +105,10 @@ public class CachedClient implements Serializable {
|
|||
return name;
|
||||
}
|
||||
|
||||
public String getDescription() { return description; }
|
||||
|
||||
public void setDescription(String description) { this.description = description; }
|
||||
|
||||
public String getRealm() {
|
||||
return realm;
|
||||
}
|
||||
|
|
|
@ -65,6 +65,12 @@ public class ClientAdapter implements ClientModel {
|
|||
entity.setName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() { return entity.getDescription(); }
|
||||
|
||||
@Override
|
||||
public void setDescription(String description) { entity.setDescription(description); }
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return entity.isEnabled();
|
||||
|
|
|
@ -34,6 +34,8 @@ public class ClientEntity {
|
|||
private String id;
|
||||
@Column(name = "NAME")
|
||||
private String name;
|
||||
@Column(name = "DESCRIPTION")
|
||||
private String description;
|
||||
@Column(name = "CLIENT_ID")
|
||||
private String clientId;
|
||||
@Column(name="ENABLED")
|
||||
|
@ -143,6 +145,14 @@ public class ClientEntity {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,15 @@ public class ClientAdapter extends AbstractMongoAdapter<MongoClientEntity> imple
|
|||
updateMongoEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() { return getMongoEntity().getDescription(); }
|
||||
|
||||
@Override
|
||||
public void setDescription(String description) {
|
||||
getMongoEntity().setDescription(description);
|
||||
updateMongoEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClientId(String clientId) {
|
||||
getMongoEntity().setClientId(clientId);
|
||||
|
|
|
@ -73,6 +73,7 @@ public class ClientsResource {
|
|||
ClientRepresentation client = new ClientRepresentation();
|
||||
client.setId(clientModel.getId());
|
||||
client.setClientId(clientModel.getClientId());
|
||||
client.setDescription(clientModel.getDescription());
|
||||
rep.add(client);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ public class ClientTest extends AbstractClientTest {
|
|||
private String createClient() {
|
||||
ClientRepresentation rep = new ClientRepresentation();
|
||||
rep.setClientId("my-app");
|
||||
rep.setDescription("my-app description");
|
||||
rep.setEnabled(true);
|
||||
Response response = realm.clients().create(rep);
|
||||
response.close();
|
||||
|
@ -79,6 +80,19 @@ public class ClientTest extends AbstractClientTest {
|
|||
assertTrue(rep.isEnabled());
|
||||
}
|
||||
|
||||
/**
|
||||
* See <a href="https://issues.jboss.org/browse/KEYCLOAK-1918">KEYCLOAK-1918</a>
|
||||
*/
|
||||
@Test
|
||||
public void getClientDescription() {
|
||||
|
||||
String id = createClient();
|
||||
|
||||
ClientRepresentation rep = realm.clients().get(id).toRepresentation();
|
||||
assertEquals(id, rep.getId());
|
||||
assertEquals("my-app description", rep.getDescription());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getClientSessions() throws Exception {
|
||||
OAuthClient.AccessTokenResponse response = oauth.doGrantAccessTokenRequest("password", "test-user@localhost", "password");
|
||||
|
|
|
@ -32,6 +32,7 @@ public class ClientModelTest extends AbstractModelTest {
|
|||
realm = realmManager.createRealm("original");
|
||||
client = realm.addClient("application");
|
||||
client.setName("Application");
|
||||
client.setDescription("Description");
|
||||
client.setBaseUrl("http://base");
|
||||
client.setManagementUrl("http://management");
|
||||
client.setClientId("app-name");
|
||||
|
@ -87,6 +88,7 @@ public class ClientModelTest extends AbstractModelTest {
|
|||
public static void assertEquals(ClientModel expected, ClientModel actual) {
|
||||
Assert.assertEquals(expected.getClientId(), actual.getClientId());
|
||||
Assert.assertEquals(expected.getName(), actual.getName());
|
||||
Assert.assertEquals(expected.getDescription(), actual.getDescription());
|
||||
Assert.assertEquals(expected.getBaseUrl(), actual.getBaseUrl());
|
||||
Assert.assertEquals(expected.getManagementUrl(), actual.getManagementUrl());
|
||||
Assert.assertEquals(expected.getDefaultRoles(), actual.getDefaultRoles());
|
||||
|
|
Loading…
Reference in a new issue