keycloak-memoizeit
Changes
forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/FreeMarkerAccount.java 8(+7 -1)
Details
diff --git a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/FreeMarkerAccount.java b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/FreeMarkerAccount.java
index 884484f..fb30dac 100755
--- a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/FreeMarkerAccount.java
+++ b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/FreeMarkerAccount.java
@@ -22,6 +22,7 @@ import org.keycloak.models.UserModel;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;
import java.net.URI;
@@ -85,6 +86,11 @@ public class FreeMarkerAccount implements Account {
}
URI baseUri = uriInfo.getBaseUri();
+ UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();
+ for (Map.Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {
+ baseUriBuilder.queryParam(e.getKey(), e.getValue().toArray());
+ }
+ URI baseQueryUri = baseUriBuilder.build();
if (message != null) {
attributes.put("message", new MessageBean(messages.containsKey(message) ? messages.getProperty(message) : message, messageType));
@@ -94,7 +100,7 @@ public class FreeMarkerAccount implements Account {
attributes.put("referrer", new ReferrerBean(referrer));
}
- attributes.put("url", new UrlBean(realm, theme, baseUri));
+ attributes.put("url", new UrlBean(realm, theme, baseUri, baseQueryUri));
attributes.put("features", new FeaturesBean(social, audit, passwordUpdateSupported));
diff --git a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/UrlBean.java b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/UrlBean.java
index e626ddf..6467146 100644
--- a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/UrlBean.java
+++ b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/UrlBean.java
@@ -14,43 +14,45 @@ public class UrlBean {
private String realm;
private Theme theme;
private URI baseURI;
+ private URI baseQueryURI;
- public UrlBean(RealmModel realm, Theme theme, URI baseURI) {
+ public UrlBean(RealmModel realm, Theme theme, URI baseURI, URI baseQueryURI) {
this.realm = realm.getName();
this.theme = theme;
this.baseURI = baseURI;
+ this.baseQueryURI = baseQueryURI;
}
public String getAccessUrl() {
- return Urls.accountAccessPage(baseURI, realm).toString();
+ return Urls.accountAccessPage(baseQueryURI, realm).toString();
}
public String getAccountUrl() {
- return Urls.accountPage(baseURI, realm).toString();
+ return Urls.accountPage(baseQueryURI, realm).toString();
}
public String getPasswordUrl() {
- return Urls.accountPasswordPage(baseURI, realm).toString();
+ return Urls.accountPasswordPage(baseQueryURI, realm).toString();
}
public String getSocialUrl() {
- return Urls.accountSocialPage(baseURI, realm).toString();
+ return Urls.accountSocialPage(baseQueryURI, realm).toString();
}
public String getTotpUrl() {
- return Urls.accountTotpPage(baseURI, realm).toString();
+ return Urls.accountTotpPage(baseQueryURI, realm).toString();
}
public String getLogUrl() {
- return Urls.accountLogPage(baseURI, realm).toString();
+ return Urls.accountLogPage(baseQueryURI, realm).toString();
}
public String getTotpRemoveUrl() {
- return Urls.accountTotpRemove(baseURI, realm).toString();
+ return Urls.accountTotpRemove(baseQueryURI, realm).toString();
}
public String getLogoutUrl() {
- return Urls.accountLogout(baseURI, realm).toString();
+ return Urls.accountLogout(baseQueryURI, realm).toString();
}
public String getResourcesPath() {
diff --git a/services/src/main/java/org/keycloak/services/resources/QRCodeResource.java b/services/src/main/java/org/keycloak/services/resources/QRCodeResource.java
index b219613..3ae4b67 100755
--- a/services/src/main/java/org/keycloak/services/resources/QRCodeResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/QRCodeResource.java
@@ -20,7 +20,7 @@ import java.io.OutputStream;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
-@Path("/rest/qrcode")
+@Path("/qrcode")
public class QRCodeResource {
@GET
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 663eb6a..78f82b4 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
@@ -57,6 +57,7 @@ import org.keycloak.testsuite.rule.KeycloakRule;
import org.keycloak.testsuite.rule.KeycloakRule.KeycloakSetup;
import org.keycloak.testsuite.rule.WebResource;
import org.keycloak.testsuite.rule.WebRule;
+import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import java.util.Collections;
@@ -167,6 +168,19 @@ public class AccountTest {
Assert.assertTrue(appPage.isCurrent());
Assert.assertEquals(appPage.baseUrl + "?test", driver.getCurrentUrl());
+ driver.navigate().to(AccountUpdateProfilePage.PATH + "?referrer=test-app");
+ Assert.assertTrue(profilePage.isCurrent());
+
+ driver.findElement(By.linkText("Authenticator")).click();
+ Assert.assertTrue(totpPage.isCurrent());
+
+ driver.findElement(By.linkText("Account")).click();
+ Assert.assertTrue(profilePage.isCurrent());
+
+ profilePage.backToApplication();
+
+ Assert.assertTrue(appPage.isCurrent());
+
events.clear();
}
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
index 02d6f4b..cd454de 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/pages/AccountTotpPage.java
@@ -54,7 +54,7 @@ public class AccountTotpPage extends AbstractAccountPage {
}
public boolean isCurrent() {
- return driver.getTitle().contains("Account Management") && driver.getCurrentUrl().endsWith("/account/totp");
+ return driver.getTitle().contains("Account Management") && driver.getCurrentUrl().split("\\?")[0].endsWith("/account/totp");
}
public void open() {