OSDN Git Service

Chromium Cookie処理クラス実装
[coroid/inqubus.git] / frontend / src / saccubus / net / Cookie.java
index bf3da89..fd142af 100644 (file)
@@ -2,7 +2,6 @@ package saccubus.net;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.apache.commons.io.FileUtils;
@@ -18,59 +17,72 @@ public abstract class Cookie {
 
     public enum BrowserType {
 
-        NONE, MSIE, IE6, FIREFOX, CHROME,
-        OPERA, CHROMIUM, OTHER
+        MSIE, FIREFOX, CHROME, CHROMIUM, OPERA, OTHER
     }
 
-    public static Cookie create(BrowserType type) {
+    public static Cookie create(BrowserType type, String dir) {
         switch (type) {
-            case CHROME:
-                return new CookieWinCrome();
-            case FIREFOX:
-                return new CookieWinFirefox4();
             case MSIE:
                 return new CookieWinMsIe();
+            case FIREFOX:
+                return new CookieWinFirefox4();
+            case CHROME:
+                return new CookieWinCrome();
+            case CHROMIUM:
+                return new CookieWinChromium();
+            case OPERA:
+                return new CookieWinOpera();
             default:
-                throw new UnsupportedOperationException();
+                final File f = new File(dir);
+                return new CookieDefault(f);
         }
     }
 
     public abstract String getUserSessionString() throws IOException;
 
     /**
-     * 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
-     * @param str 切り出す対象文字列
-     * @return user_session 文字列。見つからなければnull。
-     */
-    protected final String cutUserSession(String str) {
-        final Matcher mather = USER_SESSION_PATTERN.matcher(str);
-        if (mather.lookingAt()) {
-            return mather.group(1);
-        }
-        return null;
-    }
-
-    /**
-     * cookieDirs ディレクトリからクッキーを見つけて user_session を返す
-     * @param cookieDirs cookie保存ディレクトリの候補.
+     * クッキーファイルを見つけて user_session を返す.
+     * @param cookieFileOrDirs cookieが保存されたディレクトリの候補, あるいはcookieファイルの候補.
      * @return ユーザセッション文字列. 無ければnull.
      */
-    protected final String getUserSessionFromDir(String charsetName, File... cookieDirs) throws IOException {
-        for (File dir : cookieDirs) {
-            if (dir.isDirectory()) {
-                File[] files = dir.listFiles();
+    protected final String getUserSession(String charsetName, File... cookieFileOrDirs) throws IOException {
+        for (File file : cookieFileOrDirs) {
+            if (file.isDirectory()) {
+                File[] files = file.listFiles();
                 for (File cookieFile : files) {
                     if (cookieFile.isFile()) {
-                        final String cookie = FileUtils.readFileToString(cookieFile, charsetName);
-                        final String userSession = cutUserSession(cookie);
+                        final String userSession = cutUserSession(cookieFile, charsetName);
                         if (StringUtils.isNotEmpty(userSession)) {
                             return userSession;
                         }
                     }
                 }
+            } else if (file.isFile()) {
+                final String userSession = cutUserSession(file, charsetName);
+                if (StringUtils.isNotEmpty(userSession)) {
+                    return userSession;
+                }
             }
         }
 
         return null;
     }
+
+    /**
+     * 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
+     * @param cookieStr 切り出す対象文字列
+     * @return user_session 文字列。見つからなければnull。
+     */
+    protected final String getUserSession(final String cookieStr) {
+        final Matcher mather = USER_SESSION_PATTERN.matcher(cookieStr);
+        if (mather.lookingAt()) {
+            return mather.group(1);
+        }
+        return null;
+    }
+
+    private String cutUserSession(File cookieFile, String charsetName) throws IOException {
+        final String str = FileUtils.readFileToString(cookieFile, charsetName);
+        return getUserSession(str);
+    }
 }