Author: johnh
Date: Tue Jan 15 16:50:11 2008
New Revision: 612327

URL: http://svn.apache.org/viewvc?rev=612327&view=rev
Log:
  Check blacklist before loading a gadget spec. Throw a GadgetException
  out of the SpecLoadTask if the gadget to be loaded is on the blacklist.
  The blacklist is an optional member of GadgetServer.

  Patch contributed by: [EMAIL PROTECTED]; last vestige of code moved
  from Google repository to svn!


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetException.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetException.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetException.java?rev=612327&r1=612326&r2=612327&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetException.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetException.java
 Tue Jan 15 16:50:11 2008
@@ -46,7 +46,10 @@
     MISSING_SPEC_CACHE,
 
     // Caja error
-    MALFORMED_FOR_SAFE_INLINING
+    MALFORMED_FOR_SAFE_INLINING,
+
+    // Blacklisting
+    BLACKLISTED_GADGET
   }
 
   private final Code code;

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=612327&r1=612326&r2=612327&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 Tue Jan 15 16:50:11 2008
@@ -36,6 +36,7 @@
   private GadgetDataCache<GadgetSpec> specCache;
   private GadgetDataCache<MessageBundle> messageBundleCache;
   private RemoteContentFetcher fetcher;
+  private GadgetBlacklist gadgetBlacklist;
 
   private static final Logger logger
       = Logger.getLogger("org.apache.shindig.gadgets");
@@ -60,6 +61,10 @@
     this.registry = registry;
   }
 
+  public void setGadgetBlacklist(GadgetBlacklist gadgetBlacklist) {
+    this.gadgetBlacklist = gadgetBlacklist;
+  }
+
   /**
    * Process a single gadget.
    * @param gadgetId
@@ -104,8 +109,8 @@
     WorkflowDependency urlFetchDep =
         new WorkflowDependency(WorkflowDependency.Type.CORE, URL_FETCH);
     wc.jobsToRun.addJob(
-        new SpecLoadTask(fetcher, gadgetId, userPrefs, specCache), urlFetchDep,
-        cacheLoadDep);
+        new SpecLoadTask(fetcher, gadgetId, userPrefs, specCache, 
gadgetBlacklist),
+        urlFetchDep, cacheLoadDep);
 
     WorkflowDependency enqueueFeatDep =
         new WorkflowDependency(WorkflowDependency.Type.CORE, ENQUEUE_FEATURES);
@@ -290,18 +295,27 @@
     private final GadgetView.ID gadgetId;
     private final GadgetDataCache<GadgetSpec> specCache;
     private final UserPrefs prefs;
+    private final GadgetBlacklist blacklist;
 
     private SpecLoadTask(RemoteContentFetcher fetcher, GadgetView.ID gadgetId,
                          UserPrefs prefs,
-                         GadgetDataCache<GadgetSpec> specCache) {
+                         GadgetDataCache<GadgetSpec> specCache,
+                         GadgetBlacklist blacklist) {
       this.fetcher = fetcher;
       this.gadgetId = gadgetId;
       this.specCache = specCache;
       this.prefs = prefs;
+      this.blacklist = blacklist;
     }
 
     @Override
     public void run(WorkflowContext wc) throws GadgetException {
+      if (blacklist != null && blacklist.isBlacklisted(gadgetId.getURI())) {
+        throw new GadgetException(
+            GadgetException.Code.BLACKLISTED_GADGET,
+            "Gadget blacklisted at: " + gadgetId.getURI());
+      }
+
       if (wc.gadget != null) {
         // Already retrieved: do nothing.
         return;

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java?rev=612327&r1=612326&r2=612327&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
 Tue Jan 15 16:50:11 2008
@@ -84,4 +84,24 @@
     assertEquals("Goodbye, World!", gadget.getContentData());
     verify();
   }
+
+  public void testBlacklistedGadget() throws Exception {
+    GadgetBlacklist blacklist = mock(GadgetBlacklist.class);
+    gadgetServer.setGadgetBlacklist(blacklist);
+
+    expect(specCache.get(eq(DATETIME_URI_STRING))).andReturn(null);
+    expect(blacklist.isBlacklisted(eq(DATETIME_URI))).andReturn(true);
+    replay();
+
+    try {
+      gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, EN_US_LOCALE,
+                                 RenderingContext.GADGET);
+      fail();
+    } catch (GadgetServer.GadgetProcessException ex) {
+      assertEquals(1, ex.getComponents().size());
+      assertEquals(GadgetException.Code.BLACKLISTED_GADGET,
+                   ex.getComponents().get(0).getCode());
+    }
+    verify();
+  }
 }


Reply via email to