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 2012/09/11 03:47:19 UTC

svn commit: r1383215 - /manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java

Author: kwright
Date: Tue Sep 11 01:47:19 2012
New Revision: 1383215

URL: http://svn.apache.org/viewvc?rev=1383215&view=rev
Log:
Prevent us from winding up in infinite logon loops, by only permitting one logon attempt per fetch.

Modified:
    manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java

Modified: manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java?rev=1383215&r1=1383214&r2=1383215&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java (original)
+++ manifoldcf/branches/CONNECTORS-518/connectors/wiki/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/wiki/WikiConnector.java Tue Sep 11 01:47:19 2012
@@ -141,20 +141,22 @@ public class WikiConnector extends org.a
 
       httpClient = new HttpClient(connectionManager);
 
-      if (serverLogin != null && !"".equals(serverLogin)) {
-        loginToAPI();
-      }
-
+      loginToAPI();
+      
       hasBeenSetup = true;
     }
   }
 
   /** Log in via the Wiki API.
   * Call this method whenever login is apparently needed.
+  *@return true if the login was successful, false otherwise.
   */
-  protected void loginToAPI()
+  protected boolean loginToAPI()
     throws ManifoldCFException, ServiceInterruption
   {
+    if (serverLogin == null || serverLogin.length() == 0)
+      return false;
+
     // Grab the httpclient, and use the same one throughout.
     HttpClient client = getInitializedClient();
     
@@ -326,7 +328,11 @@ public class WikiConnector extends org.a
     
     // Check result
     if (!result.result)
+    {
+      Logging.connectors.debug("WIKI API login error: '" + result.reason + "'");
       throw new ManifoldCFException("WIKI API login error: " + result.reason, null, ManifoldCFException.REPOSITORY_CONNECTION_ERROR);
+    }
+    return true;
   }
 
   /**
@@ -1633,6 +1639,7 @@ public class WikiConnector extends org.a
     throws ManifoldCFException, ServiceInterruption
   {
     getSession();
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -1662,7 +1669,7 @@ public class WikiConnector extends org.a
             else
               throw (Error)thr;
           }
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return;
         }
         catch (ManifoldCFException e)
@@ -1730,7 +1737,9 @@ public class WikiConnector extends org.a
           executeMethod.releaseConnection();
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
       // Back around...
     }
   }
@@ -1970,6 +1979,7 @@ public class WikiConnector extends org.a
   protected String executeListPagesViaThread(String startPageTitle, String namespace, String prefix, ISeedingActivity activities)
     throws ManifoldCFException, ServiceInterruption
   {
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -2012,7 +2022,7 @@ public class WikiConnector extends org.a
             else
               throw (Error)thr;
           }
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return t.getLastPageTitle();
         }
         catch (ManifoldCFException e)
@@ -2085,10 +2095,13 @@ public class WikiConnector extends org.a
           executeMethod.releaseConnection();
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
       // Back around...
 
     }
+    return null;
   }
 
   /** Create a URL to obtain the next 500 pages.
@@ -2389,6 +2402,7 @@ public class WikiConnector extends org.a
     throws ManifoldCFException, ServiceInterruption
   {
     getSession();
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -2418,7 +2432,7 @@ public class WikiConnector extends org.a
             else
               throw (Error)thr;
           }
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return;
         }
         catch (ManifoldCFException e)
@@ -2486,7 +2500,9 @@ public class WikiConnector extends org.a
           executeMethod.releaseConnection();
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
     }
   }
   
@@ -2720,6 +2736,7 @@ public class WikiConnector extends org.a
     throws ManifoldCFException, ServiceInterruption
   {
     getSession();
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -2749,7 +2766,7 @@ public class WikiConnector extends org.a
             else
               throw (Error)thr;
           }
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return;
         }
         catch (ManifoldCFException e)
@@ -2817,7 +2834,9 @@ public class WikiConnector extends org.a
           executeMethod.releaseConnection();
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
     }
   }
 
@@ -3122,6 +3141,7 @@ public class WikiConnector extends org.a
     throws ManifoldCFException, ServiceInterruption
   {
     getSession();
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -3153,7 +3173,7 @@ public class WikiConnector extends org.a
             else
               throw (Error)thr;
           }
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return;
         }
         catch (ManifoldCFException e)
@@ -3221,7 +3241,9 @@ public class WikiConnector extends org.a
           executeMethod.releaseConnection();
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
     }
   }
   
@@ -3469,6 +3491,7 @@ public class WikiConnector extends org.a
     throws ManifoldCFException, ServiceInterruption
   {
     getSession();
+    boolean loginAttempted = false;
     while (true)
     {
       HttpClient client = getInitializedClient();
@@ -3558,7 +3581,7 @@ public class WikiConnector extends org.a
             }
           }
           
-          if (!t.isLoginRequired())
+          if (loginAttempted || !t.isLoginRequired())
             return;
         }
         catch (ManifoldCFException e)
@@ -3637,7 +3660,9 @@ public class WikiConnector extends org.a
           activities.recordActivity(new Long(startTime),ACTIVITY_FETCH,new Long(dataSize),documentIdentifier,statusCode,errorMessage,null);
       }
       
-      loginToAPI();
+      if (!loginToAPI())
+        break;
+      loginAttempted = true;
     }
   }