public boolean checkFeatureAdminInfo(Gadget gadget) { String container = getSafeContainerFromGadget(gadget); String gadgetUrl = getSafeGadgetUrlFromGadget(gadget); if (container == null || gadgetUrl == null) { return false; if (!isFeatureAdminEnabled(container)) { return true; try { FeatureRegistry featureRegistry = featureRegistryProvider.get(context.getRepository()); if (!hasGadgetAdminData(container, gadgetUrl)) { return false; FeatureAdminData featureAdminData = this.getGadgetAdminData(container, gadgetUrl) .getFeatureAdminData(); List<String> gadgetFeatures = featureRegistry.getFeatures(getRequiredGadgetFeatures(gadget)); return areAllFeaturesAllowed(Sets.immutableSet(features), gadgetFeatures, featureAdminData); } catch (GadgetException e) {
private void loadStore() { try { String gadgetAdminString = ResourceLoader.getContent(GADGET_ADMIN_CONFIG); this.store.init(gadgetAdminString); } catch (Throwable t) { if (LOG.isLoggable(Level.WARNING)) { LOG.logp(Level.WARNING, classname, "loadStore", MessageKeys.FAILED_TO_INIT, new Object[] { GADGET_ADMIN_CONFIG }); LOG.log(Level.WARNING, "", t); } } }
@Test public void testSetContainerAdminData() { assertEquals(defaultAdminData, enabledStore.getContainerAdminData(DEFAULT)); defaultAdminData.removeGadgetAdminData(TODO); enabledStore.setContainerAdminData(DEFAULT, defaultAdminData); assertEquals(defaultAdminData, enabledStore.getContainerAdminData(DEFAULT)); assertNull(enabledStore.getContainerAdminData("my_container")); enabledStore.setContainerAdminData("my_container", defaultAdminData); assertEquals(defaultAdminData, enabledStore.getContainerAdminData("my_container")); enabledStore.setContainerAdminData(null, defaultAdminData); assertNull(enabledStore.getContainerAdminData(null)); enabledStore.setContainerAdminData("my_container_2", null); assertNotNull(enabledStore.getContainerAdminData("my_container_2")); }
public Set<String> getAdditionalRpcServiceIds(Gadget gadget) { GadgetAdminData gadgetData = this.getGadgetAdminData(getSafeContainerFromGadget(gadget), getSafeGadgetUrlFromGadget(gadget)); Set<String> ids = Sets.newHashSet(); if(gadgetData != null) { ids.addAll(gadgetData.getRpcAdminData().getAdditionalRpcServiceIds()); } return ids; } }
public boolean isAllowedFeature(Feature feature, Gadget gadget) { String container = getSafeContainerFromGadget(gadget); String gadgetUrl = getSafeGadgetUrlFromGadget(gadget); if (container == null || gadgetUrl == null) { return false; } if (!isFeatureAdminEnabled(container)) { return true; } if (!hasGadgetAdminData(container, gadgetUrl)) { // If feature administration is not enabled assume the feature is allowed return false; } GadgetAdminData gadgetAdminData = getGadgetAdminData(container, gadgetUrl); FeatureAdminData featureAdminData = gadgetAdminData.getFeatureAdminData(); String featureName = feature.getName(); switch (featureAdminData.getType()) { case BLACKLIST: return !featureAdminData.getFeatures().contains(featureName); case WHITELIST: default: return featureAdminData.getFeatures().contains(featureName); } }
@Test public void testWhitelistAll() throws Exception { Set<String> features = Sets.newHashSet(); List<String> featuresAndDeps = Lists.newArrayList(); List<String> allGadgetFeatures = Lists.newArrayList("dep1", "dep2", "foo1", "foo2", "foo3"); FeatureAdminData data = new FeatureAdminData(features, Type.BLACKLIST); List<String> gadgetRequiredFeatureNames = Lists.newArrayList("foo1", "foo2", "foo3"); List<Feature> allFeatures = Lists.newArrayList( createMockFeature(gadgetRequiredFeatureNames.get(0), true), createMockFeature(gadgetRequiredFeatureNames.get(1), true), createMockFeature(gadgetRequiredFeatureNames.get(2), true)); enabledStore.getContainerAdminData(DEFAULT).addGadgetAdminData(TEST_GADGET, new GadgetAdminData(data, null)); mockRegistryForFeatureAdmin(features, featuresAndDeps, allGadgetFeatures, gadgetRequiredFeatureNames); mockGadget(allFeatures); replay(); assertTrue(enabledStore.checkFeatureAdminInfo(mockGadget)); assertTrue(disabledStore.checkFeatureAdminInfo(mockGadget)); verify(); }
@Test public void testSetGadgetAdminData() { assertEquals(horoscopeAdminData, enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE)); horoscopeAdminData.getFeatureAdminData().addFeature("foo_feature"); enabledStore.setGadgetAdminData(DEFAULT, HOROSCOPE, horoscopeAdminData); assertTrue(enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE).getFeatureAdminData() .getFeatures().contains("foo_feature")); assertEquals(httpAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml")); enabledStore.setGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml", todoAdminData); assertEquals(todoAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml")); enabledStore.setGadgetAdminData(DEFAULT, "http://example.com/gadget1.xml", null); assertNotNull(enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget1.xml")); enabledStore.setGadgetAdminData(DEFAULT, null, horoscopeAdminData); assertNull(enabledStore.getGadgetAdminData(DEFAULT, null)); }
@Before public void setUp() throws Exception { featureRegistryProvider = new FeatureRegistryProvider() { public FeatureRegistry get(String repository) throws GadgetException { return mockRegistry; } }; rpcAdminData = new RpcAdminData(Sets.newHashSet("rpc1", "rpc2")); enabledStore = new BasicGadgetAdminStore(featureRegistryProvider, enabledConfig, new ServerAdminData()); enabledStore.init(SAMPLE_STORE); disabledStore = new BasicGadgetAdminStore(featureRegistryProvider, disabledConfig, new ServerAdminData()); horoscopeAdminData = new GadgetAdminData(new FeatureAdminData(HOROSCOPE_FEATURES, Type.WHITELIST), new RpcAdminData()); todoAdminData = new GadgetAdminData(new FeatureAdminData(TODO_FEATURES, Type.BLACKLIST), new RpcAdminData()); fooAdminData = new GadgetAdminData(new FeatureAdminData(FOO_FEATURES, Type.WHITELIST), new RpcAdminData()); httpAdminData = new GadgetAdminData(new FeatureAdminData(HTTP_FEATURES, Type.WHITELIST), rpcAdminData); defaultAdminData = new ContainerAdminData(); defaultAdminData.addGadgetAdminData(TODO, todoAdminData); defaultAdminData.addGadgetAdminData(HOROSCOPE_WITH_PORT, horoscopeAdminData); defaultAdminData.addGadgetAdminData(FOO_GADGET, fooAdminData); defaultAdminData.addGadgetAdminData(HTTP_GADGET, httpAdminData); }
/** * Determines whether we have gadget administration data for a gadget. * * @param container * The container the gadget is in. * @param gadgetUrl * The gadget to check. * @return true if we do have gadget administration data false otherwise. */ private boolean hasGadgetAdminData(String container, String gadgetUrl) { return this.getGadgetAdminData(container, gadgetUrl) != null; }
@Test public void testFeatureAdminNullGadgetData() throws Exception { List<String> gadgetRequiredFeatureNames = Lists.newArrayList("foo3", "foo4"); List<Feature> allFeatures = Lists.newArrayList( createMockFeature(gadgetRequiredFeatureNames.get(0), true), createMockFeature(gadgetRequiredFeatureNames.get(1), true)); mockGadget(allFeatures, DEFAULT, "https://example.com/dontexist.xml"); replay(); assertFalse(enabledStore.checkFeatureAdminInfo(mockGadget)); assertTrue(disabledStore.checkFeatureAdminInfo(mockGadget)); verify(); }
@Test public void testGetContainerAdminData() { assertEquals(defaultAdminData, enabledStore.getContainerAdminData(DEFAULT)); assertNull(enabledStore.getContainerAdminData("my_constianer")); }
@Test public void testIsWhiteListed() throws Exception { assertTrue(enabledStore.isWhitelisted(DEFAULT, HOROSCOPE)); assertTrue(enabledStore.isWhitelisted(DEFAULT, TEST_GADGET)); assertFalse(enabledStore.isWhitelisted(DEFAULT, "https://example.com/gadget.xml")); assertFalse(enabledStore.isWhitelisted("myContainer", HOROSCOPE)); assertTrue(enabledStore.isWhitelisted(DEFAULT, "http://foo.com/gadget.xml")); assertTrue(enabledStore.isWhitelisted(DEFAULT, "http://example.com/gadget.xml")); assertTrue(disabledStore.isWhitelisted(DEFAULT, HOROSCOPE)); assertTrue(disabledStore.isWhitelisted(DEFAULT, TEST_GADGET)); assertTrue(disabledStore.isWhitelisted("myContainer", HOROSCOPE)); }
@Test public void testIsAllowedFeature() throws Exception { mockGadget(ImmutableList.<Feature> of(), DEFAULT, TODO); Feature denied = createMockFeature("setprefs", true); Feature allowed = createMockFeature("foo", true); replay(); assertFalse(enabledStore.isAllowedFeature(denied, mockGadget)); assertTrue(enabledStore.isAllowedFeature(allowed, mockGadget)); assertTrue(disabledStore.isAllowedFeature(denied, mockGadget)); assertTrue(disabledStore.isAllowedFeature(allowed, mockGadget)); }
@Test public void testGetServerAdminData() { ServerAdminData test = new ServerAdminData(); test.addContainerAdminData(DEFAULT, defaultAdminData); assertEquals(test, enabledStore.getServerAdminData()); }
@Test public void testGetAdditionalRpcServiceIds() throws Exception { mockGadget(ImmutableList.<Feature>of(), DEFAULT, "http://example.com/gadget.xml"); replay(); assertEquals(Sets.newHashSet("rpc1", "rpc2"), enabledStore.getAdditionalRpcServiceIds(mockGadget)); assertEquals(Sets.newHashSet(), disabledStore.getAdditionalRpcServiceIds(mockGadget)); reset(); mockGadget(ImmutableList.<Feature>of(), DEFAULT, "https://example.com/gadget.xml"); replay(); assertEquals(Sets.newHashSet(), enabledStore.getAdditionalRpcServiceIds(mockGadget)); assertEquals(Sets.newHashSet(), disabledStore.getAdditionalRpcServiceIds(mockGadget)); reset(); mockGadget(ImmutableList.<Feature>of(), DEFAULT, HOROSCOPE); replay(); assertEquals(Sets.newHashSet(), enabledStore.getAdditionalRpcServiceIds(mockGadget)); assertEquals(Sets.newHashSet(), disabledStore.getAdditionalRpcServiceIds(mockGadget)); }
@Test public void testAllowedGadgetBlacklist() throws Exception { Set<String> features = Sets.newHashSet("foo5", "foo6"); List<String> featuresAndDeps = Lists.newArrayList("foo5", "dep1", "dep2", "foo6"); List<String> allGadgetFeatures = Lists.newArrayList("dep1", "dep2", "foo3", "foo4"); List<String> gadgetRequiredFeatureNames = Lists.newArrayList("foo3", "foo4"); List<Feature> allFeatures = Lists.newArrayList( createMockFeature(gadgetRequiredFeatureNames.get(0), true), createMockFeature(gadgetRequiredFeatureNames.get(1), true)); FeatureAdminData data = new FeatureAdminData(features,Type.BLACKLIST); enabledStore.getContainerAdminData(DEFAULT).addGadgetAdminData(TEST_GADGET, new GadgetAdminData(data, null)); mockRegistryForFeatureAdmin(features, featuresAndDeps, allGadgetFeatures, gadgetRequiredFeatureNames); mockGadget(allFeatures); replay(); assertTrue(enabledStore.checkFeatureAdminInfo(mockGadget)); assertTrue(disabledStore.checkFeatureAdminInfo(mockGadget)); verify(); }
@Test public void testSetGadgetAdminData() { assertEquals(horoscopeAdminData, enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE)); horoscopeAdminData.getFeatureAdminData().addFeature("foo_feature"); enabledStore.setGadgetAdminData(DEFAULT, HOROSCOPE, horoscopeAdminData); assertTrue(enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE).getFeatureAdminData() .getFeatures().contains("foo_feature")); assertEquals(httpAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml")); enabledStore.setGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml", todoAdminData); assertEquals(todoAdminData, enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget2.xml")); enabledStore.setGadgetAdminData(DEFAULT, "http://example.com/gadget1.xml", null); assertNotNull(enabledStore.getGadgetAdminData(DEFAULT, "http://example.com/gadget1.xml")); enabledStore.setGadgetAdminData(DEFAULT, null, horoscopeAdminData); assertNull(enabledStore.getGadgetAdminData(DEFAULT, null)); }
@Before public void setUp() throws Exception { featureRegistryProvider = new FeatureRegistryProvider() { public FeatureRegistry get(String repository) throws GadgetException { return mockRegistry; } }; rpcAdminData = new RpcAdminData(Sets.newHashSet("rpc1", "rpc2")); enabledStore = new BasicGadgetAdminStore(featureRegistryProvider, enabledConfig, new ServerAdminData()); enabledStore.init(SAMPLE_STORE); disabledStore = new BasicGadgetAdminStore(featureRegistryProvider, disabledConfig, new ServerAdminData()); horoscopeAdminData = new GadgetAdminData(new FeatureAdminData(HOROSCOPE_FEATURES, Type.WHITELIST), new RpcAdminData()); todoAdminData = new GadgetAdminData(new FeatureAdminData(TODO_FEATURES, Type.BLACKLIST), new RpcAdminData()); fooAdminData = new GadgetAdminData(new FeatureAdminData(FOO_FEATURES, Type.WHITELIST), new RpcAdminData()); httpAdminData = new GadgetAdminData(new FeatureAdminData(HTTP_FEATURES, Type.WHITELIST), rpcAdminData); defaultAdminData = new ContainerAdminData(); defaultAdminData.addGadgetAdminData(TODO, todoAdminData); defaultAdminData.addGadgetAdminData(HOROSCOPE_WITH_PORT, horoscopeAdminData); defaultAdminData.addGadgetAdminData(FOO_GADGET, fooAdminData); defaultAdminData.addGadgetAdminData(HTTP_GADGET, httpAdminData); }
@Test public void testGetGadgetAdminData() { assertEquals(horoscopeAdminData, enabledStore.getGadgetAdminData(DEFAULT, HOROSCOPE)); assertEquals(todoAdminData, enabledStore.getGadgetAdminData(DEFAULT, TODO)); 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")); }
@Test public void testFeatureAdminNullContainerData() throws Exception { List<String> gadgetRequiredFeatureNames = Lists.newArrayList("foo3", "foo4"); List<Feature> allFeatures = Lists.newArrayList( createMockFeature(gadgetRequiredFeatureNames.get(0), true), createMockFeature(gadgetRequiredFeatureNames.get(1), true)); mockGadget(allFeatures, "foocontainer"); replay(); assertFalse(enabledStore.checkFeatureAdminInfo(mockGadget)); assertTrue(disabledStore.checkFeatureAdminInfo(mockGadget)); verify(); }