You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by rb...@apache.org on 2011/10/20 01:51:42 UTC

svn commit: r1186569 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/admin/ test/java/org/apache/shindig/gadgets/admin/

Author: rbaxter85
Date: Wed Oct 19 23:51:42 2011
New Revision: 1186569

URL: http://svn.apache.org/viewvc?rev=1186569&view=rev
Log:
SHINDIG-1643
Gadget Admin Code Does Not Take Into Account Ports In Gadget URLs

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/admin/ContainerAdminData.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/BasicGadgetAdminStoreTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/ContainerAdminDataTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/admin/ContainerAdminData.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/admin/ContainerAdminData.java?rev=1186569&r1=1186568&r2=1186569&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/admin/ContainerAdminData.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/admin/ContainerAdminData.java Wed Oct 19 23:51:42 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.shindig.gadgets.admin;
 
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Map;
 import java.util.Set;
 
@@ -30,6 +32,12 @@ import com.google.common.base.Objects;
  * @version $Id: $
  */
 public class ContainerAdminData {
+  private static final String STAR = "*";
+  private static final String HTTP = "http";
+  private static final String HTTPS = "https";
+  private static final int HTTP_PORT = 80;
+  private static final int HTTPS_PORT = 443;
+
   private Map<String, GadgetAdminData> gadgetAdminMap;
 
   /**
@@ -139,17 +147,53 @@ public class ContainerAdminData {
    */
   private String getGadgetAdminDataKey(String gadgetUrl) {
     Set<String> gadgetUrls = this.gadgetAdminMap.keySet();
+    String normalizedGadgetUrl = createUrlWithPort(gadgetUrl);
     String key = null;
     for (String url : gadgetUrls) {
-      if (url.endsWith("*") && gadgetUrl.startsWith(url.substring(0, url.length() - 1))) {
-        if (key == null || (key != null && key.length() < url.length())) {
+      String normalizedUrl = createUrlWithPort(url);
+      if (normalizedUrl.endsWith(STAR)
+              && normalizedGadgetUrl.startsWith(normalizedUrl.substring(0,
+                      normalizedUrl.length() - 1))) {
+        if (key == null || (key != null && key.length() < normalizedUrl.length())) {
           key = url;
         }
+      } else if (normalizedUrl.equals(normalizedGadgetUrl)) {
+        key = url;
+        break;
       }
     }
     return key;
   }
 
+  /**
+   * Creates a new URL with the default port if one is not already there.
+   *
+   * @param gadgetUrl
+   *          The gadget URL to add the port to.
+   * @return A new URL with the default port.
+   */
+  private String createUrlWithPort(String gadgetUrl) {
+    try {
+      URL origUrl = new URL(gadgetUrl);
+      URL urlWithPort = null;
+      String origHost = origUrl.getHost();
+      if (origUrl.getPort() <= 0 && origHost != null && origHost.length() != 0
+              && !STAR.equals(origHost)) {
+        if (origUrl.getProtocol().equalsIgnoreCase(HTTP)) {
+          urlWithPort = new URL(origUrl.getProtocol(), origUrl.getHost(), HTTP_PORT, origUrl.getFile());
+        }
+        else if (origUrl.getProtocol().equalsIgnoreCase(HTTPS)) {
+          urlWithPort = new URL(origUrl.getProtocol(), origUrl.getHost(), HTTPS_PORT, origUrl.getFile());
+        }
+        return urlWithPort == null ? origUrl.toString() : urlWithPort.toString();
+      } else {
+        return origUrl.toString();
+      }
+    } catch (MalformedURLException e) {
+      return gadgetUrl;
+    }
+  }
+
   @Override
   public boolean equals(Object obj) {
     if (obj instanceof ContainerAdminData) {

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/BasicGadgetAdminStoreTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/BasicGadgetAdminStoreTest.java?rev=1186569&r1=1186568&r2=1186569&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/BasicGadgetAdminStoreTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/BasicGadgetAdminStoreTest.java Wed Oct 19 23:51:42 2011
@@ -53,22 +53,23 @@ import com.google.common.collect.Sets;
 public class BasicGadgetAdminStoreTest extends EasyMockTestCase {
 
   private static final String SAMPLE_STORE = "{" + "\"default\" : {" + "\"gadgets\" : {"
-          + "\"http://www.google.com/ig/modules/horoscope.xml\" : {"
+          + "\"http://www.google.com:80/ig/modules/horoscope.xml\" : {"
           + "\"features\" : [\"views\", \"tabs\", \"setprefs\", \"dynamic-height\", \"settitle\"],"
           + "\"type\" : \"whitelist\"" + "},"
           + "\"http://www.labpixies.com/campaigns/todo/todo.xml\" : {"
           + "\"features\" : [\"setprefs\", \"dynamic-height\", \"views\"],"
           + "\"type\" : \"blacklist\"" + "},"
-          + "\"http://foo.com/*\" : {"
+          + "\"https://foo.com/*\" : {"
           + "\"features\" : []" + "},"
           + "\"http://*\" : {"
           + "\"features\" : []," + "\"type\" : \"whitelist\"" + "},"+ "}" + "}" + "}";
 
   private static final String DEFAULT = "default";
   private static final String HOROSCOPE = "http://www.google.com/ig/modules/horoscope.xml";
+  private static final String HOROSCOPE_WITH_PORT = "http://www.google.com:80/ig/modules/horoscope.xml";
   private static final String TODO = "http://www.labpixies.com/campaigns/todo/todo.xml";
   private static final String TEST_GADGET = "http://www.example.com/gadget.xml";
-  private static final String FOO_GADGET = "http://foo.com/*";
+  private static final String FOO_GADGET = "https://foo.com/*";
   private static final String HTTP_GADGET = "http://*";
   private Set<String> HOROSCOPE_FEATURES = Sets.newHashSet("views", "tabs", "setprefs",
           "dynamic-height", "settitle", "core");
@@ -118,7 +119,7 @@ public class BasicGadgetAdminStoreTest e
 
     defaultAdminData = new ContainerAdminData();
     defaultAdminData.addGadgetAdminData(TODO, todoAdminData);
-    defaultAdminData.addGadgetAdminData(HOROSCOPE, horoscopeAdminData);
+    defaultAdminData.addGadgetAdminData(HOROSCOPE_WITH_PORT, horoscopeAdminData);
     defaultAdminData.addGadgetAdminData(FOO_GADGET, fooAdminData);
     defaultAdminData.addGadgetAdminData(HTTP_GADGET, httpAdminData);
 
@@ -182,7 +183,8 @@ public class BasicGadgetAdminStoreTest e
   public void testGetGadgetAdminData() {
     assertEquals(horoscopeAdminData, enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE));
     assertEquals(todoAdminData, enabledStore.getGadgetAdminData(DEFAULT, TODO));
-    assertEquals(fooAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://foo.com/bar/gadget.xml"));
+    assertEquals(fooAdminData, enabledStore.getGadgetAdminData(DEFAULT, "https://foo.com/bar/gadget.xml"));
+    assertEquals(fooAdminData, enabledStore.getGadgetAdminData(DEFAULT, "https://foo.com:443/bar/gadget.xml"));
     assertNull(enabledStore.getGadgetAdminData("my_container", HOROSCOPE));
     assertEquals(httpAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml"));
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/ContainerAdminDataTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/ContainerAdminDataTest.java?rev=1186569&r1=1186568&r2=1186569&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/ContainerAdminDataTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/admin/ContainerAdminDataTest.java Wed Oct 19 23:51:42 2011
@@ -48,8 +48,11 @@ public class ContainerAdminDataTest {
   private static final String EE = "embedded-experiences";
   private static final String SELECTION = "selection";
   private static final String GADGET_URL_1 = "http://sample.com/gadget1.xml";
+  private static final String GADGET_URL_1_WITH_PORT = "http://sample.com:80/gadget1.xml";
   private static final String GADGET_URL_2 = "http://sample.com/gadget2.xml";
   private static final String GADGET_URL_3 = "http://example.com/*";
+  private static final String GADGET_URL_4 = "https://sample.com/gadget1.xml";
+  private static final String GADGET_URL_4_WITH_PORT = "https://sample.com:443/gadget1.xml";
 
   private Set<String> whitelist;
   private Set<String> blacklist;
@@ -78,6 +81,7 @@ public class ContainerAdminDataTest {
     gadgetMap.put(GADGET_URL_2, blacklistData);
     gadgetMap.put(GADGET_URL_3, new GadgetAdminData());
     gadgetMap.put("http://*", blacklistData);
+    gadgetMap.put(GADGET_URL_4_WITH_PORT, whitelistData);
 
     validData = new ContainerAdminData(gadgetMap);
     emptyData = new ContainerAdminData(new HashMap<String, GadgetAdminData>());
@@ -104,12 +108,17 @@ public class ContainerAdminDataTest {
   @Test
   public void testGetGadgetAdminData() {
     assertEquals(whitelistData, validData.getGadgetAdminData(GADGET_URL_1));
+    assertEquals(whitelistData, validData.getGadgetAdminData(GADGET_URL_1_WITH_PORT));
     assertEquals(blacklistData, validData.getGadgetAdminData(GADGET_URL_2));
     assertEquals(new GadgetAdminData(),
             validData.getGadgetAdminData("http://example.com/gadgets/gadget.xml"));
     assertEquals(new GadgetAdminData(),
             validData.getGadgetAdminData("http://example.com/gadget.xml"));
     assertEquals(blacklistData, validData.getGadgetAdminData("http://foo.com/gadget.xml"));
+    assertEquals(blacklistData, validData.getGadgetAdminData("http://foo.com:80/gadget.xml"));
+    assertNull(validData.getGadgetAdminData("https://foo.com:80/gadget.xml"));
+    assertEquals(whitelistData, validData.getGadgetAdminData(GADGET_URL_4));
+    assertEquals(whitelistData, validData.getGadgetAdminData(GADGET_URL_4_WITH_PORT));
     assertNull(emptyData.getGadgetAdminData(GADGET_URL_1));
     assertNull(nullData.getGadgetAdminData(GADGET_URL_1));
     assertNull(defaultData.getGadgetAdminData(GADGET_URL_1));
@@ -181,8 +190,15 @@ public class ContainerAdminDataTest {
   public void testHasGadgetAdminData() {
     assertTrue(validData.hasGadgetAdminData(GADGET_URL_1));
     assertTrue(validData.hasGadgetAdminData(GADGET_URL_2));
+    assertTrue(validData.hasGadgetAdminData(GADGET_URL_1_WITH_PORT));
     assertTrue(validData.hasGadgetAdminData("http://example.com/gadget3.xml"));
+    assertTrue(validData.hasGadgetAdminData("http://example.com:80/gadget3.xml"));
     assertFalse(validData.hasGadgetAdminData("https://example.com/gadget3.xml"));
+    assertTrue(validData.hasGadgetAdminData(GADGET_URL_4));
+    assertTrue(validData.hasGadgetAdminData(GADGET_URL_4_WITH_PORT));
+    assertTrue(validData.hasGadgetAdminData("http://foo.com/gadget.xml"));
+    assertTrue(validData.hasGadgetAdminData("http://foo.com:80/gadget.xml"));
+    assertFalse(validData.hasGadgetAdminData("https://foo.com/gadget.xml"));
     assertFalse(nullData.hasGadgetAdminData(GADGET_URL_1));
     assertFalse(emptyData.hasGadgetAdminData(GADGET_URL_2));
     assertFalse(defaultData.hasGadgetAdminData(GADGET_URL_2));