Example usage for org.springframework.util LinkedMultiValueMap LinkedMultiValueMap

List of usage examples for org.springframework.util LinkedMultiValueMap LinkedMultiValueMap

Introduction

In this page you can find the example usage for org.springframework.util LinkedMultiValueMap LinkedMultiValueMap.

Prototype

public LinkedMultiValueMap() 

Source Link

Document

Create a new LinkedMultiValueMap that wraps a LinkedHashMap .

Usage

From source file:org.cloudfoundry.identity.uaa.integration.feature.TestClient.java

public String getOAuthAccessToken(String baseUrl, String username, String password, String grantType,
        String scope) {// ww w  .j  a va 2  s .co  m
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", getBasicAuthHeaderValue(username, password));

    MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<String, String>();
    postParameters.add("grant_type", grantType);
    postParameters.add("client_id", username);
    if (scope != null) {
        postParameters.add("scope", scope);
    }

    HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(
            postParameters, headers);

    ResponseEntity<Map> exchange = restTemplate.exchange(baseUrl + "/oauth/token", HttpMethod.POST,
            requestEntity, Map.class);

    return exchange.getBody().get("access_token").toString();
}

From source file:org.cloudfoundry.identity.uaa.integration.ImplicitTokenGrantIntegrationTests.java

@Test
public void authzViaJsonEndpointSucceedsWithCorrectCredentials() throws Exception {

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

    String credentials = String.format("{ \"username\":\"%s\", \"password\":\"%s\" }",
            testAccounts.getUserName(), testAccounts.getPassword());

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
    formData.add("credentials", credentials);
    ResponseEntity<Void> result = serverRunning.postForResponse(implicitUrl(), headers, formData);

    assertNotNull(result.getHeaders().getLocation());
    assertTrue(result.getHeaders().getLocation().toString().matches(REDIRECT_URL_PATTERN));

}

From source file:org.cloudfoundry.identity.uaa.integration.ImplicitTokenGrantIntegrationTests.java

@Test
public void authzViaJsonEndpointSucceedsWithAcceptForm() throws Exception {

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_FORM_URLENCODED));

    String credentials = String.format("{ \"username\":\"%s\", \"password\":\"%s\" }",
            testAccounts.getUserName(), testAccounts.getPassword());

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
    formData.add("credentials", credentials);
    ResponseEntity<Void> result = serverRunning.postForResponse(implicitUrl(), headers, formData);

    URI location = result.getHeaders().getLocation();
    assertNotNull(location);/* w  w w  . j a  va2 s  .c  o m*/
    assertTrue("Wrong location: " + location, location.toString().matches(REDIRECT_URL_PATTERN));

}

From source file:org.cloudfoundry.identity.uaa.integration.ImplicitTokenGrantIntegrationTests.java

