<?php
if (!defined('RAPIDLEECH')) {
require_once('index.html');
exit();
}
class filefactory_com extends DownloadClass {
private $page, $cookie = array('ff_locale' => 'en_US.utf8'), $lpass = '';
public function Download($link) {
global $premium_acc;
$arr = explode('|', str_replace('%7C', '|', $link), 2);
if (count($arr) >= 2) {
$this->lpass = (strpos($link, '|') === false) ? rawurldecode($arr[1]) : $arr[1];
$link = $arr[0];
}
unset($arr);
$this->link = $GLOBALS['Referer'] = str_ireplace(array('http://', '://filefactory.com/'), array('https://', '://www.filefactory.com/'), $link);
$post = empty($this->lpass) ? 0 : array('password' => urlencode($this->lpass), 'Submit' => 'Continue');
$this->page = $this->GetPage($this->link, $this->cookie, $post);
$this->cookie = GetCookiesArr($this->page, $this->cookie);
$this->CheckPass();
$X = 0;
while ($X < 3 && preg_match('@\nLocation: .*(/(?:file|preview)/[^\r\n]+)@i', $this->page, $RD)) {
$this->link = 'https://www.filefactory.com' . $RD[1];
$this->page = $this->GetPage($this->link, $this->cookie);
$this->cookie = GetCookiesArr($this->page, $this->cookie);
$X++;
}
if (preg_match('@/error\.php\?code=(\d+)@i', $this->page, $this->redir) && !in_array($this->redir[1], array('257', '258')) /*Forcing PPS is not fair...*/) {
if ($this->redir[1] == '160') html_error('IP banned by FF.');
$page = $this->GetPage('https://www.filefactory.com'.$this->redir[0], $this->cookie);
if (preg_match('@class="alert alert-error">\s*<h2>\s*([\w\-\s]+)\s*</h2>@i', $page, $err)) html_error("[FF:{$this->redir[1]}] ".htmlspecialchars($err[1]));
html_error("Link is not available [{$this->redir[1]}]");
}
if (stripos($this->page, 'error.php?code=') === false && $this->CheckTS()) return; // insert_location doesn't do exit()... So i must to stop the plugin if it's a trafficshare link.
if (stripos($this->link, '/preview/') === false && $_REQUEST['premium_acc'] == 'on' && ((!empty($_REQUEST['premium_user']) && !empty($_REQUEST['premium_pass'])) || (!empty($premium_acc['filefactory_com']['user']) && !empty($premium_acc['filefactory_com']['pass'])))) $this->Login();
else $this->FreeDL();
}
private function CheckTS() {
if (preg_match('@https?://(?:[a-zA-Z\d\-]+\.)*filefactory\.com/get/t/[^\r\n\"\'<>\s\t]+@i', $this->page, $dl)) {
$filename = urldecode(basename(parse_url($dl[0], PHP_URL_PATH)));
if (stripos($dl[0], ';') !== false) $dl[0] = str_replace(array('&',';'), '', $dl[0]);
$this->RedirectDownload($dl[0], $filename, $this->cookie, 0, 0, $filename);
return true;
}
return false;
}
private function CheckPass() {
if (stripos($this->page, 'This File has been password protected by the uploader.') !== false || stripos($this->page, '>Please enter the password</') !== false) {
if (empty($this->lpass)) html_error('File is password protected, please send the password in this format: link|pass');
else html_error('The link\'s password you have sent is not valid.');
}
}
private function FreeDL() {
if (!empty($this->redir)) {
$page = $this->GetPage('https://www.filefactory.com'.$this->redir[0], $this->cookie);
if (preg_match('@class="alert alert-error">\s*<h2>\s*([\w\-\s]+)\s*</h2>@i', $page, $err)) html_error("[FF:{$this->redir[1]}] ".htmlspecialchars($err[1]));
html_error("Link is not available [{$this->redir[1]}]");
}
if (!preg_match('@https?://(?:[a-zA-Z\d\-]+\.)*filefactory\.com/get/f/[^\r\n\"\'<>\s\t]+@i', $this->page, $dllink)) html_error('Download Link Not Found.');
$dllink = $dllink[0];
if (!preg_match('@data-delay\s*=\s*"(\d+)"@i', $this->page, $C) && stripos($this->link, '/preview/') === false) html_error('Failed to Get Link Time-lock.');
if (!empty($C[1])) $this->CountDown($C[1]);
$filename = urldecode(basename(parse_url($dllink, PHP_URL_PATH)));
if (stripos($dllink, ';') !== false) $dllink = str_replace(array('&',';'), '', $dllink);
$this->RedirectDownload($dllink, $filename, $this->cookie, 0, 0, $filename);
}
private function PremiumDL() {
$this->page = $this->GetPage($this->link, $this->cookie);
$this->cookie = GetCookiesArr($this->page, $this->cookie);
$X = 0;
while ($X < 3 && preg_match('@\nLocation: .*(/(?:file|preview)/[^\r\n]+)@i', $this->page, $RD)) {
$this->link = 'https://www.filefactory.com' . $RD[1];
$this->page = $this->GetPage($this->link, $this->cookie);
$this->cookie = GetCookiesArr($this->page, $this->cookie);
$X++;
}
if (preg_match('@/error\.php\?code=(\d+)@i', $this->page, $this->redir)) {
$this->page = $this->GetPage('https://www.filefactory.com'.$this->redir[0], $this->cookie);
if (preg_match('@class="alert alert-error">\s*<h2>\s*([\w\-\s]+)\s*</h2>@i', $this->page, $err)) html_error("[FF:{$this->redir[1]}]-".htmlspecialchars($err[1]));
html_error("Link is not available. [{$this->redir[1]}]");
}
if (!preg_match('@https?://(?:[a-zA-Z\d\-]+\.)*filefactory\.com/get/p/[^\r\n\"\'<>\s\t]+@i', $this->page, $dl)) html_error('Download-Link Not Found.');
$filename = urldecode(basename(parse_url($dl[0], PHP_URL_PATH)));
if (stripos($dl[0], ';') !== false) $dl[0] = str_replace(array('&',';'), '', $dl[0]);
$this->RedirectDownload($dl[0], $filename, $this->cookie, 0, 0, $filename);
}
private function Login() {
global $premium_acc;
$pA = !empty($_REQUEST['premium_user']) && !empty($_REQUEST['premium_pass']) ? true : false;
$email = $pA ? $_REQUEST['premium_user'] : $premium_acc['filefactory_com']['user'];
$password = $pA ? $_REQUEST['premium_pass'] : $premium_acc['filefactory_com']['pass'];
if (empty($email) || empty($password)) html_error('Login Failed: Email or Password is empty. Please check login data.');
$postURL = 'https://www.filefactory.com/member/signin.php';
$post = array();
$post['loginEmail'] = urlencode($email);
$post['loginPassword'] = urlencode($password);
$post['Submit'] = 'Sign+In';
$page = $this->GetPage($postURL, 0, $post, $postURL);
is_present($page, 'The Email Address submitted was invalid', 'Login Failed: Invalid email address.');
is_present($page, 'The email address or password you have entered is incorrect.', 'Login Failed: The Email/Password you have entered is incorrect.');
$this->cookie = GetCookiesArr($page, $this->cookie);
if (empty($this->cookie['auth'])) html_error('Login Failed, auth cookie not found.');
$page = $this->GetPage('https://www.filefactory.com/account/', $this->cookie, 0, $postURL);
is_present($page, "\nLocation: /member/settos.php", 'TOS have changed and need to be approved at the site.');
is_present($page, "\nLocation: /member/setpwd.php", 'Your password has expired, please change it.');
if (stripos($page, '>Free Member<') !== false) {
$this->changeMesg(lang(300).'<br /><b>Account isn\'t premium</b><br />Using it as member.');
$this->page = $this->GetPage($this->link, $this->cookie);
preg_match('@/error\.php\?code=(\d+)@i', $this->page, $this->redir);
return $this->FreeDL();
}
return $this->PremiumDL();
}
}
//[26-Nov-2010] Written by Th3-822.
//[20-Feb-2011] Fixed regex for redirect & Fixed errors in filename & Changed captcha funtion for show reCaptcha. - Th3-822
//[10-Feb-2012] Added error msg at freedl & 2 Regexps edited. -Th3-822
//[11-Mar-2012] Fixed getting dlink in premium account (Sometimes the request it's redirected to freedl error page) && Fixed login function. - Th3-822
//[23-Mar-2012] Fixed free dl regexps. - Th3-822
//[22-May-2012] Added support for files with Traffic Share on freedl. - Th3-822
//[11-Jul-2012] Fixed regexp for files with Traffic Share on freedl && fixed regexp at premiumdl && minor changes. - Th3-822
//[10-Aug-2012] Added cookie support & fixed free acc check. - Th3-822
//[22-Aug-2012] Fixed Traffic Share support (Again) & added error msg. - Th3-822
//[14-May-2013] Fixed freedl (ff removed the captcha... But the code still at page, so i will let it on the plugin too). - Th3-822
//[17-Sep-2013] Rewritten for make it work with the new site & Cookie support removed & Added password protected links support. - Th3-822
//[24-Oct-2013] Added a error at login & fixed redirect on premium download. - Th3-822
//[18-Nov-2013] Fixed premium-dl error msgs. - Th3-822
//[02-Dec-2016] Fixed login error msgs. - Th3-822
//[14-May-2021] Switched links to https. - Th3-822
Comments