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 2014/07/15 14:12:42 UTC

svn commit: r1610669 - in /manifoldcf/trunk: ./ connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/ connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/

Author: kwright
Date: Tue Jul 15 12:12:42 2014
New Revision: 1610669

URL: http://svn.apache.org/r1610669
Log:
Fix for CONNECTORS-991.

Modified:
    manifoldcf/trunk/CHANGES.txt
    manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraAuthorityConnector.java
    manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraSession.java
    manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraRepositoryConnector.java
    manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraSession.java

Modified: manifoldcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1610669&r1=1610668&r2=1610669&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Tue Jul 15 12:12:42 2014
@@ -3,6 +3,10 @@ $Id$
 
 ======================= 1.7-dev =====================
 
+CONNECTORS-991: Make Jira connector perform pre-emptive basic auth
+since Jira supports guest users.
+(Daniel Aschauer, Karl Wright)
+
 CONNECTORS-988: Performance improvements for split pipeline crawls.
 (Karl Wright)
 

Modified: manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraAuthorityConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraAuthorityConnector.java?rev=1610669&r1=1610668&r2=1610669&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraAuthorityConnector.java (original)
+++ manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraAuthorityConnector.java Tue Jul 15 12:12:42 2014
@@ -214,9 +214,44 @@ public class JiraAuthorityConnector exte
         Logging.authorityConnectors.debug("JIRA: Clientsecret = '" + clientsecret + "'");
       }
 
-      String jiraurl = jiraprotocol + "://" + jirahost + (StringUtils.isEmpty(jiraport)?"":":"+jiraport) + jirapath;
-      session = new JiraSession(clientid, clientsecret, jiraurl,
-        jiraproxyhost, jiraproxyport, jiraproxydomain, jiraproxyusername, jiraproxypassword);
+      int portInt;
+      if (jiraport != null && jiraport.length() > 0)
+      {
+        try
+        {
+          portInt = Integer.parseInt(jiraport);
+        }
+        catch (NumberFormatException e)
+        {
+          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
+        }
+      }
+      else
+      {
+        if (jiraprotocol.toLowerCase(Locale.ROOT).equals("http"))
+          portInt = 80;
+        else
+          portInt = 443;
+      }
+
+      int proxyPortInt;
+      if (jiraproxyport != null && jiraproxyport.length() > 0)
+      {
+        try
+        {
+          proxyPortInt = Integer.parseInt(jiraproxyport);
+        }
+        catch (NumberFormatException e)
+        {
+          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
+        }
+      }
+      else
+        proxyPortInt = 8080;
+
+      session = new JiraSession(clientid, clientsecret,
+        jiraprotocol, jirahost, portInt, jirapath,
+        jiraproxyhost, proxyPortInt, jiraproxydomain, jiraproxyusername, jiraproxypassword);
 
     }
     lastSessionFetch = System.currentTimeMillis();

Modified: manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraSession.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraSession.java?rev=1610669&r1=1610668&r2=1610669&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraSession.java (original)
+++ manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/authorities/authorities/jira/JiraSession.java Tue Jul 15 12:12:42 2014
@@ -64,6 +64,10 @@ import org.apache.http.client.HttpReques
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.entity.ContentType;
+import org.apache.http.client.AuthCache;
+import org.apache.http.impl.client.BasicAuthCache;
+import org.apache.http.impl.auth.BasicScheme;
+import org.apache.http.client.protocol.HttpClientContext;
 
 import org.apache.http.ParseException;
 