@Test
public void authzWithIntermediateFormLoginSucceeds() throws Exception {

    BasicCookieStore cookies = new BasicCookieStore();

    ResponseEntity<Void> result = serverRunning.getForResponse(implicitUrl(), getHeaders(cookies));
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    String location = result.getHeaders().getLocation().toString();
    if (result.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : result.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(//ww w. j a  v  a 2s . co  m
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }

    ResponseEntity<String> response = serverRunning.getForString(location, getHeaders(cookies));
    if (response.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : response.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    // should be directed to the login screen...
    assertTrue(response.getBody().contains("/login.do"));
    assertTrue(response.getBody().contains("username"));
    assertTrue(response.getBody().contains("password"));

    location = "/login.do";

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    formData.add("username", testAccounts.getUserName());
    formData.add("password", testAccounts.getPassword());
    formData.add(CookieBasedCsrfTokenRepository.DEFAULT_CSRF_COOKIE_NAME,
            IntegrationTestUtils.extractCookieCsrf(response.getBody()));

    result = serverRunning.postForRedirect(location, getHeaders(cookies), formData);

    // System.err.println(result.getStatusCode());
    // System.err.println(result.getHeaders());

    assertNotNull(result.getHeaders().getLocation());
    assertTrue(result.getHeaders().getLocation().toString().matches(REDIRECT_URL_PATTERN));
}

From source file:org.cloudfoundry.identity.uaa.integration.OpenIdTokenAuthorizationWithApprovalIntegrationTests.java

@Test
public void testOpenIdTokenUsingLoginClientOauthTokenEndpoint() throws Exception {

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

    LinkedMultiValueMap<String, String> postBody = new LinkedMultiValueMap<>();
    postBody.add("client_id", "app");
    postBody.add("client_secret", "appclientsecret");
    postBody.add("redirect_uri", "https://uaa.cloudfoundry.com/redirect/cf");
    postBody.add("response_type", "token id_token");
    postBody.add("grant_type", "password");
    postBody.add("source", "login");
    postBody.add("user_id", user.getId());
    postBody.add("add_new", "false");

    ResponseEntity<Map> responseEntity = loginClient.exchange(serverRunning.getBaseUrl() + "/oauth/token",
            HttpMethod.POST, new HttpEntity<>(postBody, headers), Map.class);

    Assert.assertEquals(HttpStatus.OK, responseEntity.getStatusCode());

    Map<String, Object> params = responseEntity.getBody();

    Assert.assertTrue(params.get("jti") != null);
    Assert.assertEquals("bearer", params.get("token_type"));
    Assert.assertThat((Integer) params.get("expires_in"), Matchers.greaterThan(40000));

    String[] scopes = UriUtils.decode((String) params.get("scope"), "UTF-8").split(" ");
    Assert.assertThat(Arrays.asList(scopes), containsInAnyOrder("scim.userids", "password.write",
            "cloud_controller.write", "openid", "cloud_controller.read"));
}

From source file:org.cloudfoundry.identity.uaa.integration.OpenIdTokenAuthorizationWithApprovalIntegrationTests.java

private String doOpenIdHybridFlowIdTokenAndReturnCode(Set<String> responseTypes, String responseTypeMatcher)
        throws Exception {

    HttpHeaders headers = new HttpHeaders();
    // TODO: should be able to handle just TEXT_HTML
    headers.setAccept(Arrays.asList(MediaType.TEXT_HTML, MediaType.ALL));

    AuthorizationCodeResourceDetails resource = testAccounts.getDefaultAuthorizationCodeResource();

    StringBuilder responseType = new StringBuilder();
    Iterator<String> rTypes = responseTypes.iterator();
    while (rTypes.hasNext()) {
        String type = rTypes.next();
        responseType.append(type);//from   w w w  .j  ava  2 s .  c  o m
        if (rTypes.hasNext()) {
            responseType.append(" ");
        }
    }
    String state = new RandomValueStringGenerator().generate();
    String clientId = resource.getClientId();
    String redirectUri = resource.getPreEstablishedRedirectUri();
    String clientSecret = resource.getClientSecret();
    String uri = serverRunning.getUrl("/oauth/authorize?response_type={response_type}&"
            + "state={state}&client_id={client_id}&redirect_uri={redirect_uri}");

    ResponseEntity<Void> result = serverRunning.getForResponse(uri, headers, responseType, state, clientId,
            redirectUri);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    String location = UriUtils.decode(result.getHeaders().getLocation().toString(), "UTF-8");

    if (result.getHeaders().containsKey("Set-Cookie")) {
        String cookie = result.getHeaders().getFirst("Set-Cookie");
        headers.set("Cookie", cookie);
    }

    ResponseEntity<String> response = serverRunning.getForString(location, headers);
    // should be directed to the login screen...
    assertTrue(response.getBody().contains("/login.do"));
    assertTrue(response.getBody().contains("username"));
    assertTrue(response.getBody().contains("password"));

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
    formData.add("username", user.getUserName());
    formData.add("password", "secret");

    // Should be redirected to the original URL, but now authenticated
    result = serverRunning.postForResponse("/login.do", headers, formData);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());

    if (result.getHeaders().containsKey("Set-Cookie")) {
        String cookie = result.getHeaders().getFirst("Set-Cookie");
        headers.set("Cookie", cookie);
    }

    location = UriUtils.decode(result.getHeaders().getLocation().toString(), "UTF-8");
    response = serverRunning.getForString(location, headers);
    if (response.getStatusCode() == HttpStatus.OK) {
        // The grant access page should be returned
        assertTrue(response.getBody().contains("Application Authorization</h1>"));

        formData.clear();
        formData.add("user_oauth_approval", "true");
        result = serverRunning.postForResponse("/oauth/authorize", headers, formData);
        assertEquals(HttpStatus.FOUND, result.getStatusCode());
        location = UriUtils.decode(result.getHeaders().getLocation().toString(), "UTF-8");
    } else {
        // Token cached so no need for second approval
        assertEquals(HttpStatus.FOUND, response.getStatusCode());
        location = UriUtils.decode(response.getHeaders().getLocation().toString(), "UTF-8");
    }
    assertTrue("Wrong location: " + location,
            location.matches(resource.getPreEstablishedRedirectUri() + responseTypeMatcher.toString()));

    String code = location.split("code=")[1].split("&")[0];
    exchangeCodeForToken(clientId, redirectUri, clientSecret, code, formData);
    return code;
}

From source file:org.cloudfoundry.identity.uaa.integration.RefreshTokenSupportIntegrationTests.java

@Test
public void testTokenRefreshedCorrectFlow() throws Exception {
    BasicCookieStore cookies = new BasicCookieStore();

    AuthorizationCodeResourceDetails resource = testAccounts.getDefaultAuthorizationCodeResource();

    URI uri = serverRunning.buildUri("/oauth/authorize").queryParam("response_type", "code")
            .queryParam("state", "mystateid").queryParam("client_id", resource.getClientId())
            .queryParam("redirect_uri", resource.getPreEstablishedRedirectUri()).build();
    ResponseEntity<Void> result = serverRunning.getForResponse(uri.toString(), getHeaders(cookies));
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    String location = result.getHeaders().getLocation().toString();

    if (result.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : result.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(/*from   ww  w. ja va 2  s  .  c  o  m*/
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }

    ResponseEntity<String> response = serverRunning.getForString(location, getHeaders(cookies));
    if (response.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : response.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    // should be directed to the login screen...
    assertTrue(response.getBody().contains("/login.do"));
    assertTrue(response.getBody().contains("username"));
    assertTrue(response.getBody().contains("password"));

    MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
    formData.add("username", testAccounts.getUserName());
    formData.add("password", testAccounts.getPassword());
    formData.add(DEFAULT_CSRF_COOKIE_NAME, IntegrationTestUtils.extractCookieCsrf(response.getBody()));

    // Should be redirected to the original URL, but now authenticated
    result = serverRunning.postForResponse("/login.do", getHeaders(cookies), formData);
    cookies.clear();
    if (result.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : result.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    assertEquals(HttpStatus.FOUND, result.getStatusCode());

    response = serverRunning.getForString(result.getHeaders().getLocation().toString(), getHeaders(cookies));
    if (response.getHeaders().containsKey("Set-Cookie")) {
        for (String cookie : response.getHeaders().get("Set-Cookie")) {
            int nameLength = cookie.indexOf('=');
            cookies.addCookie(
                    new BasicClientCookie(cookie.substring(0, nameLength), cookie.substring(nameLength + 1)));
        }
    }
    if (response.getStatusCode() == HttpStatus.OK) {
        // The grant access page should be returned
        assertTrue(response.getBody().contains("<h1>Application Authorization</h1>"));

        formData.clear();
        formData.add(USER_OAUTH_APPROVAL, "true");
        formData.add(DEFAULT_CSRF_COOKIE_NAME, IntegrationTestUtils.extractCookieCsrf(response.getBody()));
        result = serverRunning.postForResponse("/oauth/authorize", getHeaders(cookies), formData);
        assertEquals(HttpStatus.FOUND, result.getStatusCode());
        location = result.getHeaders().getLocation().toString();
    } else {
        // Token cached so no need for second approval
        assertEquals(HttpStatus.FOUND, response.getStatusCode());
        location = response.getHeaders().getLocation().toString();
    }
    assertTrue("Wrong location: " + location,
            location.matches(resource.getPreEstablishedRedirectUri() + ".*code=.+"));

    formData.clear();
    formData.add("client_id", resource.getClientId());
    formData.add("redirect_uri", resource.getPreEstablishedRedirectUri());
    formData.add("grant_type", GRANT_TYPE_AUTHORIZATION_CODE);
    formData.add("code", location.split("code=")[1].split("&")[0]);
    HttpHeaders tokenHeaders = new HttpHeaders();
    tokenHeaders.set("Authorization",
            testAccounts.getAuthorizationHeader(resource.getClientId(), resource.getClientSecret()));
    tokenHeaders.set("Cache-Control", "no-store");
    @SuppressWarnings("rawtypes")
    ResponseEntity<Map> tokenResponse = serverRunning.postForMap("/oauth/token", formData, tokenHeaders);
    assertEquals(HttpStatus.OK, tokenResponse.getStatusCode());

    @SuppressWarnings("unchecked")
    OAuth2AccessToken accessToken = DefaultOAuth2AccessToken.valueOf(tokenResponse.getBody());

    // get the refresh token
    formData = new LinkedMultiValueMap<String, String>();
    formData.add("grant_type", "refresh_token");
    formData.add("refresh_token", accessToken.getRefreshToken().getValue());
    tokenResponse = serverRunning.postForMap("/oauth/token", formData, tokenHeaders);
    assertEquals(HttpStatus.OK, tokenResponse.getStatusCode());
    assertEquals("no-store", tokenResponse.getHeaders().getFirst("Cache-Control"));
    @SuppressWarnings("unchecked")
    OAuth2AccessToken newAccessToken = DefaultOAuth2AccessToken.valueOf(tokenResponse.getBody());
    try {
        JwtHelper.decode(newAccessToken.getValue());
    } catch (IllegalArgumentException e) {
        fail("Refreshed token was not a JWT");
    }
    assertFalse("New access token should be different to the old one.",
            newAccessToken.getValue().equals(accessToken.getValue()));

}

From source file:org.cloudfoundry.identity.uaa.integration.RefreshTokenSupportIntegrationTests.java

@Test
public void testRefreshTokenWithNonExistingZone() {
    LinkedMultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    formData.add("grant_type", "refresh_token");
    formData.add("refresh_token", "dummyrefreshtoken-r");
    ResponseEntity<Map> tokenResponse = serverRunning.postForMap(
            serverRunning.getAccessTokenUri().replace("localhost", "testzonedoesnotexist.localhost"), formData,
            new HttpHeaders());
    assertEquals(HttpStatus.NOT_FOUND, tokenResponse.getStatusCode());
}

From source file:org.cloudfoundry.identity.uaa.integration.RefreshTokenSupportIntegrationTests.java

@Test
public void testRefreshTokenWithInactiveZone() {
    RestTemplate identityClient = IntegrationTestUtils.getClientCredentialsTemplate(
            IntegrationTestUtils.getClientCredentialsResource(serverRunning.getBaseUrl(),
                    new String[] { "zones.write", "zones.read", "scim.zones" }, "identity", "identitysecret"));
    IntegrationTestUtils.createInactiveIdentityZone(identityClient, "http://localhost:8080/uaa");

    LinkedMultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
    formData.add("grant_type", "refresh_token");
    formData.add("refresh_token", "dummyrefreshtoken-r");
    ResponseEntity<Map> tokenResponse = serverRunning.postForMap(
            serverRunning.getAccessTokenUri().replace("localhost", "testzoneinactive.localhost"), formData,
            new HttpHeaders());
    assertEquals(HttpStatus.NOT_FOUND, tokenResponse.getStatusCode());
}

From source file:org.cloudfoundry.identity.uaa.integration.RemoteAuthenticationEndpointTests.java

private String getScimReadBearerToken() {
    HttpHeaders accessTokenHeaders = new HttpHeaders();
    String basicDigestHeaderValue = "Basic " + new String(Base64.encodeBase64(
            (testAccounts.getAdminClientId() + ":" + testAccounts.getAdminClientSecret()).getBytes()));
    accessTokenHeaders.add("Authorization", basicDigestHeaderValue);

    LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>();
    params.add("grant_type", "client_credentials");
    params.add("client_id", testAccounts.getAdminClientId());
    params.add("scope", "scim.read");
    ResponseEntity<Map> tokenResponse = serverRunning.postForMap(serverRunning.getAccessTokenUri(), params,
            accessTokenHeaders);//w  w w  .ja  v  a  2  s.com
    return (String) tokenResponse.getBody().get("access_token");
}