OSDN Git Service

リファクタリングとメソッド戻り値の見直し
[coroid/inqubus.git] / frontend / src / saccubus / net / CookieWinCrome.java
1 package saccubus.net;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
7 import org.apache.commons.io.FileUtils;
8
9 /**
10  *
11  * @author yuki
12  */
13 public class CookieWinCrome extends Cookie {
14
15     private static final String COOKIE_PATH = "\\Google\\Chrome\\User Data\\Default\\Cookies";
16     private static final Pattern USER_SESSION_PATTERN = Pattern.compile("user_session_[\\d_]+");
17
18     /** <p>
19      *  Chrome から user_session を取得。エラーが起こった場合、例外を投げずに空文字を返す
20      *  </p>
21      *  @return user_session
22      */
23     @Override
24     public String getUserSessionString() throws IOException {
25         String local_Appdir = System.getenv("LOCALAPPDATA");
26         if (local_Appdir != null && !local_Appdir.isEmpty()) {
27             // Win7 32bit
28             final File cookie_file = new File(local_Appdir + COOKIE_PATH);
29             if (cookie_file.isFile()) {
30                 final String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
31                 final String user_session = cutUserSession(dataStr);
32                 if (!user_session.isEmpty()) {
33                     return user_session;
34                 }
35             }
36         }
37
38         String profile_dir = System.getenv("USERPROFILE");
39         if (profile_dir != null && !profile_dir.isEmpty()) {
40             // XP 32bit
41             final File cookie_file = new File(profile_dir
42                     + "\\Local Settings\\Application Data" + COOKIE_PATH);
43             if (cookie_file.isFile()) {
44                 String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
45                 final String user_session = cutUserSession(dataStr);
46                 return user_session;
47             }
48         }
49         String app_dir = System.getenv("APPDATA");
50         if (app_dir != null && !app_dir.isEmpty()) {
51             // ??? just try
52             final File cookie_file = new File(app_dir + COOKIE_PATH);
53             if (cookie_file.isFile()) {
54                 String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
55                 final String user_session = cutUserSession(dataStr);
56                 return user_session;
57             }
58         }
59
60         throw new IOException("user session not found in google chorome cookie");
61     }
62
63     /**
64      * 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
65      * @param str 切り出す対象文字列
66      * @return user_session 文字列。見つからなければnull。
67      */
68     private String cutUserSession(String str) {
69         final Matcher mather = USER_SESSION_PATTERN.matcher(str);
70         if (mather.lookingAt()) {
71             return mather.group(1);
72         }
73
74         return null;
75     }
76 }