diff --git a/core/src/main/java/org/keycloak/representations/idm/ApplicationRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/ApplicationRepresentation.java index 8f38e4b37c..cc9b657083 100755 --- a/core/src/main/java/org/keycloak/representations/idm/ApplicationRepresentation.java +++ b/core/src/main/java/org/keycloak/representations/idm/ApplicationRepresentation.java @@ -1,46 +1,14 @@ package org.keycloak.representations.idm; -import java.util.List; -import java.util.Map; - /** * @author Bill Burke * @version $Revision: 1 $ */ -public class ApplicationRepresentation { - protected String id; +@Deprecated +public class ApplicationRepresentation extends ClientRepresentation { protected String name; - protected String adminUrl; - protected String baseUrl; - protected Boolean surrogateAuthRequired; - protected Boolean enabled; - protected String secret; - protected String[] defaultRoles; - protected List redirectUris; - protected List webOrigins; @Deprecated protected ClaimRepresentation claims; - protected Integer notBefore; - protected Boolean bearerOnly; - protected Boolean consentRequired; - protected Boolean directGrantsOnly; - protected Boolean publicClient; - protected Boolean frontchannelLogout; - protected String protocol; - protected Map attributes; - protected Boolean fullScopeAllowed; - protected Integer nodeReRegistrationTimeout; - protected Map registeredNodes; - protected List identityProviders; - protected List protocolMappers; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } public String getName() { return name; @@ -50,70 +18,6 @@ public class ApplicationRepresentation { this.name = name; } - public Boolean isEnabled() { - return enabled; - } - - public void setEnabled(Boolean enabled) { - this.enabled = enabled; - } - - public Boolean isSurrogateAuthRequired() { - return surrogateAuthRequired; - } - - public void setSurrogateAuthRequired(Boolean surrogateAuthRequired) { - this.surrogateAuthRequired = surrogateAuthRequired; - } - - public String getAdminUrl() { - return adminUrl; - } - - public void setAdminUrl(String adminUrl) { - this.adminUrl = adminUrl; - } - - public String getBaseUrl() { - return baseUrl; - } - - public void setBaseUrl(String baseUrl) { - this.baseUrl = baseUrl; - } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public List getRedirectUris() { - return redirectUris; - } - - public void setRedirectUris(List redirectUris) { - this.redirectUris = redirectUris; - } - - public List getWebOrigins() { - return webOrigins; - } - - public void setWebOrigins(List webOrigins) { - this.webOrigins = webOrigins; - } - - public String[] getDefaultRoles() { - return defaultRoles; - } - - public void setDefaultRoles(String[] defaultRoles) { - this.defaultRoles = defaultRoles; - } - public ClaimRepresentation getClaims() { return claims; } @@ -121,108 +25,4 @@ public class ApplicationRepresentation { public void setClaims(ClaimRepresentation claims) { this.claims = claims; } - - public Integer getNotBefore() { - return notBefore; - } - - public void setNotBefore(Integer notBefore) { - this.notBefore = notBefore; - } - - public Boolean isBearerOnly() { - return bearerOnly; - } - - public void setBearerOnly(Boolean bearerOnly) { - this.bearerOnly = bearerOnly; - } - - public Boolean isConsentRequired() { - return consentRequired; - } - - public void setConsentRequired(Boolean consentRequired) { - this.consentRequired = consentRequired; - } - - public Boolean getDirectGrantsOnly() { - return directGrantsOnly; - } - - public void setDirectGrantsOnly(Boolean directGrantsOnly) { - this.directGrantsOnly = directGrantsOnly; - } - - public Boolean isPublicClient() { - return publicClient; - } - - public void setPublicClient(Boolean publicClient) { - this.publicClient = publicClient; - } - - public Boolean isFullScopeAllowed() { - return fullScopeAllowed; - } - - public void setFullScopeAllowed(Boolean fullScopeAllowed) { - this.fullScopeAllowed = fullScopeAllowed; - } - - public String getProtocol() { - return protocol; - } - - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - public Map getAttributes() { - return attributes; - } - - public void setAttributes(Map attributes) { - this.attributes = attributes; - } - - public Integer getNodeReRegistrationTimeout() { - return nodeReRegistrationTimeout; - } - - public void setNodeReRegistrationTimeout(Integer nodeReRegistrationTimeout) { - this.nodeReRegistrationTimeout = nodeReRegistrationTimeout; - } - - public Map getRegisteredNodes() { - return registeredNodes; - } - - public void setRegisteredNodes(Map registeredNodes) { - this.registeredNodes = registeredNodes; - } - - public Boolean isFrontchannelLogout() { - return frontchannelLogout; - } - - public void setFrontchannelLogout(Boolean frontchannelLogout) { - this.frontchannelLogout = frontchannelLogout; - } - - public List getIdentityProviders() { - return this.identityProviders; - } - - public void setIdentityProviders(List identityProviders) { - this.identityProviders = identityProviders; - } - - public List getProtocolMappers() { - return protocolMappers; - } - - public void setProtocolMappers(List protocolMappers) { - this.protocolMappers = protocolMappers; - } } diff --git a/core/src/main/java/org/keycloak/representations/idm/ClientRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/ClientRepresentation.java new file mode 100755 index 0000000000..de40f101ca --- /dev/null +++ b/core/src/main/java/org/keycloak/representations/idm/ClientRepresentation.java @@ -0,0 +1,218 @@ +package org.keycloak.representations.idm; + +import java.util.List; +import java.util.Map; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class ClientRepresentation { + protected String id; + protected String clientId; + protected String adminUrl; + protected String baseUrl; + protected Boolean surrogateAuthRequired; + protected Boolean enabled; + protected String secret; + protected String[] defaultRoles; + protected List redirectUris; + protected List webOrigins; + protected Integer notBefore; + protected Boolean bearerOnly; + protected Boolean consentRequired; + protected Boolean directGrantsOnly; + protected Boolean publicClient; + protected Boolean frontchannelLogout; + protected String protocol; + protected Map attributes; + protected Boolean fullScopeAllowed; + protected Integer nodeReRegistrationTimeout; + protected Map registeredNodes; + protected List identityProviders; + protected List protocolMappers; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public Boolean isEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public Boolean isSurrogateAuthRequired() { + return surrogateAuthRequired; + } + + public void setSurrogateAuthRequired(Boolean surrogateAuthRequired) { + this.surrogateAuthRequired = surrogateAuthRequired; + } + + public String getAdminUrl() { + return adminUrl; + } + + public void setAdminUrl(String adminUrl) { + this.adminUrl = adminUrl; + } + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public List getRedirectUris() { + return redirectUris; + } + + public void setRedirectUris(List redirectUris) { + this.redirectUris = redirectUris; + } + + public List getWebOrigins() { + return webOrigins; + } + + public void setWebOrigins(List webOrigins) { + this.webOrigins = webOrigins; + } + + public String[] getDefaultRoles() { + return defaultRoles; + } + + public void setDefaultRoles(String[] defaultRoles) { + this.defaultRoles = defaultRoles; + } + + public Integer getNotBefore() { + return notBefore; + } + + public void setNotBefore(Integer notBefore) { + this.notBefore = notBefore; + } + + public Boolean isBearerOnly() { + return bearerOnly; + } + + public void setBearerOnly(Boolean bearerOnly) { + this.bearerOnly = bearerOnly; + } + + public Boolean isConsentRequired() { + return consentRequired; + } + + public void setConsentRequired(Boolean consentRequired) { + this.consentRequired = consentRequired; + } + + public Boolean getDirectGrantsOnly() { + return directGrantsOnly; + } + + public void setDirectGrantsOnly(Boolean directGrantsOnly) { + this.directGrantsOnly = directGrantsOnly; + } + + public Boolean isPublicClient() { + return publicClient; + } + + public void setPublicClient(Boolean publicClient) { + this.publicClient = publicClient; + } + + public Boolean isFullScopeAllowed() { + return fullScopeAllowed; + } + + public void setFullScopeAllowed(Boolean fullScopeAllowed) { + this.fullScopeAllowed = fullScopeAllowed; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } + + public Integer getNodeReRegistrationTimeout() { + return nodeReRegistrationTimeout; + } + + public void setNodeReRegistrationTimeout(Integer nodeReRegistrationTimeout) { + this.nodeReRegistrationTimeout = nodeReRegistrationTimeout; + } + + public Map getRegisteredNodes() { + return registeredNodes; + } + + public void setRegisteredNodes(Map registeredNodes) { + this.registeredNodes = registeredNodes; + } + + public Boolean isFrontchannelLogout() { + return frontchannelLogout; + } + + public void setFrontchannelLogout(Boolean frontchannelLogout) { + this.frontchannelLogout = frontchannelLogout; + } + + public List getIdentityProviders() { + return this.identityProviders; + } + + public void setIdentityProviders(List identityProviders) { + this.identityProviders = identityProviders; + } + + public List getProtocolMappers() { + return protocolMappers; + } + + public void setProtocolMappers(List protocolMappers) { + this.protocolMappers = protocolMappers; + } +} diff --git a/core/src/main/java/org/keycloak/representations/idm/OAuthClientRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/OAuthClientRepresentation.java index 5f0ed4e3b0..9eec3e9d30 100755 --- a/core/src/main/java/org/keycloak/representations/idm/OAuthClientRepresentation.java +++ b/core/src/main/java/org/keycloak/representations/idm/OAuthClientRepresentation.java @@ -1,157 +1,9 @@ package org.keycloak.representations.idm; -import java.util.List; -import java.util.Map; - /** * @author Bill Burke * @version $Revision: 1 $ */ -public class OAuthClientRepresentation { - protected String id; - protected String name; - protected List redirectUris; - protected List webOrigins; - protected Boolean enabled; - protected String secret; - @Deprecated - protected ClaimRepresentation claims; - protected Integer notBefore; - protected Boolean publicClient; - protected String protocol; - protected Map attributes; - protected Boolean directGrantsOnly; - protected Boolean fullScopeAllowed; - protected Boolean frontchannelLogout; - protected List protocolMappers; - private List identityProviders; - - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Boolean isEnabled() { - return enabled; - } - - public void setEnabled(Boolean enabled) { - this.enabled = enabled; - } - - public List getRedirectUris() { - return redirectUris; - } - - public void setRedirectUris(List redirectUris) { - this.redirectUris = redirectUris; - } - - public List getWebOrigins() { - return webOrigins; - } - - public void setWebOrigins(List webOrigins) { - this.webOrigins = webOrigins; - } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public ClaimRepresentation getClaims() { - return claims; - } - - public void setClaims(ClaimRepresentation claims) { - this.claims = claims; - } - - public Integer getNotBefore() { - return notBefore; - } - - public void setNotBefore(Integer notBefore) { - this.notBefore = notBefore; - } - - public Boolean isPublicClient() { - return publicClient; - } - - public void setPublicClient(Boolean publicClient) { - this.publicClient = publicClient; - } - - public Boolean isDirectGrantsOnly() { - return directGrantsOnly; - } - - public void setDirectGrantsOnly(Boolean directGrantsOnly) { - this.directGrantsOnly = directGrantsOnly; - } - - public Boolean isFullScopeAllowed() { - return fullScopeAllowed; - } - - public void setFullScopeAllowed(Boolean fullScopeAllowed) { - this.fullScopeAllowed = fullScopeAllowed; - } - - public String getProtocol() { - return protocol; - } - - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - public Map getAttributes() { - return attributes; - } - - public void setAttributes(Map attributes) { - this.attributes = attributes; - } - - public Boolean isFrontchannelLogout() { - return frontchannelLogout; - } - - public void setFrontchannelLogout(Boolean frontchannelLogout) { - this.frontchannelLogout = frontchannelLogout; - } - - public List getIdentityProviders() { - return this.identityProviders; - } - - public void setIdentityProviders(List identityProviders) { - this.identityProviders = identityProviders; - } - - public List getProtocolMappers() { - return protocolMappers; - } - - public void setProtocolMappers(List protocolMappers) { - this.protocolMappers = protocolMappers; - } +@Deprecated +public class OAuthClientRepresentation extends ApplicationRepresentation { } diff --git a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java index b350e3825a..aad60685ed 100755 --- a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java +++ b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java @@ -56,7 +56,10 @@ public class RealmRepresentation { protected List users; protected List scopeMappings; protected Map> applicationScopeMappings; + protected List clients; + @Deprecated protected List applications; + @Deprecated protected List oauthClients; protected Map browserSecurityHeaders; protected Map smtpServer; @@ -101,14 +104,6 @@ public class RealmRepresentation { return applications; } - public ApplicationRepresentation resource(String name) { - ApplicationRepresentation resource = new ApplicationRepresentation(); - if (applications == null) applications = new ArrayList(); - applications.add(resource); - resource.setName(name); - return resource; - } - public void setUsers(List users) { this.users = users; } @@ -121,6 +116,14 @@ public class RealmRepresentation { return user; } + public List getClients() { + return clients; + } + + public void setClients(List clients) { + this.clients = clients; + } + public void setApplications(List applications) { this.applications = applications; } diff --git a/examples/admin-client/src/main/webapp/index.jsp b/examples/admin-client/src/main/webapp/index.jsp index 13b6eee183..980f1962ec 100644 --- a/examples/admin-client/src/main/webapp/index.jsp +++ b/examples/admin-client/src/main/webapp/index.jsp @@ -1,5 +1,5 @@ <%@ page import="org.keycloak.admin.client.Keycloak" %> -<%@ page import="org.keycloak.admin.client.resource.ApplicationsResource" %> +<%@ page import="org.keycloak.admin.client.resource.ClientsResource" %> <%@ page import="org.keycloak.representations.idm.ApplicationRepresentation" %> <%@ page import="org.keycloak.util.UriUtils" %> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> @@ -13,7 +13,7 @@ String authServer = UriUtils.getOrigin(request.getRequestURL().toString()) + "/auth"; Keycloak keycloak = Keycloak.getInstance(authServer, "example", "examples-admin-client", "password", "examples-admin-client", "password"); - ApplicationsResource applications = keycloak.realm("example").applications(); + ClientsResource applications = keycloak.realm("example").applications(); out.println("

Applications

"); out.println("
    "); diff --git a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java index 787f8ca20e..43d1f6b889 100755 --- a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java +++ b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java @@ -16,6 +16,7 @@ import org.keycloak.models.UserCredentialValueModel; import org.keycloak.models.UserModel; import org.keycloak.models.utils.ModelToRepresentation; import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RoleRepresentation; @@ -53,14 +54,14 @@ public class ExportUtils { rep.setEventsListeners(new LinkedList(realm.getEventsListeners())); } - // Applications - List applications = realm.getClients(); - List appReps = new ArrayList(); - for (ClientModel app : applications) { - ApplicationRepresentation appRep = exportApplication(app); - appReps.add(appRep); + // Clients + List clients = realm.getClients(); + List clientReps = new ArrayList<>(); + for (ClientModel app : clients) { + ClientRepresentation clientRep = exportClient(app); + clientReps.add(clientRep); } - rep.setApplications(appReps); + rep.setClients(clientReps); // Roles List realmRoleReps = null; @@ -70,7 +71,7 @@ public class ExportUtils { if (realmRoles != null && realmRoles.size() > 0) { realmRoleReps = exportRoles(realmRoles); } - for (ClientModel app : applications) { + for (ClientModel app : clients) { Set currentAppRoles = app.getRoles(); List currentAppRoleReps = exportRoles(currentAppRoles); appRolesReps.put(app.getClientId(), currentAppRoleReps); @@ -86,7 +87,7 @@ public class ExportUtils { rep.setRoles(rolesRep); // Scopes - List allClients = new ArrayList<>(applications); + List allClients = new ArrayList<>(clients); Map> appScopeReps = new HashMap<>(); for (ClientModel client : allClients) { @@ -147,14 +148,13 @@ public class ExportUtils { /** * Full export of application including claims and secret - * @param app + * @param client * @return full ApplicationRepresentation */ - public static ApplicationRepresentation exportApplication(ClientModel app) { - ApplicationRepresentation appRep = ModelToRepresentation.toRepresentation(app); - - appRep.setSecret(app.getSecret()); - return appRep; + public static ClientRepresentation exportClient(ClientModel client) { + ClientRepresentation clientRep = ModelToRepresentation.toRepresentation(client); + clientRep.setSecret(client.getSecret()); + return clientRep; } public static List exportRoles(Collection roles) { diff --git a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java index 3bf9d4645c..b109dc3558 100755 --- a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java +++ b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java @@ -119,7 +119,7 @@ public class ImportUtils { } adminRole.setDescription("${role_"+AdminRoles.ADMIN+"}"); - ClientModel realmAdminApp = KeycloakModelUtils.createApplication(adminRealm, KeycloakModelUtils.getMasterRealmAdminApplicationName(realm)); + ClientModel realmAdminApp = KeycloakModelUtils.createClient(adminRealm, KeycloakModelUtils.getMasterRealmAdminApplicationName(realm)); realmAdminApp.setBearerOnly(true); realm.setMasterAdminApp(realmAdminApp); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java similarity index 92% rename from integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationResource.java rename to integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java index 2601d5328a..0bc8ad70a6 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java @@ -1,6 +1,7 @@ package org.keycloak.admin.client.resource; import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.UserSessionRepresentation; @@ -21,18 +22,18 @@ import java.util.Set; /** * @author rodrigo.sasaki@icarros.com.br */ -public interface ApplicationResource { +public interface ClientResource { @Path("protocol-mappers") public ProtocolMappersResource getProtocolMappers(); @GET @Produces(MediaType.APPLICATION_JSON) - public ApplicationRepresentation toRepresentation(); + public ClientRepresentation toRepresentation(); @PUT @Consumes(MediaType.APPLICATION_JSON) - public void update(ApplicationRepresentation applicationRepresentation); + public void update(ClientRepresentation clientRepresentation); @DELETE public void remove(); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationsResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientsResource.java similarity index 71% rename from integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationsResource.java rename to integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientsResource.java index 6ccbdd8643..abc94243a4 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ApplicationsResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientsResource.java @@ -1,6 +1,7 @@ package org.keycloak.admin.client.resource; import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -14,14 +15,14 @@ import java.util.List; /** * @author rodrigo.sasaki@icarros.com.br */ -public interface ApplicationsResource { +public interface ClientsResource { @Path("{appName}") - public ApplicationResource get(@PathParam("appName") String appName); + public ClientResource get(@PathParam("appName") String appName); @POST @Consumes(MediaType.APPLICATION_JSON) - public void create(ApplicationRepresentation applicationRepresentation); + public void create(ClientRepresentation clientRepresentation); @GET @Produces(MediaType.APPLICATION_JSON) diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java index b40cc13806..8cd1d90d5c 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java @@ -24,7 +24,7 @@ public interface RealmResource { public void update(RealmRepresentation realmRepresentation); @Path("applications") - public ApplicationsResource applications(); + public ClientsResource clients(); @Path("users") public UsersResource users(); diff --git a/model/api/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java b/model/api/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java index 71d9ae7008..bd03cac67e 100755 --- a/model/api/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java +++ b/model/api/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java @@ -172,7 +172,7 @@ public final class KeycloakModelUtils { return UUID.randomUUID().toString(); } - public static ClientModel createApplication(RealmModel realm, String name) { + public static ClientModel createClient(RealmModel realm, String name) { ClientModel app = realm.addClient(name); generateSecret(app); app.setFullScopeAllowed(true); diff --git a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java index 09fc0a569e..f9e3556d77 100755 --- a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java +++ b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java @@ -15,6 +15,7 @@ import org.keycloak.models.UserModel; import org.keycloak.models.UserSessionModel; import org.keycloak.representations.idm.ApplicationRepresentation; import org.keycloak.representations.idm.ClientIdentityProviderMappingRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.FederatedIdentityRepresentation; import org.keycloak.representations.idm.IdentityProviderRepresentation; @@ -217,10 +218,10 @@ public class ModelToRepresentation { return rep; } - public static ApplicationRepresentation toRepresentation(ClientModel clientModel) { - ApplicationRepresentation rep = new ApplicationRepresentation(); + public static ClientRepresentation toRepresentation(ClientModel clientModel) { + ClientRepresentation rep = new ClientRepresentation(); rep.setId(clientModel.getId()); - rep.setName(clientModel.getClientId()); + rep.setClientId(clientModel.getClientId()); rep.setEnabled(clientModel.isEnabled()); rep.setAdminUrl(clientModel.getManagementUrl()); rep.setPublicClient(clientModel.isPublicClient()); @@ -237,12 +238,12 @@ public class ModelToRepresentation { Set redirectUris = clientModel.getRedirectUris(); if (redirectUris != null) { - rep.setRedirectUris(new LinkedList(redirectUris)); + rep.setRedirectUris(new LinkedList<>(redirectUris)); } Set webOrigins = clientModel.getWebOrigins(); if (webOrigins != null) { - rep.setWebOrigins(new LinkedList(webOrigins)); + rep.setWebOrigins(new LinkedList<>(webOrigins)); } if (!clientModel.getDefaultRoles().isEmpty()) { @@ -250,7 +251,7 @@ public class ModelToRepresentation { } if (!clientModel.getRegisteredNodes().isEmpty()) { - rep.setRegisteredNodes(new HashMap(clientModel.getRegisteredNodes())); + rep.setRegisteredNodes(new HashMap<>(clientModel.getRegisteredNodes())); } if (!clientModel.getIdentityProviders().isEmpty()) { @@ -258,7 +259,7 @@ public class ModelToRepresentation { } if (!clientModel.getProtocolMappers().isEmpty()) { - List mappings = new LinkedList(); + List mappings = new LinkedList<>(); for (ProtocolMapperModel model : clientModel.getProtocolMappers()) { mappings.add(toRepresentation(model)); } diff --git a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java index 66c75b6395..cf8de18d16 100755 --- a/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java +++ b/model/api/src/main/java/org/keycloak/models/utils/RepresentationToModel.java @@ -22,6 +22,7 @@ import org.keycloak.models.UserModel; import org.keycloak.representations.idm.ApplicationRepresentation; import org.keycloak.representations.idm.ClaimRepresentation; import org.keycloak.representations.idm.ClientIdentityProviderMappingRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.FederatedIdentityRepresentation; import org.keycloak.representations.idm.IdentityProviderRepresentation; @@ -50,6 +51,7 @@ public class RepresentationToModel { public static void importRealm(KeycloakSession session, RealmRepresentation rep, RealmModel newRealm) { convertDeprecatedSocialProviders(rep); + convertDeprecatedApplications(session, rep); newRealm.setName(rep.getRealm()); if (rep.isEnabled() != null) newRealm.setEnabled(rep.isEnabled()); @@ -127,8 +129,8 @@ public class RepresentationToModel { importIdentityProviders(rep, newRealm); - if (rep.getApplications() != null) { - Map appMap = createApplications(session, rep, newRealm); + if (rep.getClients() != null) { + createClients(session, rep, newRealm); } if (rep.getRoles() != null) { @@ -177,22 +179,17 @@ public class RepresentationToModel { newRealm.addDefaultRole(roleString.trim()); } } - // Setup application default roles - if (rep.getApplications() != null) { - for (ApplicationRepresentation resourceRep : rep.getApplications()) { + // Setup client default roles + if (rep.getClients() != null) { + for (ClientRepresentation resourceRep : rep.getClients()) { if (resourceRep.getDefaultRoles() != null) { - ClientModel appModel = newRealm.getClientByClientId(resourceRep.getName()); - appModel.updateDefaultRoles(resourceRep.getDefaultRoles()); + ClientModel clientModel = newRealm.getClientByClientId(resourceRep.getClientId()); + clientModel.updateDefaultRoles(resourceRep.getDefaultRoles()); } } } - if (rep.getOauthClients() != null) { - createOAuthClients(session, rep, newRealm); - } - - - // Now that all possible roles and applications are created, create scope mappings + // Now that all possible roles and clients are created, create scope mappings Map appMap = newRealm.getClientNameMap(); @@ -201,9 +198,9 @@ public class RepresentationToModel { for (Map.Entry> entry : rep.getApplicationScopeMappings().entrySet()) { ClientModel app = appMap.get(entry.getKey()); if (app == null) { - throw new RuntimeException("Unable to find application role mappings for app: " + entry.getKey()); + throw new RuntimeException("Unable to find client role mappings for client: " + entry.getKey()); } - createApplicationScopeMappings(newRealm, app, entry.getValue()); + createClientScopeMappings(newRealm, app, entry.getValue()); } } @@ -312,15 +309,41 @@ public class RepresentationToModel { user.setSocialLinks(null); } - private static List convertDeprecatedClaimsMask(KeycloakSession session, ClaimRepresentation claimRep) { - if (claimRep == null) { - return null; - } + private static void convertDeprecatedApplications(KeycloakSession session, RealmRepresentation realm) { + if (realm.getApplications() != null || realm.getOauthClients() != null) { + if (realm.getClients() == null) { + realm.setClients(new LinkedList()); + } - logger.warn("Using deprecated 'claims' configuration in JSON representation. It will be removed in future versions"); - long mask = getClaimsMask(claimRep); - MigrationProvider migrationProvider = session.getProvider(MigrationProvider.class); - return migrationProvider.getMappersForClaimMask(mask); + List clients = new LinkedList<>(); + if (realm.getApplications() != null) { + clients.addAll(realm.getApplications()); + } + if (realm.getOauthClients() != null) { + clients.addAll(realm.getOauthClients()); + } + + for (ApplicationRepresentation app : clients) { + app.setClientId(app.getName()); + app.setName(null); + + if (app instanceof OAuthClientRepresentation) { + app.setConsentRequired(true); + app.setFullScopeAllowed(false); + } + + if (app.getProtocolMappers() == null && app.getClaims() != null) { + long mask = getClaimsMask(app.getClaims()); + List convertedProtocolMappers = session.getProvider(MigrationProvider.class).getMappersForClaimMask(mask); + app.setProtocolMappers(convertedProtocolMappers); + app.setClaims(null); + } + + realm.getClients().add(app); + } + + realm.setApplications(null); + } } public static void updateRealm(RealmRepresentation rep, RealmModel realm) { @@ -450,10 +473,10 @@ public class RepresentationToModel { // APPLICATIONS - private static Map createApplications(KeycloakSession session, RealmRepresentation rep, RealmModel realm) { + private static Map createClients(KeycloakSession session, RealmRepresentation rep, RealmModel realm) { Map appMap = new HashMap(); - for (ApplicationRepresentation resourceRep : rep.getApplications()) { - ClientModel app = createApplication(session, realm, resourceRep, false); + for (ClientRepresentation resourceRep : rep.getClients()) { + ClientModel app = createClient(session, realm, resourceRep, false); appMap.put(app.getClientId(), app); } return appMap; @@ -466,63 +489,57 @@ public class RepresentationToModel { * @param resourceRep * @return */ - public static ClientModel createApplication(KeycloakSession session, RealmModel realm, ApplicationRepresentation resourceRep, boolean addDefaultRoles) { - logger.debug("************ CREATE APPLICATION: {0}" + resourceRep.getName()); + public static ClientModel createClient(KeycloakSession session, RealmModel realm, ClientRepresentation resourceRep, boolean addDefaultRoles) { + logger.debug("************ CREATE APPLICATION: {0}" + resourceRep.getClientId()); - if (resourceRep.getProtocolMappers() == null) { - List convertedProtocolMappers = convertDeprecatedClaimsMask(session, resourceRep.getClaims()); - if (convertedProtocolMappers != null) { - resourceRep.setProtocolMappers(convertedProtocolMappers); - } - } - - ClientModel applicationModel = resourceRep.getId()!=null ? realm.addClient(resourceRep.getId(), resourceRep.getName()) : realm.addClient(resourceRep.getName()); - if (resourceRep.isEnabled() != null) applicationModel.setEnabled(resourceRep.isEnabled()); - applicationModel.setManagementUrl(resourceRep.getAdminUrl()); + ClientModel client = resourceRep.getId()!=null ? realm.addClient(resourceRep.getId(), resourceRep.getClientId()) : realm.addClient(resourceRep.getClientId()); + if (resourceRep.isEnabled() != null) client.setEnabled(resourceRep.isEnabled()); + client.setManagementUrl(resourceRep.getAdminUrl()); if (resourceRep.isSurrogateAuthRequired() != null) - applicationModel.setSurrogateAuthRequired(resourceRep.isSurrogateAuthRequired()); - applicationModel.setBaseUrl(resourceRep.getBaseUrl()); - if (resourceRep.isBearerOnly() != null) applicationModel.setBearerOnly(resourceRep.isBearerOnly()); - if (resourceRep.isPublicClient() != null) applicationModel.setPublicClient(resourceRep.isPublicClient()); - if (resourceRep.isFrontchannelLogout() != null) applicationModel.setFrontchannelLogout(resourceRep.isFrontchannelLogout()); - if (resourceRep.getProtocol() != null) applicationModel.setProtocol(resourceRep.getProtocol()); + client.setSurrogateAuthRequired(resourceRep.isSurrogateAuthRequired()); + client.setBaseUrl(resourceRep.getBaseUrl()); + if (resourceRep.isBearerOnly() != null) client.setBearerOnly(resourceRep.isBearerOnly()); + if (resourceRep.isConsentRequired() != null) client.setConsentRequired(resourceRep.isConsentRequired()); + if (resourceRep.isPublicClient() != null) client.setPublicClient(resourceRep.isPublicClient()); + if (resourceRep.isFrontchannelLogout() != null) client.setFrontchannelLogout(resourceRep.isFrontchannelLogout()); + if (resourceRep.getProtocol() != null) client.setProtocol(resourceRep.getProtocol()); if (resourceRep.isFullScopeAllowed() != null) { - applicationModel.setFullScopeAllowed(resourceRep.isFullScopeAllowed()); + client.setFullScopeAllowed(resourceRep.isFullScopeAllowed()); } else { - applicationModel.setFullScopeAllowed(true); + client.setFullScopeAllowed(true); } if (resourceRep.getNodeReRegistrationTimeout() != null) { - applicationModel.setNodeReRegistrationTimeout(resourceRep.getNodeReRegistrationTimeout()); + client.setNodeReRegistrationTimeout(resourceRep.getNodeReRegistrationTimeout()); } else { - applicationModel.setNodeReRegistrationTimeout(-1); + client.setNodeReRegistrationTimeout(-1); } - applicationModel.updateApplication(); + client.updateApplication(); if (resourceRep.getNotBefore() != null) { - applicationModel.setNotBefore(resourceRep.getNotBefore()); + client.setNotBefore(resourceRep.getNotBefore()); } - applicationModel.setSecret(resourceRep.getSecret()); - if (applicationModel.getSecret() == null) { - KeycloakModelUtils.generateSecret(applicationModel); + client.setSecret(resourceRep.getSecret()); + if (client.getSecret() == null) { + KeycloakModelUtils.generateSecret(client); } if (resourceRep.getAttributes() != null) { for (Map.Entry entry : resourceRep.getAttributes().entrySet()) { - applicationModel.setAttribute(entry.getKey(), entry.getValue()); + client.setAttribute(entry.getKey(), entry.getValue()); } } if (resourceRep.getRedirectUris() != null) { for (String redirectUri : resourceRep.getRedirectUris()) { - applicationModel.addRedirectUri(redirectUri); + client.addRedirectUri(redirectUri); } } if (resourceRep.getWebOrigins() != null) { for (String webOrigin : resourceRep.getWebOrigins()) { - logger.debugv("Application: {0} webOrigin: {1}", resourceRep.getName(), webOrigin); - applicationModel.addWebOrigin(webOrigin); + logger.debugv("Application: {0} webOrigin: {1}", resourceRep.getClientId(), webOrigin); + client.addWebOrigin(webOrigin); } } else { // add origins from redirect uris @@ -541,38 +558,38 @@ public class RepresentationToModel { } } if (origins.size() > 0) { - applicationModel.setWebOrigins(origins); + client.setWebOrigins(origins); } } } if (resourceRep.getRegisteredNodes() != null) { for (Map.Entry entry : resourceRep.getRegisteredNodes().entrySet()) { - applicationModel.registerNode(entry.getKey(), entry.getValue()); + client.registerNode(entry.getKey(), entry.getValue()); } } if (addDefaultRoles && resourceRep.getDefaultRoles() != null) { - applicationModel.updateDefaultRoles(resourceRep.getDefaultRoles()); + client.updateDefaultRoles(resourceRep.getDefaultRoles()); } if (resourceRep.getProtocolMappers() != null) { // first, remove all default/built in mappers - Set mappers = applicationModel.getProtocolMappers(); - for (ProtocolMapperModel mapper : mappers) applicationModel.removeProtocolMapper(mapper); + Set mappers = client.getProtocolMappers(); + for (ProtocolMapperModel mapper : mappers) client.removeProtocolMapper(mapper); for (ProtocolMapperRepresentation mapper : resourceRep.getProtocolMappers()) { - applicationModel.addProtocolMapper(toModel(mapper)); + client.addProtocolMapper(toModel(mapper)); } } - applicationModel.updateIdentityProviders(toModel(resourceRep.getIdentityProviders(), realm)); + client.updateIdentityProviders(toModel(resourceRep.getIdentityProviders(), realm)); - return applicationModel; + return client; } - public static void updateApplication(ApplicationRepresentation rep, ClientModel resource) { - if (rep.getName() != null) resource.setClientId(rep.getName()); + public static void updateClient(ClientRepresentation rep, ClientModel resource) { + if (rep.getClientId() != null) resource.setClientId(rep.getClientId()); if (rep.isEnabled() != null) resource.setEnabled(rep.isEnabled()); if (rep.isBearerOnly() != null) resource.setBearerOnly(rep.isBearerOnly()); if (rep.isConsentRequired() != null) resource.setConsentRequired(rep.isConsentRequired()); @@ -675,94 +692,18 @@ public class RepresentationToModel { return mask; } - // OAuth clients - - private static void createOAuthClients(KeycloakSession session, RealmRepresentation realmRep, RealmModel realm) { - for (OAuthClientRepresentation rep : realmRep.getOauthClients()) { - createOAuthClient(session, rep, realm); - } - } - - public static ClientModel createOAuthClient(String id, String name, RealmModel realm) { - ClientModel model = id!=null ? realm.addClient(id, name) : realm.addClient(name); - model.setConsentRequired(true); - KeycloakModelUtils.generateSecret(model); - return model; - } - - public static ClientModel createOAuthClient(KeycloakSession session, OAuthClientRepresentation rep, RealmModel realm) { - ClientModel model = createOAuthClient(rep.getId(), rep.getName(), realm); - - model.updateIdentityProviders(toModel(rep.getIdentityProviders(), realm)); - - updateOAuthClient(session, rep, model); - return model; - } - - public static void updateOAuthClient(KeycloakSession session, OAuthClientRepresentation rep, ClientModel model) { - if (rep.getProtocolMappers() == null) { - List convertedProtocolMappers = convertDeprecatedClaimsMask(session, rep.getClaims()); - if (convertedProtocolMappers != null) { - rep.setProtocolMappers(convertedProtocolMappers); - } - } - - if (rep.getName() != null) model.setClientId(rep.getName()); - if (rep.isEnabled() != null) model.setEnabled(rep.isEnabled()); - if (rep.isPublicClient() != null) model.setPublicClient(rep.isPublicClient()); - if (rep.isFrontchannelLogout() != null) model.setFrontchannelLogout(rep.isFrontchannelLogout()); - if (rep.isFullScopeAllowed() != null) model.setFullScopeAllowed(rep.isFullScopeAllowed()); - if (rep.isDirectGrantsOnly() != null) model.setDirectGrantsOnly(rep.isDirectGrantsOnly()); - if (rep.getNotBefore() != null) { - model.setNotBefore(rep.getNotBefore()); - } - if (rep.getSecret() != null) model.setSecret(rep.getSecret()); - List redirectUris = rep.getRedirectUris(); - if (redirectUris != null) { - model.setRedirectUris(new HashSet(redirectUris)); - } - - List webOrigins = rep.getWebOrigins(); - if (webOrigins != null) { - model.setWebOrigins(new HashSet(webOrigins)); - } - - if (rep.getNotBefore() != null) { - model.setNotBefore(rep.getNotBefore()); - } - if (rep.getProtocol() != null) model.setProtocol(rep.getProtocol()); - if (rep.getAttributes() != null) { - for (Map.Entry entry : rep.getAttributes().entrySet()) { - model.setAttribute(entry.getKey(), entry.getValue()); - } - } - - updateClientIdentityProviders(rep.getIdentityProviders(), model); - - if (rep.getProtocolMappers() != null) { - // first, remove all default/built in mappers - Set mappers = model.getProtocolMappers(); - for (ProtocolMapperModel mapper : mappers) model.removeProtocolMapper(mapper); - - for (ProtocolMapperRepresentation mapper : rep.getProtocolMappers()) { - model.addProtocolMapper(toModel(mapper)); - } - } - - } - // Scope mappings - public static void createApplicationScopeMappings(RealmModel realm, ClientModel applicationModel, List mappings) { + public static void createClientScopeMappings(RealmModel realm, ClientModel clientModel, List mappings) { for (ScopeMappingRepresentation mapping : mappings) { ClientModel client = realm.getClientByClientId(mapping.getClient()); if (client == null) { throw new RuntimeException("Unknown client specified in application scope mappings"); } for (String roleString : mapping.getRoles()) { - RoleModel role = applicationModel.getRole(roleString.trim()); + RoleModel role = clientModel.getRole(roleString.trim()); if (role == null) { - role = applicationModel.addRole(roleString.trim()); + role = clientModel.addRole(roleString.trim()); } client.addScopeMapping(role); } @@ -771,7 +712,7 @@ public class RepresentationToModel { // Users - public static UserModel createUser(KeycloakSession session, RealmModel newRealm, UserRepresentation userRep, Map appMap) { + public static UserModel createUser(KeycloakSession session, RealmModel newRealm, UserRepresentation userRep, Map clientMap) { convertDeprecatedSocialProviders(userRep); // Import users just to user storage. Don't federate @@ -814,11 +755,11 @@ public class RepresentationToModel { } if (userRep.getApplicationRoles() != null) { for (Map.Entry> entry : userRep.getApplicationRoles().entrySet()) { - ClientModel app = appMap.get(entry.getKey()); - if (app == null) { - throw new RuntimeException("Unable to find application role mappings for app: " + entry.getKey()); + ClientModel client = clientMap.get(entry.getKey()); + if (client == null) { + throw new RuntimeException("Unable to find client role mappings for client: " + entry.getKey()); } - createApplicationRoleMappings(app, user, entry.getValue()); + createClientRoleMappings(client, user, entry.getValue()); } } return user; @@ -853,7 +794,7 @@ public class RepresentationToModel { // Role mappings - public static void createApplicationRoleMappings(ClientModel applicationModel, UserModel user, List roleNames) { + public static void createClientRoleMappings(ClientModel applicationModel, UserModel user, List roleNames) { if (user == null) { throw new RuntimeException("User not found"); } diff --git a/services/src/main/java/org/keycloak/services/managers/ApplicationManager.java b/services/src/main/java/org/keycloak/services/managers/ClientManager.java similarity index 85% rename from services/src/main/java/org/keycloak/services/managers/ApplicationManager.java rename to services/src/main/java/org/keycloak/services/managers/ClientManager.java index b7baf9ab5c..18d4d09051 100755 --- a/services/src/main/java/org/keycloak/services/managers/ApplicationManager.java +++ b/services/src/main/java/org/keycloak/services/managers/ClientManager.java @@ -24,27 +24,27 @@ import java.util.TreeSet; * @author Bill Burke * @version $Revision: 1 $ */ -public class ApplicationManager { - protected Logger logger = Logger.getLogger(ApplicationManager.class); +public class ClientManager { + protected Logger logger = Logger.getLogger(ClientManager.class); protected RealmManager realmManager; - public ApplicationManager(RealmManager realmManager) { + public ClientManager(RealmManager realmManager) { this.realmManager = realmManager; } - public ApplicationManager() { + public ClientManager() { } - public ClientModel createApplication(RealmModel realm, String name) { - return KeycloakModelUtils.createApplication(realm, name); + public ClientModel createClient(RealmModel realm, String name) { + return KeycloakModelUtils.createClient(realm, name); } - public boolean removeApplication(RealmModel realm, ClientModel application) { - if (realm.removeClient(application.getId())) { + public boolean removeClient(RealmModel realm, ClientModel client) { + if (realm.removeClient(client.getId())) { UserSessionProvider sessions = realmManager.getSession().sessions(); if (sessions != null) { - sessions.onClientRemoved(realm, application); + sessions.onClientRemoved(realm, client); } return true; } else { @@ -52,8 +52,8 @@ public class ApplicationManager { } } - public Set validateRegisteredNodes(ClientModel application) { - Map registeredNodes = application.getRegisteredNodes(); + public Set validateRegisteredNodes(ClientModel client) { + Map registeredNodes = client.getRegisteredNodes(); if (registeredNodes == null || registeredNodes.isEmpty()) { return Collections.emptySet(); } @@ -61,11 +61,11 @@ public class ApplicationManager { int currentTime = Time.currentTime(); Set validatedNodes = new TreeSet(); - if (application.getNodeReRegistrationTimeout() > 0) { + if (client.getNodeReRegistrationTimeout() > 0) { List toRemove = new LinkedList(); for (Map.Entry entry : registeredNodes.entrySet()) { Integer lastReRegistration = entry.getValue(); - if (lastReRegistration + application.getNodeReRegistrationTimeout() < currentTime) { + if (lastReRegistration + client.getNodeReRegistrationTimeout() < currentTime) { toRemove.add(entry.getKey()); } else { validatedNodes.add(entry.getKey()); @@ -74,7 +74,7 @@ public class ApplicationManager { // Remove time-outed nodes for (String node : toRemove) { - application.unregisterNode(node); + client.unregisterNode(node); } } else { // Periodic node reRegistration is disabled, so allow all nodes diff --git a/services/src/main/java/org/keycloak/services/managers/RealmManager.java b/services/src/main/java/org/keycloak/services/managers/RealmManager.java index f372bbd18b..4a03c26dbd 100755 --- a/services/src/main/java/org/keycloak/services/managers/RealmManager.java +++ b/services/src/main/java/org/keycloak/services/managers/RealmManager.java @@ -91,7 +91,7 @@ public class RealmManager { protected void setupAdminConsole(RealmModel realm) { ClientModel adminConsole = realm.getClientByClientId(Constants.ADMIN_CONSOLE_APPLICATION); - if (adminConsole == null) adminConsole = new ApplicationManager(this).createApplication(realm, Constants.ADMIN_CONSOLE_APPLICATION); + if (adminConsole == null) adminConsole = new ClientManager(this).createClient(realm, Constants.ADMIN_CONSOLE_APPLICATION); String baseUrl = contextPath + "/admin/" + realm.getName() + "/console"; adminConsole.setBaseUrl(baseUrl + "/index.html"); adminConsole.setEnabled(true); @@ -139,7 +139,7 @@ public class RealmManager { boolean removed = model.removeRealm(realm.getId()); if (removed) { - new ApplicationManager(this).removeApplication(getKeycloakAdminstrationRealm(), realm.getMasterAdminApp()); + new ClientManager(this).removeClient(getKeycloakAdminstrationRealm(), realm.getMasterAdminApp()); UserSessionProvider sessions = session.sessions(); if (sessions != null) { @@ -174,12 +174,12 @@ public class RealmManager { private void setupRealmAdminManagement(RealmModel realm) { if (realm.getName().equals(Config.getAdminRealm())) { return; } // don't need to do this for master realm - ApplicationManager applicationManager = new ApplicationManager(new RealmManager(session)); + ClientManager clientManager = new ClientManager(new RealmManager(session)); String realmAdminApplicationName = getRealmAdminApplicationName(realm); ClientModel realmAdminApp = realm.getClientByClientId(realmAdminApplicationName); if (realmAdminApp == null) { - realmAdminApp = applicationManager.createApplication(realm, realmAdminApplicationName); + realmAdminApp = clientManager.createClient(realm, realmAdminApplicationName); } RoleModel adminRole = realmAdminApp.addRole(AdminRoles.REALM_ADMIN); adminRole.setDescription("${role_"+AdminRoles.REALM_ADMIN+"}"); @@ -197,7 +197,7 @@ public class RealmManager { private void setupAccountManagement(RealmModel realm) { ClientModel application = realm.getClientNameMap().get(Constants.ACCOUNT_MANAGEMENT_APP); if (application == null) { - application = new ApplicationManager(this).createApplication(realm, Constants.ACCOUNT_MANAGEMENT_APP); + application = new ClientManager(this).createClient(realm, Constants.ACCOUNT_MANAGEMENT_APP); application.setEnabled(true); application.setFullScopeAllowed(false); String base = contextPath + "/realms/" + realm.getName() + "/account"; diff --git a/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java b/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java index 5c4e44310b..fa219d6725 100755 --- a/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java +++ b/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java @@ -78,7 +78,7 @@ public class ResourceAdminManager { return Collections.emptyList(); } - Set registeredNodesHosts = new ApplicationManager().validateRegisteredNodes(application); + Set registeredNodesHosts = new ClientManager().validateRegisteredNodes(application); // No-cluster setup if (registeredNodesHosts.isEmpty()) { diff --git a/services/src/main/java/org/keycloak/services/resources/admin/AdminConsole.java b/services/src/main/java/org/keycloak/services/resources/admin/AdminConsole.java index 3dcffdea18..bfe70da898 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/AdminConsole.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/AdminConsole.java @@ -22,7 +22,7 @@ import org.keycloak.models.RoleModel; import org.keycloak.models.UserModel; import org.keycloak.protocol.oidc.OIDCLoginProtocolService; import org.keycloak.services.managers.AppAuthManager; -import org.keycloak.services.managers.ApplicationManager; +import org.keycloak.services.managers.ClientManager; import org.keycloak.services.managers.AuthenticationManager; import org.keycloak.services.managers.RealmManager; import org.keycloak.services.resources.KeycloakApplication; @@ -153,12 +153,12 @@ public class AdminConsole { @GET @Produces("application/json") @NoCache - public ApplicationManager.InstallationAdapterConfig config() { + public ClientManager.InstallationAdapterConfig config() { ClientModel consoleApp = realm.getClientByClientId(Constants.ADMIN_CONSOLE_APPLICATION); if (consoleApp == null) { throw new NotFoundException("Could not find admin console application"); } - return new ApplicationManager().toInstallationRepresentation(realm, consoleApp, keycloak.getBaseUri(uriInfo)); + return new ClientManager().toInstallationRepresentation(realm, consoleApp, keycloak.getBaseUri(uriInfo)); } diff --git a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationResource.java b/services/src/main/java/org/keycloak/services/resources/admin/ClientResource.java similarity index 80% rename from services/src/main/java/org/keycloak/services/resources/admin/ApplicationResource.java rename to services/src/main/java/org/keycloak/services/resources/admin/ClientResource.java index 7a5e2b5953..8c689757ad 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/ClientResource.java @@ -17,9 +17,10 @@ import org.keycloak.models.utils.ModelToRepresentation; import org.keycloak.models.utils.RepresentationToModel; import org.keycloak.representations.adapters.action.GlobalRequestResult; import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.UserSessionRepresentation; -import org.keycloak.services.managers.ApplicationManager; +import org.keycloak.services.managers.ClientManager; import org.keycloak.services.managers.RealmManager; import org.keycloak.services.managers.ResourceAdminManager; import org.keycloak.services.resources.KeycloakApplication; @@ -53,11 +54,11 @@ import java.util.Set; * @author Bill Burke * @version $Revision: 1 $ */ -public class ApplicationResource { - protected static final Logger logger = Logger.getLogger(ApplicationResource.class); +public class ClientResource { + protected static final Logger logger = Logger.getLogger(ClientResource.class); protected RealmModel realm; private RealmAuth auth; - protected ClientModel application; + protected ClientModel client; protected KeycloakSession session; @Context @@ -70,10 +71,10 @@ public class ApplicationResource { return keycloak; } - public ApplicationResource(RealmModel realm, RealmAuth auth, ClientModel clientModel, KeycloakSession session) { + public ClientResource(RealmModel realm, RealmAuth auth, ClientModel clientModel, KeycloakSession session) { this.realm = realm; this.auth = auth; - this.application = clientModel; + this.client = clientModel; this.session = session; auth.init(RealmAuth.Resource.CLIENT); @@ -81,7 +82,7 @@ public class ApplicationResource { @Path("protocol-mappers") public ProtocolMappersResource getProtocolMappers() { - ProtocolMappersResource mappers = new ProtocolMappersResource(application, auth); + ProtocolMappersResource mappers = new ProtocolMappersResource(client, auth); ResteasyProviderFactory.getInstance().injectProperties(mappers); return mappers; } @@ -93,14 +94,14 @@ public class ApplicationResource { */ @PUT @Consumes(MediaType.APPLICATION_JSON) - public Response update(final ApplicationRepresentation rep) { + public Response update(final ClientRepresentation rep) { auth.requireManage(); try { - RepresentationToModel.updateApplication(rep, application); + RepresentationToModel.updateClient(rep, client); return Response.noContent().build(); } catch (ModelDuplicateException e) { - return Flows.errors().exists("Application " + rep.getName() + " already exists"); + return Flows.errors().exists("Client " + rep.getClientId() + " already exists"); } } @@ -113,10 +114,10 @@ public class ApplicationResource { @GET @NoCache @Produces(MediaType.APPLICATION_JSON) - public ApplicationRepresentation getApplication() { + public ClientRepresentation getClient() { auth.requireView(); - return ModelToRepresentation.toRepresentation(application); + return ModelToRepresentation.toRepresentation(client); } /** @@ -126,7 +127,7 @@ public class ApplicationResource { */ @Path("certificates/{attr}") public ClientAttributeCertificateResource getCertficateResource(@PathParam("attr") String attributePrefix) { - return new ClientAttributeCertificateResource(realm, auth, application, session, attributePrefix); + return new ClientAttributeCertificateResource(realm, auth, client, session, attributePrefix); } @@ -143,8 +144,8 @@ public class ApplicationResource { public String getInstallation() throws IOException { auth.requireView(); - ApplicationManager applicationManager = new ApplicationManager(new RealmManager(session)); - Object rep = applicationManager.toInstallationRepresentation(realm, application, getKeycloakApplication().getBaseUri(uriInfo)); + ClientManager clientManager = new ClientManager(new RealmManager(session)); + Object rep = clientManager.toInstallationRepresentation(realm, client, getKeycloakApplication().getBaseUri(uriInfo)); // TODO Temporary solution to pretty-print return JsonSerialization.mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rep); @@ -163,8 +164,8 @@ public class ApplicationResource { public String getJBossInstallation() throws IOException { auth.requireView(); - ApplicationManager applicationManager = new ApplicationManager(new RealmManager(session)); - return applicationManager.toJBossSubsystemConfig(realm, application, getKeycloakApplication().getBaseUri(uriInfo)); + ClientManager clientManager = new ClientManager(new RealmManager(session)); + return clientManager.toJBossSubsystemConfig(realm, client, getKeycloakApplication().getBaseUri(uriInfo)); } /** @@ -175,7 +176,7 @@ public class ApplicationResource { @NoCache public void deleteApplication() { auth.requireManage(); - new ApplicationManager(new RealmManager(session)).removeApplication(realm, application); + new ClientManager(new RealmManager(session)).removeClient(realm, client); } @@ -192,7 +193,7 @@ public class ApplicationResource { auth.requireManage(); logger.debug("regenerateSecret"); - UserCredentialModel cred = KeycloakModelUtils.generateSecret(application); + UserCredentialModel cred = KeycloakModelUtils.generateSecret(client); CredentialRepresentation rep = ModelToRepresentation.toRepresentation(cred); return rep; } @@ -210,7 +211,7 @@ public class ApplicationResource { auth.requireView(); logger.debug("getClientSecret"); - UserCredentialModel model = UserCredentialModel.secret(application.getSecret()); + UserCredentialModel model = UserCredentialModel.secret(client.getSecret()); if (model == null) throw new NotFoundException("Application does not have a secret"); return ModelToRepresentation.toRepresentation(model); } @@ -222,12 +223,12 @@ public class ApplicationResource { */ @Path("scope-mappings") public ScopeMappedResource getScopeMappedResource() { - return new ScopeMappedResource(realm, auth, application, session); + return new ScopeMappedResource(realm, auth, client, session); } @Path("roles") public RoleContainerResource getRoleContainerResource() { - return new RoleContainerResource(realm, auth, application); + return new RoleContainerResource(realm, auth, client); } /** @@ -244,7 +245,7 @@ public class ApplicationResource { { auth.requireView(); - return application.getWebOrigins(); + return client.getWebOrigins(); } /** @@ -260,7 +261,7 @@ public class ApplicationResource { { auth.requireManage(); - application.setWebOrigins(allowedOrigins); + client.setWebOrigins(allowedOrigins); } /** @@ -277,7 +278,7 @@ public class ApplicationResource { auth.requireManage(); for (String origin : allowedOrigins) { - application.removeWebOrigin(origin); + client.removeWebOrigin(origin); } } @@ -289,7 +290,7 @@ public class ApplicationResource { @POST public GlobalRequestResult pushRevocation() { auth.requireManage(); - return new ResourceAdminManager().pushApplicationRevocationPolicy(uriInfo.getRequestUri(), realm, application); + return new ResourceAdminManager().pushApplicationRevocationPolicy(uriInfo.getRequestUri(), realm, client); } /** @@ -308,7 +309,7 @@ public class ApplicationResource { public Map getApplicationSessionCount() { auth.requireView(); Map map = new HashMap(); - map.put("count", session.sessions().getActiveUserSessions(application.getRealm(), application)); + map.put("count", session.sessions().getActiveUserSessions(client.getRealm(), client)); return map; } @@ -326,7 +327,7 @@ public class ApplicationResource { firstResult = firstResult != null ? firstResult : -1; maxResults = maxResults != null ? maxResults : -1; List sessions = new ArrayList(); - for (UserSessionModel userSession : session.sessions().getUserSessions(application.getRealm(), application, firstResult, maxResults)) { + for (UserSessionModel userSession : session.sessions().getUserSessions(client.getRealm(), client, firstResult, maxResults)) { UserSessionRepresentation rep = ModelToRepresentation.toRepresentation(userSession); sessions.add(rep); } @@ -341,7 +342,7 @@ public class ApplicationResource { @POST public GlobalRequestResult logoutAll() { auth.requireManage(); - return new ResourceAdminManager().logoutApplication(uriInfo.getRequestUri(), realm, application); + return new ResourceAdminManager().logoutApplication(uriInfo.getRequestUri(), realm, client); } /** @@ -356,7 +357,7 @@ public class ApplicationResource { if (user == null) { throw new NotFoundException("User not found"); } - new ResourceAdminManager().logoutUserFromApplication(uriInfo.getRequestUri(), realm, application, user, session); + new ResourceAdminManager().logoutUserFromApplication(uriInfo.getRequestUri(), realm, client, user, session); } /** @@ -375,7 +376,7 @@ public class ApplicationResource { throw new BadRequestException("Node not found in params"); } if (logger.isDebugEnabled()) logger.debug("Register node: " + node); - application.registerNode(node, Time.currentTime()); + client.registerNode(node, Time.currentTime()); } /** @@ -390,12 +391,12 @@ public class ApplicationResource { auth.requireManage(); if (logger.isDebugEnabled()) logger.debug("Unregister node: " + node); - Integer time = application.getRegisteredNodes().get(node); + Integer time = client.getRegisteredNodes().get(node); if (time == null) { throw new NotFoundException("Application does not have a node " + node); } - application.unregisterNode(node); + client.unregisterNode(node); } /** @@ -410,7 +411,7 @@ public class ApplicationResource { auth.requireManage(); logger.debug("Test availability of cluster nodes"); - return new ResourceAdminManager().testNodesAvailability(uriInfo.getRequestUri(), realm, application); + return new ResourceAdminManager().testNodesAvailability(uriInfo.getRequestUri(), realm, client); } } diff --git a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationsByIdResource.java b/services/src/main/java/org/keycloak/services/resources/admin/ClientsByIdResource.java similarity index 56% rename from services/src/main/java/org/keycloak/services/resources/admin/ApplicationsByIdResource.java rename to services/src/main/java/org/keycloak/services/resources/admin/ClientsByIdResource.java index d4b8f8fcdb..46f2f8774d 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationsByIdResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/ClientsByIdResource.java @@ -7,18 +7,18 @@ import org.keycloak.models.RealmModel; * @author Bill Burke * @version $Revision: 1 $ */ -public class ApplicationsByIdResource extends ApplicationsResource { - public ApplicationsByIdResource(RealmModel realm, RealmAuth auth) { +public class ClientsByIdResource extends ClientsResource { + public ClientsByIdResource(RealmModel realm, RealmAuth auth) { super(realm, auth); } @Override - protected ClientModel getApplicationByPathParam(String id) { + protected ClientModel getClientByPathParam(String id) { return realm.getClientById(id); } @Override - protected String getApplicationPath(ClientModel clientModel) { + protected String getClientPath(ClientModel clientModel) { return clientModel.getId(); } diff --git a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationsResource.java b/services/src/main/java/org/keycloak/services/resources/admin/ClientsResource.java similarity index 60% rename from services/src/main/java/org/keycloak/services/resources/admin/ApplicationsResource.java rename to services/src/main/java/org/keycloak/services/resources/admin/ClientsResource.java index 66ce8a815a..7432efb629 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/ApplicationsResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/ClientsResource.java @@ -10,7 +10,7 @@ import org.keycloak.models.ModelDuplicateException; import org.keycloak.models.RealmModel; import org.keycloak.models.utils.ModelToRepresentation; import org.keycloak.models.utils.RepresentationToModel; -import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.services.resources.flows.Flows; import javax.ws.rs.Consumes; @@ -32,7 +32,7 @@ import java.util.List; * @author Bill Burke * @version $Revision: 1 $ */ -public class ApplicationsResource { +public class ClientsResource { protected static final Logger logger = Logger.getLogger(RealmAdminResource.class); protected RealmModel realm; private RealmAuth auth; @@ -40,7 +40,7 @@ public class ApplicationsResource { @Context protected KeycloakSession session; - public ApplicationsResource(RealmModel realm, RealmAuth auth) { + public ClientsResource(RealmModel realm, RealmAuth auth) { this.realm = realm; this.auth = auth; @@ -55,10 +55,10 @@ public class ApplicationsResource { @GET @Produces(MediaType.APPLICATION_JSON) @NoCache - public List getApplications() { + public List getClients() { auth.requireAny(); - List rep = new ArrayList(); + List rep = new ArrayList<>(); List clientModels = realm.getClients(); boolean view = auth.hasView(); @@ -66,9 +66,9 @@ public class ApplicationsResource { if (view) { rep.add(ModelToRepresentation.toRepresentation(clientModel)); } else { - ApplicationRepresentation app = new ApplicationRepresentation(); - app.setName(clientModel.getClientId()); - rep.add(app); + ClientRepresentation client = new ClientRepresentation(); + client.setClientId(clientModel.getClientId()); + rep.add(client); } } @@ -76,7 +76,7 @@ public class ApplicationsResource { } /** - * Create a new application. Application name must be unique! + * Create a new client. Client client_id must be unique! * * @param uriInfo * @param rep @@ -84,18 +84,18 @@ public class ApplicationsResource { */ @POST @Consumes(MediaType.APPLICATION_JSON) - public Response createApplication(final @Context UriInfo uriInfo, final ApplicationRepresentation rep) { + public Response createClient(final @Context UriInfo uriInfo, final ClientRepresentation rep) { auth.requireManage(); try { - ClientModel clientModel = RepresentationToModel.createApplication(session, realm, rep, true); - return Response.created(uriInfo.getAbsolutePathBuilder().path(getApplicationPath(clientModel)).build()).build(); + ClientModel clientModel = RepresentationToModel.createClient(session, realm, rep, true); + return Response.created(uriInfo.getAbsolutePathBuilder().path(getClientPath(clientModel)).build()).build(); } catch (ModelDuplicateException e) { - return Flows.errors().exists("Application " + rep.getName() + " already exists"); + return Flows.errors().exists("Client " + rep.getClientId() + " already exists"); } } - protected String getApplicationPath(ClientModel clientModel) { + protected String getClientPath(ClientModel clientModel) { return clientModel.getClientId(); } @@ -106,18 +106,17 @@ public class ApplicationsResource { * @return */ @Path("{app-name}") - public ApplicationResource getApplication(final @PathParam("app-name") String name) { - ClientModel clientModel = getApplicationByPathParam(name); + public ClientResource getClient(final @PathParam("app-name") String name) { + ClientModel clientModel = getClientByPathParam(name); if (clientModel == null) { - throw new NotFoundException("Could not find application: " + name); + throw new NotFoundException("Could not find client: " + name); } - ApplicationResource applicationResource = new ApplicationResource(realm, auth, clientModel, session); - ResteasyProviderFactory.getInstance().injectProperties(applicationResource); - //resourceContext.initResource(applicationResource); - return applicationResource; + ClientResource clientResource = new ClientResource(realm, auth, clientModel, session); + ResteasyProviderFactory.getInstance().injectProperties(clientResource); + return clientResource; } - protected ClientModel getApplicationByPathParam(String name) { + protected ClientModel getClientByPathParam(String name) { return realm.getClientByClientId(name); } diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java index b178882f44..313d81011c 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java @@ -101,11 +101,11 @@ public class RealmAdminResource { * @return */ @Path("applications") - public ApplicationsResource getApplications() { - ApplicationsResource applicationsResource = new ApplicationsResource(realm, auth); - ResteasyProviderFactory.getInstance().injectProperties(applicationsResource); + public ClientsResource getApplications() { + ClientsResource clientsResource = new ClientsResource(realm, auth); + ResteasyProviderFactory.getInstance().injectProperties(clientsResource); //resourceContext.initResource(applicationsResource); - return applicationsResource; + return clientsResource; } /** @@ -114,8 +114,8 @@ public class RealmAdminResource { * @return */ @Path("applications-by-id") - public ApplicationsByIdResource getApplicationsById() { - ApplicationsByIdResource applicationsResource = new ApplicationsByIdResource(realm, auth); + public ClientsByIdResource getApplicationsById() { + ClientsByIdResource applicationsResource = new ClientsByIdResource(realm, auth); ResteasyProviderFactory.getInstance().injectProperties(applicationsResource); //resourceContext.initResource(applicationsResource); return applicationsResource; diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java index 8ec896eee0..dcbdcbf6c3 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTestStrategy.java @@ -150,7 +150,6 @@ public class AdapterTestStrategy extends ExternalResource { } } - @Test public void testSavedPostRequest() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/input-portal"); @@ -189,7 +188,6 @@ public class AdapterTestStrategy extends ExternalResource { } - @Test public void testLoginSSOAndLogout() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/customer-portal"); @@ -246,7 +244,6 @@ public class AdapterTestStrategy extends ExternalResource { } - @Test public void testServletRequestLogout() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/customer-portal"); @@ -288,7 +285,6 @@ public class AdapterTestStrategy extends ExternalResource { } - @Test public void testLoginSSOIdle() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/customer-portal"); @@ -322,7 +318,6 @@ public class AdapterTestStrategy extends ExternalResource { session.close(); } - @Test public void testLoginSSOIdleRemoveExpiredUserSessions() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/customer-portal"); @@ -364,7 +359,6 @@ public class AdapterTestStrategy extends ExternalResource { session.close(); } - @Test public void testLoginSSOMax() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/customer-portal"); @@ -402,7 +396,6 @@ public class AdapterTestStrategy extends ExternalResource { * KEYCLOAK-518 * @throws Exception */ - @Test public void testNullBearerToken() throws Exception { Client client = ClientBuilder.newClient(); WebTarget target = client.target(APP_SERVER_BASE_URL + "/customer-db/"); @@ -420,7 +413,6 @@ public class AdapterTestStrategy extends ExternalResource { * KEYCLOAK-518 * @throws Exception */ - @Test public void testBadUser() throws Exception { Client client = ClientBuilder.newClient(); UriBuilder builder = UriBuilder.fromUri(AUTH_SERVER_URL); @@ -440,7 +432,6 @@ public class AdapterTestStrategy extends ExternalResource { } - @Test public void testVersion() throws Exception { Client client = ClientBuilder.newClient(); WebTarget target = client.target(AUTH_SERVER_URL).path("version"); @@ -463,7 +454,6 @@ public class AdapterTestStrategy extends ExternalResource { - @Test public void testAuthenticated() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to(APP_SERVER_BASE_URL + "/secure-portal"); @@ -491,7 +481,6 @@ public class AdapterTestStrategy extends ExternalResource { * * @throws Throwable */ - @Test public void testSingleSessionInvalidated() throws Throwable { AdapterTestStrategy browser1 = this; AdapterTestStrategy browser2 = new AdapterTestStrategy(AUTH_SERVER_URL, APP_SERVER_BASE_URL, keycloakRule); @@ -529,7 +518,6 @@ public class AdapterTestStrategy extends ExternalResource { /** * KEYCLOAK-741 */ - @Test public void testSessionInvalidatedAfterFailedRefresh() throws Throwable { final AtomicInteger origTokenLifespan = new AtomicInteger(); @@ -581,14 +569,13 @@ public class AdapterTestStrategy extends ExternalResource { /** * KEYCLOAK-942 */ - @Test public void testAdminApplicationLogout() throws Throwable { // login as bburke loginAndCheckSession(driver, loginPage); // logout mposolda with admin client Keycloak keycloakAdmin = Keycloak.getInstance(AUTH_SERVER_URL, "master", "admin", "admin", Constants.ADMIN_CONSOLE_APPLICATION); - keycloakAdmin.realm("demo").applications().get("session-portal").logoutUser("mposolda"); + keycloakAdmin.realm("demo").clients().get("session-portal").logoutUser("mposolda"); // bburke should be still logged with original httpSession in our browser window driver.navigate().to(APP_SERVER_BASE_URL + "/session-portal"); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AbstractClientTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AbstractClientTest.java index 4d549095f8..d221df0669 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AbstractClientTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AbstractClientTest.java @@ -9,6 +9,7 @@ import org.keycloak.models.Constants; import org.keycloak.models.RealmModel; import org.keycloak.models.utils.KeycloakModelUtils; import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.IdentityProviderRepresentation; import org.keycloak.representations.idm.OAuthClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; @@ -97,10 +98,8 @@ public abstract class AbstractClientTest { public static String name(Object o1) { if (o1 instanceof RealmRepresentation) { return ((RealmRepresentation) o1).getRealm(); - } else if (o1 instanceof ApplicationRepresentation) { - return ((ApplicationRepresentation) o1).getName(); - } else if (o1 instanceof OAuthClientRepresentation) { - return ((OAuthClientRepresentation) o1).getName(); + } else if (o1 instanceof ClientRepresentation) { + return ((ClientRepresentation) o1).getClientId(); } else if (o1 instanceof IdentityProviderRepresentation) { return ((IdentityProviderRepresentation) o1).getAlias(); } diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AdminAPITest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AdminAPITest.java index ff73d79c29..a8a4292049 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AdminAPITest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/AdminAPITest.java @@ -35,7 +35,7 @@ import org.keycloak.models.UserSessionModel; import org.keycloak.protocol.oidc.OIDCLoginProtocol; import org.keycloak.protocol.oidc.TokenManager; import org.keycloak.representations.AccessToken; -import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.services.managers.RealmManager; @@ -125,19 +125,19 @@ public class AdminAPITest { storedRealm = realmTarget.request().get(RealmRepresentation.class); checkRealmRep(rep, storedRealm); - if (rep.getApplications() != null) { + if (rep.getClients() != null) { WebTarget applicationsTarget = realmTarget.path("applications"); - for (ApplicationRepresentation appRep : rep.getApplications()) { - ApplicationRepresentation newApp = new ApplicationRepresentation(); + for (ClientRepresentation appRep : rep.getClients()) { + ClientRepresentation newApp = new ClientRepresentation(); if (appRep.getId() != null) newApp.setId(appRep.getId()); - newApp.setName(appRep.getName()); + newApp.setClientId(appRep.getClientId()); if (appRep.getSecret() != null) { newApp.setSecret(appRep.getSecret()); } Response appCreateResponse = applicationsTarget.request().post(Entity.json(newApp)); Assert.assertEquals(201, appCreateResponse.getStatus()); appCreateResponse.close(); - WebTarget appTarget = applicationsTarget.path(appRep.getName()); + WebTarget appTarget = applicationsTarget.path(appRep.getClientId()); CredentialRepresentation cred = appTarget.path("client-secret").request().get(CredentialRepresentation.class); if (appRep.getSecret() != null) Assert.assertEquals(appRep.getSecret(), cred.getValue()); CredentialRepresentation newCred = appTarget.path("client-secret").request().post(null, CredentialRepresentation.class); @@ -148,7 +148,7 @@ public class AdminAPITest { appUpdateResponse.close(); - ApplicationRepresentation storedApp = appTarget.request().get(ApplicationRepresentation.class); + ClientRepresentation storedApp = appTarget.request().get(ClientRepresentation.class); checkAppUpdate(appRep, storedApp); @@ -165,8 +165,8 @@ public class AdminAPITest { client.close(); } - protected void checkAppUpdate(ApplicationRepresentation appRep, ApplicationRepresentation storedApp) { - if (appRep.getName() != null) Assert.assertEquals(appRep.getName(), storedApp.getName()); + protected void checkAppUpdate(ClientRepresentation appRep, ClientRepresentation storedApp) { + if (appRep.getClientId() != null) Assert.assertEquals(appRep.getClientId(), storedApp.getClientId()); if (appRep.isEnabled() != null) Assert.assertEquals(appRep.isEnabled(), storedApp.isEnabled()); if (appRep.isBearerOnly() != null) Assert.assertEquals(appRep.isBearerOnly(), storedApp.isBearerOnly()); if (appRep.isPublicClient() != null) Assert.assertEquals(appRep.isPublicClient(), storedApp.isPublicClient()); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ApplicationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ClientTest.java similarity index 70% rename from testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ApplicationTest.java rename to testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ClientTest.java index 55e17e68c8..7dc995223b 100644 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ApplicationTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/ClientTest.java @@ -2,10 +2,10 @@ package org.keycloak.testsuite.admin; import org.junit.Rule; import org.junit.Test; -import org.keycloak.admin.client.resource.ApplicationResource; +import org.keycloak.admin.client.resource.ClientResource; import org.keycloak.admin.client.resource.ProtocolMappersResource; import org.keycloak.protocol.oidc.OIDCLoginProtocolFactory; -import org.keycloak.representations.idm.ApplicationRepresentation; +import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.ProtocolMapperRepresentation; import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.representations.idm.UserSessionRepresentation; @@ -29,7 +29,7 @@ import static org.junit.Assert.fail; /** * @author Stian Thorgersen */ -public class ApplicationTest extends AbstractClientTest { +public class ClientTest extends AbstractClientTest { @Rule public WebRule webRule = new WebRule(this); @@ -41,38 +41,38 @@ public class ApplicationTest extends AbstractClientTest { protected OAuthClient oauth; @Test - public void getApplications() { - assertNames(realm.applications().findAll(), "account", "realm-management", "security-admin-console"); + public void getClients() { + assertNames(realm.clients().findAll(), "account", "realm-management", "security-admin-console"); } @Test - public void createApplication() { - ApplicationRepresentation rep = new ApplicationRepresentation(); - rep.setName("my-app"); + public void createClient() { + ClientRepresentation rep = new ClientRepresentation(); + rep.setClientId("my-app"); rep.setEnabled(true); - realm.applications().create(rep); + realm.clients().create(rep); - assertNames(realm.applications().findAll(), "account", "realm-management", "security-admin-console", "my-app"); + assertNames(realm.clients().findAll(), "account", "realm-management", "security-admin-console", "my-app"); } @Test - public void removeApplication() { - createApplication(); + public void removeClient() { + createClient(); - realm.applications().get("my-app").remove(); + realm.clients().get("my-app").remove(); } @Test - public void getApplicationRepresentation() { - createApplication(); + public void getClientRepresentation() { + createClient(); - ApplicationRepresentation rep = realm.applications().get("my-app").toRepresentation(); - assertEquals("my-app", rep.getName()); + ClientRepresentation rep = realm.clients().get("my-app").toRepresentation(); + assertEquals("my-app", rep.getClientId()); assertTrue(rep.isEnabled()); } @Test - public void getApplicationSessions() throws Exception { + public void getClientSessions() throws Exception { OAuthClient.AccessTokenResponse response = oauth.doGrantAccessTokenRequest("password", "test-user@localhost", "password"); assertEquals(200, response.getStatusCode()); @@ -81,7 +81,7 @@ public class ApplicationTest extends AbstractClientTest { OAuthClient.AccessTokenResponse response2 = oauth.doAccessTokenRequest(codeResponse.getCode(), "password"); assertEquals(200, response2.getStatusCode()); - ApplicationResource app = keycloak.realm("test").applications().get("test-app"); + ClientResource app = keycloak.realm("test").clients().get("test-app"); assertEquals(2, (long) app.getApplicationSessionCount().get("count")); @@ -93,29 +93,29 @@ public class ApplicationTest extends AbstractClientTest { @Test // KEYCLOAK-1110 public void deleteDefaultRole() { - ApplicationRepresentation rep = new ApplicationRepresentation(); - rep.setName("my-app"); + ClientRepresentation rep = new ClientRepresentation(); + rep.setClientId("my-app"); rep.setEnabled(true); - realm.applications().create(rep); + realm.clients().create(rep); RoleRepresentation role = new RoleRepresentation("test", "test"); - realm.applications().get("my-app").roles().create(role); + realm.clients().get("my-app").roles().create(role); - rep = realm.applications().get("my-app").toRepresentation(); + rep = realm.clients().get("my-app").toRepresentation(); rep.setDefaultRoles(new String[] { "test" }); - realm.applications().get("my-app").update(rep); + realm.clients().get("my-app").update(rep); - assertArrayEquals(new String[] { "test" }, realm.applications().get("my-app").toRepresentation().getDefaultRoles()); + assertArrayEquals(new String[] { "test" }, realm.clients().get("my-app").toRepresentation().getDefaultRoles()); - realm.applications().get("my-app").roles().deleteRole("test"); + realm.clients().get("my-app").roles().deleteRole("test"); - assertNull(realm.applications().get("my-app").toRepresentation().getDefaultRoles()); + assertNull(realm.clients().get("my-app").toRepresentation().getDefaultRoles()); } @Test public void testProtocolMappers() { - createApplication(); - ProtocolMappersResource mappersResource = realm.applications().get("my-app").getProtocolMappers(); + createClient(); + ProtocolMappersResource mappersResource = realm.clients().get("my-app").getProtocolMappers(); protocolMappersTest(mappersResource); } diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/composites/CompositeRoleTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/composites/CompositeRoleTest.java index fc8bf15dd7..7178f1de10 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/composites/CompositeRoleTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/composites/CompositeRoleTest.java @@ -35,7 +35,7 @@ import org.keycloak.models.UserCredentialModel; import org.keycloak.models.UserModel; import org.keycloak.models.utils.KeycloakModelUtils; import org.keycloak.representations.AccessToken; -import org.keycloak.services.managers.ApplicationManager; +import org.keycloak.services.managers.ClientManager; import org.keycloak.services.managers.RealmManager; import org.keycloak.testsuite.ApplicationServlet; import org.keycloak.testsuite.OAuthClient; @@ -85,7 +85,7 @@ public class CompositeRoleTest { realmRole1User.updateCredential(UserCredentialModel.password("password")); realmRole1User.grantRole(realmRole1); - final ClientModel realmComposite1Application = new ApplicationManager(manager).createApplication(realm, "REALM_COMPOSITE_1_APPLICATION"); + final ClientModel realmComposite1Application = new ClientManager(manager).createClient(realm, "REALM_COMPOSITE_1_APPLICATION"); realmComposite1Application.setFullScopeAllowed(false); realmComposite1Application.setEnabled(true); realmComposite1Application.addScopeMapping(realmComposite1); @@ -94,7 +94,7 @@ public class CompositeRoleTest { realmComposite1Application.setManagementUrl("http://localhost:8081/app/logout"); realmComposite1Application.setSecret("password"); - final ClientModel realmRole1Application = new ApplicationManager(manager).createApplication(realm, "REALM_ROLE_1_APPLICATION"); + final ClientModel realmRole1Application = new ClientManager(manager).createClient(realm, "REALM_ROLE_1_APPLICATION"); realmRole1Application.setFullScopeAllowed(false); realmRole1Application.setEnabled(true); realmRole1Application.addScopeMapping(realmRole1); @@ -104,7 +104,7 @@ public class CompositeRoleTest { realmRole1Application.setSecret("password"); - final ClientModel appRoleApplication = new ApplicationManager(manager).createApplication(realm, "APP_ROLE_APPLICATION"); + final ClientModel appRoleApplication = new ClientManager(manager).createClient(realm, "APP_ROLE_APPLICATION"); appRoleApplication.setFullScopeAllowed(false); appRoleApplication.setEnabled(true); appRoleApplication.addRedirectUri("http://localhost:8081/app/*"); @@ -127,7 +127,7 @@ public class CompositeRoleTest { realmAppRoleUser.updateCredential(UserCredentialModel.password("password")); realmAppRoleUser.grantRole(appRole2); - final ClientModel appCompositeApplication = new ApplicationManager(manager).createApplication(realm, "APP_COMPOSITE_APPLICATION"); + final ClientModel appCompositeApplication = new ClientManager(manager).createClient(realm, "APP_COMPOSITE_APPLICATION"); appCompositeApplication.setFullScopeAllowed(false); appCompositeApplication.setEnabled(true); appCompositeApplication.addRedirectUri("http://localhost:8081/app/*"); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ClientModelTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ClientModelTest.java index f80b040173..a9b1344f2c 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ClientModelTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ClientModelTest.java @@ -8,8 +8,8 @@ import org.keycloak.models.RealmModel; import org.keycloak.models.RoleModel; import org.keycloak.models.utils.ModelToRepresentation; import org.keycloak.models.utils.RepresentationToModel; -import org.keycloak.representations.idm.ApplicationRepresentation; -import org.keycloak.services.managers.ApplicationManager; +import org.keycloak.representations.idm.ClientRepresentation; +import org.keycloak.services.managers.ClientManager; import java.util.Iterator; import java.util.List; @@ -18,37 +18,37 @@ import java.util.List; * @author Stian Thorgersen */ public class ClientModelTest extends AbstractModelTest { - private ClientModel application; + private ClientModel client; private RealmModel realm; - private ApplicationManager appManager; + private ClientManager appManager; @Before @Override public void before() throws Exception { super.before(); - appManager = new ApplicationManager(realmManager); + appManager = new ClientManager(realmManager); realm = realmManager.createRealm("original"); - application = realm.addClient("application"); - application.setBaseUrl("http://base"); - application.setManagementUrl("http://management"); - application.setClientId("app-name"); - application.addRole("role-1"); - application.addRole("role-2"); - application.addRole("role-3"); - application.addDefaultRole("role-1"); - application.addDefaultRole("role-2"); + client = realm.addClient("application"); + client.setBaseUrl("http://base"); + client.setManagementUrl("http://management"); + client.setClientId("app-name"); + client.addRole("role-1"); + client.addRole("role-2"); + client.addRole("role-3"); + client.addDefaultRole("role-1"); + client.addDefaultRole("role-2"); - application.addRedirectUri("redirect-1"); - application.addRedirectUri("redirect-2"); + client.addRedirectUri("redirect-1"); + client.addRedirectUri("redirect-2"); - application.addWebOrigin("origin-1"); - application.addWebOrigin("origin-2"); + client.addWebOrigin("origin-1"); + client.addWebOrigin("origin-2"); - application.registerNode("node1", 10); - application.registerNode("10.20.30.40", 50); + client.registerNode("node1", 10); + client.registerNode("10.20.30.40", 50); - application.updateApplication(); + client.updateApplication(); } @Test @@ -56,26 +56,26 @@ public class ClientModelTest extends AbstractModelTest { RealmModel persisted = realmManager.getRealm(realm.getId()); ClientModel actual = persisted.getClientNameMap().get("app-name"); - assertEquals(application, actual); + assertEquals(client, actual); } @Test public void json() { - ApplicationRepresentation representation = ModelToRepresentation.toRepresentation(application); + ClientRepresentation representation = ModelToRepresentation.toRepresentation(client); representation.setId(null); RealmModel realm = realmManager.createRealm("copy"); - ClientModel copy = RepresentationToModel.createApplication(session, realm, representation, true); + ClientModel copy = RepresentationToModel.createClient(session, realm, representation, true); - assertEquals(application, copy); + assertEquals(client, copy); } @Test public void testAddApplicationWithId() { - application = realm.addClient("app-123", "application2"); + client = realm.addClient("app-123", "application2"); commit(); - application = realmManager.getRealm(realm.getId()).getClientById("app-123"); - Assert.assertNotNull(application); + client = realmManager.getRealm(realm.getId()).getClientById("app-123"); + Assert.assertNotNull(client); }