176 lines
6.4 KiB
Java
176 lines
6.4 KiB
Java
package ctbrec.sites.stripchat;
|
|
|
|
import static ctbrec.io.HttpConstants.*;
|
|
|
|
import java.io.IOException;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import ctbrec.Config;
|
|
import ctbrec.io.HttpClient;
|
|
import ctbrec.io.HttpException;
|
|
import okhttp3.MediaType;
|
|
import okhttp3.Request;
|
|
import okhttp3.RequestBody;
|
|
import okhttp3.Response;
|
|
|
|
public class StripchatHttpClient extends HttpClient {
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(StripchatHttpClient.class);
|
|
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
|
|
|
private long userId;
|
|
private String csrfToken;
|
|
private String csrfTimestamp;
|
|
private String csrfNotifyTimestamp;
|
|
|
|
public StripchatHttpClient() {
|
|
super("stripchat");
|
|
}
|
|
|
|
@Override
|
|
public boolean login() throws IOException {
|
|
if (loggedIn) {
|
|
if (csrfToken == null) {
|
|
loadCsrfToken();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// persisted cookies might let us log in
|
|
if (checkLoginSuccess()) {
|
|
loggedIn = true;
|
|
LOG.debug("Logged in with cookies");
|
|
if (csrfToken == null) {
|
|
loadCsrfToken();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
if (csrfToken == null) {
|
|
loadCsrfToken();
|
|
}
|
|
|
|
String url = Stripchat.baseUri + "/api/front/auth/login";
|
|
JSONObject requestParams = new JSONObject();
|
|
requestParams.put("loginOrEmail", Config.getInstance().getSettings().stripchatUsername);
|
|
requestParams.put("password", Config.getInstance().getSettings().stripchatPassword);
|
|
requestParams.put("remember", true);
|
|
requestParams.put("csrfToken", csrfToken);
|
|
requestParams.put("csrfTimestamp", csrfTimestamp);
|
|
requestParams.put("csrfNotifyTimestamp", csrfNotifyTimestamp);
|
|
RequestBody body = RequestBody.Companion.create(requestParams.toString(), JSON);
|
|
Request request = new Request.Builder()
|
|
.url(url)
|
|
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
|
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
|
.header(ORIGIN, Stripchat.baseUri)
|
|
.header(REFERER, Stripchat.baseUri)
|
|
.header(CONTENT_TYPE, MIMETYPE_APPLICATION_JSON)
|
|
.post(body)
|
|
.build();
|
|
try (Response response = execute(request)) {
|
|
if (response.isSuccessful()) {
|
|
JSONObject resp = new JSONObject(response.body().string());
|
|
if(resp.has("user")) {
|
|
JSONObject user = resp.getJSONObject("user");
|
|
userId = user.optLong("id");
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
LOG.info("Auto-Login failed: {} {} {}", response.code(), response.message(), url);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void loadCsrfToken() throws IOException {
|
|
String url = Stripchat.baseUri + "/api/front/v2/config/data?requestPath=%2F&timezoneOffset=0";
|
|
Request request = new Request.Builder()
|
|
.url(url)
|
|
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
|
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
|
.header(ORIGIN, Stripchat.baseUri)
|
|
.header(REFERER, Stripchat.baseUri)
|
|
.header(CONTENT_TYPE, MIMETYPE_APPLICATION_JSON)
|
|
.build();
|
|
try (Response response = execute(request)) {
|
|
if (response.isSuccessful()) {
|
|
JSONObject resp = new JSONObject(response.body().string());
|
|
JSONObject data = resp.getJSONObject("data");
|
|
csrfToken = data.optString("csrfToken");
|
|
csrfTimestamp = data.optString("csrfTimestamp");
|
|
csrfNotifyTimestamp = data.optString("csrfNotifyTimestamp");
|
|
} else {
|
|
throw new HttpException(response.code(), response.message());
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* check, if the login worked
|
|
* @throws IOException
|
|
*/
|
|
public boolean checkLoginSuccess() throws IOException {
|
|
long userId = getUserId();
|
|
String url = Stripchat.baseUri + "/api/front/users/" + userId + "/favorites";
|
|
Request request = new Request.Builder()
|
|
.url(url)
|
|
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
|
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
|
.header(ORIGIN, Stripchat.baseUri)
|
|
.header(REFERER, Stripchat.baseUri + "/favorites")
|
|
.header(CONTENT_TYPE, MIMETYPE_APPLICATION_JSON)
|
|
.build();
|
|
try (Response response = execute(request)) {
|
|
if (response.isSuccessful()) {
|
|
return true;
|
|
}
|
|
} catch (Exception e) {
|
|
LOG.info("Login check returned unsuccessful: {}", e.getLocalizedMessage());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public long getUserId() throws JSONException, IOException {
|
|
if (userId == 0) {
|
|
String url = Stripchat.baseUri + "/api/front/users/username/" + Config.getInstance().getSettings().stripchatUsername;
|
|
Request request = new Request.Builder()
|
|
.url(url)
|
|
.header(ACCEPT, MIMETYPE_APPLICATION_JSON)
|
|
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
|
.header(ORIGIN, Stripchat.baseUri)
|
|
.header(REFERER, Stripchat.baseUri)
|
|
.header(CONTENT_TYPE, MIMETYPE_APPLICATION_JSON)
|
|
.build();
|
|
try (Response response = execute(request)) {
|
|
if (response.isSuccessful()) {
|
|
JSONObject resp = new JSONObject(response.body().string());
|
|
JSONObject user = resp.getJSONObject("user");
|
|
userId = user.optLong("id");
|
|
} else {
|
|
throw new HttpException(url, response.code(), response.message());
|
|
}
|
|
}
|
|
}
|
|
return userId;
|
|
}
|
|
|
|
public String getCsrfNotifyTimestamp() {
|
|
return csrfNotifyTimestamp;
|
|
}
|
|
|
|
public String getCsrfTimestamp() {
|
|
return csrfTimestamp;
|
|
}
|
|
|
|
public String getCsrfToken() {
|
|
return csrfToken;
|
|
}
|
|
}
|