[FurAffinityUserBridge] Replate username/password with cookie login (#1641)

This commit is contained in:
Foxocube 2022-03-31 19:28:46 +01:00 committed by GitHub
parent b6798b9878
commit d6695c0e73
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,6 +3,7 @@ class FurAffinityUserBridge extends BridgeAbstract {
const NAME = 'FurAffinity User Gallery'; const NAME = 'FurAffinity User Gallery';
const URI = 'https://www.furaffinity.net'; const URI = 'https://www.furaffinity.net';
const MAINTAINER = 'CyberJacob'; const MAINTAINER = 'CyberJacob';
const DESCRIPTION = 'See https://rss-bridge.github.io/rss-bridge/Bridge_Specific/Furaffinityuser.html for explanation';
const PARAMETERS = array( const PARAMETERS = array(
array( array(
'searchUsername' => array( 'searchUsername' => array(
@ -12,13 +13,13 @@ class FurAffinityUserBridge extends BridgeAbstract {
'title' => 'Username to fetch the gallery for', 'title' => 'Username to fetch the gallery for',
'exampleValue' => 'armundy', 'exampleValue' => 'armundy',
), ),
'loginUsername' => array( 'aCookie' => array(
'name' => 'Login Username', 'name' => 'Login cookie \'a\'',
'type' => 'text', 'type' => 'text',
'required' => true 'required' => true
), ),
'loginPassword' => array( 'bCookie' => array(
'name' => 'Login Password', 'name' => 'Login cookie \'b\'',
'type' => 'text', 'type' => 'text',
'required' => true 'required' => true
) )
@ -26,10 +27,12 @@ class FurAffinityUserBridge extends BridgeAbstract {
); );
public function collectData() { public function collectData() {
$cookies = self::login(); $opt = array(CURLOPT_COOKIE => 'b=' . $this->getInput('bCookie') . '; a=' . $this->getInput('aCookie'));
$url = self::URI . '/gallery/' . $this->getInput('searchUsername'); $url = self::URI . '/gallery/' . $this->getInput('searchUsername');
$html = getSimpleHTMLDOM($url, $cookies); $html = getSimpleHTMLDOM($url, array(), $opt)
or returnServerError('Could not load the user\'s gallery page.');
$submissions = $html->find('section[id=gallery-gallery]', 0)->find('figure'); $submissions = $html->find('section[id=gallery-gallery]', 0)->find('figure');
foreach($submissions as $submission) { foreach($submissions as $submission) {
@ -52,59 +55,4 @@ class FurAffinityUserBridge extends BridgeAbstract {
public function getURI() { public function getURI() {
return self::URI . '/user/' . $this->getInput('searchUsername'); return self::URI . '/user/' . $this->getInput('searchUsername');
} }
private function login() {
$ch = curl_init(self::URI . '/login/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, ini_get('user_agent'));
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
$fields = implode('&', array(
'action=login',
'retard_protection=1',
'name=' . urlencode($this->getInput('loginUsername')),
'pass=' . urlencode($this->getInput('loginPassword')),
'login=Login to Faraffinity'
));
curl_setopt($ch, CURLOPT_POST, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
if(defined('PROXY_URL') && !defined('NOPROXY')) {
curl_setopt($ch, CURLOPT_PROXY, PROXY_URL);
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$data = curl_exec($ch);
$errorCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
$curlErrno = curl_errno($ch);
$curlInfo = curl_getinfo($ch);
if($data === false)
fDebug::log("Cant't download {$url} cUrl error: {$curlError} ({$curlErrno})");
curl_close($ch);
if($errorCode != 200) {
returnServerError(error_get_last());
} else {
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $data, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
return $cookies;
}
}
} }