]> source.dussan.org Git - jgit.git/commitdiff
eclipse-ipzilla: Make sure login was successful 37/337/2
authorShawn O. Pearce <spearce@spearce.org>
Thu, 11 Mar 2010 19:19:50 +0000 (11:19 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 11 Mar 2010 23:15:03 +0000 (15:15 -0800)
If the login fails due to an invalid username or password, the only
way we can tell this is by looking at the page title and seeing if
the error message "Invalid Username or Password" is present.

If the user made a typo on their password, we shouldn't plow through
and try to run a query.  Doing so returns an HTML login page that
can't be parsed as a CSV file.

Change-Id: Ia6d7f862435a52ae09ebe29c3835bcee3cf73b93
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IPZillaQuery.java

index 74bc10c50a442ddd02de01a556daf2e55f2811be..7d9f9a64c8de35de188a9ec904a1f02d113e6583 100644 (file)
@@ -48,6 +48,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.net.ConnectException;
 import java.net.CookieHandler;
@@ -67,6 +68,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.eclipse.jgit.util.HttpSupport;
 
@@ -186,6 +189,41 @@ class IPZillaQuery {
                                        + " failed: " + c.getResponseCode() + " "
                                        + c.getResponseMessage());
                }
+
+               String content = readFully(c);
+               Matcher matcher = Pattern.compile("<title>(.*)</title>",
+                               Pattern.CASE_INSENSITIVE).matcher(content);
+               if (!matcher.find()) {
+                       throw new IOException("Login as " + username + " to " + login
+                                       + " failed: Response not HTML as expected");
+               }
+
+               String title = matcher.group(1);
+               if (!"IPZilla Main Page".equals(title)) {
+                       throw new IOException("Login as " + username + " to " + login
+                                       + " failed; page title was \"" + title + "\"");
+               }
+       }
+
+       private String readFully(HttpURLConnection c) throws IOException {
+               String enc = c.getContentEncoding();
+               Reader reader;
+               if (enc != null) {
+                       reader = new InputStreamReader(c.getInputStream(), enc);
+               } else {
+                       reader = new InputStreamReader(c.getInputStream(), "ISO-8859-1");
+               }
+               try {
+                       StringBuilder b = new StringBuilder();
+                       BufferedReader r = new BufferedReader(reader);
+                       String line;
+                       while ((line = r.readLine()) != null) {
+                               b.append(line).append('\n');
+                       }
+                       return b.toString();
+               } finally {
+                       reader.close();
+               }
        }
 
        private void logout() throws MalformedURLException, ConnectException,