$total_size = $total_size + $file["length"]; } } else { $total_size = $info["length"]; } //Validate torrent file, make sure everything is correct $filename = $array["info"]["name"]; $filename = mysql_escape_string($filename); $filename = clean($filename); if (strlen($hash) != 40 || !verifyHash($hash)) { echo errorMessage() . "Error: Info hash must be exactly 40 hex bytes.</p>\n"; $error_status = false; } if ($error_status == true) { $query = "INSERT INTO " . $prefix . "namemap (info_hash, filename, url, size, pubDate) VALUES (\"{$hash}\", \"{$filename}\", \"{$url}\", \"{$total_size}\", \"" . date('D, j M Y h:i:s') . "\")"; $status = makeTorrent($hash, true); quickQuery($query); if ($status == true) { //create torrent file in folder, at this point we assume it's valid if (!($handle = fopen("torrents/" . $filename . ".torrent", 'w'))) { echo errorMessage() . "Error: Can't write to file.</p>\n"; break; } //populate file with contents if (fwrite($handle, $buffer) === FALSE) { echo errorMessage() . "Error: Can't write to file.</p>\n"; break; } fclose($handle); //make torrent file readable by all chmod("torrents/" . $filename . ".torrent", 0644);
function addTorrent() { global $dbhost, $dbuser, $dbpass, $database; global $_POST, $_FILES; require_once "funcsv2.php"; require_once "BDecode.php"; require_once "BEncode.php"; $hash = strtolower($_POST["hash"]); $db = mysql_connect($dbhost, $dbuser, $dbpass) or die("<p class=\"error\">Couldn't connect to database. contact the administrator</p>"); mysql_select_db($database) or die("<p class=\"error\">Can't open the database.</p>"); if (isset($_FILES["torrent"])) { if ($_FILES["torrent"]["error"] != 4) { $fd = fopen($_FILES["torrent"]["tmp_name"], "rb") or die("<p class=\"error\">File upload error 1</p>\n"); is_uploaded_file($_FILES["torrent"]["tmp_name"]) or die("<p class=\"error\">File upload error 2</p>\n"); $alltorrent = fread($fd, filesize($_FILES["torrent"]["tmp_name"])); $array = BDecode($alltorrent); if (!$array) { echo "<p class=\"error\">There was an error handling your uploaded torrent. The parser didn't like it.</p>"; endOutput(); exit; } $hash = @sha1(BEncode($array["info"])); fclose($fd); unlink($_FILES["torrent"]["tmp_name"]); } } if (isset($_POST["filename"])) { $filename = clean($_POST["filename"]); } else { $filename = ""; } if (isset($_POST["url"])) { $url = clean($_POST["url"]); } else { $url = ""; } if (isset($_POST["info"])) { $info = clean($_POST["info"]); } else { $info = ""; } if (isset($_POST["autoset"])) { if (strcmp($_POST["autoset"], "enabled") == 0) { if (strlen($filename) == 0 && isset($array["info"]["name"])) { $filename = $array["info"]["name"]; } if (strlen($info) == 0 && isset($array["info"]["piece length"])) { $info = $array["info"]["piece length"] / 1024 * (strlen($array["info"]["pieces"]) / 20) / 1024; $info = round($info, 2) . " MB"; if (isset($array["comment"])) { $info .= " - " . $array["comment"]; } } } $filename = mysql_escape_string($filename); $url = mysql_escape_string($url); $info = mysql_escape_string($info); if (strlen($hash) != 40 || !verifyHash($hash)) { echo "<p class=\"error\">Error: Info hash must be exactly 40 hex bytes.</p>"; endOutput(); } $query = "INSERT INTO BTPHP_namemap (info_hash, filename, url, info) VALUES (\"{$hash}\", \"{$filename}\", \"{$url}\", \"{$info}\")"; $status = makeTorrent($hash, true); quickQuery($query); if ($status) { echo "<p class=\"error\">Torrent was added successfully.</p>"; } else { echo "<p class=\"error\">There were some errors. Check if this torrent had been added previously.</p>"; } } endOutput(); }
function verifyTorrent($hash) { global $db; MCached::connect(); // only for internal tracked torrent! $key = 'summary::count::' . $hash; $res = MCached::get($key); if ($res === MCached::NO_RESULT) { $query = "SELECT COUNT(*) FROM summary INNER JOIN namemap ON namemap.info_hash = summary.info_hash WHERE namemap.external = 'no' AND summary.info_hash = '" . $hash . "'"; $results = $db->query($query); $res = mysqli_result($results, 0, 0); MCached::add($key, $res, 300); } if ($res == 1) { return true; } if ($GLOBALS["dynamic_torrents"]) { return makeTorrent($hash); } return false; }
* Destroy the variable */ unset($_SESSION["deletelist"]); } /* * Process retired torrent revive list, if some were selected */ if (isset($_SESSION["revivelist"])) { /* * Go through each value and restore the data and tables */ foreach ($_SESSION["revivelist"] as $key => $value) { /* * Recreate the table to track the peers */ $status = makeTorrent($_SESSION["revivelist"][$key]["hash"], true); /* * If the creation was successful, put the completed and total transferred values back, * add into namemap and then finally remove it from the retired table */ if ($status) { /* * Now the fun part, we need to take into account advanced sorting... which means adding to * group 0 for the specified category and adding it at the end of the sort list. The code below * asks the database for this information and then figures out what to do. */ $rstAdvSort = @mysql_query("SELECT MAX(`sorting`) FROM `namemap` WHERE `grouping` = 0 and `category` = \"" . $_SESSION["revivelist"][$key]["category"] . "\""); if ($rstAdvSort === false) { $advsort = 1; } else { $lastval = mysql_result($rstAdvSort, 0, 0);
function verifyTorrent($hash) { global $db; // only for internal tracked torrent! $query = "SELECT COUNT(*) FROM summary INNER JOIN namemap ON namemap.info_hash = summary.info_hash WHERE namemap.external = 'no' AND summary.info_hash = '" . $hash . "'"; $results = $db->query($query); $res = mysqli_result($results, 0, 0); if ($res == 1) { return true; } if ($GLOBALS["dynamic_torrents"]) { return makeTorrent($hash); } return false; }
function _wobi_addTorrent($torrent_file_path, $torrent_file_url, $file_path, $file_url) { require "config.php"; $tracker_url = WOBI_TRACKER_URL; $httpseed = true; $tmp1 = explode("/wp-content/", $file_path); $relative_path = "../../" . $tmp1[1]; $getrightseed = false; $httpftplocation = $file_url; $target_path = "torrents/"; $autoset = true; $filename = ""; // $file_path; // Extracted from torrent (if $autoset) $url = "{$file_url}"; // Extracted from torrent (if $autoset) $hash = ""; // Extracted from torrent (if $autoset) // TODO: Only if not already connected. // $db = mysql_connect($dbhost, $dbuser, $dbpass) or die(errorMessage() . "Couldn't connect to the database, contact the administrator.</p>"); // mysql_select_db($database) or die(errorMessage() . "Can't open the database.</p>"); require_once "funcsv2.php"; require_once "BDecode.php"; require_once "BEncode.php"; // Check for errors, we don't care right? $fd = fopen($torrent_file_path, "rb") or die(_wobi_errorMessage() . "File upload error 1</p>\n"); // is_uploaded_file($torrent_file_path) or die(_wobi_errorMessage() . "File upload error 2</p>\n"); $alltorrent = fread($fd, filesize($torrent_file_path)); $array = BDecode($alltorrent); if (!$array) { $wobi_error = _wobi_errorMessage() . "Error: The parser was unable to load your torrent. Please re-create and re-upload the torrent.</p>\n"; return false; } if (strtolower($array["announce"]) != $tracker_url) { $wobi_error = _wobi_errorMessage() . "Error: The tracker announce URL does not match this:<br>{$tracker_url}<br>Please re-create and re-upload the torrent.</p>\n"; return false; } if ($httpseed && $relative_path == "") { $wobi_error = _wobi_errorMessage() . "Error: HTTP seeding was checked however no relative path was given.</p>\n"; return false; } if ($httpseed && $relative_path != "") { if (Substr($relative_path, -1) == "/") { if (!is_dir($relative_path)) { $wobi_error = _wobi_errorMessage() . "Error: HTTP seeding relative path ends in / but is not a valid directory.</p>\n"; return false; } } else { if (!is_file($relative_path)) { $wobi_error = _wobi_errorMessage() . "Error: HTTP seeding relative path is not a valid file.</p>\n"; return false; } } } if ($getrightseed && $httpftplocation == "") { $wobi_error = _wobi_errorMessage() . "Error: GetRight HTTP seeding was checked however no URL was given.</p>\n"; return false; } if ($getrightseed && (Substr($httpftplocation, 0, 7) != "http://" && Substr($httpftplocation, 0, 6) != "ftp://")) { $wobi_error = _wobi_errorMessage() . "Error: GetRight HTTP seeding URL must start with http:// or ftp://</p>\n"; return false; } $hash = @sha1(BEncode($array["info"])); fclose($fd); $target_path = $target_path . basename($torrent_file_path); $move_torrent = rename($torrent_file_path, $target_path); if ($move_torrent == false) { $wobi_error = errorMessage() . "Unable to move {$torrent_file_path} to torrents/</p>\n"; } if (!empty($filename)) { // XXX can probably remove this... $filename = clean($filename); } if (!empty($url)) { // XXX and this $url = clean($url); } if ($autoset) { if (strlen($filename) == 0 && isset($array["info"]["name"])) { $filename = $array["info"]["name"]; } } //figure out total size of all files in torrent $info = $array["info"]; $total_size = 0; if (isset($info["files"])) { foreach ($info["files"] as $file) { $total_size = $total_size + $file["length"]; } } else { $total_size = $info["length"]; } //Validate torrent file, make sure everything is correct $filename = mysql_escape_string($filename); $filename = htmlspecialchars(clean($filename)); $url = htmlspecialchars(mysql_escape_string($url)); if (strlen($hash) != 40 || !verifyHash($hash)) { $wobi_error = _wobi_errorMessage() . "Error: Info hash must be exactly 40 hex bytes.</p>\n"; return false; } if (Substr($url, 0, 7) != "http://" && $url != "") { $wobi_error = _wobi_errorMessage() . "Error: The Torrent URL does not start with http:// Make sure you entered a correct URL.</p>\n"; return false; } $query = "INSERT INTO " . $prefix . "namemap (info_hash, filename, url, size, pubDate) VALUES (\"{$hash}\", \"{$filename}\", \"{$url}\", \"{$total_size}\", \"" . date('D, j M Y h:i:s') . "\")"; $status = makeTorrent($hash, true); quickQuery($query); chmod($target_path, 0644); if ($status) { $wobi_error = "<p class=\"success\">Torrent was added successfully.</p>\n"; require_once "wobi_functions.php"; _wobi_addWebseedfiles($target_path, $relative_path, $httpftplocation, $hash); return true; } else { $wobi_error = _wobi_errorMessage() . "There were some errors. Check if this torrent has been added previously.</p>\n"; return false; } }
function addTorrent() { require "config.php"; $tracker_url = $website_url . substr($_SERVER['REQUEST_URI'], 0, -15) . "announce.php"; $hash = strtolower($_POST["hash"]); $db = mysql_connect($dbhost, $dbuser, $dbpass) or die(errorMessage() . "Couldn't connect to the database, contact the administrator</p>"); mysql_select_db($database) or die(errorMessage() . "Can't open the database.</p>"); require_once "funcsv2.php"; require_once "BDecode.php"; require_once "BEncode.php"; if ($_FILES["torrent"]["error"] != 4) { $fd = fopen($_FILES["torrent"]["tmp_name"], "rb") or die(errorMessage() . "File upload error 1</p>\n"); is_uploaded_file($_FILES["torrent"]["tmp_name"]) or die(errorMessage() . "File upload error 2</p>\n"); $alltorrent = fread($fd, filesize($_FILES["torrent"]["tmp_name"])); $array = BDecode($alltorrent); if (!$array) { echo errorMessage() . "Error: The parser was unable to load your torrent. Please re-create and re-upload the torrent.</p>\n"; endOutput(); exit; } if (strtolower($array["announce"]) != $tracker_url) { echo errorMessage() . "Error: The tracker announce URL does not match this:<br>{$tracker_url}<br>Please re-create and re-upload the torrent.</p>\n"; endOutput(); exit; } if ($_POST["httpseed"] == "enabled" && $_POST["relative_path"] == "") { echo errorMessage() . "Error: HTTP seeding was checked however no relative path was given.</p>\n"; endOutput(); exit; } if ($_POST["httpseed"] == "enabled" && $_POST["relative_path"] != "") { if (Substr($_POST["relative_path"], -1) == "/") { if (!is_dir($_POST["relative_path"])) { echo errorMessage() . "Error: HTTP seeding relative path ends in / but is not a valid directory.</p>\n"; endOutput(); exit; } } else { if (!is_file($_POST["relative_path"])) { echo errorMessage() . "Error: HTTP seeding relative path is not a valid file.</p>\n"; endOutput(); exit; } } } if ($_POST["getrightseed"] == "enabled" && $_POST["httpftplocation"] == "") { echo errorMessage() . "Error: GetRight HTTP seeding was checked however no URL was given.</p>\n"; endOutput(); exit; } if ($_POST["getrightseed"] == "enabled" && (Substr($_POST["httpftplocation"], 0, 7) != "http://" && Substr($_POST["httpftplocation"], 0, 6) != "ftp://")) { echo errorMessage() . "Error: GetRight HTTP seeding URL must start with http:// or ftp://</p>\n"; endOutput(); exit; } $hash = @sha1(BEncode($array["info"])); fclose($fd); $target_path = "torrents/"; $target_path = $target_path . basename(clean($_FILES['torrent']['name'])); $move_torrent = move_uploaded_file($_FILES["torrent"]["tmp_name"], $target_path); if ($move_torrent == false) { echo errorMessage() . "Unable to move " . $_FILES["torrent"]["tmp_name"] . " to torrents/</p>\n"; } } if (isset($_POST["filename"])) { $filename = clean($_POST["filename"]); } else { $filename = ""; } if (isset($_POST["url"])) { $url = clean($_POST["url"]); } else { $url = ""; } if (isset($_POST["autoset"])) { if (strcmp($_POST["autoset"], "enabled") == 0) { if (strlen($filename) == 0 && isset($array["info"]["name"])) { $filename = $array["info"]["name"]; } } } //figure out total size of all files in torrent $info = $array["info"]; $total_size = 0; if (isset($info["files"])) { foreach ($info["files"] as $file) { $total_size = $total_size + $file["length"]; } } else { $total_size = $info["length"]; } //Validate torrent file, make sure everything is correct $filename = mysql_escape_string($filename); $filename = htmlspecialchars(clean($filename)); $url = htmlspecialchars(mysql_escape_string($url)); if (strlen($hash) != 40 || !verifyHash($hash)) { echo errorMessage() . "Error: Info hash must be exactly 40 hex bytes.</p>\n"; endOutput(); } if (Substr($url, 0, 7) != "http://" && $url != "") { echo errorMessage() . "Error: The Torrent URL does not start with http:// Make sure you entered a correct URL.</p>\n"; endOutput(); } $query = "INSERT INTO " . $prefix . "namemap (info_hash, filename, url, size, pubDate) VALUES (\"{$hash}\", \"{$filename}\", \"{$url}\", \"{$total_size}\", \"" . date('D, j M Y h:i:s') . "\")"; $status = makeTorrent($hash, true); quickQuery($query); if ($status) { echo "<p class=\"success\">Torrent was added successfully.</p>\n"; echo "<a href=\"newtorrents.php\"><img src=\"images/add.png\" border=\"0\" class=\"icon\" alt=\"Add Torrent\" title=\"Add Torrent\" /></a><a href=\"newtorrents.php\">Add Another Torrent</a><br>\n"; //rename torrent file to match filename rename("torrents/" . clean($_FILES['torrent']['name']), "torrents/" . $filename . ".torrent"); //make torrent file readable by all chmod("torrents/" . $filename . ".torrent", 0644); //run RSS generator require_once "rss_generator.php"; //Display information from DumpTorrentCGI.php require_once "torrent_functions.php"; } else { echo errorMessage() . "There were some errors. Check if this torrent has been added previously.</p>\n"; //delete torrent file if it doesn't exist in database $query = "SELECT COUNT(*) FROM " . $prefix . "summary WHERE info_hash = '{$hash}'"; $results = mysql_query($query) or die(errorMessage() . "Can't do SQL query - " . mysql_error() . "</p>"); $data = mysql_fetch_row($results); if ($data[0] == 0) { if (file_exists("torrents/" . $_FILES['torrent']['name'])) { unlink("torrents/" . $_FILES['torrent']['name']); } } //make torrent file readable by all chmod("torrents/" . $filename . ".torrent", 0644); endOutput(); } }
function verifyTorrent($hash) { if ($GLOBALS["dynamic_torrents"]) { $query = "SELECT COUNT(`info_hash`) FROM `summary` WHERE `info_hash`=\"{$hash}\""; } else { $query = "SELECT COUNT(`info_hash`) FROM `summary` WHERE `info_hash`=\"{$hash}\" AND `external_torrent` = \"N\""; } $results = mysql_query($query); $res = mysql_result($results, 0, 0); if ($res == 1) { return true; } if ($GLOBALS["dynamic_torrents"]) { return makeTorrent($hash); } return false; }