OSDN Git Service

リファクタリングとメソッド戻り値の見直し
authoryukihane <yukihane.feather@gmail.com>
Sat, 17 Sep 2011 05:34:02 +0000 (14:34 +0900)
committeryukihane <yukihane.feather@gmail.com>
Sat, 17 Sep 2011 05:34:02 +0000 (14:34 +0900)
frontend/src/saccubus/net/Cookie.java
frontend/src/saccubus/net/CookieWinCrome.java

index 41dfbf5..c8a9e6b 100644 (file)
@@ -1,5 +1,7 @@
 package saccubus.net;
 
+import java.io.IOException;
+
 /**
  *
  * @author yuki
@@ -19,5 +21,5 @@ public abstract class Cookie {
         throw new UnsupportedOperationException();
     }
 
-    public abstract String getUserSessionString();
+    public abstract String getUserSessionString() throws IOException;
 }
index 5a573d8..67e3999 100644 (file)
@@ -1,6 +1,9 @@
 package saccubus.net;
 
 import java.io.File;
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import org.apache.commons.io.FileUtils;
 
 /**
@@ -9,79 +12,65 @@ import org.apache.commons.io.FileUtils;
  */
 public class CookieWinCrome extends Cookie {
 
+    private static final String COOKIE_PATH = "\\Google\\Chrome\\User Data\\Default\\Cookies";
+    private static final Pattern USER_SESSION_PATTERN = Pattern.compile("user_session_[\\d_]+");
+
     /** <p>
      *  Chrome から user_session を取得。エラーが起こった場合、例外を投げずに空文字を返す
      *  </p>
      *  @return user_session
      */
     @Override
-    public String getUserSessionString() {
-        String user_session = "";
-        File cookie_file;
-        final String googleChrome = "\\Google\\Chrome\\User Data\\Default\\Cookies";
-        try {
-            String local_Appdir = System.getenv("LOCALAPPDATA");
-            if (local_Appdir != null && !local_Appdir.isEmpty()) {
-                // Win7 32bit
-                cookie_file = new File(local_Appdir + googleChrome);
-                if (cookie_file.isFile()) {
-                    final String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
-                    user_session = CutUserSession(dataStr, cookie_file.getPath());
-                    if (!user_session.isEmpty()) {
-                        return user_session;
-                    }
+    public String getUserSessionString() throws IOException {
+        String local_Appdir = System.getenv("LOCALAPPDATA");
+        if (local_Appdir != null && !local_Appdir.isEmpty()) {
+            // Win7 32bit
+            final File cookie_file = new File(local_Appdir + COOKIE_PATH);
+            if (cookie_file.isFile()) {
+                final String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
+                final String user_session = cutUserSession(dataStr);
+                if (!user_session.isEmpty()) {
+                    return user_session;
                 }
             }
+        }
 
-            String profile_dir = System.getenv("USERPROFILE");
-            if (profile_dir != null && !profile_dir.isEmpty()) {
-                // XP 32bit
-                cookie_file = new File(profile_dir
-                        + "\\Local Settings\\Application Data" + googleChrome);
-                if (cookie_file.isFile()) {
-                    String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
-                    user_session = CutUserSession(dataStr, cookie_file.getPath());
-                    return user_session;
-                }
+        String profile_dir = System.getenv("USERPROFILE");
+        if (profile_dir != null && !profile_dir.isEmpty()) {
+            // XP 32bit
+            final File cookie_file = new File(profile_dir
+                    + "\\Local Settings\\Application Data" + COOKIE_PATH);
+            if (cookie_file.isFile()) {
+                String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
+                final String user_session = cutUserSession(dataStr);
+                return user_session;
             }
-            String app_dir = System.getenv("APPDATA");
-            if (app_dir != null && !app_dir.isEmpty()) {
-                // ??? just try
-                cookie_file = new File(app_dir + googleChrome);
-                if (cookie_file.isFile()) {
-                    String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
-                    user_session = CutUserSession(dataStr, cookie_file.getPath());
-                    return user_session;
-                }
+        }
+        String app_dir = System.getenv("APPDATA");
+        if (app_dir != null && !app_dir.isEmpty()) {
+            // ??? just try
+            final File cookie_file = new File(app_dir + COOKIE_PATH);
+            if (cookie_file.isFile()) {
+                String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
+                final String user_session = cutUserSession(dataStr);
+                return user_session;
             }
-            return user_session;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return user_session;
         }
+
+        throw new IOException("user session not found in google chorome cookie");
     }
 
-    /// <summary>
-    /// 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
-    /// </summary>
-    /// <param name="str">切り出す対象文字列</param>
-    /// <returns>user_session 文字列。見つからなければ空文字を返す</returns>
-    private String CutUserSession(String str, String filename) {
-        String ret = "";
-        int start = str.indexOf("user_session_");
-        if (start >= 0) {
-            int index = start + "user_session_".length();
-            while (index < str.length() && ('0' <= str.charAt(index) && str.charAt(index) <= '9'
-                    || str.charAt(index) == '_')) {
-                ++index;
-            }
-            ret = str.substring(start, index);
-            // C# の string.SubString( , ) と Java の String.substring( , ) は違うので注意!
-            if (!ret.isEmpty() && !filename.isEmpty()) {
-                System.out.println("Cookie found: " + filename);
-                return ret;
-            }
+    /**
+     * 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
+     * @param str 切り出す対象文字列
+     * @return user_session 文字列。見つからなければnull。
+     */
+    private String cutUserSession(String str) {
+        final Matcher mather = USER_SESSION_PATTERN.matcher(str);
+        if (mather.lookingAt()) {
+            return mather.group(1);
         }
-        return "";
+
+        return null;
     }
 }