Refactored POST request
parent
36f6075e32
commit
6e1e86a983
|
@ -68,25 +68,25 @@ export async function authenticate(credentials: credentials, force: boolean = fa
|
||||||
const secureURL = enforceHttpsUrl(f95url.F95_LOGIN_URL);
|
const secureURL = enforceHttpsUrl(f95url.F95_LOGIN_URL);
|
||||||
|
|
||||||
// Prepare the parameters to send to the platform to authenticate
|
// Prepare the parameters to send to the platform to authenticate
|
||||||
const params = new URLSearchParams();
|
const params = {
|
||||||
params.append("login", credentials.username);
|
"login": credentials.username,
|
||||||
params.append("url", "");
|
"url": "",
|
||||||
params.append("password", credentials.password);
|
"password": credentials.password,
|
||||||
params.append("password_confirm", "");
|
"password_confirm": "",
|
||||||
params.append("additional_security", "");
|
"additional_security": "",
|
||||||
params.append("remember", "1");
|
"remember": "1",
|
||||||
params.append("_xfRedirect", "https://f95zone.to/");
|
"_xfRedirect": "https://f95zone.to/",
|
||||||
params.append("website_code", "");
|
"website_code": "",
|
||||||
params.append("_xfToken", credentials.token);
|
"_xfToken": credentials.token,
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Try to log-in
|
// Try to log-in
|
||||||
let config = Object.assign({}, commonConfig);
|
const response = await fetchPOSTResponse(f95url.F95_LOGIN_URL, params, force);
|
||||||
if (force) delete config.jar;
|
|
||||||
const response = await axios.post(secureURL, params, config);
|
|
||||||
|
|
||||||
|
if (response.isSuccess()) {
|
||||||
// Parse the response HTML
|
// Parse the response HTML
|
||||||
const $ = cheerio.load(response.data);
|
const $ = cheerio.load(response.value.data as string);
|
||||||
|
|
||||||
// Get the error message (if any) and remove the new line chars
|
// Get the error message (if any) and remove the new line chars
|
||||||
const errorMessage = $("body").find(f95selector.LOGIN_MESSAGE_ERROR).text().replace(/\n/g, "");
|
const errorMessage = $("body").find(f95selector.LOGIN_MESSAGE_ERROR).text().replace(/\n/g, "");
|
||||||
|
@ -95,6 +95,8 @@ export async function authenticate(credentials: credentials, force: boolean = fa
|
||||||
const result = errorMessage.trim() === "";
|
const result = errorMessage.trim() === "";
|
||||||
const message = errorMessage.trim() === "" ? "Authentication successful" : errorMessage;
|
const message = errorMessage.trim() === "" ? "Authentication successful" : errorMessage;
|
||||||
return new LoginResult(result, message);
|
return new LoginResult(result, message);
|
||||||
|
}
|
||||||
|
else throw response.value;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
shared.logger.error(`Error ${e.message} occurred while authenticating to ${secureURL}`);
|
shared.logger.error(`Error ${e.message} occurred while authenticating to ${secureURL}`);
|
||||||
return new LoginResult(false, `Error ${e.message} while authenticating`);
|
return new LoginResult(false, `Error ${e.message} while authenticating`);
|
||||||
|
@ -128,10 +130,10 @@ export async function fetchGETResponse(url: string): Promise<Result<GenericAxios
|
||||||
const response = await axios.get(secureURL, commonConfig);
|
const response = await axios.get(secureURL, commonConfig);
|
||||||
return success(response);
|
return success(response);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
shared.logger.error(`Error ${e.message} occurred while trying to fetch ${secureURL}`);
|
shared.logger.error(`(GET) Error ${e.message} occurred while trying to fetch ${secureURL}`);
|
||||||
const genericError = new GenericAxiosError({
|
const genericError = new GenericAxiosError({
|
||||||
id: 1,
|
id: 1,
|
||||||
message:`Error ${e.message} occurred while trying to fetch ${secureURL}`,
|
message:`(GET) Error ${e.message} occurred while trying to fetch ${secureURL}`,
|
||||||
error: e
|
error: e
|
||||||
});
|
});
|
||||||
return failure(genericError);
|
return failure(genericError);
|
||||||
|
@ -199,6 +201,42 @@ export async function getUrlRedirect(url: string): Promise<string> {
|
||||||
const response = await axios.head(url);
|
const response = await axios.head(url);
|
||||||
return response.config.url;
|
return response.config.url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a POST request through axios.
|
||||||
|
* @param url URL to request
|
||||||
|
* @param params List of value pairs to send with the request
|
||||||
|
* @param force If `true`, the request ignores the sending of cookies already present on the device.
|
||||||
|
*/
|
||||||
|
export async function fetchPOSTResponse(url: string, params: { [s: string]: string }, force: boolean = false): Promise<Result<GenericAxiosError, AxiosResponse<any>>> {
|
||||||
|
// Secure the URL
|
||||||
|
const secureURL = enforceHttpsUrl(url);
|
||||||
|
|
||||||
|
// Prepare the parameters for the POST request
|
||||||
|
const urlParams = new URLSearchParams();
|
||||||
|
for (const [key, value] of Object.entries(params)) urlParams.append(key, value);
|
||||||
|
|
||||||
|
// Shallow copy of the common configuration object
|
||||||
|
const config = Object.assign({}, commonConfig);
|
||||||
|
|
||||||
|
// Remove the cookies if forced
|
||||||
|
if (force) delete config.jar;
|
||||||
|
|
||||||
|
// Send the POST request and await the response
|
||||||
|
try {
|
||||||
|
const response = await axios.post(secureURL, urlParams, config);
|
||||||
|
return success(response);
|
||||||
|
} catch (e) {
|
||||||
|
shared.logger.error(`(POST) Error ${e.message} occurred while trying to fetch ${secureURL}`);
|
||||||
|
const genericError = new GenericAxiosError({
|
||||||
|
id: 3,
|
||||||
|
message: `(POST) Error ${e.message} occurred while trying to fetch ${secureURL}`,
|
||||||
|
error: e
|
||||||
|
});
|
||||||
|
return failure(genericError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//#endregion Utility methods
|
//#endregion Utility methods
|
||||||
|
|
||||||
//#region Private methods
|
//#region Private methods
|
||||||
|
|
Loading…
Reference in New Issue