Thread: SEEDsource 2.0
View Single Post
  #7  
Old 18th January 2012, 21:07
dj_otrov's Avatar
dj_otrov dj_otrov is offline
Senior Member
 
Join Date: Jan 2012
Bulgaria
Posts: 142
Default Info
PHP Code:
[B] <?

require_once("include/benc.php");
require_once(
"include/bittorrent.php");

ini_set("upload_max_filesize",$max_torrent_size);

function 
bark($msg) {
        
genbark($msg"Upload failed!");
}

dbconn();

loggedinorreturn();
parked();

if (
get_user_class() < UC_UPLOADER)
  die;

foreach(
explode(":","descr:type:name") as $v) {
        if (!isset(
$_POST[$v]))
                
bark("missing form data");
}

if (!isset(
$_FILES["file"]))
        
bark("missing form data");

$f $_FILES["file"];
$fname unesc($f["name"]);
if (empty(
$fname))
        
bark("Empty filename!");

if (
$_POST['uplver'] == 'yes') {
$anonymous "yes";
$anon "Anonymous";
}
else {
$anonymous "no";
$anon $CURUSER["username"];
}

$descr unesc($_POST["descr"]);
if (!
$descr)
  
bark("You must enter a description!");

$catid = ($_POST["type"]);
if (!
is_valid_id($catid))
        
bark("You must select a category to put the torrent in!");

if (!
validfilename($fname))
        
bark("Invalid filename!");
if (!
preg_match('/^(.+)\.torrent$/si'$fname$matches))
        
bark("Invalid filename (not a .torrent).");
$shortfname $torrent $matches[1];
if (!empty(
$_POST["name"]))
        
$torrent unesc($_POST["name"]);

$tmpname $f["tmp_name"];
if (!
is_uploaded_file($tmpname))
        
bark("eek");
if (!
filesize($tmpname))
        
bark("Empty file!");

$dict bdec_file($tmpnamefilesize($tmpname));
 if (!isset(
$dict))
 
bark("What the hell did you upload? This is not a bencoded file!");

function 
dict_check($d$s) {
        if (
$d["type"] != "dictionary")
                
bark("not a dictionary");
        
$a explode(":"$s);
        
$dd $d["value"];
        
$ret = array();
        foreach (
$a as $k) {
                unset(
$t);
                if (
preg_match('/^(.*)\((.*)\)$/'$k$m)) {
                        
$k $m[1];
                        
$t $m[2];
                }
                if (!isset(
$dd[$k]))
                        
bark("dictionary is missing key(s)");
                if (isset(
$t)) {
                        if (
$dd[$k]["type"] != $t)
                                
bark("invalid entry in dictionary");
                        
$ret[] = $dd[$k]["value"];
                }
                else
                        
$ret[] = $dd[$k];
        }
        return 
$ret;
}

function 
dict_get($d$k$t) {
        if (
$d["type"] != "dictionary")
                
bark("not a dictionary");
        
$dd $d["value"];
        if (!isset(
$dd[$k]))
                return;
        
$v $dd[$k];
        if (
$v["type"] != $t)
                
bark("invalid dictionary entry type");
        return 
$v["value"];
}

list(
$ann$info) = dict_check($dict"announce(string):info");
list(
$dname$plen$pieces) = dict_check($info"name(string):piece length(integer):pieces(string)");

//$passkey=$announce_urls[0].'?passkey='.$CURUSER['passkey'];

//if ($passkey != $ann)
//bark("invalid announce url! must be <b>" . $passkey . "</b>");

if (strlen($pieces) % 20 != 0)
        
bark("invalid pieces");

