package com.github.hburgmeier.jerseyoauth2.testsuite.rs2; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; import java.util.LinkedHashMap; import java.util.Map; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Response; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.filter.HttpBasicAuthFilter; import org.glassfish.jersey.client.oauth2.ClientIdentifier; import org.glassfish.jersey.client.oauth2.OAuth2ClientSupport; import org.glassfish.jersey.client.oauth2.OAuth2CodeGrantFlow; import org.glassfish.jersey.client.oauth2.OAuth2CodeGrantFlow.Builder; import org.glassfish.jersey.client.oauth2.TokenResult; import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.jackson.JacksonFeature; import org.junit.Before; import org.junit.Test; import com.github.hburgmeier.jerseyoauth2.testsuite.base.BaseTest; import com.github.hburgmeier.jerseyoauth2.testsuite.base.SampleEntity; public class Jersey2Test extends BaseTest { protected Client client; @Before public void setUp() { super.setUp(); ClientConfig clientConfig = new ClientConfig(); clientConfig.property(ClientProperties.FOLLOW_REDIRECTS, false); client = ClientBuilder.newClient(clientConfig); client.register(new HttpBasicAuthFilter("manager", "test")); client.register(LoggingFilter.class); authClient.authorizeClient(clientEntity, "test1 test2"); } @Test public void simpleResourceTest() throws UnsupportedEncodingException { ClientIdentifier cliendId = new ClientIdentifier(clientEntity.getClientId(), clientEntity.getClientSecret()); Builder<?> flowBuilder = OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(cliendId, "http://localhost:9998/testsuite/oauth2/auth", "http://localhost:9998/testsuite/oauth2/accessToken"); OAuth2CodeGrantFlow flow = flowBuilder.scope("test1 test2").redirectUri("http://localhost:9998/testsuite").build(); String authUrl = flow.start(); Map<String, String> map = retrieveCode(authUrl); String code = map.get("code"); String state = map.get("state"); TokenResult tokenResult = flow.finish(code, state); client = ClientBuilder.newClient(); client.register(LoggingFilter.class); client.register(OAuth2ClientSupport.feature(tokenResult.getAccessToken())); client.register(JacksonFeature.class); Invocation.Builder builder = client.target("http://localhost:9998/testsuite/rest/sample/1").request(); Response response = builder.get(); assertEquals(200, response.getStatus()); SampleEntity entity = response.readEntity(SampleEntity.class); assertNotNull(entity); } protected Map<String, String> retrieveCode(String authUrl) throws UnsupportedEncodingException { Invocation.Builder request = client.target(authUrl).request(); Response response = request.get(); URI location = response.getLocation(); return splitQuery(location.getQuery()); } protected static Map<String, String> splitQuery(String query) throws UnsupportedEncodingException { Map<String, String> query_pairs = new LinkedHashMap<String, String>(); String[] pairs = query.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); } return query_pairs; } }