OSDN Git Service

Chome Cookieからのユーザセッション取得処理を移植
[coroid/inqubus.git] / frontend / src / saccubus / net / CookieWinCrome.java
1 package saccubus.net;
2
3 import java.io.File;
4 import org.apache.commons.io.FileUtils;
5
6 /**
7  *
8  * @author yuki
9  */
10 public class CookieWinCrome extends Cookie {
11
12     /** <p>
13      *  Chrome から user_session を取得。エラーが起こった場合、例外を投げずに空文字を返す
14      *  </p>
15      *  @return user_session
16      */
17     @Override
18     public String getUserSessionString() {
19         String user_session = "";
20         File cookie_file;
21         final String googleChrome = "\\Google\\Chrome\\User Data\\Default\\Cookies";
22         try {
23             String local_Appdir = System.getenv("LOCALAPPDATA");
24             if (local_Appdir != null && !local_Appdir.isEmpty()) {
25                 // Win7 32bit
26                 cookie_file = new File(local_Appdir + googleChrome);
27                 if (cookie_file.isFile()) {
28                     final String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
29                     user_session = CutUserSession(dataStr, cookie_file.getPath());
30                     if (!user_session.isEmpty()) {
31                         return user_session;
32                     }
33                 }
34             }
35
36             String profile_dir = System.getenv("USERPROFILE");
37             if (profile_dir != null && !profile_dir.isEmpty()) {
38                 // XP 32bit
39                 cookie_file = new File(profile_dir
40                         + "\\Local Settings\\Application Data" + googleChrome);
41                 if (cookie_file.isFile()) {
42                     String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
43                     user_session = CutUserSession(dataStr, cookie_file.getPath());
44                     return user_session;
45                 }
46             }
47             String app_dir = System.getenv("APPDATA");
48             if (app_dir != null && !app_dir.isEmpty()) {
49                 // ??? just try
50                 cookie_file = new File(app_dir + googleChrome);
51                 if (cookie_file.isFile()) {
52                     String dataStr = FileUtils.readFileToString(cookie_file, "UTF-8");
53                     user_session = CutUserSession(dataStr, cookie_file.getPath());
54                     return user_session;
55                 }
56             }
57             return user_session;
58         } catch (Exception e) {
59             e.printStackTrace();
60             return user_session;
61         }
62     }
63
64     /// <summary>
65     /// 文字列から user_session_ で始まる文字列を切り出して返す。数字とアンダーバー以外の文字で切れる。
66     /// </summary>
67     /// <param name="str">切り出す対象文字列</param>
68     /// <returns>user_session 文字列。見つからなければ空文字を返す</returns>
69     private String CutUserSession(String str, String filename) {
70         String ret = "";
71         int start = str.indexOf("user_session_");
72         if (start >= 0) {
73             int index = start + "user_session_".length();
74             while (index < str.length() && ('0' <= str.charAt(index) && str.charAt(index) <= '9'
75                     || str.charAt(index) == '_')) {
76                 ++index;
77             }
78             ret = str.substring(start, index);
79             // C# の string.SubString( , ) と Java の String.substring( , ) は違うので注意!
80             if (!ret.isEmpty() && !filename.isEmpty()) {
81                 System.out.println("Cookie found: " + filename);
82                 return ret;
83             }
84         }
85         return "";
86     }
87 }