keycloak-memoizeit
Changes
integration/as7-eap-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java 4(+2 -2)
testsuite/integration/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java 5(+4 -1)
Details
diff --git a/core/src/main/java/org/keycloak/ServiceUrlConstants.java b/core/src/main/java/org/keycloak/ServiceUrlConstants.java
index 6538064..2d6387f 100755
--- a/core/src/main/java/org/keycloak/ServiceUrlConstants.java
+++ b/core/src/main/java/org/keycloak/ServiceUrlConstants.java
@@ -6,11 +6,11 @@ package org.keycloak;
*/
public interface ServiceUrlConstants {
- public static final String TOKEN_SERVICE_LOGIN_PATH = "/rest/realms/{realm-name}/tokens/login";
- public static final String TOKEN_SERVICE_ACCESS_CODE_PATH = "/rest/realms/{realm-name}/tokens/access/codes";
- public static final String TOKEN_SERVICE_REFRESH_PATH = "/rest/realms/{realm-name}/tokens/refresh";
- public static final String TOKEN_SERVICE_LOGOUT_PATH = "/rest/realms/{realm-name}/tokens/logout";
- public static final String ACCOUNT_SERVICE_PATH = "/rest/realms/{realm-name}/account";
- public static final String REALM_INFO_PATH = "/rest/realms/{realm-name}";
+ public static final String TOKEN_SERVICE_LOGIN_PATH = "/realms/{realm-name}/tokens/login";
+ public static final String TOKEN_SERVICE_ACCESS_CODE_PATH = "/realms/{realm-name}/tokens/access/codes";
+ public static final String TOKEN_SERVICE_REFRESH_PATH = "/realms/{realm-name}/tokens/refresh";
+ public static final String TOKEN_SERVICE_LOGOUT_PATH = "/realms/{realm-name}/tokens/logout";
+ public static final String ACCOUNT_SERVICE_PATH = "/realms/{realm-name}/account";
+ public static final String REALM_INFO_PATH = "/realms/{realm-name}";
}
diff --git a/examples/demo-template/customer-app/src/main/webapp/customers/view.jsp b/examples/demo-template/customer-app/src/main/webapp/customers/view.jsp
index 7aaa988..2334e76 100755
--- a/examples/demo-template/customer-app/src/main/webapp/customers/view.jsp
+++ b/examples/demo-template/customer-app/src/main/webapp/customers/view.jsp
@@ -3,15 +3,17 @@
<%@ page import="org.keycloak.example.CustomerDatabaseClient" %>
<%@ page import="org.keycloak.util.KeycloakUriBuilder" %>
<%@ page import="org.keycloak.representations.IDToken" %>
+<%@ page import="org.keycloak.ServiceUrlConstants" %>
<html>
<head>
<title>Customer View Page</title>
</head>
<body bgcolor="#E3F6CE">
<%
- String logoutUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth/rest/realms/demo/tokens/logout")
- .queryParam("redirect_uri", "http://localhost:8080/customer-portal").build().toString();
- String acctUri = "http://localhost:8080/auth/rest/realms/demo/account?referrer=customer-portal";
+ String logoutUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth").path(ServiceUrlConstants.TOKEN_SERVICE_LOGIN_PATH)
+ .queryParam("redirect_uri", "http://localhost:8080/customer-portal").build("demo").toString();
+ String acctUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth").path(ServiceUrlConstants.ACCOUNT_SERVICE_PATH)
+ .queryParam("referrer", "customer-portal").build("demo").toString();
IDToken idToken = CustomerDatabaseClient.getIDToken(request);
%>
<p>Goto: <a href="http://localhost:8080/product-portal">products</a> | <a href="<%=logoutUri%>">logout</a> | <a
diff --git a/examples/demo-template/product-app/src/main/webapp/products/view.jsp b/examples/demo-template/product-app/src/main/webapp/products/view.jsp
index 6592f8f..b25f990 100755
--- a/examples/demo-template/product-app/src/main/webapp/products/view.jsp
+++ b/examples/demo-template/product-app/src/main/webapp/products/view.jsp
@@ -2,15 +2,17 @@
pageEncoding="ISO-8859-1"%>
<%@ page import="org.keycloak.example.oauth.ProductDatabaseClient" %>
<%@ page import="org.keycloak.util.KeycloakUriBuilder" %>
+<%@ page import="org.keycloak.ServiceUrlConstants" %>
<html>
<head>
<title>Product View Page</title>
</head>
<body bgcolor="#F5F6CE">
<%
- String logoutUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth/rest/realms/demo/tokens/logout")
- .queryParam("redirect_uri", "http://localhost:8080/product-portal").build().toString();
- String acctUri = "http://localhost:8080/auth/rest/realms/demo/account?referrer=product-portal";
+ String logoutUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth").path(ServiceUrlConstants.TOKEN_SERVICE_LOGIN_PATH)
+ .queryParam("redirect_uri", "http://localhost:8080/customer-portal").build("demo").toString();
+ String acctUri = KeycloakUriBuilder.fromUri("http://localhost:8080/auth").path(ServiceUrlConstants.ACCOUNT_SERVICE_PATH)
+ .queryParam("referrer", "product-portal").build("demo").toString();
%>
<p>Goto: <a href="http://localhost:8080/customer-portal">customers</a> | <a href="<%=logoutUri%>">logout</a> | <a href="<%=acctUri%>">manage acct</a></p>
diff --git a/integration/as7-eap-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java b/integration/as7-eap-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java
index 809bf5c..6c67895 100755
--- a/integration/as7-eap-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java
+++ b/integration/as7-eap-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java
@@ -37,8 +37,8 @@ public class RealmDefinitionTestCase {
model.get("realm").set("demo");
model.get("resource").set("customer-portal");
model.get("realm-public-key").set("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB");
- model.get("auth-url").set("http://localhost:8080/auth-server/rest/realms/demo/tokens/login");
- model.get("code-url").set("http://localhost:8080/auth-server/rest/realms/demo/tokens/access/codes");
+ model.get("auth-url").set("http://localhost:8080/auth-server/realms/demo/tokens/login");
+ model.get("code-url").set("http://localhost:8080/auth-server/realms/demo/tokens/access/codes");
model.get("expose-token").set(true);
ModelNode credential = new ModelNode();
credential.get("password").set("password");
diff --git a/services/src/main/java/org/keycloak/services/resources/AccountService.java b/services/src/main/java/org/keycloak/services/resources/AccountService.java
index 2f998e7..1a45b6c 100755
--- a/services/src/main/java/org/keycloak/services/resources/AccountService.java
+++ b/services/src/main/java/org/keycloak/services/resources/AccountService.java
@@ -167,6 +167,10 @@ public class AccountService {
return base;
}
+ public static UriBuilder accountServiceBaseUrl(UriBuilder base) {
+ return base.path(RealmsResource.class).path(RealmsResource.class, "getAccountService");
+ }
+
private Response forwardToPage(String path, AccountPages page) {
if (auth != null) {
try {
@@ -207,24 +211,39 @@ public class AccountService {
}
}
+ public static UriBuilder totpUrl(UriBuilder base) {
+ return RealmsResource.accountUrl(base).path(AccountService.class, "totpPage");
+ }
@Path("totp")
@GET
public Response totpPage() {
return forwardToPage("totp", AccountPages.TOTP);
}
+ public static UriBuilder passwordUrl(UriBuilder base) {
+ return RealmsResource.accountUrl(base).path(AccountService.class, "passwordPage");
+ }
@Path("password")
@GET
public Response passwordPage() {
return forwardToPage("password", AccountPages.PASSWORD);
}
+
+ public static UriBuilder socialUrl(UriBuilder base) {
+ return RealmsResource.accountUrl(base).path(AccountService.class, "socialPage");
+ }
+
@Path("social")
@GET
public Response socialPage() {
return forwardToPage("social", AccountPages.SOCIAL);
}
+ public static UriBuilder logUrl(UriBuilder base) {
+ return RealmsResource.accountUrl(base).path(AccountService.class, "logPage");
+ }
+
@Path("log")
@GET
public Response logPage() {
@@ -422,6 +441,10 @@ public class AccountService {
}
}
+ public static UriBuilder loginRedirectUrl(UriBuilder base) {
+ return RealmsResource.accountUrl(base).path(AccountService.class, "loginRedirect");
+ }
+
@Path("login-redirect")
@GET
public Response loginRedirect(@QueryParam("code") String code,
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/ConsoleLogin.java b/services/src/main/java/org/keycloak/services/resources/admin/ConsoleLogin.java
new file mode 100755
index 0000000..c2a0429
--- /dev/null
+++ b/services/src/main/java/org/keycloak/services/resources/admin/ConsoleLogin.java
@@ -0,0 +1,410 @@
+package org.keycloak.services.resources.admin;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.jboss.logging.Logger;
+import org.jboss.resteasy.annotations.cache.NoCache;
+import org.jboss.resteasy.spi.HttpRequest;
+import org.jboss.resteasy.spi.HttpResponse;
+import org.jboss.resteasy.spi.NotFoundException;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+import org.jboss.resteasy.spi.UnauthorizedException;
+import org.keycloak.OAuth2Constants;
+import org.keycloak.models.AdminRoles;
+import org.keycloak.models.ApplicationModel;
+import org.keycloak.models.Config;
+import org.keycloak.models.Constants;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.RealmModel;
+import org.keycloak.models.RoleModel;
+import org.keycloak.models.UserModel;
+import org.keycloak.provider.ProviderSession;
+import org.keycloak.services.managers.AppAuthManager;
+import org.keycloak.services.managers.Auth;
+import org.keycloak.services.managers.RealmManager;
+import org.keycloak.services.managers.TokenManager;
+import org.keycloak.services.resources.TokenService;
+import org.keycloak.services.resources.flows.Flows;
+import org.keycloak.services.resources.flows.OAuthRedirect;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.NewCookie;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.ext.Providers;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class ConsoleLogin {
+ protected static final Logger logger = Logger.getLogger(ConsoleLogin.class);
+
+ @Context
+ protected UriInfo uriInfo;
+
+ @Context
+ protected HttpRequest request;
+
+ @Context
+ protected HttpResponse response;
+
+ @Context
+ protected KeycloakSession session;
+
+ /*
+ @Context
+ protected ResourceContext resourceContext;
+ */
+
+ @Context
+ protected Providers providers;
+
+ @Context
+ protected ProviderSession providerSession;
+
+ protected String adminPath = "/admin/";
+ protected AppAuthManager authManager;
+ protected TokenManager tokenManager;
+ protected RealmModel realm;
+
+ public ConsoleLogin(TokenManager tokenManager, RealmModel realm) {
+ this.realm = realm;
+ this.tokenManager = tokenManager;
+ this.authManager = new AppAuthManager(providerSession, "KEYCLOAK_ADMIN_CONSOLE_IDENTITY", tokenManager);
+ }
+
+ public static UriBuilder adminApiUrl(UriInfo uriInfo) {
+ UriBuilder base = uriInfo.getBaseUriBuilder().path(ConsoleLogin.class).path(ConsoleLogin.class, "getRealmsAdmin").path(RealmsAdminResource.class, "getRealmAdmin");
+ return base;
+ }
+
+
+ public static class WhoAmI {
+ protected String userId;
+ protected String realm;
+ protected String displayName;
+
+ @JsonProperty("createRealm")
+ protected boolean createRealm;
+ @JsonProperty("realm_access")
+ protected Map<String, Set<String>> realmAccess = new HashMap<String, Set<String>>();
+
+ public WhoAmI() {
+ }
+
+ public WhoAmI(String userId, String realm, String displayName, boolean createRealm, Map<String, Set<String>> realmAccess) {
+ this.userId = userId;
+ this.realm = realm;
+ this.displayName = displayName;
+ this.createRealm = createRealm;
+ this.realmAccess = realmAccess;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getRealm() {
+ return realm;
+ }
+
+ public void setRealm(String realm) {
+ this.realm = realm;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public boolean isCreateRealm() {
+ return createRealm;
+ }
+
+ public void setCreateRealm(boolean createRealm) {
+ this.createRealm = createRealm;
+ }
+
+ public Map<String, Set<String>> getRealmAccess() {
+ return realmAccess;
+ }
+
+ public void setRealmAccess(Map<String, Set<String>> realmAccess) {
+ this.realmAccess = realmAccess;
+ }
+ }
+
+ @Path("keepalive")
+ @GET
+ @NoCache
+ public Response keepalive(final @Context HttpHeaders headers) {
+ logger.debug("keepalive");
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel realm = getAdminstrationRealm(realmManager);
+ if (realm == null)
+ throw new NotFoundException("No realm found");
+ Auth auth = authManager.authenticateCookie(realm, headers);
+ if (auth == null) {
+ return Response.status(401).build();
+ }
+ NewCookie refreshCookie = authManager.createRefreshCookie(realm, auth.getUser(), auth.getClient(), ConsoleLogin.saasCookiePath(uriInfo).build());
+ return Response.noContent().cookie(refreshCookie).build();
+ }
+
+ @Path("whoami")
+ @GET
+ @Produces("application/json")
+ @NoCache
+ public Response whoAmI(final @Context HttpHeaders headers) {
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel realm = getAdminstrationRealm(realmManager);
+ if (realm == null)
+ throw new NotFoundException("No realm found");
+ Auth auth = authManager.authenticateCookie(realm, headers);
+ if (auth == null) {
+ logger.debug("No auth cookie");
+ return Response.status(401).build();
+ }
+ UserModel user = auth.getUser();
+ if (user == null) {
+ return Response.status(401).build();
+ }
+
+ String displayName;
+ if (user.getFirstName() != null || user.getLastName() != null) {
+ displayName = user.getFirstName();
+ if (user.getLastName() != null) {
+ displayName = displayName != null ? displayName + " " + user.getLastName() : user.getLastName();
+ }
+ } else {
+ displayName = user.getLoginName();
+ }
+
+ boolean createRealm = realm.hasRole(user, realm.getRole(AdminRoles.CREATE_REALM));
+
+ Map<String, Set<String>> realmAccess = new HashMap<String, Set<String>>();
+ addRealmAdminAccess(realmAccess, auth.getRealm().getRoleMappings(auth.getUser()));
+
+ return Response.ok(new WhoAmI(user.getId(), Config.getAdminRealm(), displayName, createRealm, realmAccess)).build();
+ }
+
+ private void addRealmAdminAccess(Map<String, Set<String>> realmAdminAccess, Set<RoleModel> roles) {
+ for (RoleModel r : roles) {
+ if (r.getContainer() instanceof ApplicationModel) {
+ ApplicationModel app = (ApplicationModel) r.getContainer();
+ if (app.getName().endsWith(AdminRoles.APP_SUFFIX)) {
+ String realm = app.getName().substring(0, app.getName().length() - AdminRoles.APP_SUFFIX.length());
+ if (!realmAdminAccess.containsKey(realm)) {
+ realmAdminAccess.put(realm, new HashSet<String>());
+ }
+ realmAdminAccess.get(realm).add(r.getName());
+ }
+ }
+
+ if (r.isComposite()) {
+ addRealmAdminAccess(realmAdminAccess, r.getComposites());
+ }
+ }
+ }
+
+ @Path("isLoggedIn.js")
+ @GET
+ @Produces("application/javascript")
+ @NoCache
+ public String isLoggedIn(final @Context HttpHeaders headers) {
+ logger.debug("WHOAMI Javascript start.");
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel realm = getAdminstrationRealm(realmManager);
+ if (realm == null) {
+ return "var keycloakCookieLoggedIn = false;";
+
+ }
+ UserModel user = authManager.authenticateCookie(realm, headers).getUser();
+ if (user == null) {
+ return "var keycloakCookieLoggedIn = false;";
+ }
+ logger.debug("WHOAMI: " + user.getLoginName());
+ return "var keycloakCookieLoggedIn = true;";
+ }
+
+ public static UriBuilder contextRoot(UriInfo uriInfo) {
+ return UriBuilder.fromUri(uriInfo.getBaseUri()).replacePath("/auth");
+ }
+
+ public static UriBuilder saasCookiePath(UriInfo uriInfo) {
+ return UriBuilder.fromUri(uriInfo.getBaseUri()).path(ConsoleLogin.class);
+ }
+
+ @Path("realms")
+ public RealmsAdminResource getRealmsAdmin(@Context final HttpHeaders headers) {
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel adminRealm = getAdminstrationRealm(realmManager);
+ if (adminRealm == null)
+ throw new NotFoundException("Admin realm not found");
+ Auth auth = authManager.authenticate(adminRealm, headers);
+ if (auth == null) {
+ throw new UnauthorizedException("Bearer");
+ }
+
+ RealmsAdminResource adminResource = new RealmsAdminResource(auth, tokenManager);
+ ResteasyProviderFactory.getInstance().injectProperties(adminResource);
+ //resourceContext.initResource(adminResource);
+ return adminResource;
+ }
+
+ @Path("serverinfo")
+ public ServerInfoAdminResource getServerInfo(@Context final HttpHeaders headers) {
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel adminRealm = getAdminstrationRealm(realmManager);
+ if (adminRealm == null)
+ throw new NotFoundException("Admin realm not found");
+ Auth auth = authManager.authenticate(adminRealm, headers);
+ UserModel admin = auth.getUser();
+ if (admin == null) {
+ throw new UnauthorizedException("Bearer");
+ }
+ ApplicationModel adminConsole = adminRealm.getApplicationNameMap().get(Constants.ADMIN_CONSOLE_APPLICATION);
+ if (adminConsole == null) {
+ throw new NotFoundException("Admin console application not found");
+ }
+ ServerInfoAdminResource adminResource = new ServerInfoAdminResource();
+ ResteasyProviderFactory.getInstance().injectProperties(adminResource);
+ //resourceContext.initResource(adminResource);
+ return adminResource;
+ }
+
+ private void expireCookie() {
+ authManager.expireCookie(ConsoleLogin.saasCookiePath(uriInfo).build());
+ }
+
+ @Path("login")
+ @GET
+ @NoCache
+ public Response loginPage(@QueryParam("path") String path) {
+ logger.debug("loginPage ********************** <---");
+ expireCookie();
+
+ OAuthRedirect oauth = new OAuthRedirect();
+ String authUrl = TokenService.loginPageUrl(uriInfo).build(Config.getAdminRealm()).toString();
+ logger.debugv("authUrl: {0}", authUrl);
+ oauth.setAuthUrl(authUrl);
+ oauth.setClientId(Constants.ADMIN_CONSOLE_APPLICATION);
+
+ UriBuilder redirectBuilder = uriInfo.getBaseUriBuilder().path(ConsoleLogin.class).path(ConsoleLogin.class, "loginRedirect");
+ if (path != null) {
+ redirectBuilder.queryParam("path", path);
+ }
+ URI redirectUri = redirectBuilder.build();
+ logger.debugv("redirectUri: {0}", redirectUri.toString());
+ oauth.setStateCookiePath(redirectUri.getRawPath());
+ return oauth.redirect(uriInfo, redirectUri.toString());
+ }
+
+ @Path("login-error")
+ @GET
+ @NoCache
+ public Response errorOnLoginRedirect(@QueryParam ("error") String message) {
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel realm = getAdminstrationRealm(realmManager);
+ return Flows.forms(realm, uriInfo).setError(message).createErrorPage();
+ }
+
+ protected Response redirectOnLoginError(String message) {
+ URI uri = uriInfo.getBaseUriBuilder().path(ConsoleLogin.class).path(ConsoleLogin.class, "errorOnLoginRedirect").queryParam(OAuth2Constants.ERROR, message).build();
+ URI logout = TokenService.logoutUrl(uriInfo).queryParam(OAuth2Constants.REDIRECT_URI, uri.toString()).build(Config.getAdminRealm());
+ return Response.status(302).location(logout).build();
+ }
+
+ @Path("login-redirect")
+ @GET
+ @NoCache
+ public Response loginRedirect(@QueryParam("code") String code,
+ @QueryParam("state") String state,
+ @QueryParam("error") String error,
+ @QueryParam("path") String path,
+ @Context HttpHeaders headers
+
+ ) {
+ try {
+ logger.info("loginRedirect ********************** <---");
+ if (error != null) {
+ logger.debug("error from oauth");
+ return redirectOnLoginError(error);
+ }
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel adminRealm = getAdminstrationRealm(realmManager);
+ if (!adminRealm.isEnabled()) {
+ logger.debug("realm not enabled");
+ return redirectOnLoginError("realm not enabled");
+ }
+ ApplicationModel adminConsole = adminRealm.getApplicationNameMap().get(Constants.ADMIN_CONSOLE_APPLICATION);
+ if (!adminConsole.isEnabled()) {
+ logger.debug("admin app not enabled");
+ return redirectOnLoginError("admin app not enabled");
+ }
+
+ if (code == null) {
+ logger.debug("code not specified");
+ return redirectOnLoginError("invalid login data");
+ }
+ if (state == null) {
+ logger.debug("state not specified");
+ return redirectOnLoginError("invalid login data");
+ }
+ new OAuthRedirect().checkStateCookie(uriInfo, headers);
+
+ logger.debug("loginRedirect SUCCESS");
+ NewCookie cookie = authManager.createCookie(adminRealm, adminConsole, code, ConsoleLogin.saasCookiePath(uriInfo).build());
+
+ URI redirectUri = UriBuilder.fromUri(uriInfo.getBaseUri()).path(adminPath).build();
+ if (path != null) {
+ redirectUri = redirectUri.resolve("#" + UriBuilder.fromPath(path).build().toString());
+ }
+ return Response.status(302).cookie(cookie).location(redirectUri).build();
+ } finally {
+ expireCookie();
+ }
+ }
+
+ @Path("logout")
+ @GET
+ @NoCache
+ public Response logout() {
+ RealmManager realmManager = new RealmManager(session);
+ RealmModel realm = getAdminstrationRealm(realmManager);
+ expireCookie();
+ authManager.expireIdentityCookie(realm, uriInfo);
+
+ return Response.status(302).location(uriInfo.getBaseUriBuilder().path(ConsoleLogin.class).path(ConsoleLogin.class, "loginPage").build()).build();
+ }
+
+ @Path("logout-cookie")
+ @GET
+ @NoCache
+ public void logoutCookie() {
+ logger.debug("*** logoutCookie");
+ expireCookie();
+ }
+
+ protected RealmModel getAdminstrationRealm(RealmManager realmManager) {
+ return realmManager.getKeycloakAdminstrationRealm();
+ }
+}
diff --git a/services/src/main/java/org/keycloak/services/resources/RealmsResource.java b/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
index 5aab584..970cdff 100755
--- a/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
@@ -28,7 +28,7 @@ import javax.ws.rs.core.UriInfo;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
-@Path("/rest/realms")
+@Path("/realms")
public class RealmsResource {
protected static Logger logger = Logger.getLogger(RealmsResource.class);
@@ -55,6 +55,9 @@ public class RealmsResource {
@Context
protected BruteForceProtector protector;
+ @Context
+ protected ResteasyProviderFactory providerFactory;
+
protected TokenManager tokenManager;
protected SocialRequestManager socialRequestManager;
@@ -67,6 +70,14 @@ public class RealmsResource {
return uriInfo.getBaseUriBuilder().path(RealmsResource.class).path(RealmsResource.class, "getRealmResource");
}
+ public static UriBuilder realmBaseUrl(UriBuilder base) {
+ return base.path(RealmsResource.class).path(RealmsResource.class, "getRealmResource");
+ }
+
+ public static UriBuilder accountUrl(UriBuilder base) {
+ return base.path(RealmsResource.class).path(RealmsResource.class, "getAccountService");
+ }
+
@Path("{realm}/tokens")
public TokenService getTokenService(final @PathParam("realm") String name) {
RealmManager realmManager = new RealmManager(session);
@@ -116,4 +127,14 @@ public class RealmsResource {
return realmResource;
}
+ @Path("{realm}/admin/resources")
+ public AdminResource adminResource() {
+ AdminResource adminResource = new AdminResource();
+ ResteasyProviderFactory.getInstance().injectProperties(adminResource);
+ return adminResource;
+
+ }
+
+
+
}
diff --git a/services/src/main/java/org/keycloak/services/resources/TokenService.java b/services/src/main/java/org/keycloak/services/resources/TokenService.java
index 32cf678..95d8367 100755
--- a/services/src/main/java/org/keycloak/services/resources/TokenService.java
+++ b/services/src/main/java/org/keycloak/services/resources/TokenService.java
@@ -120,36 +120,84 @@ public class TokenService {
}
public static UriBuilder tokenServiceBaseUrl(UriInfo uriInfo) {
- UriBuilder base = uriInfo.getBaseUriBuilder().path(RealmsResource.class).path(RealmsResource.class, "getTokenService");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return tokenServiceBaseUrl(baseUriBuilder);
+ }
+
+ public static UriBuilder tokenServiceBaseUrl(UriBuilder baseUriBuilder) {
+ UriBuilder base = baseUriBuilder.path(RealmsResource.class).path(RealmsResource.class, "getTokenService");
return base;
}
public static UriBuilder accessCodeToTokenUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "accessCodeToToken");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return accessCodeToTokenUrl(baseUriBuilder);
}
+ public static UriBuilder accessCodeToTokenUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "accessCodeToToken");
+ }
+
public static UriBuilder grantAccessTokenUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "grantAccessToken");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return grantAccessTokenUrl(baseUriBuilder);
}
+ public static UriBuilder grantAccessTokenUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "grantAccessToken");
+ }
+
public static UriBuilder loginPageUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "loginPage");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return loginPageUrl(baseUriBuilder);
+ }
+
+ public static UriBuilder loginPageUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "loginPage");
}
public static UriBuilder logoutUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "logout");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return logoutUrl(baseUriBuilder);
+ }
+
+ public static UriBuilder logoutUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "logout");
}
public static UriBuilder processLoginUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "processLogin");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return processLoginUrl(baseUriBuilder);
+ }
+
+ public static UriBuilder processLoginUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "processLogin");
}
public static UriBuilder processOAuthUrl(UriInfo uriInfo) {
- return tokenServiceBaseUrl(uriInfo).path(TokenService.class, "processOAuth");
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ return processOAuthUrl(baseUriBuilder);
+ }
+
+ public static UriBuilder processOAuthUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "processOAuth");
}
+ public static UriBuilder refreshUrl(UriBuilder baseUriBuilder) {
+ UriBuilder uriBuilder = tokenServiceBaseUrl(baseUriBuilder);
+ return uriBuilder.path(TokenService.class, "refreshAccessToken");
+ }
+
+
+
@Path("grants/access")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
index 78f82b4..9a7db34 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
@@ -41,6 +41,7 @@ import org.keycloak.models.UserModel;
import org.keycloak.models.utils.TimeBasedOTP;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.services.managers.RealmManager;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.AssertEvents;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.Retry;
@@ -60,6 +61,7 @@ import org.keycloak.testsuite.rule.WebRule;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
+import javax.ws.rs.core.UriBuilder;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
@@ -90,7 +92,7 @@ public class AccountTest {
}
});
- public static String ACCOUNT_REDIRECT = "http://localhost:8081/auth/rest/realms/test/account/login-redirect";
+ public static String ACCOUNT_REDIRECT = AccountService.accountServiceBaseUrl(UriBuilder.fromUri("http://localhost:8081/auth")).build("test").toString();
@Rule
public AssertEvents events = new AssertEvents(keycloakRule);
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/ProfileTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/ProfileTest.java
index 59cbd00..73de4a7 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/ProfileTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/ProfileTest.java
@@ -19,6 +19,7 @@ import org.keycloak.models.UserCredentialModel;
import org.keycloak.models.UserModel;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.services.managers.RealmManager;
+import org.keycloak.services.resources.RealmsResource;
import org.keycloak.testsuite.Constants;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.pages.AccountUpdateProfilePage;
@@ -201,7 +202,7 @@ public class ProfileTest {
}
private URI getAccountURI() {
- return UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT + "/rest/realms/" + oauth.getRealm() + "/account").build();
+ return RealmsResource.accountUrl(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT)).build(oauth.getRealm());
}
private HttpResponse doGetProfile(String token, String origin) throws IOException {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java
index d9e13c9..ec4cbb2 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java
@@ -30,6 +30,7 @@ import org.keycloak.models.RealmModel;
import org.keycloak.models.utils.TimeBasedOTP;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.services.managers.RealmManager;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.AssertEvents;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.pages.AccountTotpPage;
@@ -45,6 +46,8 @@ import org.keycloak.testsuite.rule.WebResource;
import org.keycloak.testsuite.rule.WebRule;
import org.openqa.selenium.WebDriver;
+import javax.ws.rs.core.UriBuilder;
+
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
@@ -186,7 +189,7 @@ public class RequiredActionTotpSetupTest {
accountTotpPage.assertCurrent();
events.expectLogin().user(userId).detail(Details.AUTH_METHOD, "sso").client("account")
- .detail(Details.REDIRECT_URI, "http://localhost:8081/auth/rest/realms/test/account/login-redirect?path=totp")
+ .detail(Details.REDIRECT_URI, AccountService.loginRedirectUrl(UriBuilder.fromUri("http://localhost:8081/auth")).queryParam("path", "totp").build("test").toString())
.removeDetail(Details.USERNAME).assertEvent();
// Remove google authentificator
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java
index 3323d77..8fde46f 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java
@@ -35,6 +35,7 @@ import org.keycloak.representations.adapters.action.SessionStats;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.services.managers.TokenManager;
+import org.keycloak.services.resources.TokenService;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.rule.AbstractKeycloakRule;
@@ -60,7 +61,7 @@ import java.util.Map;
*/
public class AdapterTest {
- public static final String LOGIN_URL = "http://localhost:8081/auth/rest/realms/demo/tokens/login";
+ public static final String LOGIN_URL = TokenService.loginPageUrl(UriBuilder.fromUri("http://localhost:8081/auth")).build("demo").toString();
public static PublicKey realmPublicKey;
@ClassRule
public static AbstractKeycloakRule keycloakRule = new AbstractKeycloakRule(){
@@ -139,8 +140,8 @@ public class AdapterTest {
// test logout
- String logoutUri = UriBuilder.fromUri("http://localhost:8081/auth/rest/realms/demo/tokens/logout")
- .queryParam(OAuth2Constants.REDIRECT_URI, "http://localhost:8081/customer-portal").build().toString();
+ String logoutUri = TokenService.logoutUrl(UriBuilder.fromUri("http://localhost:8081/auth"))
+ .queryParam(OAuth2Constants.REDIRECT_URI, "http://localhost:8081/customer-portal").build("demo").toString();
driver.navigate().to(logoutUri);
Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
driver.navigate().to("http://localhost:8081/product-portal");
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/RelativeUriAdapterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/RelativeUriAdapterTest.java
index 6ac6ff6..1c9b1fe 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/RelativeUriAdapterTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/RelativeUriAdapterTest.java
@@ -35,6 +35,7 @@ import org.keycloak.representations.adapters.action.SessionStats;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.services.managers.TokenManager;
+import org.keycloak.services.resources.TokenService;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.rule.AbstractKeycloakRule;
@@ -63,7 +64,7 @@ import java.util.Map;
*/
public class RelativeUriAdapterTest {
- public static final String LOGIN_URL = "http://localhost:8081/auth/rest/realms/demo/tokens/login";
+ public static final String LOGIN_URL = TokenService.loginPageUrl(UriBuilder.fromUri("http://localhost:8081/auth")).build("demo").toString();
public static PublicKey realmPublicKey;
@ClassRule
public static AbstractKeycloakRule keycloakRule = new AbstractKeycloakRule(){
@@ -142,8 +143,8 @@ public class RelativeUriAdapterTest {
// test logout
- String logoutUri = UriBuilder.fromUri("http://localhost:8081/auth/rest/realms/demo/tokens/logout")
- .queryParam(OAuth2Constants.REDIRECT_URI, "http://localhost:8081/customer-portal").build().toString();
+ String logoutUri = TokenService.logoutUrl(UriBuilder.fromUri("http://localhost:8081/auth"))
+ .queryParam(OAuth2Constants.REDIRECT_URI, "http://localhost:8081/customer-portal").build("demo").toString();
driver.navigate().to(logoutUri);
Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
driver.navigate().to("http://localhost:8081/product-portal");
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/ApplicationServlet.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/ApplicationServlet.java
index ab6e3b3..b40cda7 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/ApplicationServlet.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/ApplicationServlet.java
@@ -21,10 +21,13 @@
*/
package org.keycloak.testsuite;
+import org.keycloak.services.resources.RealmsResource;
+
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.UriBuilder;
import java.io.IOException;
import java.io.PrintWriter;
@@ -48,8 +51,8 @@ public class ApplicationServlet extends HttpServlet {
PrintWriter pw = resp.getWriter();
pw.printf("<html><head><title>%s</title></head><body>", title);
-
- pw.printf(LINK, "http://localhost:8081/auth/rest/realms/test/account", "account", "account");
+ UriBuilder base = UriBuilder.fromUri("http://localhost:8081/auth");
+ pw.printf(LINK, RealmsResource.accountUrl(base), "account", "account");
pw.print("</body></html>");
pw.flush();
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/SSOTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/SSOTest.java
old mode 100644
new mode 100755
index c02794e..3dac594
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/SSOTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/SSOTest.java
@@ -27,6 +27,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.keycloak.OAuth2Constants;
import org.keycloak.audit.Details;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.AssertEvents;
import org.keycloak.testsuite.OAuthClient;
import org.keycloak.testsuite.pages.AccountUpdateProfilePage;
@@ -38,6 +39,8 @@ import org.keycloak.testsuite.rule.WebResource;
import org.keycloak.testsuite.rule.WebRule;
import org.openqa.selenium.WebDriver;
+import javax.ws.rs.core.UriBuilder;
+
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
@@ -89,7 +92,7 @@ public class SSOTest {
Assert.assertTrue(profilePage.isCurrent());
events.expectLogin().detail(Details.AUTH_METHOD, "sso").removeDetail(Details.USERNAME).client("test-app").assertEvent();
- events.expectLogin().detail(Details.AUTH_METHOD, "sso").removeDetail(Details.USERNAME).client("account").detail(Details.REDIRECT_URI, "http://localhost:8081/auth/rest/realms/test/account/login-redirect").assertEvent();
+ events.expectLogin().detail(Details.AUTH_METHOD, "sso").removeDetail(Details.USERNAME).client("account").detail(Details.REDIRECT_URI, AccountService.loginRedirectUrl(UriBuilder.fromUri("http://localhost:8081/auth")).build("rest").toString()).assertEvent();
}
}
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/OAuthClient.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/OAuthClient.java
index d0119d4..2b8ea8f 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/OAuthClient.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/OAuthClient.java
@@ -40,6 +40,7 @@ import org.keycloak.jose.jws.JWSInput;
import org.keycloak.jose.jws.crypto.RSAProvider;
import org.keycloak.representations.AccessToken;
import org.keycloak.representations.RefreshToken;
+import org.keycloak.services.resources.TokenService;
import org.keycloak.util.BasicAuthHelper;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
@@ -61,7 +62,7 @@ public class OAuthClient {
private WebDriver driver;
- private String baseUrl = Constants.AUTH_SERVER_ROOT + "/rest";
+ private String baseUrl = Constants.AUTH_SERVER_ROOT;
private String realm = "test";
@@ -233,11 +234,11 @@ public class OAuthClient {
}
public void openLogout() {
- UriBuilder b = UriBuilder.fromUri(baseUrl + "/realms/" + realm + "/tokens/logout");
+ UriBuilder b = TokenService.logoutUrl(UriBuilder.fromUri(baseUrl));
if (redirectUri != null) {
b.queryParam(OAuth2Constants.REDIRECT_URI, redirectUri);
}
- driver.navigate().to(b.build().toString());
+ driver.navigate().to(b.build(realm).toString());
}
public String getRedirectUri() {
@@ -245,7 +246,7 @@ public class OAuthClient {
}
public String getLoginFormUrl() {
- UriBuilder b = UriBuilder.fromUri(baseUrl + "/realms/" + realm + "/tokens/login");
+ UriBuilder b = TokenService.loginPageUrl(UriBuilder.fromUri(baseUrl));
if (responseType != null) {
b.queryParam(OAuth2Constants.RESPONSE_TYPE, responseType);
}
@@ -258,17 +259,17 @@ public class OAuthClient {
if (state != null) {
b.queryParam(OAuth2Constants.STATE, state);
}
- return b.build().toString();
+ return b.build(realm).toString();
}
public String getAccessTokenUrl() {
- UriBuilder b = UriBuilder.fromUri(baseUrl + "/realms/" + realm + "/tokens/access/codes");
- return b.build().toString();
+ UriBuilder b = TokenService.accessCodeToTokenUrl(UriBuilder.fromUri(baseUrl));
+ return b.build(realm).toString();
}
public String getRefreshTokenUrl() {
- UriBuilder b = UriBuilder.fromUri(baseUrl + "/realms/" + realm + "/tokens/refresh");
- return b.build().toString();
+ UriBuilder b = TokenService.refreshUrl(UriBuilder.fromUri(baseUrl));
+ return b.build(realm).toString();
}
public OAuthClient realm(String realm) {
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountLogPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountLogPage.java
old mode 100644
new mode 100755
index 1f796d0..ab85433
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountLogPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountLogPage.java
@@ -21,11 +21,13 @@
*/
package org.keycloak.testsuite.pages;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.Constants;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
+import javax.ws.rs.core.UriBuilder;
import java.util.LinkedList;
import java.util.List;
@@ -34,7 +36,7 @@ import java.util.List;
*/
public class AccountLogPage extends AbstractAccountPage {
- private static String PATH = Constants.AUTH_SERVER_ROOT + "/rest/realms/test/account/log";
+ private static String PATH = AccountService.logUrl(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT)).build("test").toString();
public boolean isCurrent() {
return driver.getTitle().contains("Account Management") && driver.getCurrentUrl().endsWith("/account/log");
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountPasswordPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountPasswordPage.java
old mode 100644
new mode 100755
index 8b287c4..d621c71
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountPasswordPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountPasswordPage.java
@@ -21,16 +21,19 @@
*/
package org.keycloak.testsuite.pages;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.Constants;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
+import javax.ws.rs.core.UriBuilder;
+
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class AccountPasswordPage extends AbstractAccountPage {
- private static String PATH = Constants.AUTH_SERVER_ROOT + "/rest/realms/test/account/password";
+ private static String PATH = AccountService.passwordUrl(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT)).build("test").toString();
@FindBy(id = "password")
private WebElement passwordInput;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java
old mode 100644
new mode 100755
index cd454de..99716a2
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java
@@ -21,16 +21,19 @@
*/
package org.keycloak.testsuite.pages;
+import org.keycloak.services.resources.AccountService;
import org.keycloak.testsuite.Constants;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
+import javax.ws.rs.core.UriBuilder;
+
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class AccountTotpPage extends AbstractAccountPage {
- private static String PATH = Constants.AUTH_SERVER_ROOT + "/rest/realms/test/account/totp";
+ private static String PATH = AccountService.totpUrl(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT)).build("test").toString();
@FindBy(id = "totpSecret")
private WebElement totpSecret;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java
old mode 100644
new mode 100755
index 04f1c60..a869dcf
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountUpdateProfilePage.java
@@ -21,16 +21,20 @@
*/
package org.keycloak.testsuite.pages;
+import org.keycloak.services.resources.AccountService;
+import org.keycloak.services.resources.RealmsResource;
import org.keycloak.testsuite.Constants;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
+import javax.ws.rs.core.UriBuilder;
+
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class AccountUpdateProfilePage extends AbstractAccountPage {
- public static String PATH = Constants.AUTH_SERVER_ROOT + "/rest/realms/test/account";
+ public static String PATH = RealmsResource.accountUrl(UriBuilder.fromUri(Constants.AUTH_SERVER_ROOT)).build("test").toString();
@FindBy(id = "firstName")
private WebElement firstNameInput;