KEYCLOAK-3017 Location header not present in responses from admin endpoints

This commit is contained in:
mhajas 2016-11-21 14:22:28 +01:00
parent 1ae60ef8a7
commit a347cb591d
4 changed files with 54 additions and 1 deletions

View file

@ -19,7 +19,7 @@
],
"realmRoles": [ "user" ],
"clientRoles": {
"realm-management" : [ "view-realm" ],
"realm-management" : [ "view-realm", "manage-users" ],
"account": ["view-profile", "manage-account"]
}
},{

View file

@ -48,6 +48,7 @@
<button onclick="addToTimeSkew()">timeSkew offset</button>
<button onclick="refreshTimeSkew()">refresh timeSkew</button>
<button onclick="sendBearerToKeycloak()">Bearer to keycloak</button>
<button onclick="createUser()">Create user</button>
<select id="flowSelect">
@ -240,6 +241,35 @@ TimeSkew: <div id="timeSkew"></div>
req.send();
}
function createUser() {
var user = JSON.parse('{"emailVerified" : false, "enabled" : true, "username": "mhajas", "firstName" :"First", "lastName":"Last","email":"email@redhat.com", "attributes": {}}');
var url = "http://localhost:8180/auth/admin/realms/example/users";
if (window.location.href.indexOf("8543") > -1) {
url = url.replace("8180","8543");
url = url.replace("http","https");
}
var req = new XMLHttpRequest();
req.open("POST", url, true);
req.setRequestHeader('Accept', 'application/json');
req.setRequestHeader('Authorization', 'Bearer ' + keycloak.token);
req.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
req.onreadystatechange = function () {
if (req.readyState == 4) {
if (req.status == 201) {
output("Response headers: " + req.getAllResponseHeaders().toLowerCase());
} else if (req.status == 403) {
output('Forbidden');
} else if (req.status == 401) {
output('Unauthorized');
}
}
};
req.send(JSON.stringify(user));
}
var keycloak;
function keycloakInit() {

View file

@ -81,6 +81,8 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
private WebElement certRequestButton;
@FindBy(xpath = "//button[text() = 'refresh timeSkew']")
private WebElement refreshTimeSkewButton;
@FindBy(xpath = "//button[text() = 'Create user']")
private WebElement createUserButton;
@FindBy(id = "timeSkew")
private WebElement timeSkewValue;
@ -181,6 +183,10 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
refreshTimeSkewButton.click();
}
public void createUserRequest() {
createUserButton.click();
}
public void sendCertRequest() {
certRequestButton.click();
}

View file

@ -22,8 +22,10 @@ import org.jboss.arquillian.graphene.page.Page;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.keycloak.admin.client.resource.ClientResource;
import org.keycloak.admin.client.resource.UsersResource;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
import org.keycloak.testsuite.adapter.page.JSConsoleTestApp;
import org.keycloak.testsuite.adapter.page.JSDatabaseTestApp;
@ -412,6 +414,21 @@ public abstract class AbstractJSConsoleExampleAdapterTest extends AbstractExampl
assertTrue("TimeSkew was: " + timeSkew + ", but should be ~-40", timeSkew + 40 <= TIME_SKEW_TOLERANCE);
}
@Test
public void testLocationHeaderInResponse() {
logInAndInit("standard");
waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Authenticated)");
jsConsoleTestAppPage.createUserRequest();
UsersResource userResource = testRealmResource().users();
List<UserRepresentation> users = userResource.search("mhajas", 0, 1);
assertEquals("There should be created user mhajas", 1, users.size());
waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text()
.contains("location: " + authServerContextRootPage.toString() + "/auth/admin/realms/" + EXAMPLE + "/users/" + users.get(0).getId());
}
private void setImplicitFlowForClient() {
ClientResource clientResource = ApiUtil.findClientResourceByClientId(testRealmResource(), "js-console");
ClientRepresentation client = clientResource.toRepresentation();