public void containersChanged(ContainerConfig config, Collection<String> changed, Collection<String> removed) { for (String container : changed) { required.put(container, config.getBool(container, LOCKED_DOMAIN_REQUIRED_KEY)); permittedRefererDomains.put(container, config.getList(container, PERMITTED_REFERER_DOMAINS_KEY)); } for (String container : removed) { required.remove(container); permittedRefererDomains.remove(container); } } }
/** * Create a LockedDomainService * @param config per-container configuration * @param enabled whether this service should do anything at all. */ @Inject public HashLockedDomainService(ContainerConfig config, @Named("shindig.locked-domain.enabled") boolean enabled) { this.enabled = enabled; lockedSuffixes = Maps.newHashMap(); required = Maps.newHashMap(); Collection<String> containers = config.getContainers(); if (enabled) { for (String container : containers) { String suffix = config.getString(container, LOCKED_DOMAIN_SUFFIX_KEY); if (suffix == null) { LOG.warning("No locked domain configuration for " + container); } else { lockedSuffixes.put(container, suffix); } required.put(container, config.getBool(container, LOCKED_DOMAIN_REQUIRED_KEY)); } } }
@SuppressWarnings("unchecked") private List<String> getEndpointsFromContainerConfig(String container, String host) { Map<String, Object> properties = (Map<String, Object>) containerConfig.getMap(container, GADGETS_FEATURES_CONFIG).get(OSAPI_FEATURE_CONFIG); if (properties != null) { return (List<String>) properties.get(OSAPI_BASE_ENDPOINTS); } return ImmutableList.of(); }
@Inject public BlobCrypterSecurityTokenCodec(ContainerConfig config) { try { config.addConfigObserver(this, false); loadContainers(config, config.getContainers(), crypters, domains, tokenTTLs); } catch (IOException e) { // Someone specified securityTokenKeyFile, but we couldn't load the key. That merits killing // the server. LOG.log(Level.SEVERE, "Error while initializing BlobCrypterSecurityTokenCodec", e); throw new RuntimeException(e); } }
@Test public void testAddNewContainer() throws Exception { ConfigObserver observer = EasyMock.createMock(ContainerConfig.ConfigObserver.class); observer.containersChanged(EasyMock.isA(ContainerConfig.class), EasyMock.eq(ImmutableSet.of("extra")), EasyMock.eq(ImmutableSet.<String>of())); EasyMock.replay(observer); config.addConfigObserver(observer, false); config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); assertTrue(config.getContainers().contains("extra")); assertEquals("yes", config.getString("extra", "inherited")); EasyMock.verify(observer); }
@Test public void testPropertyTypes() throws Exception { String container = "misc"; config.newTransaction().addContainer(makeContainer("misc", "bool", Boolean.valueOf(true), "bool2", "true", "badbool", Integer.valueOf(1234), "badbool2", "notabool", "int", Integer.valueOf(1234), "int2", "1234", "badint", "notanint", "string", "abcd", "list", ImmutableList.of("a"), "badlist", "notalist", "map", ImmutableMap.of("a", "b"), "badmap", "notamap")).commit(); assertEquals(true, config.getBool(container, "bool")); assertEquals(true, config.getBool(container, "bool2")); assertEquals(false, config.getBool(container, "badbool")); assertEquals(false, config.getBool(container, "badbool2")); assertEquals(1234, config.getInt(container, "int")); assertEquals(1234, config.getInt(container, "int2")); assertEquals(0, config.getInt(container, "badint")); assertEquals("abcd", config.getString(container, "string")); assertEquals(ImmutableList.of("a"), config.getList(container, "list")); assertTrue(config.getList(container, "badlist").isEmpty()); assertEquals(ImmutableMap.of("a", "b"), config.getMap(container, "map")); assertTrue(config.getMap(container, "badmap").isEmpty()); }
@Operation(httpMethods = "GET", path = "/@supportedFields") public List<Object> supportedFields(RequestItem request) { // TODO: Would be nice if name in config matched name of service. String container = Objects.firstNonNull(request.getToken().getContainer(), ContainerConfig.DEFAULT_CONTAINER); return config.getList(container, "${Cur['gadgets.features'].opensocial.supportedFields.mediaItem}"); }
@Test public void parseBasicConfig() throws Exception { ContainerConfig config = new JsonContainerConfig(createDefaultContainer().getAbsolutePath(), Expressions.forTesting()); assertEquals(1, config.getContainers().size()); for (String container : config.getContainers()) { assertEquals(DEFAULT_CONTAINER, container); } String value = config.getString(DEFAULT_CONTAINER, TOP_LEVEL_NAME); assertEquals(TOP_LEVEL_VALUE, value); Map<String, Object> nested = config.getMap(DEFAULT_CONTAINER, NESTED_KEY); String nestedValue = nested.get(NESTED_NAME).toString(); assertEquals(NESTED_VALUE, nestedValue); }
@Test public void testAliasesArePopulated() throws Exception { Map<String, Object> container = makeContainer(ImmutableList.of("original", "alias"), "property", "value"); config.newTransaction().addContainer(container).commit(); assertEquals(ImmutableSet.of("default", "original", "alias"), config.getContainers()); assertEquals("value", config.getString("original", "property")); assertEquals("value", config.getString("alias", "property")); } }
if (JsonContainerConfig.PARENT_KEY.equals(property)) { String parent = config.getString(container, JsonContainerConfig.PARENT_KEY); if (parent == null) { return null; } else { return config.getProperty(container, property.toString());
@Test public void testRemoveContainer() throws Exception { config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); ConfigObserver observer = EasyMock.createMock(ContainerConfig.ConfigObserver.class); observer.containersChanged(EasyMock.isA(ContainerConfig.class), EasyMock.eq(ImmutableSet.<String>of()), EasyMock.eq(ImmutableSet.of("extra"))); EasyMock.replay(observer); config.addConfigObserver(observer, false); config.newTransaction().removeContainer("extra").commit(); assertFalse(config.getContainers().contains("extra")); EasyMock.verify(observer); }
@Test public void testGetContainers() throws Exception { config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); assertEquals(ImmutableSet.of("default", "extra"), config.getContainers()); }
@Test public void testInheritance() throws Exception { config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); assertEquals("yes", config.getString("default", "inherited")); assertEquals("yes", config.getString("extra", "inherited")); config.newTransaction().addContainer(MODIFIED_EXTRA_CONTAINER).commit(); assertEquals("no", config.getString("extra", "inherited")); config.newTransaction().addContainer(MODIFIED_DEFAULT_CONTAINER).commit(); config.newTransaction().addContainer(EXTRA_CONTAINER).commit(); assertEquals("si", config.getString("extra", "inherited")); assertEquals("si", config.getString("extra", "inherited")); }
/** * Determines whether feature administration is enabled for a container. * * @param container * The container to check. * @return true if feature administration is enabled for the container false otherwise. */ private boolean isFeatureAdminEnabled(String container) { return config.getBool(container, ENABLE_FEATURE_ADMIN); }
@Test public void testNulledPropertiesRemainNulledAfterSeveralTransactions() throws Exception { Map<String, Object> defaultContainer = makeContainer("default", "o1", "v1", "o2", "v2", "o3", "v3"); Map<String, Object> parentContainer = makeContainer("parent", "o3", null); Map<String, Object> childContainer = makeContainer("child", "parent", "parent", "o2", null); config.newTransaction().addContainer(defaultContainer).commit(); config.newTransaction().addContainer(parentContainer).commit(); config.newTransaction().addContainer(childContainer).commit(); assertNull(config.getProperty("child", "o2")); assertNull(config.getProperty("child", "o3")); assertNull(config.getProperty("parent", "o3")); }
public void containersChanged(ContainerConfig config, Collection<String> changed, Collection<String> removed) { for (String container : changed) { Integer maxPostSize = config.getInt(container, MAX_POST_SIZE_KEY); if (maxPostSize == 0) { maxPostSize = MAX_POST_SIZE_DEFAULT; } maxPostSizes.put(container, maxPostSize); Map<String, Map<String, String>> features = config.getMap(container, GADGETS_FEATURES); if (features != null) { Map<String, String> coreIO = (Map<String, String>) features.get(CORE_IO); if (coreIO != null) { unparseableCruftMsgs.put(container, coreIO.get(UNPARSEABLE_CRUFT)); } } } for (String container : removed) { maxPostSizes.remove(container); unparseableCruftMsgs.remove(container); } } }
@Test public void testMissingConfig() throws Exception { ContainerConfig containerMissingConfig = mock(ContainerConfig.class); expect(containerMissingConfig.getContainers()) .andReturn(Arrays.asList(ContainerConfig.DEFAULT_CONTAINER)); replay(); lockedDomainService = new HashLockedDomainService(containerMissingConfig, true); assertFalse(lockedDomainService.gadgetCanRender("www.example.com", wantsLocked, "default")); assertTrue(lockedDomainService.gadgetCanRender("www.example.com", notLocked, "default")); }
@Test public void testGetTokenTimeToLive() throws Exception { Builder<String, Object> builder = ImmutableMap.builder(); Map<String, Object> container = builder.putAll(makeContainer("tokenTest")) .put(SecurityTokenCodec.SECURITY_TOKEN_TTL_CONFIG, Integer.valueOf(300)).build(); config.newTransaction().addContainer(container).commit(); assertEquals("Token TTL matches what is set in the container config", 300, codec.getTokenTimeToLive("tokenTest")); assertEquals("Token TTL matches the default TTL", AbstractSecurityToken.DEFAULT_MAX_TOKEN_TTL, codec.getTokenTimeToLive()); } }
/** * Creates a basic signer that can observe container configuration changes * @param config the container config to observe */ public BasicSecurityTokenCodec(ContainerConfig config) { config.addConfigObserver(this, true); }