$filelist = array();
$totallen dict_get($info"length""integer");
if (isset(
$totallen)) {
        
$filelist[] = array($dname$totallen);
        
$type "single";
}
else {
        
$flist dict_get($info"files""list");
        if (!isset(
$flist))
                
bark("missing both length and files");
        if (!
count($flist))
                
bark("no files");
        
$totallen 0;
        foreach (
$flist as $fn) {
                list(
$ll$ff) = dict_check($fn"length(integer):path(list)");
                
$totallen += $ll;
                
$ffa = array();
                foreach (
$ff as $ffe) {
                        if (
$ffe["type"] != "string")
                                
bark("filename error");
                        
$ffa[] = $ffe["value"];
                }
                if (!
count($ffa))
                        
bark("filename error");
                
$ffe implode("/"$ffa);
                
$filelist[] = array($ffe$ll);
        if (
$ffe == 'Thumbs.db')
        {
            
stderr("Error","The torrent can't contain files named Thumbs.db!");
            die;
        }
        }
        
$type "multi";
}

$dict['value']['announce']=bdec(benc_str$announce_urls[0]));  // change announce url to local
$dict['value']['info']['value']['private']=bdec('i1e');  // add private tracker flag
unset($dict['value']['announce-list']); // remove multi-tracker capability
unset($dict['value']['nodes']); // remove cached peers (Bitcomet & Azareus)
unset($dict['value']['info']['value']['crc32']); // remove crc32
unset($dict['value']['info']['value']['ed2k']); // remove ed2k
unset($dict['value']['info']['value']['md5sum']); // remove md5sum
unset($dict['value']['info']['value']['sha1']); // remove sha1
unset($dict['value']['info']['value']['tiger']); // remove tiger
unset($dict['value']['azureus_properties']); // remove azureus properties
$dict=bdec(benc($dict)); // double up on the becoding solves the occassional misgenerated infohash
$dict['value']['comment']=bdec(benc_str"Torrent created for '$SITENAME' tracker")); // change torrent comment
$dict['value']['created by']=bdec(benc_str"$CURUSER[username]")); // change created by
$dict['value']['publisher']=bdec(benc_str"$CURUSER[username]")); // change publisher
$dict['value']['publisher.utf-8']=bdec(benc_str"$CURUSER[username]")); // change publisher.utf-8
$dict['value']['publisher-url']=bdec(benc_str"$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url
$dict['value']['publisher-url.utf-8']=bdec(benc_str"$DEFAULTBASEURL/userdetails.php?id=$CURUSER[id]")); // change publisher-url.utf-8
list($ann$info) = dict_check($dict"announce(string):info");

$infohash pack("H*"sha1($info["string"]));

// Replace punctuation characters with spaces

$torrent str_replace("_"" "$torrent);

// Replace .torrent .rar .avi .exe .zip ... characters with spaces

$torrent str_replace(".torrent"" "$torrent);
$torrent str_replace(".rar"" "$torrent);
$torrent str_replace(".avi"" "$torrent);
$torrent str_replace(".mpeg"" "$torrent);
$torrent str_replace(".exe"" "$torrent);
$torrent str_replace(".zip"" "$torrent);
$torrent str_replace(".wmv"" "$torrent);
$torrent str_replace(".iso"" "$torrent);
$torrent str_replace(".bin"" "$torrent);
$torrent str_replace(".txt"" "$torrent);
$torrent str_replace(".nfo"" "$torrent);
$torrent str_replace(".7z"" "$torrent);
$torrent str_replace(".mp3"" "$torrent);

$nfo sqlesc(str_replace("\x0d\x0d\x0a""\x0d\x0a", @file_get_contents($nfofilename)));
$smalldescr $_POST["description"];
$ret mysql_query("INSERT INTO torrents (search_text, filename, owner, visible, anonymous, info_hash, name, size, numfiles, type, descr, ori_descr, description, category, save_as, added, last_action, nfo) VALUES (" .
                
implode(","array_map("sqlesc", array(searchfield("$shortfname $dname $torrent"), $fname$CURUSER["id"], "no"$anonymous$infohash$torrent$totallencount($filelist), $type$descr$descr$smalldescr$_POST["type"], $dname))) .
                
", '" get_date_time() . "', '" get_date_time() . "', $nfo)");
if (!
$ret) {
        if (
mysql_errno() == 1062)
                
bark("torrent already uploaded!");
        
bark("mysql puked: ".mysql_error());
}
$id mysql_insert_id();

