You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2016/01/22 16:46:53 UTC

cxf git commit: Better support for reading TokenIntrospection with the tests (finally...)

Repository: cxf
Updated Branches:
  refs/heads/master 322753ed9 -> 17d4cedc2


Better support for reading TokenIntrospection with the tests (finally...)


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/17d4cedc
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/17d4cedc
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/17d4cedc

Branch: refs/heads/master
Commit: 17d4cedc2c4da612bcfb7bc00e4c3407f0f92614
Parents: 322753e
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Fri Jan 22 15:46:37 2016 +0000
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Fri Jan 22 15:46:37 2016 +0000

----------------------------------------------------------------------
 .../oauth2/provider/OAuthJSONProvider.java      | 96 ++++++++++----------
 .../oauth2/provider/OAuthJSONProviderTest.java  | 80 ++++++++++++++++
 2 files changed, 126 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/17d4cedc/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProvider.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProvider.java b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProvider.java
index 01b7d5a..1eb9916 100644
--- a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProvider.java
+++ b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProvider.java
@@ -26,7 +26,6 @@ import java.lang.reflect.Type;
 import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.LinkedHashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -41,6 +40,7 @@ import javax.ws.rs.ext.Provider;
 
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter;
 import org.apache.cxf.rs.security.oauth2.client.OAuthClientUtils;
 import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
 import org.apache.cxf.rs.security.oauth2.common.OAuthError;
@@ -205,70 +205,66 @@ public class OAuthJSONProvider implements MessageBodyWriter<Object>,
     public Object readFrom(Class<Object> cls, Type t, Annotation[] anns, 
                            MediaType mt, MultivaluedMap<String, String> headers, InputStream is) 
         throws IOException, WebApplicationException {
+        if (TokenIntrospection.class.isAssignableFrom(cls)) {
+            return fromMapToTokenIntrospection(is);
+        }
         Map<String, String> params = readJSONResponse(is);
         if (Map.class.isAssignableFrom(cls)) {
             return params;
-        } else if (ClientAccessToken.class.isAssignableFrom(cls)) {
+        } else {
             ClientAccessToken token = OAuthClientUtils.fromMapToClientToken(params);
             if (token == null) {
                 throw new WebApplicationException(500);
             } else {
                 return token;
             }
-        } else {
-            return fromMapToTokenIntrospection(params);
-        }
+        } 
         
     }
 
