<?php
if (!defined('RAPIDLEECH')) {
require_once ("index.html");
exit;
}
class bayfiles_net extends DownloadClass {
private $link, $page, $cookie, $fid, $token;
public function Download($link) {
global $premium_acc;
$this->link = str_ireplace('bayfiles.com', 'bayfiles.net', $link);
$this->cookie = array();
if (empty($_REQUEST['step']) || $_REQUEST['step'] != 1) { // Check link
$this->page = $this->GetPage($link);
is_present($this->page, 'Invalid security token', 'The link is incorrect or it has been deleted.');
is_present($this->page, 'The requested file could not be found.', 'The requested file could not be found. Please check the download link.');
$this->cookie = GetCookiesArr($this->page);
// Check direct link:
if (preg_match('@https?://([^/\'\"<>\r\n\s\t]+\.)?baycdn\.com/dl/[^\'\"<>\r\n\s\t]+@i', $this->page, $dlink)) {
$FileName = urldecode(basename(parse_url(html_entity_decode($dlink[0]), PHP_URL_PATH)));
return $this->RedirectDownload($dlink[0], $FileName, $this->cookie);
}
}
if ($_REQUEST["premium_acc"] == "on" && ((!empty($_REQUEST["premium_user"]) && !empty($_REQUEST["premium_pass"])) || (!empty($premium_acc["bayfiles_net"]["user"]) && !empty($premium_acc["bayfiles_net"]["pass"])))) {
$this->Login();
} elseif (isset($_REQUEST['step']) && $_REQUEST['step'] == 1) {
$this->Captcha();
} else {
$this->Prepare();
}
}
private function Prepare() {
is_present($this->page, 'has recently downloaded a file. Upgrade to premium or wait ', 'Your IP has recently downloaded a file. '.(($err = cut_str($this->page, 'Upgrade to premium or wait ', '.')) ? "Wait $err before trying again." : 'Try again later.'));
if (!preg_match('@var vfid = (\d+);@i', $this->page, $fid)) html_error("Error: Fileid not found");
$this->fid = $fid[1];
$page = $this->GetPage('http://bayfiles.net/ajax_download?action=startTimer&vfid='.$this->fid);
if (!preg_match('@"token":"([^\"]+)"@i', $page, $token)) html_error("Error: Countdown token not found");
$this->token = $token[1];
if (!preg_match("@var delay = (\d+);@i", $this->page, $CD)) html_error("Error: Countdown not found");
$this->CountDown($CD[1]+2);
// Uncomment next line when bayfiles have added a reCaptcha for download
// return $this->Captcha();
$this->FreeDL();
}
private function Captcha() {
if (isset($_REQUEST['step']) && $_REQUEST['step'] == 1) {
if (empty($_POST['fid']) || empty($_POST['fid']) || empty($_POST['cookie'])) html_error("Error: Invalid Captcha form data.");
if (empty($_POST['captcha'])) html_error("Error: You didn't enter the image verification code.");
$this->cookie = decrypt(urldecode($_POST['cookie']));
$post = array();
$post['action'] = 'verifyCaptcha';
$post['challenge'] = $_POST['challenge'];
$post['response'] = $_POST['captcha'];
$post['token'] = $this->token = $_POST['token'];
$this->fid = $_POST['fid'];
$page = $this->GetPage('http://bayfiles.net/ajax_captcha', $this->cookie, $post);
is_present($page, 'Invalid captcha', 'Error: Wrong Captcha Entered.');
if (!preg_match('@"token":"([^\"]+)"@i', $page, $token)) html_error("Error: Captcha token not found");
$this->token = $token[1];
return $this->FreeDL();
} else {
$page = $this->GetPage('http://bayfiles.net/ajax_captcha', $this->cookie, array('action' => 'getCaptcha'));
if (!preg_match('@Recaptcha\.create\s*\(\s*[\"|\']([^\"|\'|\)]+)[\"|\']@i', $page, $pid)) html_error("Error: reCaptcha not found");
$page = $this->GetPage("http://www.google.com/recaptcha/api/challenge?k=" . $pid[1]);
if (!preg_match('/challenge \: \'([^\']+)/i', $page, $ch)) html_error("Error getting Captcha data.");
$data = $this->DefaultParamArr($this->link, encrypt(CookiesToStr($this->cookie)));
$data['challenge'] = $ch[1];
$data['fid'] = $this->fid;
$data['token'] = $this->token;
$data['step'] = '1';
//Download captcha img.
$page = $this->GetPage("http://www.google.com/recaptcha/api/image?c=" . $ch[1]);
$capt_img = substr($page, strpos($page, "\r\n\r\n") + 4);
$imgfile = DOWNLOAD_DIR . "bayfiles_captcha.jpg";
if (file_exists($imgfile)) unlink($imgfile);
if (!write_file($imgfile, $capt_img)) html_error("Error getting CAPTCHA image.", 0);
$this->EnterCaptcha($imgfile.'?'.time(), $data, 20);
exit;
}
}
private function FreeDL($act='getLink') {
$post = array('action' => $act, 'vfid' => $this->fid, 'token' => $this->token);
$page = $this->GetPage('http://bayfiles.net/ajax_download', $this->cookie, $post);
if (!preg_match('@https?://([^/\'\"<>\r\n\s\t]+\.)?baycdn\.com/dl/[^\'\"<>\r\n\s\t]+@i', $page, $dlink)) html_error('Error: Download link not found');
$FileName = urldecode(basename(parse_url(html_entity_decode($dlink[0]), PHP_URL_PATH)));
$this->RedirectDownload($dlink[0], $FileName, $this->cookie);
}
private function PremiumDL() {
$page = $this->GetPage($this->link, $this->cookie);
if (!preg_match('@https?://([^/\'\"<>\r\n\s\t]+\.)?baycdn\.com/dl/[^\'\"<>\r\n\s\t]+@i', $page, $dlink)) html_error('Error: Download link not found.');
$FileName = urldecode(basename(parse_url(html_entity_decode($dlink[0]), PHP_URL_PATH)));
$this->RedirectDownload($dlink[0], $FileName, $this->cookie);
}
private function Login() {
global $premium_acc;
if (!empty($_REQUEST["premium_user"]) && !empty($_REQUEST["premium_pass"])) $pA = true;
else $pA = false;
$user = ($pA ? $_REQUEST["premium_user"] : $premium_acc["bayfiles_net"]["user"]);
$pass = ($pA ? $_REQUEST["premium_pass"] : $premium_acc["bayfiles_net"]["pass"]);
if (empty($user) || empty($pass)) html_error("Login Failed: Username or Password are empty. Please check login data.");
$post = array('action'=>'login','next'=>'%252F');
$post["username"] = urlencode($user);
$post["password"] = urlencode($pass);
$page = $this->GetPage('http://bayfiles.net/ajax_login', $this->cookie, $post, 'http://bayfiles.net/');
is_present($page, 'Login failed. Please try again', 'Login Failed: Invalid username and/or password.');
if ($err = cut_str($page, '"error":"', '"')) html_error("Login Failed: $err.");
is_notpresent($page, 'Set-Cookie: SESSID=', 'Login Failed: Cannot get cookie.');
$this->cookie = array_merge($this->cookie, GetCookiesArr($page));
$page = $this->GetPage('http://bayfiles.net/account', $this->cookie, 0, 'http://bayfiles.net/');
if (preg_match('@<div class="account-content">[\s|\t|\r|\n]+<p>((Normal)|(Premium))</p>@i', $page, $acctype) && $acctype[1] == 'Normal') {
$this->changeMesg(lang(300)."<br /><br /><b>Account isn\\\'t premium</b><br />Using Free Download.");
$this->page = $this->GetPage($this->link, $this->cookie);
return $this->Prepare();
}
return $this->PremiumDL();
}
public function CheckBack($header) {
$statuscode = intval(substr($header, 9, 3));
if ($statuscode == 302) {
$length = trim(cut_str($header, "\r\nContent-Length: ", "\r\n"));
if (empty($length) || (strlen($length) <= 6 && intval($length) <= 102400)) {
global $fp, $PHP_SELF;
$page = '';
while(strlen($data = @fread($fp, 16384)) > 0) $page .= $data;
if (stripos($header, "\r\nTransfer-Encoding: chunked") !== false && function_exists('http_chunked_decode')) {
$dechunked = http_chunked_decode($page);
if ($dechunked !== false) $page = $dechunked;
unset($dechunked);
}
$page = $header.$page;
if (stripos($page, "\nyou need to wait 5 minutes between downloads") !== false) {
insert_timer(10, 'Auto retry download:');//echo '<script type="text/javascript">location.reload();</script>';
echo "<center><form name='retryf' action='$PHP_SELF' method='POST'>\n";
if (!empty($_GET['proxy'])) $_GET['useproxy'] = 'on';
$post = array(); // I can't reload because firefox shows an anoying alertbox.
$post['filename'] = $_GET['filename'];
if (!empty($_GET['force_name'])) $post['force_name'] = $_GET['force_name'];
$post['host'] = $_GET['host'];
$post['path'] = $_GET['path'];
if (!empty($_GET['link'])) $post['link'] = $_GET['link'];
if (!empty($_GET['referer'])) $post['referer'] = $_GET['referer'];
if (!empty($_GET['post'])) $post['post'] = $_GET['post'];
$post = array_merge($this->DefaultParamArr(), array_map('urlencode', $post));
foreach ($post as $name => $input) echo "<input type='hidden' name='$name' id='$name' value='$input' />\n";
echo "<input type='submit' value='Try Again' />\n";
echo "</form></center><script type='text/javascript'>document.retryf.submit();</script><br />\n";
html_error('You need to wait 5 minutes between downloads.');
} elseif (stripos($page, "\ndownload link expired") !== false) {
echo "<center><form action='$PHP_SELF' method='POST'>\n";
$post = $this->DefaultParamArr(cut_str($header, 'Location: ', "\r\n"));
$post['premium_acc'] = 'on';
foreach ($post as $name => $input) echo "<input type='hidden' name='$name' id='$name' value='$input' />\n";
echo "<input type='submit' value='Download Again' />\n";
echo "</form></center><br />\n";
html_error('Download link has expired.');
}
}
}
}
}
//[28-Jan-2012] Written by Th3-822.
//[01-Feb-2012] Added premium support. -Th3-822
//[17-Jul-2012] Added support for direct links. - Th3-822
//[10-Oct-2012] Added checkback for show 2 error msgs and a autoretry/retry button. - Th3-822
//[17-Jul-2013] Updated for .net domain. - Th3-822
?>
Comments