@
mysql_query("DELETE FROM files WHERE torrent = $id");
foreach (
$filelist as $file) {
        @
mysql_query("INSERT INTO files (torrent, filename, size) VALUES ($id, ".sqlesc($file[0]).",".$file[1].")");
}

$fp fopen("$torrent_dir/$id.torrent""w");
if (
$fp)
{
        @
fwrite($fpbenc($dict), strlen(benc($dict)));
    
fclose($fp);
}

write_log("Torrent $id ($torrent) was uploaded by " $CURUSER["username"]);



/* RSS feeds */

if (($fd1 = @fopen("rss.xml""w")) && ($fd2 fopen("rssdd.xml""w")))
{
        
$cats "";
        
$res mysql_query("SELECT id, name FROM categories");
        while (
$arr mysql_fetch_assoc($res))
                
$cats[$arr["id"]] = $arr["name"];
        
$s "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<rss version=\"2.0\">\n<channel>\n" .
                
"<title>$DEFAULTBASEURL</title>\n<description>Newest tracker torrents</description>\n<link>$DEFAULTBASEURL/</link>\n";
        @
fwrite($fd1$s);
        @
fwrite($fd2$s);
        
$r mysql_query("SELECT id,name,descr,filename,category FROM torrents ORDER BY added DESC LIMIT 15") or sqlerr(__FILE____LINE__);
        while (
$a mysql_fetch_assoc($r))
        {
                
$cat $cats[$a["category"]];
                
$s "<item>\n<title>" htmlspecialchars($a["name"] . " ($cat)") . "</title>\n" .
                        
"<description>" htmlspecialchars($a["descr"]) . "</description>\n";
                @
fwrite($fd1$s);
                @
fwrite($fd2$s);
                @
fwrite($fd1"<link>$DEFAULTBASEURL/details.php?id=$a[id]&amp;hit=1</link>\n</item>\n");
                
$filename htmlspecialchars($a["filename"]);
                @
fwrite($fd2"<link>$DEFAULTBASEURL/download.php/$a[id]/$filename</link>\n</item>\n");
        }
        
$s "</channel>\n</rss>\n";
        @
fwrite($fd1$s);
        @
fwrite($fd2$s);
        @
fclose($fd1);
        @
fclose($fd2);
}

/* Email notifs */


$res mysql_query("SELECT name FROM categories WHERE id=$catid") or sqlerr();
$arr mysql_fetch_assoc($res);
$cat $arr["name"];
$res mysql_query("SELECT email FROM users WHERE enabled='yes' AND notifs LIKE '%[cat$catid]%'") or sqlerr();
$uploader $CURUSER['username'];

$size mksize($totallen);
$description = ($html strip_tags($descr) : $descr);

$body = <<<EOD
A new torrent has been uploaded.

Name: 
$torrent
Size: 
$size
Category: 
$cat
Uploaded by: 
$uploader

Description
-------------------------------------------------------------------------------
$description
-------------------------------------------------------------------------------

You can use the URL below to download the torrent (you may have to login).

$DEFAULTBASEURL/details.php?id=$id&hit=1

--
$SITENAME
EOD;
$to "";
$nmax 100// Max recipients per message
$nthis 0;
$ntotal 0;
$total mysql_num_rows($res);
while (
$arr mysql_fetch_row($res))
{
  if (
$nthis == 0)
    
$to $arr[0];
  else
    
$to .= "," $arr[0];
  ++
$nthis;
  ++
$ntotal;
  if (
$nthis == $nmax || $ntotal == $total)
  {
    if (!
mail("Multiple recipients <$SITEEMAIL>""New torrent - $torrent"$body,
    
"From: $SITEEMAIL\r\nBcc: $to""-f$SITEEMAIL"))
          
stderr("Error""Your torrent has been been uploaded. DO NOT RELOAD THE PAGE!\n" .
            
"There was however a problem delivering the e-mail notifcations.\n" .
            
"Please let an administrator know about this error!\n");
    
$nthis 0;
  }
}


header("Location: $BASEURL/details.php?id=$id&uploaded=1");

?>  [/B]

I should mention something document
Reply With Quote