package org.buddycloud.channelserver.channel; import java.io.InputStream; import java.util.HashSet; import java.util.Properties; import java.util.Set; import org.apache.commons.io.IOUtils; import org.buddycloud.channelserver.Configuration; public class LocalDomainChecker { private static final String COMMA = ","; public static boolean isLocal(String domain, Properties configuration) { return isLocal(domain, configuration, null); } public static boolean isLocal(String domain, Properties configuration, Set<String> localDomains) { if (configuration == null) { return false; } String command = configuration.getProperty( Configuration.CONFIGURATION_LOCAL_DOMAIN_CHECKER); if (null == command) { String serverDomain = configuration .getProperty(Configuration.CONFIGURATION_SERVER_DOMAIN); String topicDomain = configuration .getProperty(Configuration.CONFIGURATION_SERVER_TOPICS_DOMAIN); String channelDomain = configuration .getProperty(Configuration.CONFIGURATION_SERVER_CHANNELS_DOMAIN); return (domain.equals(serverDomain) || domain.equals(topicDomain) || domain.equals(channelDomain)); } if (command.equals(Boolean.TRUE.toString())) { return true; } if (localDomains == null) { try { localDomains = getLocalDomains(configuration); } catch (Exception e) { return false; } } return localDomains.contains(domain.toLowerCase()); } public static Set<String> getLocalDomains(Properties configuration) { HashSet<String> localDomains = new HashSet<String>(); String command = configuration.getProperty( Configuration.CONFIGURATION_LOCAL_DOMAIN_CHECKER); if (command == null) { return localDomains; } try { ProcessBuilder processBuilder = new ProcessBuilder(command); Process process = processBuilder.start(); process.waitFor(); InputStream inputStream = process.getInputStream(); String csvDomains = IOUtils.toString(inputStream); for (String eachDomain : csvDomains.split(COMMA)) { localDomains.add(eachDomain.trim().toLowerCase()); } inputStream.close(); } catch (Exception e) { // Return empty set } return localDomains; } }