package com.constellio.app.modules.es.connectors.smb.utils;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.modules.es.connectors.smb.config.SmbRetrievalConfiguration;
import com.constellio.app.modules.es.connectors.spi.ConnectorLogger;
import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbInstance;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
public class ConnectorSmbUtils {
private ConnectorLogger logger = new ConsoleConnectorLogger();
private ESSchemasRecordsServices es;
public ConnectorSmbUtils() {
}
/**
* We first look at rejected/black URLs, then if nothing matches look for accepted/white URLs. If nothing matches, the URL is
* rejected.
*/
public boolean isAccepted(String url, ConnectorSmbInstance connectorInstance) {
SmbRetrievalConfiguration smbRetrievalConfiguration = new SmbRetrievalConfiguration(connectorInstance.getSeeds(), connectorInstance.getInclusions(),
connectorInstance.getExclusions(), connectorInstance.isSkipShareAccessControl());
return isAccepted(url, smbRetrievalConfiguration);
}
public boolean isAccepted(String url, SmbRetrievalConfiguration smbRetrievalConfiguration) {
if (!url.startsWith("smb://")) {
logger.info("isAccepted rejected does not start with smb:// : ", url, new LinkedHashMap<String, String>());
return false;
}
if (StringUtils.isBlank(url)) {
logger.info("isAccepted rejected blank : ", url, new LinkedHashMap<String, String>());
return false;
}
if (smbRetrievalConfiguration.getExclusions() != null && !smbRetrievalConfiguration.getExclusions()
.isEmpty()) {
for (String blackRegEx : smbRetrievalConfiguration.getExclusions()) {
if (StringUtils.isNotBlank(blackRegEx)) {
if (url.startsWith(blackRegEx)) {
logger.info("isAccepted rejected exclude start with : ", url, new LinkedHashMap<String, String>());
return false;
}
Pattern pattern = Pattern.compile(blackRegEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
logger.info("isAccepted rejected exclude regex : ", url, new LinkedHashMap<String, String>());
return false;
}
}
}
}
if (smbRetrievalConfiguration.getInclusions() != null && !smbRetrievalConfiguration.getInclusions()
.isEmpty()) {
for (String whiteRegEx : smbRetrievalConfiguration.getInclusions()) {
if (StringUtils.isNotBlank(whiteRegEx)) {
if (url.startsWith(whiteRegEx)) {
return true;
}
Pattern pattern = Pattern.compile(whiteRegEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return true;
}
}
}
logger.info("isAccepted rejected include : ", url, new LinkedHashMap<String, String>());
return false;
}
// Fallback to seeds
if (smbRetrievalConfiguration.getSeeds() != null) {
for (String whiteRegEx : smbRetrievalConfiguration.getSeeds()) {
if (StringUtils.isNotBlank(whiteRegEx)) {
if (url.startsWith(whiteRegEx)) {
return true;
}
}
}
}
logger.info("isAccepted rejected default : ", url, new LinkedHashMap<String, String>());
return false;
}
public boolean isFolder(String url) {
if (StringUtils.endsWith(url, "/")) {
return true;
} else {
return false;
}
}
public String getStackTrace(Exception e) {
// http://stackoverflow.com/questions/4812570/how-to-store-printstacktrace-into-a-string
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
return errors.toString();
}
}