You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2016/11/27 20:19:39 UTC

svn commit: r1771641 - in /manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main: java/org/apache/manifoldcf/crawler/notifications/slack/ native2ascii/org/apache/manifoldcf/crawler/notifications/slack/ resources/org/apache/manifoldcf/...

Author: kwright
Date: Sun Nov 27 20:19:38 2016
New Revision: 1771641

URL: http://svn.apache.org/viewvc?rev=1771641&view=rev
Log:
Commit third patch

Modified:
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConfig.java
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConnector.java
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackSession.java
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_en_US.properties
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_es_ES.properties
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_ja_JP.properties
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_zh_CN.properties
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationHeader.js
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationView.html
    manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/Configuration_Server.html

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConfig.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConfig.java?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConfig.java (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConfig.java Sun Nov 27 20:19:38 2016
@@ -30,6 +30,32 @@ public class SlackConfig {
   public static final String WEBHOOK_URL_PARAM = "webHookUrl";
 
   /**
+   * Proxy Host
+   */
+  public static final String PROXY_HOST_PARAM = "proxyHost";
+
+  /**
+   * Proxy Port
+   */
+
+  public static final String PROXY_PORT_PARAM = "proxyPort";
+
+  /**
+   * Proxy Username
+   */
+  public static final String PROXY_USERNAME_PARAM = "proxyUsername";
+
+  /**
+   * Proxy Password
+   */
+  public static final String PROXY_PASSWORD_PARAM = "proxyPassword";
+
+  /**
+   * Proxy Domain
+   */
+  public static final String PROXY_DOMAIN_PARAM = "proxyDomain";
+
+  /**
   * URL template
   */
   public static final String URL_PARAM = "url";

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConnector.java?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConnector.java (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackConnector.java Sun Nov 27 20:19:38 2016
@@ -49,6 +49,9 @@ public class SlackConnector extends org.
 
   protected String webHookUrl = null;
 
+  // Parameters for proxy connection
+  protected SlackSession.ProxySettings proxySettings = null;
+
   // Local session handle
   protected SlackSession session = null;
 
@@ -64,6 +67,17 @@ public class SlackConnector extends org.
   public void connect(ConfigParams configParameters) {
     super.connect(configParameters);
     this.webHookUrl = configParameters.getParameter(SlackConfig.WEBHOOK_URL_PARAM);
+
+    String proxyHost = configParameters.getParameter(SlackConfig.PROXY_HOST_PARAM);
+    String proxyPortString = configParameters.getParameter(SlackConfig.PROXY_PORT_PARAM);
+    if(StringUtils.isNotEmpty(proxyHost) && StringUtils.isNotEmpty(proxyPortString)) {
+      String proxyUsername = configParameters.getParameter(SlackConfig.PROXY_USERNAME_PARAM);
+      String proxyPassword = configParameters.getObfuscatedParameter(SlackConfig.PROXY_PASSWORD_PARAM);
+      String proxyDomain = configParameters.getParameter(SlackConfig.PROXY_DOMAIN_PARAM);
+      this.proxySettings = new SlackSession.ProxySettings(proxyHost, proxyPortString, proxyUsername, proxyPassword, proxyDomain);
+    } else {
+      Logging.connectors.info("Using no proxy settings - no proxyHost and no proxyPort found.");
+    }
   }
 
   /**
@@ -74,6 +88,7 @@ public class SlackConnector extends org.
   public void disconnect()
     throws ManifoldCFException {
     this.webHookUrl = null;
+    this.proxySettings = null;
     finalizeConnection();
     super.disconnect();
   }
@@ -134,7 +149,7 @@ public class SlackConnector extends org.
 
       // Create a session.
       try {
-        ConnectThread connectThread = new ConnectThread(webHookUrl);
+        ConnectThread connectThread = new ConnectThread(webHookUrl, proxySettings);
         connectThread.start();
         session = connectThread.finishUp();
       } catch (InterruptedException e) {
@@ -315,11 +330,34 @@ public class SlackConnector extends org.
   }
 
   private static void fillInServerConfigurationMap(Map<String, Object> paramMap, IPasswordMapperActivity mapper, ConfigParams parameters) {
-    String webHookUrl = parameters.getParameter(SlackConfig.WEBHOOK_URL_PARAM);
-    if (webHookUrl == null)
-      webHookUrl = StringUtils.EMPTY;
+    String webHookUrl = getEmptyOnNull(parameters, SlackConfig.WEBHOOK_URL_PARAM);
+    String proxyHost = getEmptyOnNull(parameters, SlackConfig.PROXY_HOST_PARAM);
+    String proxyPort = getEmptyOnNull(parameters, SlackConfig.PROXY_PORT_PARAM);
+    String proxyUsername = getEmptyOnNull(parameters, SlackConfig.PROXY_USERNAME_PARAM);
+
+    String proxyPassword = parameters.getObfuscatedParameter(SlackConfig.PROXY_PASSWORD_PARAM);
+    if(proxyPassword == null) {
+      proxyPassword = StringUtils.EMPTY;
+    } else {
+      mapper.mapPasswordToKey(proxyPassword);
+    }
+
+    String proxyDomain = getEmptyOnNull(parameters, SlackConfig.PROXY_DOMAIN_PARAM);
 
     paramMap.put("WEBHOOK_URL", webHookUrl);
+    paramMap.put("PROXY_HOST", proxyHost);
+    paramMap.put("PROXY_PORT", proxyPort);
+    paramMap.put("PROXY_USERNAME", proxyUsername);
+    paramMap.put("PROXY_PASSWORD", proxyPassword);
+    paramMap.put("PROXY_DOMAIN", proxyDomain);
+  }
+
+  private static String getEmptyOnNull(ConfigParams parameters, String key) {
+    String value = parameters.getParameter(key);
+    if (value == null) {
+      value = StringUtils.EMPTY;
+    }
+    return value;
   }
 
   /**
@@ -340,9 +378,43 @@ public class SlackConnector extends org.
   public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext,
     ConfigParams parameters) throws ManifoldCFException {
 
-    String webHookUrl = variableContext.getParameter("webHookUrl");
-    if (webHookUrl != null)
+    final String webHookUrl = variableContext.getParameter("webHookUrl");
+    if (webHookUrl != null) {
       parameters.setParameter(SlackConfig.WEBHOOK_URL_PARAM, webHookUrl);
+    }
+
+    final String proxyHost = variableContext.getParameter("proxyHost");
+    if (proxyHost != null) {
+      parameters.setParameter(SlackConfig.PROXY_HOST_PARAM, proxyHost);
+    }
+
+    final String proxyPort = variableContext.getParameter("proxyPort");
+    if (StringUtils.isNotEmpty(proxyPort)) {
+      try {
+        Integer.parseInt(proxyPort);
+      } catch (NumberFormatException e) {
+        Logging.connectors.warn("Proxy port must be a number. Found " + proxyPort);
+        throw new ManifoldCFException("Proxy Port must be a number: " + e.getMessage(), e);
+      }
+      parameters.setParameter(SlackConfig.PROXY_PORT_PARAM, proxyPort);
+    } else if(proxyPort != null){
+      parameters.setParameter(SlackConfig.PROXY_PORT_PARAM, proxyPort);
+    }
+
+    final String proxyUsername = variableContext.getParameter("proxyUsername");
+    if (proxyUsername != null) {
+      parameters.setParameter(SlackConfig.PROXY_USERNAME_PARAM, proxyUsername);
+    }
+
+    final String proxyPassword = variableContext.getParameter("proxyPassword");
+    if (proxyPassword != null) {
+      parameters.setObfuscatedParameter(SlackConfig.PROXY_PASSWORD_PARAM, variableContext.mapKeyToPassword(proxyPassword));
+    }
+
+    final String proxyDomain = variableContext.getParameter("proxyDomain");
+    if (proxyDomain != null) {
+      parameters.setParameter(SlackConfig.PROXY_DOMAIN_PARAM, proxyDomain);
+    }
 
     return null;
   }
@@ -451,7 +523,6 @@ public class SlackConnector extends org.
       }
     }
     // If ANY of the above are non-empty, we create a new dummy record
-    // TODO check if channel check is right
     if (channel.length() > 0) {
       // Add the dummy records
       addRecord(paramMap, SlackConfig.NODE_FINISHED, channel, message);
@@ -613,14 +684,16 @@ public class SlackConnector extends org.
   protected static class ConnectThread extends Thread
   {
     protected final String webHookUrl;
+    protected final SlackSession.ProxySettings proxySettings;
 
     // Local session handle
     protected SlackSession session = null;
     protected Throwable exception = null;
 
-    public ConnectThread(String webHookUrl)
+    public ConnectThread(String webHookUrl, SlackSession.ProxySettings proxySettings)
     {
       this.webHookUrl = webHookUrl;
+      this.proxySettings = proxySettings;
       setDaemon(true);
     }
 
@@ -628,7 +701,7 @@ public class SlackConnector extends org.
     {
       try
       {
-        session = new SlackSession(webHookUrl);
+        session = new SlackSession(webHookUrl, proxySettings);
       }
       catch (Throwable e)
       {
@@ -814,5 +887,4 @@ public class SlackConnector extends org.
       }
     }
   }
-
 }
\ No newline at end of file

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackSession.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackSession.java?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackSession.java (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/java/org/apache/manifoldcf/crawler/notifications/slack/SlackSession.java Sun Nov 27 20:19:38 2016
@@ -21,19 +21,32 @@ package org.apache.manifoldcf.crawler.no
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
+import javax.net.ssl.SSLSocketFactory;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
 import org.apache.http.HttpStatus;
 import org.apache.http.StatusLine;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.NTCredentials;
+import org.apache.http.client.CredentialsProvider;
 import org.apache.http.client.HttpResponseException;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.entity.EntityBuilder;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.entity.ContentType;
+import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.apache.manifoldcf.connectorcommon.common.InterruptibleSocketFactory;
+import org.apache.manifoldcf.connectorcommon.interfaces.KeystoreManagerFactory;
+import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
+import org.apache.manifoldcf.crawler.system.Logging;
 
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -44,12 +57,34 @@ import com.fasterxml.jackson.databind.Ob
 public class SlackSession
 {
 
+  private static String currentHost = null;
+
   private CloseableHttpClient httpClient;
   private ObjectMapper objectMapper;
   private final String webHookUrl;
 
-  /** Create a session */
-  public SlackSession(final String webHookUrl)
+  static
+  {
+    // Find the current host name
+    try
+    {
+      java.net.InetAddress addr = java.net.InetAddress.getLocalHost();
+
+      // Get hostname
+      currentHost = addr.getHostName();
+    }
+    catch (java.net.UnknownHostException e)
+    {
+    }
+  }
+
+  /**
+   * Create a session.
+   * @param webHookUrl - the webHookUrl to use for slack messages.
+   * @param proxySettingsOrNull - the proxy settings or null if not necessary.
+   * @throws ManifoldCFException 
+   */
+  public SlackSession(final String webHookUrl, final ProxySettings proxySettingsOrNull) throws ManifoldCFException
   {
     this.webHookUrl = webHookUrl;
     this.objectMapper = new ObjectMapper();
@@ -58,17 +93,46 @@ public class SlackSession
     int connectionTimeout = 60000;
     int socketTimeout = 900000;
 
-    RequestConfig requestConfig = RequestConfig.custom()
+    final RequestConfig.Builder requestBuilder = RequestConfig.custom()
         .setSocketTimeout(socketTimeout)
         .setConnectTimeout(connectionTimeout)
-        .setConnectionRequestTimeout(socketTimeout)
-        .build();
+        .setConnectionRequestTimeout(socketTimeout);
+
+    if(proxySettingsOrNull != null) {
+      addProxySettings(requestBuilder, proxySettingsOrNull);
+    }
+
+    // Create a ssl socket factory trusting everything.
+    // Reason: manifoldcf wishes connectors to encapsulate certificate handling
+    //         per connection and not rely on the global keystore.
+    //         A configurable keystore seems overkill for the slack notification use case
+    //         so we trust everything.
+    SSLSocketFactory httpsSocketFactory = KeystoreManagerFactory.getTrustingSecureSocketFactory();
+    SSLConnectionSocketFactory myFactory = new SSLConnectionSocketFactory(new InterruptibleSocketFactory(httpsSocketFactory,connectionTimeout),
+        NoopHostnameVerifier.INSTANCE);
 
     httpClient = HttpClientBuilder.create()
-        .setDefaultRequestConfig(requestConfig)
+        .setDefaultRequestConfig(requestBuilder.build())
+        .setSSLSocketFactory(myFactory)
         .build();
   }
 
+  private void addProxySettings(RequestConfig.Builder requestBuilder, ProxySettings proxySettingsOrNull)
+  {
+    if (proxySettingsOrNull.hasUsername()) {
+      CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+      credentialsProvider.setCredentials(
+          new AuthScope(proxySettingsOrNull.getHost(), proxySettingsOrNull.getPort()),
+          new NTCredentials(proxySettingsOrNull.getUsername(),
+              (proxySettingsOrNull.getPassword() == null) ? "" : proxySettingsOrNull.getPassword(),
+                  currentHost,
+                  (proxySettingsOrNull.getDomain() == null) ? "" : proxySettingsOrNull.getDomain()));
+    }
+
+    HttpHost proxy = new HttpHost(proxySettingsOrNull.getHost(), proxySettingsOrNull.getPort());
+    requestBuilder.setProxy(proxy);
+  }
+
   public void checkConnection() throws IOException
   {
     HttpPost headRequest = new HttpPost(webHookUrl);
@@ -102,10 +166,10 @@ public class SlackSession
     String json = objectMapper.writeValueAsString(slackMessage);
 
     HttpEntity entity = EntityBuilder.create()
-      .setContentType(ContentType.APPLICATION_JSON)
-      .setContentEncoding(StandardCharsets.UTF_8.name())
-      .setText(json)
-      .build();
+        .setContentType(ContentType.APPLICATION_JSON)
+        .setContentEncoding(StandardCharsets.UTF_8.name())
+        .setText(json)
+        .build();
 
     messagePost.setEntity(entity);
     try (CloseableHttpResponse response = httpClient.execute(messagePost)) {
@@ -119,4 +183,62 @@ public class SlackSession
     httpClient = null;
     objectMapper = null;
   }
+
+  protected static final class ProxySettings {
+    private String host;
+    private int port = -1;
+    private String username;
+    private String password;
+    private String domain;
+
+    public ProxySettings(String host, String portString, String username, String password, String domain) {
+      this.host = host;
+      if(StringUtils.isNotEmpty(portString)) {
+        try {
+          this.port = Integer.parseInt(portString);
+        } catch (NumberFormatException e) {
+          Logging.connectors.warn("Proxy port must be an number. Found " + portString);
+        }
+      }
+      this.username = username;
+      this.password = password;
+      this.domain = domain;
+    }
+
+    public String getHost() {
+      return host;
+    }
+
+    public int getPort() {
+      return port;
+    }
+
+    public String getUsername() {
+      return username;
+    }
+
+    public boolean hasUsername() {
+      return StringUtils.isNotEmpty(this.username);
+    }
+
+    public String getPassword() {
+      return password;
+    }
+
+    public String getDomain() {
+      return domain;
+    }
+
+    @Override
+    public String toString() {
+      final StringBuilder sb = new StringBuilder("ProxySettings{");
+      sb.append("host='").append(host).append('\'');
+      sb.append(", port=").append(port);
+      sb.append(", username='").append(username).append('\'');
+      sb.append(", password='").append(password).append('\'');
+      sb.append(", domain='").append(domain).append('\'');
+      sb.append('}');
+      return sb.toString();
+    }
+  }
 }
\ No newline at end of file

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_en_US.properties?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_en_US.properties (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_en_US.properties Sun Nov 27 20:19:38 2016
@@ -17,8 +17,15 @@ SlackConnector.WebHook=Slack WebHook
 SlackConnector.Message=Message
 
 SlackConnector.EnterAWebHookUrl=Enter a Slack WebHook URL
+SlackConnector.ProxyPortMustBeAnInteger=Proxy port must be an integer
+SlackConnector.ProxyPortMustBeGivenWithHost=Proxy port must be given when proxy host is configured
 
 SlackConnector.WebHookUrlColon=WebHook URL:
+SlackConnector.ProxyHostColon=Proxy Host:
+SlackConnector.ProxyPortColon=Proxy Port:
+SlackConnector.ProxyUsernameColon=Proxy NTLM Username:
+SlackConnector.ProxyPasswordColon=Proxy NTLM Password:
+SlackConnector.ProxyDomainColon=Proxy NTLM Authentication Domain:
 
 SlackConnector.JobFinished=Job finished
 SlackConnector.JobStopErrorAbort=Job stopped due to error abort

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_es_ES.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_es_ES.properties?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_es_ES.properties (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_es_ES.properties Sun Nov 27 20:19:38 2016
@@ -17,8 +17,15 @@ SlackConnector.WebHook=Slack WebHook
 SlackConnector.Message=Message
 
 SlackConnector.EnterAWebHookUrl=Enter a Slack WebHook URL
+SlackConnector.ProxyPortMustBeAnInteger=Proxy port must be an integer
+SlackConnector.ProxyPortMustBeGivenWithHost=Proxy port must be given when proxy host is configured
 
 SlackConnector.WebHookUrlColon=WebHook URL:
+SlackConnector.ProxyHostColon=Proxy Host:
+SlackConnector.ProxyPortColon=Proxy Port:
+SlackConnector.ProxyUsernameColon=Proxy NTLM Username:
+SlackConnector.ProxyPasswordColon=Proxy NTLM Password:
+SlackConnector.ProxyDomainColon=Proxy NTLM Authentication Domain:
 
 SlackConnector.JobFinished=Job finished
 SlackConnector.JobStopErrorAbort=Job stopped due to error abort

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_ja_JP.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_ja_JP.properties?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_ja_JP.properties (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_ja_JP.properties Sun Nov 27 20:19:38 2016
@@ -17,8 +17,15 @@ SlackConnector.WebHook=Slack WebHook
 SlackConnector.Message=Message
 
 SlackConnector.EnterAWebHookUrl=Enter a Slack WebHook URL
+SlackConnector.ProxyPortMustBeAnInteger=Proxy port must be an integer
+SlackConnector.ProxyPortMustBeGivenWithHost=Proxy port must be given when proxy host is configured
 
 SlackConnector.WebHookUrlColon=WebHook URL:
+SlackConnector.ProxyHostColon=Proxy Host:
+SlackConnector.ProxyPortColon=Proxy Port:
+SlackConnector.ProxyUsernameColon=Proxy NTLM Username:
+SlackConnector.ProxyPasswordColon=Proxy NTLM Password:
+SlackConnector.ProxyDomainColon=Proxy NTLM Authentication Domain:
 
 SlackConnector.JobFinished=Job finished
 SlackConnector.JobStopErrorAbort=Job stopped due to error abort

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_zh_CN.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_zh_CN.properties?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_zh_CN.properties (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/notifications/slack/common_zh_CN.properties Sun Nov 27 20:19:38 2016
@@ -17,8 +17,15 @@ SlackConnector.WebHook=Slack WebHook
 SlackConnector.Message=Message
 
 SlackConnector.EnterAWebHookUrl=Enter a Slack WebHook URL
+SlackConnector.ProxyPortMustBeAnInteger=Proxy port must be an integer
+SlackConnector.ProxyPortMustBeGivenWithHost=Proxy port must be given when proxy host is configured
 
 SlackConnector.WebHookUrlColon=WebHook URL:
+SlackConnector.ProxyHostColon=Proxy Host:
+SlackConnector.ProxyPortColon=Proxy Port:
+SlackConnector.ProxyUsernameColon=Proxy NTLM Username:
+SlackConnector.ProxyPasswordColon=Proxy NTLM Password:
+SlackConnector.ProxyDomainColon=Proxy NTLM Authentication Domain:
 
 SlackConnector.JobFinished=Job finished
 SlackConnector.JobStopErrorAbort=Job stopped due to error abort

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationHeader.js
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationHeader.js?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationHeader.js (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationHeader.js Sun Nov 27 20:19:38 2016
@@ -16,7 +16,16 @@
 -->
 
 <script type="text/javascript">
-<!--
+function checkConfig()
+{
+  if (editconnection.proxyPort.value != "" && !isInteger(editconnection.proxyPort.value))
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('SlackConnector.ProxyPortMustBeAnInteger'))");
+    editconnection.proxyPort.focus();
+    return false;
+  }
+  return true;
+}
 
 function checkConfigForSave()
 {
@@ -27,6 +36,20 @@ function checkConfigForSave()
     editconnection.webHookUrl.focus();
     return false;
   }
+  if (editconnection.proxyHost.value != "" && editconnection.proxyPort.value == "")
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('SlackConnector.ProxyPortMustBeGivenWithHost'))");
+    SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('SlackConnector.WebHook'))");
+    editconnection.proxyPort.focus();
+    return false;
+  }
+  if (editconnection.proxyPort.value != "" && !isInteger(editconnection.proxyPort.value))
+  {
+    alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('SlackConnector.ProxyPortMustBeAnInteger'))");
+    SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('SlackConnector.WebHook'))");
+    editconnection.proxyPort.focus();
+    return false;
+  }
   return true;
 }
 

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationView.html
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationView.html?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationView.html (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/ConfigurationView.html Sun Nov 27 20:19:38 2016
@@ -25,6 +25,46 @@ limitations under the License.
       <nobr>$Encoder.bodyEscape($WEBHOOK_URL)</nobr>
     </td>
   </tr>
-
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyHostColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($PROXY_HOST)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyPortColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($PROXY_PORT)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyUsernameColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($PROXY_USERNAME)</nobr>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyPasswordColon'))</nobr>
+    </td>
+    <td class="value">
+      #if($PROXY_PASSWORD && !$PROXY_PASSWORD.empty)
+      <nobr>********</nobr>
+      #end
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyDomainColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($PROXY_DOMAIN)</nobr>
+    </td>
 </table>
 

Modified: manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/Configuration_Server.html
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/Configuration_Server.html?rev=1771641&r1=1771640&r2=1771641&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/Configuration_Server.html (original)
+++ manifoldcf/branches/CONNECTORS-1344/connectors/slack/connector/src/main/resources/org/apache/manifoldcf/crawler/notifications/slack/Configuration_Server.html Sun Nov 27 20:19:38 2016
@@ -27,10 +27,55 @@ limitations under the License.
       <input id="webHookUrl" name="webHookUrl" type="text" size="80" value="$Encoder.attributeEscape($WEBHOOK_URL)"/>
     </td>
   </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyHostColon'))</nobr>
+    </td>
+    <td class="value">
+      <input id="proxyHost" name="proxyHost" type="text" size="32" value="$Encoder.attributeEscape($PROXY_HOST)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyPortColon'))</nobr>
+    </td>
+    <td class="value">
+      <input id="proxyPort" name="proxyPort" type="text" size="5" value="$Encoder.attributeEscape($PROXY_PORT)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyUsernameColon'))</nobr>
+    </td>
+    <td class="value">
+      <input id="proxyUsername" name="proxyUsername" type="text" size="32" value="$Encoder.attributeEscape($PROXY_USERNAME)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyPasswordColon'))</nobr>
+    </td>
+    <td class="value">
+      <input id="proxyPassword" name="proxyPassword" type="password" size="32" value="$Encoder.attributeEscape($PROXY_PASSWORD)"/>
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      <nobr>$Encoder.bodyEscape($ResourceBundle.getString('SlackConnector.ProxyDomainColon'))</nobr>
+    </td>
+    <td class="value">
+      <input id="proxyDomain" name="proxyDomain" type="text" size="32" value="$Encoder.attributeEscape($PROXY_DOMAIN)"/>
+    </td>
+  </tr>
 </table>
 
 #else
 
 <input type="hidden" name="webHookUrl" value="$Encoder.attributeEscape($WEBHOOK_URL)"/>
+<input type="hidden" name="proxyHost" value="$Encoder.attributeEscape($PROXY_HOST)"/>
+<input type="hidden" name="proxyPort" value="$Encoder.attributeEscape($PROXY_PORT)"/>
+<input type="hidden" name="proxyUsername" value="$Encoder.attributeEscape($PROXY_USERNAME)"/>
+<input type="hidden" name="proxyPassword" value="$Encoder.attributeEscape($PROXY_PASSWORD)"/>
+<input type="hidden" name="proxyDomain" value="$Encoder.attributeEscape($PROXY_DOMAIN)"/>
 
 #end
\ No newline at end of file