package saccubus.net;
+import static org.apache.commons.lang.StringUtils.*;
+
import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
*/
public class CookieWinCrome extends Cookie {
+ private static final Logger logger = LoggerFactory.getLogger(CookieWinCrome.class);
private static final String COOKIE_PATH = "\\Google\\Chrome\\User Data\\Default\\Cookies";
private static final Pattern USER_SESSION_PATTERN = Pattern.compile("user_session_[\\d_]+");
*/
@Override
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;
- }
- }
+ final String cookieWin7 = tryReadingWin7();
+ if (isNotEmpty(cookieWin7)) {
+ return cookieWin7;
}
- 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;
- }
+ final String cookieXp = tryReadingXp();
+ if (isNotEmpty(cookieXp)) {
+ return cookieXp;
}
- 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;
- }
+
+ final String cookieOther = tryReadingOther();
+ if (isNotEmpty(cookieOther)) {
+ return cookieOther;
}
throw new IOException("user session not found in google chorome cookie");
return null;
}
+
+ /**
+ * Windows7 のcookie取得を試みる.
+ * @return ユーザセッション文字列. 取得できない場合はnull.
+ */
+ private String tryReadingWin7() {
+ final String localAppData = System.getenv("LOCALAPPDATA");
+ if (isNotEmpty(localAppData)) {
+ // Win7 32bit
+ final File cookieFile = new File(localAppData + COOKIE_PATH);
+ if (cookieFile.isFile()) {
+ try {
+ final String dataStr = FileUtils.readFileToString(cookieFile, "UTF-8");
+ return cutUserSession(dataStr);
+ } catch (IOException ex) {
+ logger.error("cookie read error: " + cookieFile.getPath(), ex);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * WindowsXP のcookie処理を試みる.
+ * @return ユーザセッション文字列. 取得できない場合はnull.
+ */
+ private String tryReadingXp() {
+ final String profile_dir = System.getenv("USERPROFILE");
+ if (isNotEmpty(profile_dir)) {
+ // XP 32bit
+ final File cookieFile = new File(profile_dir + "\\Local Settings\\Application Data" + COOKIE_PATH);
+ if (cookieFile.isFile()) {
+ try {
+ String dataStr = FileUtils.readFileToString(cookieFile, "UTF-8");
+ return cutUserSession(dataStr);
+ } catch (IOException ex) {
+ logger.error("cookie read error: " + cookieFile.getPath(), ex);
+ }
+ }
+ }
+ return null;
+ }
+
+ private String tryReadingOther() {
+ final String appData = System.getenv("APPDATA");
+ if (isNotEmpty(appData)) {
+ // ??? just try
+ final File cookieFile = new File(appData + COOKIE_PATH);
+ if (cookieFile.isFile()) {
+ try {
+ String dataStr = FileUtils.readFileToString(cookieFile, "UTF-8");
+ return cutUserSession(dataStr);
+ } catch (IOException ex) {
+ logger.error("cookie read error: " + cookieFile.getPath(), ex);
+ }
+ }
+ }
+ return null;
+ }
}