@@ -77,7 +81,8 @@ import org.json.simple.JSONArray;
  */
 public class JiraSession {
 
-  private final String URLbase;
+  private final HttpHost host;
+  private final String path;
   private final String clientId;
   private final String clientSecret;
   
@@ -104,10 +109,12 @@ public class JiraSession {
   /**
    * Constructor. Create a session.
    */
-  public JiraSession(String clientId, String clientSecret, String URLbase,
-    String proxyHost, String proxyPort, String proxyDomain, String proxyUsername, String proxyPassword)
+  public JiraSession(String clientId, String clientSecret,
+    String protocol, String host, int port, String path,
+    String proxyHost, int proxyPort, String proxyDomain, String proxyUsername, String proxyPassword)
     throws ManifoldCFException {
-    this.URLbase = URLbase;
+    this.host = new HttpHost(host,port,protocol);
+    this.path = path;
     this.clientId = clientId;
     this.clientSecret = clientSecret;
 
@@ -142,21 +149,6 @@ public class JiraSession {
     if (proxyHost != null && proxyHost.length() > 0)
     {
 
-      int proxyPortInt;
-      if (proxyPort != null && proxyPort.length() > 0)
-      {
-        try
-        {
-          proxyPortInt = Integer.parseInt(proxyPort);
-        }
-        catch (NumberFormatException e)
-        {
-          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
-        }
-      }
-      else
-        proxyPortInt = 8080;
-
       // Configure proxy authentication
       if (proxyUsername != null && proxyUsername.length() > 0)
       {
@@ -166,11 +158,11 @@ public class JiraSession {
           proxyDomain = "";
 
         credentialsProvider.setCredentials(
-          new AuthScope(proxyHost, proxyPortInt),
+          new AuthScope(proxyHost, proxyPort),
           new NTCredentials(proxyUsername, proxyPassword, currentHost, proxyDomain));
       }
 
-      HttpHost proxy = new HttpHost(proxyHost, proxyPortInt);
+      HttpHost proxy = new HttpHost(proxyHost, proxyPort);
       requestBuilder.setProxy(proxy);
     }
 
@@ -261,14 +253,25 @@ public class JiraSession {
     return charSet;
   }
 
-  private void getRest(String rightside, JiraJSONResponse response)
+  private void getRest(String rightside, JiraJSONResponse response) 
     throws IOException, ResponseException {
 
-    final HttpRequestBase method = new HttpGet(URLbase + rightside);
+    // Create AuthCache instance
+    AuthCache authCache = new BasicAuthCache();
+    // Generate BASIC scheme object and add it to the local
+    // auth cache
+    BasicScheme basicAuth = new BasicScheme();
+    authCache.put(host, basicAuth);
+
+    // Add AuthCache to the execution context
+    HttpClientContext localContext = HttpClientContext.create();
+    localContext.setAuthCache(authCache);
+
+    final HttpRequestBase method = new HttpGet(host.toURI() + path + rightside);
     method.addHeader("Accept", "application/json");
 
     try {
-      HttpResponse httpResponse = httpClient.execute(method);
+      HttpResponse httpResponse = httpClient.execute(method,localContext);
       int resultCode = httpResponse.getStatusLine().getStatusCode();
       if (resultCode != 200)
         throw new ResponseException("Unexpected result code "+resultCode+": "+convertToString(httpResponse));

Modified: manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraRepositoryConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraRepositoryConnector.java?rev=1610669&r1=1610668&r2=1610669&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraRepositoryConnector.java (original)
+++ manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraRepositoryConnector.java Tue Jul 15 12:12:42 2014
@@ -290,9 +290,44 @@ public class JiraRepositoryConnector ext
         Logging.connectors.debug("JIRA: Clientsecret = '" + clientsecret + "'");
       }
 
-      String jiraurl = jiraprotocol + "://" + jirahost + (StringUtils.isEmpty(jiraport)?"":":"+jiraport) + jirapath;
-      session = new JiraSession(clientid, clientsecret, jiraurl,
-        jiraproxyhost, jiraproxyport, jiraproxydomain, jiraproxyusername, jiraproxypassword);
+      int portInt;
+      if (jiraport != null && jiraport.length() > 0)
+      {
+        try
+        {
+          portInt = Integer.parseInt(jiraport);
+        }
+        catch (NumberFormatException e)
+        {
+          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
+        }
+      }
+      else
+      {
+        if (jiraprotocol.toLowerCase(Locale.ROOT).equals("http"))
+          portInt = 80;
+        else
+          portInt = 443;
+      }
+
+      int proxyPortInt;
+      if (jiraproxyport != null && jiraproxyport.length() > 0)
+      {
+        try
+        {
+          proxyPortInt = Integer.parseInt(jiraproxyport);
+        }
+        catch (NumberFormatException e)
+        {
+          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
+        }
+      }
+      else
+        proxyPortInt = 8080;
+
+      session = new JiraSession(clientid, clientsecret,
+        jiraprotocol, jirahost, portInt, jirapath,
+        jiraproxyhost, proxyPortInt, jiraproxydomain, jiraproxyusername, jiraproxypassword);
 
     }
     lastSessionFetch = System.currentTimeMillis();

Modified: manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraSession.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraSession.java?rev=1610669&r1=1610668&r2=1610669&view=diff
==============================================================================
--- manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraSession.java (original)
+++ manifoldcf/trunk/connectors/jira/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jira/JiraSession.java Tue Jul 15 12:12:42 2014
@@ -62,6 +62,10 @@ import org.apache.http.client.HttpReques
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.entity.ContentType;
+import org.apache.http.client.AuthCache;
+import org.apache.http.impl.client.BasicAuthCache;
+import org.apache.http.impl.auth.BasicScheme;
+import org.apache.http.client.protocol.HttpClientContext;
 
 import org.apache.http.ParseException;
 
@@ -75,7 +79,8 @@ import org.json.simple.JSONArray;
  */
 public class JiraSession {
 
-  private final String URLbase;
+  private final HttpHost host;
+  private final String path;
   private final String clientId;
   private final String clientSecret;
   
@@ -102,10 +107,12 @@ public class JiraSession {
   /**
    * Constructor. Create a session.
    */
-  public JiraSession(String clientId, String clientSecret, String URLbase,
-    String proxyHost, String proxyPort, String proxyDomain, String proxyUsername, String proxyPassword)
+  public JiraSession(String clientId, String clientSecret,
+    String protocol, String host, int port, String path,
+    String proxyHost, int proxyPort, String proxyDomain, String proxyUsername, String proxyPassword)
     throws ManifoldCFException {
-    this.URLbase = URLbase;
+    this.host = new HttpHost(host,port,protocol);
+    this.path = path;
     this.clientId = clientId;
     this.clientSecret = clientSecret;
 
@@ -140,20 +147,6 @@ public class JiraSession {
     if (proxyHost != null && proxyHost.length() > 0)
     {
 
-      int proxyPortInt;
-      if (proxyPort != null && proxyPort.length() > 0)
-      {
-        try
-        {
-          proxyPortInt = Integer.parseInt(proxyPort);
-        }
-        catch (NumberFormatException e)
-        {
-          throw new ManifoldCFException("Bad number: "+e.getMessage(),e);
-        }
-      }
-      else
-        proxyPortInt = 8080;
 
       // Configure proxy authentication
       if (proxyUsername != null && proxyUsername.length() > 0)
@@ -164,11 +157,11 @@ public class JiraSession {
           proxyDomain = "";
 
         credentialsProvider.setCredentials(
-          new AuthScope(proxyHost, proxyPortInt),
+          new AuthScope(proxyHost, proxyPort),
           new NTCredentials(proxyUsername, proxyPassword, currentHost, proxyDomain));
       }
 
-      HttpHost proxy = new HttpHost(proxyHost, proxyPortInt);
+      HttpHost proxy = new HttpHost(proxyHost, proxyPort);
       requestBuilder.setProxy(proxy);
     }
 
@@ -262,11 +255,22 @@ public class JiraSession {
   private void getRest(String rightside, JiraJSONResponse response) 
     throws IOException, ResponseException {
 
-    final HttpRequestBase method = new HttpGet(URLbase + rightside);
+    // Create AuthCache instance
+    AuthCache authCache = new BasicAuthCache();
+    // Generate BASIC scheme object and add it to the local
+    // auth cache
+    BasicScheme basicAuth = new BasicScheme();
+    authCache.put(host, basicAuth);
+
+    // Add AuthCache to the execution context
+    HttpClientContext localContext = HttpClientContext.create();
+    localContext.setAuthCache(authCache);
+
+    final HttpRequestBase method = new HttpGet(host.toURI() + path + rightside);
     method.addHeader("Accept", "application/json");
 
     try {
-      HttpResponse httpResponse = httpClient.execute(method);
+      HttpResponse httpResponse = httpClient.execute(method,localContext);
       int resultCode = httpResponse.getStatusLine().getStatusCode();
       if (resultCode != 200)
         throw new IOException("Unexpected result code "+resultCode+": "+convertToString(httpResponse));