2011-03-28 14:21:28 +00:00
< ?
if ( ! isset ( $_REQUEST [ 'authkey' ]) || ! isset ( $_REQUEST [ 'torrent_pass' ])) {
enforce_login ();
$TorrentPass = $LoggedUser [ 'torrent_pass' ];
$DownloadAlt = $LoggedUser [ 'DownloadAlt' ];
2013-02-07 08:00:47 +00:00
$UserID = $LoggedUser [ 'ID' ];
$AuthKey = $LoggedUser [ 'AuthKey' ];
2011-03-28 14:21:28 +00:00
} else {
$UserInfo = $Cache -> get_value ( 'user_' . $_REQUEST [ 'torrent_pass' ]);
if ( ! is_array ( $UserInfo )) {
2011-10-08 08:00:14 +00:00
$DB -> query ( " SELECT
2011-03-28 14:21:28 +00:00
ID ,
DownloadAlt
2011-10-08 08:00:14 +00:00
FROM users_main AS m
INNER JOIN users_info AS i ON i . UserID = m . ID
WHERE m . torrent_pass = '".db_string($_REQUEST[' torrent_pass '])."'
2011-03-28 14:21:28 +00:00
AND m . Enabled = '1' " );
$UserInfo = $DB -> next_record ();
$Cache -> cache_value ( 'user_' . $_REQUEST [ 'torrent_pass' ], $UserInfo , 3600 );
}
$UserInfo = array ( $UserInfo );
list ( $UserID , $DownloadAlt ) = array_shift ( $UserInfo );
if ( ! $UserID ) { error ( 403 ); }
$TorrentPass = $_REQUEST [ 'torrent_pass' ];
2012-06-20 08:00:14 +00:00
$AuthKey = $_REQUEST [ 'authkey' ];
2011-03-28 14:21:28 +00:00
}
$TorrentID = $_REQUEST [ 'id' ];
2012-06-19 08:00:14 +00:00
2011-03-28 14:21:28 +00:00
if ( ! is_number ( $TorrentID )){ error ( 0 ); }
2012-10-24 08:00:16 +00:00
/* uTorrent remote redownloads . torrent files every fifteen minutes
2013-02-07 08:00:47 +00:00
to prevent this retardation from blowing bandwidth etc . , let ' s block it
if he ' s downloaded the . torrent file twice before */
2012-10-24 08:00:16 +00:00
if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'BTWebClient' ) !== FALSE ) {
$DB -> query ( " SELECT 1 FROM users_downloads WHERE UserID= $UserID AND TorrentID= $TorrentID LIMIT 3 " );
if ( $DB -> record_count () > 2 ) {
2013-02-07 08:00:47 +00:00
error ( 'You have already downloaded this .torrent three times. If you need to download it again, please do so from your browser, not through uTorrent remote.' );
2012-10-24 08:00:16 +00:00
die ();
}
}
2011-03-28 14:21:28 +00:00
$Info = $Cache -> get_value ( 'torrent_download_' . $TorrentID );
2011-10-29 08:00:15 +00:00
if ( ! is_array ( $Info ) || ! array_key_exists ( 'PlainArtists' , $Info ) || empty ( $Info [ 10 ])) {
2011-03-28 14:21:28 +00:00
$DB -> query ( " SELECT
t . Media ,
t . Format ,
t . Encoding ,
IF ( t . RemasterYear = 0 , tg . Year , t . RemasterYear ),
tg . ID AS GroupID ,
tg . Name ,
tg . WikiImage ,
2011-10-08 08:00:14 +00:00
tg . CategoryID ,
t . Size ,
t . FreeTorrent ,
t . info_hash
2011-03-28 14:21:28 +00:00
FROM torrents AS t
INNER JOIN torrents_group AS tg ON tg . ID = t . GroupID
WHERE t . ID = '".db_string($TorrentID)."' " );
if ( $DB -> record_count () < 1 ) {
2012-05-18 13:35:17 +00:00
error ( 404 );
2011-03-28 14:21:28 +00:00
}
2011-10-27 08:00:15 +00:00
$Info = array ( $DB -> next_record ( MYSQLI_NUM , array ( 4 , 5 , 6 , 10 )));
2012-10-11 08:00:15 +00:00
$Artists = Artists :: get_artist ( $Info [ 0 ][ 4 ], false );
$Info [ 'Artists' ] = Artists :: display_artists ( $Artists , false , true );
$Info [ 'PlainArtists' ] = Artists :: display_artists ( $Artists , false , true , false );
2011-03-28 14:21:28 +00:00
$Cache -> cache_value ( 'torrent_download_' . $TorrentID , $Info , 0 );
}
if ( ! is_array ( $Info [ 0 ])) {
error ( 404 );
}
2011-10-08 08:00:14 +00:00
list ( $Media , $Format , $Encoding , $Year , $GroupID , $Name , $Image , $CategoryID , $Size , $FreeTorrent , $InfoHash ) = array_shift ( $Info ); // used for generating the filename
2011-03-28 14:21:28 +00:00
$Artists = $Info [ 'Artists' ];
2011-10-08 08:00:14 +00:00
// If he's trying use a token on this, we need to make sure he has one,
// deduct it, add this to the FLs table, and update his cache key.
2011-10-27 08:00:15 +00:00
if ( $_REQUEST [ 'usetoken' ] && $FreeTorrent == '0' ) {
if ( isset ( $LoggedUser )) {
$FLTokens = $LoggedUser [ 'FLTokens' ];
if ( $LoggedUser [ 'CanLeech' ] != '1' ) {
error ( 'You cannot use tokens while leech disabled.' );
}
}
else {
2012-10-11 08:00:15 +00:00
$UInfo = Users :: user_heavy_info ( $UserID );
2011-10-27 08:00:15 +00:00
if ( $UInfo [ 'CanLeech' ] != '1' ) {
error ( 'You may not use tokens while leech disabled.' );
}
$FLTokens = $UInfo [ 'FLTokens' ];
}
2013-02-22 08:00:24 +00:00
2011-10-08 08:00:14 +00:00
// First make sure this isn't already FL, and if it is, do nothing
2013-02-22 08:00:24 +00:00
2012-10-16 08:00:18 +00:00
if ( ! Torrents :: has_token ( $TorrentID )) {
2011-10-27 08:00:15 +00:00
if ( $FLTokens <= 0 ) {
2013-02-07 08:00:47 +00:00
error ( " You do not have any freeleech tokens left. Please use the regular DL link. " );
2011-10-08 08:00:14 +00:00
}
if ( $Size >= 1073741824 ) {
2013-02-07 08:00:47 +00:00
error ( " This torrent is too large. Please use the regular DL link. " );
2011-10-08 08:00:14 +00:00
}
2013-02-22 08:00:24 +00:00
2011-10-27 08:00:15 +00:00
// Let the tracker know about this
2012-10-11 08:00:15 +00:00
if ( ! Tracker :: update_tracker ( 'add_token' , array ( 'info_hash' => rawurlencode ( $InfoHash ), 'userid' => $UserID ))) {
2011-11-01 08:00:10 +00:00
error ( " Sorry! An error occurred while trying to register your token. Most often, this is due to the tracker being down or under heavy load. Please try again later. " );
2011-10-27 08:00:15 +00:00
}
2013-02-22 08:00:24 +00:00
2012-10-16 08:00:18 +00:00
if ( ! Torrents :: has_token ( $TorrentID )) {
2011-10-29 08:00:15 +00:00
$DB -> query ( " INSERT INTO users_freeleeches (UserID, TorrentID, Time) VALUES ( $UserID , $TorrentID , NOW())
2011-11-04 08:00:18 +00:00
ON DUPLICATE KEY UPDATE Time = VALUES ( Time ), Expired = FALSE , Uses = Uses + 1 " );
2011-10-29 08:00:15 +00:00
$DB -> query ( " UPDATE users_main SET FLTokens = FLTokens - 1 WHERE ID= $UserID " );
2013-02-22 08:00:24 +00:00
2011-11-02 08:00:14 +00:00
// Fix for downloadthemall messing with the cached token count
2012-10-11 08:00:15 +00:00
$UInfo = Users :: user_heavy_info ( $UserID );
2011-11-02 08:00:14 +00:00
$FLTokens = $UInfo [ 'FLTokens' ];
2013-02-22 08:00:24 +00:00
2011-10-29 08:00:15 +00:00
$Cache -> begin_transaction ( 'user_info_heavy_' . $UserID );
$Cache -> update_row ( false , array ( 'FLTokens' => ( $FLTokens - 1 )));
$Cache -> commit_transaction ( 0 );
2013-02-22 08:00:24 +00:00
2012-10-16 08:00:18 +00:00
$Cache -> delete_value ( 'users_tokens_' . $UserID );
2011-10-29 08:00:15 +00:00
}
2011-10-08 08:00:14 +00:00
}
}
2011-03-28 14:21:28 +00:00
//Stupid Recent Snatches On User Page
if ( $CategoryID == '1' && $Image != " " ) {
$RecentSnatches = $Cache -> get_value ( 'recent_snatches_' . $UserID );
if ( ! empty ( $RecentSnatches )) {
$Snatch = array ( 'ID' => $GroupID , 'Name' => $Name , 'Artist' => $Artists , 'WikiImage' => $Image );
if ( ! in_array ( $Snatch , $RecentSnatches )) {
if ( count ( $RecentSnatches ) == 5 ) {
array_pop ( $RecentSnatches );
}
array_unshift ( $RecentSnatches , $Snatch );
} elseif ( ! is_array ( $RecentSnatches )) {
$RecentSnatches = array ( $Snatch );
}
$Cache -> cache_value ( 'recent_snatches_' . $UserID , $RecentSnatches , 0 );
}
}
2012-10-24 08:00:16 +00:00
$DB -> query ( " INSERT IGNORE INTO users_downloads (UserID, TorrentID, Time) VALUES (' $UserID ', ' $TorrentID ', ' " . sqltime () . " ') " );
2011-03-28 14:21:28 +00:00
$DB -> query ( " SELECT File FROM torrents_files WHERE TorrentID=' $TorrentID ' " );
2013-02-21 08:00:30 +00:00
list ( $Contents ) = $DB -> next_record ( MYSQLI_NUM , false );
if ( Misc :: is_new_torrent ( $Contents )) {
require ( SERVER_ROOT . '/classes/class_bencode.php' );
$TorEnc = BEncTorrent :: add_announce_url ( $Contents , ANNOUNCE_URL . " / $TorrentPass /announce " );
} else {
require ( SERVER_ROOT . '/classes/class_torrent.php' );
$Contents = unserialize ( base64_decode ( $Contents ));
$Tor = new TORRENT ( $Contents , true ); // New TORRENT object
// Set torrent announce URL
$Tor -> set_announce_url ( ANNOUNCE_URL . " / $TorrentPass /announce " );
// Remove multiple trackers from torrent
unset ( $Tor -> Val [ 'announce-list' ]);
// Remove web seeds (put here for old torrents not caught by previous commit
unset ( $Tor -> Val [ 'url-list' ]);
// Remove libtorrent resume info
unset ( $Tor -> Val [ 'libtorrent_resume' ]);
$TorEnc = $Tor -> enc ();
2011-03-28 14:21:28 +00:00
}
2013-02-21 08:00:30 +00:00
$FileName = TorrentsDL :: construct_file_name ( $Info [ 'PlainArtists' ], $Name , $Year , $Media , $Format , $Encoding , false , $DownloadAlt );
2011-03-28 14:21:28 +00:00
if ( $DownloadAlt ) {
header ( 'Content-Type: text/plain; charset=utf-8' );
} elseif ( ! $DownloadAlt || $Failed ) {
header ( 'Content-Type: application/x-bittorrent; charset=utf-8' );
}
header ( 'Content-disposition: attachment; filename="' . $FileName . '"' );
2013-02-21 08:00:30 +00:00
echo $TorEnc ;
2012-08-25 08:00:15 +00:00
define ( 'IE_WORKAROUND_NO_CACHE_HEADERS' , 1 );