forked from j62/ctbrec
1
0
Fork 0

Fix login for FC2Live

FC2Live sends cookies with value "deleted" to invalidate previously set values. In the same request
they send new values, too. That confused OkHttp. We now use a custom cookie jar for FC2Live, which
ignores cookies with the value "deleted"
This commit is contained in:
0xboobface 2019-01-27 14:05:45 +01:00
parent 0f51be96c0
commit 70a9d65e48
4 changed files with 56 additions and 5 deletions

View File

@ -67,7 +67,7 @@ public class Fc2FollowedUpdateService extends PaginatedScheduledService {
} }
return models; return models;
} else { } else {
throw new IOException("Request was not successful: " + content); throw new IOException("Request was not successful: " + json.toString());
} }
} else { } else {
throw new HttpException(resp.code(), resp.message()); throw new HttpException(resp.code(), resp.message());

View File

@ -43,9 +43,14 @@ public abstract class HttpClient {
protected HttpClient(String name) { protected HttpClient(String name) {
this.name = name; this.name = name;
cookieJar = createCookieJar();
reconfigure(); reconfigure();
} }
protected CookieJarImpl createCookieJar() {
return new CookieJarImpl();
}
private void loadProxySettings() { private void loadProxySettings() {
ProxyType proxyType = Config.getInstance().getSettings().proxyType; ProxyType proxyType = Config.getInstance().getSettings().proxyType;
switch (proxyType) { switch (proxyType) {

View File

@ -0,0 +1,25 @@
package ctbrec.sites.fc2live;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import ctbrec.io.CookieJarImpl;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
public class Fc2CookieJar extends CookieJarImpl {
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
List<Cookie> sanitizedCookies = new ArrayList<>(cookies);
for (Iterator<Cookie> iterator = sanitizedCookies.iterator(); iterator.hasNext();) {
Cookie cookie = iterator.next();
if(cookie.value().equalsIgnoreCase("deleted")) {
// ignore and remove from list
iterator.remove();
}
}
super.saveFromResponse(url, sanitizedCookies);
}
}

View File

@ -7,6 +7,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.io.CookieJarImpl;
import ctbrec.io.HttpClient; import ctbrec.io.HttpClient;
import ctbrec.io.HttpException; import ctbrec.io.HttpException;
import okhttp3.FormBody; import okhttp3.FormBody;
@ -24,9 +25,15 @@ public class Fc2HttpClient extends HttpClient {
super("fc2live"); super("fc2live");
} }
@Override
protected CookieJarImpl createCookieJar() {
return new Fc2CookieJar();
}
@Override @Override
public boolean login() throws IOException { public boolean login() throws IOException {
if(loggedIn) { LOG.debug("Login");
if (loggedIn) {
return true; return true;
} }
@ -54,14 +61,28 @@ public class Fc2HttpClient extends HttpClient {
try(Response resp = execute(req)) { try(Response resp = execute(req)) {
if(resp.isSuccessful()) { if(resp.isSuccessful()) {
String page = resp.body().string(); String page = resp.body().string();
LOG.debug(page);
if(page.contains("Invalid e-mail address or password")) { if(page.contains("Invalid e-mail address or password")) {
return false; return false;
} else { } else {
loggedIn = true; LOG.debug("Calling https://secure.id.fc2.com/?login=done");
return true; req = new Request.Builder()
.url("https://secure.id.fc2.com/?login=done")
.header("Referer", "https://secure.id.fc2.com/index.php?mode=login&switch_language=en")
.build();
try (Response resp2 = execute(req)) {
if (resp.isSuccessful()) {
LOG.debug("Login complete");
loggedIn = true;
return true;
} else {
LOG.debug("Login failed");
loggedIn = false;
return false;
}
}
} }
} else { } else {
resp.close();
LOG.error("Login failed {} {}", resp.code(), resp.message()); LOG.error("Login failed {} {}", resp.code(), resp.message());
return false; return false;
} }