-    private Object fromMapToTokenIntrospection(Map<String, String> params) {
+    private Object fromMapToTokenIntrospection(InputStream is) throws IOException {
         TokenIntrospection resp = new TokenIntrospection();
-        resp.setActive(Boolean.valueOf(params.get("active")));
-        if (resp.isActive()) {
-            String clientId = params.get(OAuthConstants.CLIENT_ID);
-            if (clientId != null) {
-                resp.setClientId(clientId);
-            }
-            String username = params.get("username");
-            if (username != null) {
-                resp.setUsername(username);
-            }
-            String scope = params.get(OAuthConstants.SCOPE);
-            if (scope != null) {
-                resp.setScope(scope);
-            }
-            String tokenType = params.get(OAuthConstants.ACCESS_TOKEN_TYPE);
-            if (tokenType != null) {
-                resp.setTokenType(tokenType);
-            }
-            String aud = params.get("aud");
-            if (aud != null) {
-                if (aud.startsWith("[") && aud.endsWith("]")) {
-                    String[] auds = aud.substring(1, aud.length() - 1).split(",");
-                    List<String> list = new LinkedList<String>();
-                    for (String s : auds) {
-                        if (!s.trim().isEmpty()) {
-                            list.add(s.trim());
-                        }
-                    }
-                    resp.setAud(list);
-                } else {
-                    resp.setAud(Collections.singletonList(aud));
-                }
-            }
-            String iss = params.get("iss");
-            if (iss != null) {
-                resp.setIss(iss);
-            }
-            String iat = params.get("iat");
-            if (iat != null) {
-                resp.setIat(Long.valueOf(iat));
-            }
-            String exp = params.get("exp");
-            if (exp != null) {
-                resp.setExp(Long.valueOf(exp));
+        Map<String, Object> params = new JsonMapObjectReaderWriter().fromJson(is);
+        resp.setActive((Boolean)params.get("active"));
+        String clientId = (String)params.get(OAuthConstants.CLIENT_ID);
+        if (clientId != null) {
+            resp.setClientId(clientId);
+        }
+        String username = (String)params.get("username");
+        if (username != null) {
+            resp.setUsername(username);
+        }
+        String scope = (String)params.get(OAuthConstants.SCOPE);
+        if (scope != null) {
+            resp.setScope(scope);
+        }
+        String tokenType = (String)params.get(OAuthConstants.ACCESS_TOKEN_TYPE);
+        if (tokenType != null) {
+            resp.setTokenType(tokenType);
+        }
+        Object aud = params.get("aud");
+        if (aud != null) {
+            if (aud.getClass() == String.class) {
+                resp.setAud(Collections.singletonList((String)aud));
+            } else {
+                @SuppressWarnings("unchecked")
+                List<String> auds = (List<String>)aud;
+                resp.setAud(auds);
             }
         }
+        String iss = (String)params.get("iss");
+        if (iss != null) {
+            resp.setIss(iss);
+        }
+        Long iat = (Long)params.get("iat");
+        if (iat != null) {
+            resp.setIat(iat);
+        }
+        Long exp = (Long)params.get("exp");
+        if (exp != null) {
+            resp.setExp(exp);
+        }
+        
         return resp;
     }
 

http://git-wip-us.apache.org/repos/asf/cxf/blob/17d4cedc/rt/rs/security/oauth-parent/oauth2/src/test/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProviderTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/oauth-parent/oauth2/src/test/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProviderTest.java b/rt/rs/security/oauth-parent/oauth2/src/test/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProviderTest.java
index 7d04c7d..032e217 100644
--- a/rt/rs/security/oauth-parent/oauth2/src/test/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProviderTest.java
+++ b/rt/rs/security/oauth-parent/oauth2/src/test/java/org/apache/cxf/rs/security/oauth2/provider/OAuthJSONProviderTest.java
@@ -29,6 +29,7 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.jaxrs.impl.MetadataMap;
 import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
+import org.apache.cxf.rs.security.oauth2.common.TokenIntrospection;
 import org.apache.cxf.rs.security.oauth2.utils.OAuthConstants;
 
 import org.junit.Assert;
@@ -71,6 +72,85 @@ public class OAuthJSONProviderTest extends Assert {
                                 Collections.singletonMap("my_parameter", "http://abc"));
     }
     
+    
+    @Test
+    @SuppressWarnings({
+        "unchecked", "rawtypes"
+    })
+    public void testReadTokenIntrospection() throws Exception {
+        String response = 
+            "{\"active\":true,\"client_id\":\"WjcK94pnec7CyA\",\"username\":\"alice\",\"token_type\":\"Bearer\""
+            + ",\"scope\":\"a\",\"aud\":\"https://localhost:8082/service\","
+                + "\"iat\":1453472181,\"exp\":1453475781}";
+        OAuthJSONProvider provider = new OAuthJSONProvider();
+        TokenIntrospection t = (TokenIntrospection)provider.readFrom((Class)TokenIntrospection.class, 
+                                                                     TokenIntrospection.class, 
+                          new Annotation[]{}, 
+                          MediaType.APPLICATION_JSON_TYPE, 
+                          new MetadataMap<String, String>(), 
+                          new ByteArrayInputStream(response.getBytes()));
+        assertTrue(t.isActive());
+        assertEquals("WjcK94pnec7CyA", t.getClientId());
+        assertEquals("alice", t.getUsername());
+        assertEquals("a", t.getScope());
+        assertEquals(1, t.getAud().size());
+        assertEquals("https://localhost:8082/service", t.getAud().get(0));
+        assertEquals(1453472181L, t.getIat().longValue());
+        assertEquals(1453475781L, t.getExp().longValue());
+    }
+    @Test
+    @SuppressWarnings({
+        "unchecked", "rawtypes"
+    })
+    public void testReadTokenIntrospectionMultipleAuds() throws Exception {
+        String response = 
+            "{\"active\":true,\"client_id\":\"WjcK94pnec7CyA\",\"username\":\"alice\",\"token_type\":\"Bearer\""
+            + ",\"scope\":\"a\",\"aud\":[\"https://localhost:8082/service\",\"https://localhost:8083/service\"],"
+                + "\"iat\":1453472181,\"exp\":1453475781}";
+        OAuthJSONProvider provider = new OAuthJSONProvider();
+        TokenIntrospection t = (TokenIntrospection)provider.readFrom((Class)TokenIntrospection.class,
+                                                                     TokenIntrospection.class, 
+                          new Annotation[]{}, 
+                          MediaType.APPLICATION_JSON_TYPE, 
+                          new MetadataMap<String, String>(), 
+                          new ByteArrayInputStream(response.getBytes()));
+        assertTrue(t.isActive());
+        assertEquals("WjcK94pnec7CyA", t.getClientId());
+        assertEquals("alice", t.getUsername());
+        assertEquals("a", t.getScope());
+        assertEquals(2, t.getAud().size());
+        assertEquals("https://localhost:8082/service", t.getAud().get(0));
+        assertEquals("https://localhost:8083/service", t.getAud().get(1));
+        assertEquals(1453472181L, t.getIat().longValue());
+        assertEquals(1453475781L, t.getExp().longValue());
+    }
+    
+    @Test
+    @SuppressWarnings({
+        "unchecked", "rawtypes"
+    })
+    public void testReadTokenIntrospectionSingleAudAsArray() throws Exception {
+        String response = 
+            "{\"active\":false,\"client_id\":\"WjcK94pnec7CyA\",\"username\":\"alice\",\"token_type\":\"Bearer\""
+            + ",\"scope\":\"a\",\"aud\":[\"https://localhost:8082/service\"],"
+                + "\"iat\":1453472181,\"exp\":1453475781}";
+        OAuthJSONProvider provider = new OAuthJSONProvider();
+        TokenIntrospection t = (TokenIntrospection)provider.readFrom((Class)TokenIntrospection.class,
+                                                                     TokenIntrospection.class, 
+                          new Annotation[]{}, 
+                          MediaType.APPLICATION_JSON_TYPE, 
+                          new MetadataMap<String, String>(), 
+                          new ByteArrayInputStream(response.getBytes()));
+        assertFalse(t.isActive());
+        assertEquals("WjcK94pnec7CyA", t.getClientId());
+        assertEquals("alice", t.getUsername());
+        assertEquals("a", t.getScope());
+        assertEquals(1, t.getAud().size());
+        assertEquals("https://localhost:8082/service", t.getAud().get(0));
+        assertEquals(1453472181L, t.getIat().longValue());
+        assertEquals(1453475781L, t.getExp().longValue());
+    }
+    
     @SuppressWarnings({
         "unchecked", "rawtypes"
     })