ctbrec-5.3.2-experimental/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java

126 lines
4.1 KiB
Java

package ctbrec.sites.mfc;
import static ctbrec.io.HttpConstants.*;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.NoSuchElementException;
import java.util.Objects;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
public class MyFreeCamsHttpClient extends HttpClient {
private static final Logger LOG = LoggerFactory.getLogger(MyFreeCamsHttpClient.class);
public MyFreeCamsHttpClient() {
super("myfreecams");
}
@Override
public boolean login() throws IOException {
if(loggedIn) {
return true;
}
if(checkLogin()) {
loggedIn = true;
LOG.debug("Logged in with cookies");
return true;
}
String username = Config.getInstance().getSettings().mfcUsername;
String password = Config.getInstance().getSettings().mfcPassword;
RequestBody body = new FormBody.Builder()
.add("username", username)
.add("password", password)
.add("tz", "2")
.add("ss", "1920x1080")
.add("submit_login", "97")
.build();
Request req = new Request.Builder()
.url(MyFreeCams.baseUrl + "/php/login.php")
.header(ACCEPT, "*/*")
.header(ACCEPT_LANGUAGE, Locale.ENGLISH.getLanguage())
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.header(CONNECTION, KEEP_ALIVE)
.header(REFERER, MyFreeCams.baseUrl)
.header("Content-Type", "application/x-www-form-urlencoded")
.post(body)
.build();
Response resp = execute(req);
if(resp.isSuccessful()) {
String page = resp.body().string();
if(page.contains("Your username or password are incorrect")) {
return false;
} else {
loggedIn = true;
return true;
}
} else {
resp.close();
LOG.error("Login failed {} {}", resp.code(), resp.message());
return false;
}
}
private boolean checkLogin() throws IOException {
Request req = new Request.Builder()
.url(MyFreeCams.baseUrl + "/php/account.php?request=status")
.header(ACCEPT, "*/*")
.header(ACCEPT_LANGUAGE, Locale.ENGLISH.getLanguage())
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
.header(CONNECTION, KEEP_ALIVE)
.build();
try(Response response = execute(req)) {
if(response.isSuccessful()) {
String content = response.body().string();
try {
Elements tags = HtmlParser.getTags(content, "div.content > p > b");
tags.get(2).text();
return true;
} catch(Exception e) {
LOG.debug("Token tag not found. Login failed");
return false;
}
} else {
throw new HttpException(response.code(), response.message());
}
}
}
@Override
public WebSocket newWebSocket(Request req, WebSocketListener webSocketListener) {
return client.newWebSocket(req, webSocketListener);
}
public Cookie getCookie(String name) {
CookieJar jar = client.cookieJar();
HttpUrl url = HttpUrl.parse(MyFreeCams.baseUrl);
List<Cookie> cookies = jar.loadForRequest(url);
for (Cookie cookie : cookies) {
if(Objects.equals(cookie.name(), name)) {
return cookie;
}
}
throw new NoSuchElementException("No cookie with name " + name);
}
}