errors() public method

Return Errors
public errors ( ) : array | boolean
return array | boolean error list or false if none
Example #1
0
 public static function run_ex($hash, $fname)
 {
     $torrent = new Torrent($fname);
     if (!$torrent->errors()) {
         foreach (self::$TRACKERS as $key => $value) {
             if (strpos($torrent->comment(), $key) !== FALSE) {
                 return call_user_func($value, $torrent->comment(), $hash, $torrent);
             }
         }
     }
     return self::STE_NOT_NEED;
 }
 public static function getSource($hash)
 {
     $req = new rXMLRPCRequest(array(new rXMLRPCCommand("get_session"), new rXMLRPCCommand("d.get_tied_to_file", $hash)));
     if ($req->run() && !$req->fault) {
         $fname = $req->val[0] . $hash . ".torrent";
         if (empty($req->val[0]) || !is_readable($fname)) {
             if (strlen($req->val[1]) && is_readable($req->val[1])) {
                 $fname = $req->val[1];
             } else {
                 $fname = null;
             }
         }
         if ($fname) {
             $torrent = new Torrent($fname);
             if (!$torrent->errors()) {
                 return $torrent;
             }
         }
     }
     return false;
 }
Example #3
0
 $hash = $argv[1];
 $req = new rXMLRPCRequest(array(new rXMLRPCCommand("get_session"), new rXMLRPCCommand("d.get_custom4", $hash), new rXMLRPCCommand("d.get_tied_to_file", $hash), new rXMLRPCCommand("d.get_custom1", $hash), new rXMLRPCCommand("d.get_directory_base", $hash), new rXMLRPCCommand("d.is_private", $hash), new rXMLRPCCommand("d.get_name", $hash)));
 if ($req->success()) {
     $isStart = $req->val[1] != 0;
     if ((count($trks->list) || count($trks->todelete)) && !($req->val[5] && $trks->dontAddPrivate) && $req->val[6] != $hash . ".meta") {
         $fname = $req->val[0] . $hash . ".torrent";
         if (empty($req->val[0]) || !is_readable($fname)) {
             if (strlen($req->val[2]) && is_readable($req->val[2])) {
                 $fname = $req->val[2];
             } else {
                 $fname = null;
             }
         }
         if ($fname) {
             $torrent = new Torrent($fname);
             if (!$torrent->errors()) {
                 $needToProcessed = true;
                 $lst = $torrent->announce_list();
                 if (!$lst) {
                     if (count($trks->list)) {
                         if ($torrent->announce()) {
                             $torrent->announce_list($trks->addToBegin ? array_merge($trks->list, array(array($torrent->announce()))) : array_merge(array(array($torrent->announce())), $trks->list));
                         } else {
                             $torrent->announce($trks->list[0][0]);
                             $torrent->announce_list($trks->list);
                         }
                     } else {
                         $needToProcessed = false;
                     }
                 } else {
                     $addition = $trks->list;
Example #4
0
 public function uploaded()
 {
     $db = JFactory::getDBO();
     $user = JFactory::getUser();
     $params = JComponentHelper::getParams('com_tracker');
     $app = JFactory::getApplication();
     // Let's start to play with it
     $temp_torrent['name'] = $_POST['jform']['name'];
     $temp_torrent['categoryID'] = $_POST['jform']['categoryID'];
     $temp_torrent['description'] = $_POST['jform']['description'];
     if ($params->get('torrent_tags') == 1) {
         $temp_torrent['tags'] = $_POST['jform']['tags'];
     } else {
         $temp_torrent['tags'] = '';
     }
     if ($params->get('enable_licenses') == 1) {
         $licenseID = $_POST['jform']['licenseID'];
     } else {
         $licenseID = 0;
     }
     if ($params->get('forum_post_id') == 1) {
         $forum_post = $_POST['jform']['forum_post'];
     } else {
         $forum_post = 0;
     }
     if ($params->get('torrent_information') == 1) {
         $info_post = $_POST['jform']['info_post'];
     } else {
         $info_post = 0;
     }
     if ($params->get('allow_upload_anonymous') == 1) {
         $uploader_anonymous = $_POST['jform']['uploader_anonymous'];
     } else {
         $uploader_anonymous = 0;
     }
     if ($params->get('freeleech') == 1) {
         $download_multiplier = 0;
     } else {
         $download_multiplier = 1;
     }
     // ------------------------------------------------------------------------------------------------------------------------
     // Let's take care of the .torrent file first
     $temp_torrent['filename'] = $_FILES['jform']['name']['filename'];
     $temp_torrent['temp_file'] = $_FILES['jform']['tmp_name']['filename'];
     // Sanitize the filename
     $temp_torrent['filename'] = TrackerHelper::sanitize_filename($temp_torrent['filename']);
     // If something wrong happened during the file upload, we bail out
     if (!is_uploaded_file($_FILES['jform']['tmp_name']['filename'])) {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED'), 'error');
     }
     // If we try to upload an empty file (0 bytes size)
     if ($_FILES['jform']['size']['filename'] == 0) {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE'), 'error');
     }
     // Check if the torrent file is really a valid torrent file
     if (!Torrent::is_torrent($_FILES['jform']['tmp_name']['filename'])) {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_NOT_BENCODED_FILE'), 'error');
     }
     // Let's create our new torrent object
     $torrent = new Torrent($_FILES['jform']['tmp_name']['filename']);
     // And check for errors. Need to find a way to test them all :)
     if ($errors = $torrent->errors()) {
         var_dump($errors);
     }
     // Private Torrents
     if ($params->get('make_private') == 1 && !$torrent->is_private()) {
         $torrent->is_private(true);
     }
     // If the user didnt wrote a name for the torrent, we get it from the filename
     if (empty($_POST['jform']['name'])) {
         $filename = pathinfo($_FILES['jform']['name']['filename']);
         $torrent->name($filename['filename']);
     } else {
         $torrent->name($_POST['jform']['name']);
     }
     $query = $db->getQuery(true);
     $query->select('count(fid)');
     $query->from('#__tracker_torrents');
     $query->where('info_hash = UNHEX("' . $torrent->hash_info() . '")');
     $db->setQuery($query);
     if ($db->loadResult() > 0) {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_ALREADY_EXISTS'), 'error');
     }
     // ------------------------------------------------------------------------------------------------------------------------
     // The .torrent file is valid, let's continue to our image file (if we choose to use it)
     if ($params->get('use_image_file')) {
         // When image_type is don't use image
         if ($_POST['jform']['image_type'] == 0) {
             $image_file_query_value = "";
         }
         // When image file is an uploaded file
         if ($_POST['jform']['image_type'] == 1) {
             if (!is_uploaded_file($_FILES['jform']['tmp_name']['image_file'])) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED_IMAGE'), 'error');
             }
             if (!filesize($_FILES['jform']['tmp_name']['image_file']) || $_FILES['jform']['size']['image_file'] == 0) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE_IMAGE'), 'error');
             }
             if (!TrackerHelper::is_image($_FILES['jform']['tmp_name']['image_file'])) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_NOT_AN_IMAGE_FILE'), 'error');
             }
             $image_file_extension = end(explode(".", $_FILES['jform']['name']['image_file']));
             $image_file_query_value = $torrent->hash_info() . '.' . $image_file_extension;
             $image_file_file = $_FILES['jform']['tmp_name']['image_file'];
         }
         // When image file is an external link
         if ($_POST['jform']['image_type'] == 2) {
             // If the remote file is unavailable
             if (@(!file_get_contents($_POST['jform']['image_link'], 0, NULL, 0, 1))) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_INVALID_FILE'), 'error');
             }
             // check if the remote file is not an image
             if (!is_array(@getimagesize($_POST['jform']['image_link']))) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_NOT_IMAGE'), 'error');
             }
             $image_file_query_value = $_POST['jform']['image_link'];
         }
     } else {
         $image_file_query_value = "";
     }
     // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     // All is good, let's insert the record in the database
     // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     //TODO: INSERT THE ORDERING EQUAL TO THE TORRENT ID
     //Insert the torrent into the table
     $query->clear();
     $query = $db->getQuery(true);
     $query->insert('#__tracker_torrents');
     $query->set('info_hash = UNHEX("' . $torrent->hash_info() . '")');
     $query->set('ctime = unix_timestamp()');
     $query->set('name = ' . $db->quote($torrent->name()));
     $query->set('alias = ' . $db->quote($torrent->name()));
     $query->set('filename = ' . $db->quote($_FILES['jform']['name']['filename']));
     $query->set('description = ' . $db->quote($_POST['jform']['description']));
     $query->set('categoryID = ' . $db->quote($_POST['jform']['categoryID']));
     $query->set('size = ' . $db->quote($torrent->size()));
     $query->set('created_time = ' . $db->quote(date("Y-m-d H:i:s")));
     $query->set('uploader = ' . $db->quote($user->id));
     $query->set('number_files = ' . $db->quote(count($torrent->content())));
     $query->set('uploader_anonymous = ' . $db->quote($uploader_anonymous));
     $query->set('forum_post = ' . $db->quote($forum_post));
     $query->set('info_post = ' . $db->quote($info_post));
     $query->set('licenseID = ' . $db->quote($licenseID));
     $query->set('upload_multiplier = 1');
     $query->set('download_multiplier = ' . $db->quote($download_multiplier));
     $query->set('image_file = ' . $db->quote($image_file_query_value));
     $query->set('tags = ' . $db->quote($temp_torrent['tags']));
     $query->set('state = 1');
     $db->setQuery($query);
     if (!$db->query()) {
         JError::raiseError(500, $db->getErrorMsg());
     }
     // Get the torrent ID that we've just inserted in the database
     $torrent_id = $db->insertid();
     /* Need to check this.
     	Wrong info for single file torrent
     	Wrong filenames for multi file torrent
     	*/
     // Insert the list of files of the torrent in the database
     foreach ($torrent->content() as $filename => $filesize) {
         $query->clear();
         $query = $db->getQuery(true);
         $query->insert('#__tracker_files_in_torrents');
         $query->set('torrentID = ' . $db->quote($torrent_id));
         $query->set('filename = ' . $db->quote($filename));
         $query->set('size = ' . $db->quote($filesize));
         $db->setQuery($query);
         if (!$db->query()) {
             JError::raiseError(500, $db->getErrorMsg());
         }
     }
     // If we're in freeleech we need to add the record of the new torrent to the freeleech table
     if ($params->get('freeleech') == 1) {
         $query->clear();
         $query = $db->getQuery(true);
         $query->insert('#__tracker_torrents_freeleech');
         $query->set('fid = ' . $db->quote($torrent_id));
         $query->set('download_multiplier = 1');
         $db->setQuery($query);
         if (!$db->query()) {
             JError::raiseError(500, $db->getErrorMsg());
         }
     }
     $upload_error = 0;
     // Lets try to save the torrent before we continue
     if (!move_uploaded_file($_FILES['jform']['tmp_name']['filename'], JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $_FILES['jform']['name']['filename'])) {
         $upload_error = 1;
     }
     // And we should also move the image file if we're using it with the option of uploading an image file
     if ($params->get('use_image_file') && $_POST['jform']['image_type'] == 1) {
         if (!move_uploaded_file($_FILES['jform']['tmp_name']['image_file'], JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value)) {
             $upload_error = 1;
         }
     }
     if ($upload_error == 0) {
         JFactory::getApplication()->setUserState('com_tracker.uploaded.torrent.data', 0);
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=torrent&id=' . $torrent_id), JText::_('COM_TRACKER_UPLOAD_OK'), 'message');
     } else {
         $query->clear();
         $query = $db->getQuery(true);
         $query->delete('#__tracker_files_in_torrents');
         $query->where('torrent=' . $db->quote($torrent_id));
         $db->setQuery($query);
         $db->query();
         if ($error = $db->getErrorMsg()) {
             $this->setError($error);
             return false;
         }
         $query->clear();
         $query = $db->getQuery(true);
         $query->delete('#__tracker_torrents');
         $query->where('fid=' . $db->quote($torrent_id));
         $db->setQuery($query);
         $db->query();
         unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_*");
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=upload'), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error');
     }
 }
Example #5
0
function rtAddTorrent($fname, $isStart, $directory, $label, $dbg = false)
{
    if ($isStart) {
        $method = 'load_start_verbose';
    } else {
        $method = 'load_verbose';
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "1" . $fname);
    }
    $torrent = new Torrent($fname);
    if ($dbg) {
        rtDbg(__FUNCTION__, "2");
    }
    if ($torrent->errors()) {
        if ($dbg) {
            rtDbg(__FUNCTION__, "fail to create Torrent() object");
        }
        return false;
    }
    if ($directory && strlen($directory) > 0) {
        $directory = rtMakeStrParam("d.set_directory=\"" . $directory . "\"");
    } else {
        $directory = "";
    }
    $comment = $torrent->comment();
    if ($comment && strlen($comment) > 0) {
        if (isInvalidUTF8($comment)) {
            $comment = win2utf($comment);
        }
        if (strlen($comment) > 0) {
            $comment = rtMakeStrParam("d.set_custom2=VRS24mrker" . rawurlencode($comment));
            if (strlen($comment) > 4096) {
                $comment = '';
            }
        }
    } else {
        $comment = "";
    }
    if ($label && strlen($label) > 0) {
        $label = rtMakeStrParam("d.set_custom1=\"" . rawurlencode($label) . "\"");
    } else {
        $label = "";
    }
    $addition = "";
    global $saveUploadedTorrents;
    $delete_tied = $saveUploadedTorrents ? "" : rtMakeStrParam("d.delete_tied=");
    $content = '<?xml version="1.0" encoding="UTF-8"?>' . '<methodCall>' . '<methodName>' . $method . '</methodName>' . '<params>' . '<param><value><string>' . $fname . '</string></value></param>' . $directory . $comment . $label . $addition . $delete_tied . '</params></methodCall>';
    //if( $dbg ) rtDbg( __FUNCTION__, $content );
    $res = rXMLRPCRequest::send($content);
    if ($dbg && !empty($res)) {
        rtDbg(__FUNCTION__, $res);
    }
    if (!$res || ($res = '')) {
        return false;
    } else {
        return $torrent->hash_info();
    }
}
Example #6
0
function rtSetDataDir($hash, $dest_path, $add_path, $move_files, $fast_resume, $dbg = false)
{
    if ($dbg) {
        rtDbg(__FUNCTION__, "hash        : " . $hash);
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "dest_path   : " . $dest_path);
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "add path    : " . ($add_path ? "1" : "0"));
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "move files  : " . ($move_files ? "1" : "0"));
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "fast resume : " . ($fast_resume ? "1" : "0"));
    }
    $is_open = false;
    $is_active = false;
    $is_multy_file = false;
    $base_name = '';
    $base_path = '';
    $base_file = '';
    $is_ok = true;
    if ($dest_path == '') {
        $is_ok = false;
    } else {
        $dest_path = rtAddTailSlash($dest_path);
    }
    // Check if torrent is open or active
    if ($is_ok) {
        $req = rtExec(array("d.is_open", "d.is_active"), $hash, $dbg);
        if (!$req) {
            $is_ok = false;
        } else {
            $is_open = $req->val[0] != 0;
            $is_active = $req->val[1] != 0;
            if ($dbg) {
                rtDbg(__FUNCTION__, "is_open=" . $req->val[0] . ", is_active=" . $req->val[1]);
            }
        }
    }
    // Open closed torrent to get d.get_base_path, d.get_base_filename
    if ($is_ok && $move_files) {
        if (!$is_open && !rtExec("d.open", $hash, $dbg)) {
            $is_ok = false;
        }
    }
    // Ask info from rTorrent
    if ($is_ok && $move_files) {
        $req = rtExec(array("d.get_name", "d.get_base_path", "d.get_base_filename", "d.is_multi_file", "d.get_complete"), $hash, $dbg);
        if (!$req) {
            $is_ok = false;
        } else {
            $base_name = trim($req->val[0]);
            $base_path = trim($req->val[1]);
            $base_file = trim($req->val[2]);
            $is_multy_file = $req->val[3] != 0;
            if ($req->val[4] == 0) {
                // if torrent is not completed -> "fast start" is impossible
                $fast_resume = false;
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "d.get_name          : " . $base_name);
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "d.get_base_path     : " . $base_path);
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "d.get_base_filename : " . $base_file);
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "d.is_multy_file     : " . $req->val[3]);
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "d.get_complete      : " . $req->val[4]);
            }
        }
    }
    // Check if paths are valid
    if ($is_ok && $move_files) {
        if ($base_path == '' || $base_file == '') {
            if ($dbg) {
                rtDbg(__FUNCTION__, "base paths are empty");
            }
            $is_ok = false;
        } else {
            // Make $base_path a really BASE path for downloading data
            // (not including single file or subdir for multiple files).
            // Add trailing slash, if none.
            $base_path = rtRemoveTailSlash($base_path);
            $base_path = rtRemoveLastToken($base_path, '/');
            // filename or dirname
            $base_path = rtAddTailSlash($base_path);
        }
    }
    // Get list of torrent data files
    $torrent_files = array();
    if ($is_ok && $move_files) {
        $req = rtExec("f.multicall", array($hash, "", "f.get_path="), $dbg);
        if (!$req) {
            $is_ok = false;
        } else {
            $torrent_files = $req->val;
            if ($dbg) {
                rtDbg(__FUNCTION__, "files in torrent    : " . count($torrent_files));
            }
        }
    }
    // 1. Stop torrent if active (if not, then rTorrent can crash)
    // 2. Close torrent anyway
    if ($is_ok) {
        $cmds = array();
        if ($is_active) {
            $cmds[] = "d.stop";
        }
        if ($is_open || $move_files) {
            $cmds[] = "d.close";
        }
        if (count($cmds) > 0 && !rtExec($cmds, $hash, $dbg)) {
            $is_ok = false;
        }
    }
    // Move torrent data files to new location
    if ($is_ok && $move_files) {
        $full_base_path = $base_path;
        $full_dest_path = $dest_path;
        // Don't use "count( $torrent_files ) > 1" check (there can be one file in a subdir)
        if ($is_multy_file) {
            // torrent is a directory
            $full_base_path .= rtAddTailSlash($base_file);
            $full_dest_path .= $add_path ? rtAddTailSlash($base_name) : "";
        } else {
            // torrent is a single file
        }
        if ($dbg) {
            rtDbg(__FUNCTION__, "from " . $full_base_path);
        }
        if ($dbg) {
            rtDbg(__FUNCTION__, "to   " . $full_dest_path);
        }
        if ($full_base_path != $full_dest_path && is_dir($full_base_path)) {
            if (!rtOpFiles($torrent_files, $full_base_path, $full_dest_path, "Move", $dbg)) {
                $is_ok = false;
            } else {
                // Recursively remove source dirs without files
                if ($dbg) {
                    rtDbg(__FUNCTION__, "clean " . $full_base_path);
                }
                if ($is_multy_file) {
                    rtRemoveDirectory($full_base_path, false);
                    if ($dbg && is_dir($full_base_path)) {
                        rtDbg(__FUNCTION__, "some files were not deleted");
                    }
                }
            }
        }
    }
    if ($is_ok) {
        // fast resume is requested
        if ($fast_resume) {
            if ($dbg) {
                rtDbg(__FUNCTION__, "trying fast resume");
            }
            // collect variables
            $session = rTorrentSettings::get()->session;
            $tied_to_file = null;
            $label = null;
            $addition = null;
            $req = rtExec(array("get_session", "d.get_tied_to_file", "d.get_custom1", "d.get_connection_seed", "d.get_throttle_name"), $hash, $dbg);
            if (!$req) {
                $fast_resume = false;
            } else {
                $session = $req->val[0];
                $tied_to_file = $req->val[1];
                $label = rawurldecode($req->val[2]);
                $addition = array();
                if (!empty($req->val[3])) {
                    $addition[] = getCmd("d.set_connection_seed=") . $req->val[3];
                }
                if (!empty($req->val[4])) {
                    $addition[] = getCmd("d.set_throttle_name=") . $req->val[4];
                }
                // build path to .torrent file
                $fname = rtAddTailSlash($session) . $hash . ".torrent";
                if (empty($session) || !is_readable($fname)) {
                    if (!strlen($tied_to_file) || !is_readable($tied_to_file)) {
                        if ($dbg) {
                            rtDbg(__FUNCTION__, "empty session or inaccessible .torrent file");
                        }
                        $fname = null;
                        $fast_resume = false;
                    } else {
                        $fname = $tied_to_file;
                    }
                }
            }
            // create torrent, remove old and add new one
            if ($fast_resume) {
                $torrent = new Torrent($fname);
                if ($torrent->errors()) {
                    if ($dbg) {
                        rtDbg(__FUNCTION__, "fail to create Torrent object");
                    }
                    $fast_resume = false;
                } else {
                    $is_ok = $add_path ? rtExec("d.set_directory", array($hash, $dest_path), $dbg) : rtExec("d.set_directory_base", array($hash, $dest_path), $dbg);
                    // for erasedata plugin
                    if ($is_ok) {
                        if (!rtExec("d.erase", $hash, $dbg)) {
                            if ($dbg) {
                                rtDbg(__FUNCTION__, "fail to erase old torrent");
                            }
                            $fast_resume = false;
                        } else {
                            if (!rTorrent::sendTorrent($torrent, true, $add_path, $dest_path, $label, true, true, false, $addition)) {
                                if ($dbg) {
                                    rtDbg(__FUNCTION__, "fail to add new torrent");
                                }
                                $fast_resume = false;
                                $is_ok = false;
                            }
                        }
                    }
                }
            }
            if ($dbg) {
                rtDbg(__FUNCTION__, "fast resume " . ($fast_resume ? "done" : "fail"));
            }
        }
        // fast resume is fail or not requested at all
        if ($is_ok && !$fast_resume) {
            // Setup new directory for torrent (we need to stop it first)
            $is_ok = $add_path ? rtExec("d.set_directory", array($hash, $dest_path), $dbg) : rtExec("d.set_directory_base", array($hash, $dest_path), $dbg);
            if ($is_ok) {
                // Start torrent if need
                if ($is_active) {
                    $is_ok = rtExec(array("d.open", "d.start"), $hash, $dbg);
                } elseif ($is_open) {
                    $is_ok = rtExec("d.open", $hash, $dbg);
                } else {
                    $is_ok = rtExec(array("d.open", "d.close"), $hash, $dbg);
                }
            }
        }
    }
    if ($dbg) {
        rtDbg(__FUNCTION__, "finished");
    }
    return $is_ok;
}
Example #7
0
     if ($required_filehostings) {
         foreach ($required_filehostings as $rfh) {
             $to_error[] = $rfh['domains'];
         }
         $API->error($API->LANG->_('FILE_HOSTING_MISSING_NOTICE', implode('<br/>', $to_error)));
     }
 }
 $magnet = false;
 if ($file['tmp_name']) {
     preg_match('/.*\\.torrent$/', $file['name'], $matches);
     if (!$file['size'] || $file['error'] || !$matches) {
         $API->error($API->LANG->_('You uploaded invalid .torrent file (zero size, not .torrent extension or upload error)'));
     }
     require_once 'classes' . DS . 'Torrent.php';
     $torrent = new Torrent($file['tmp_name']);
     if ($torrent->errors()) {
         $API->error($API->LANG->_('There is something wrong with your torrent file'));
     }
     // do not preform cheks on torrents
     //$torrent->announce(false);
     //$torrent->announce(array('http://pixi.appaddict.org:2710/announce'));
     $magnet = $torrent->magnet();
 }
 require_once 'itgw.inc.php';
 $data = get_itunes_info($trackid, $type, $store);
 if (!$appdata && !$data) {
     $API->TPL->assign('trackid', $trackid);
     $API->TPL->display('no-app-error-itunes.tpl');
     die;
 } elseif ($data) {
     $data['last_parse_itunes'] = $data;
Example #8
0
// add a tracker
$torrent->announce(false);
// reset announce trackers
$torrent->announce(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce'));
// set tracker(s), it also works with a 'one tracker' array...
$torrent->announce(array(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce'), 'http://another-torrent.tracker/annonce'));
// set tiered trackers
$torrent->comment('hello world');
$torrent->name('test torrent');
$torrent->is_private(true);
$torrent->httpseeds('http://file-hosting.domain/path/');
// Bittornado implementation
$torrent->url_list(array('http://file-hosting.domain/path/', 'http://another-file-hosting.domain/path/'));
// GetRight implementation
// print errors
if ($errors = $torrent->errors()) {
    var_dump('<br>DEBUG: ', $errors);
    // errors method return the error stack
}
// send to user
$torrent->send();
///////////////////////////////////////////////////////////////////////////////
//parse Torrent
require 'TorrentReader.php';
$debug = 0;
if (!empty($_FILES['torrent'])) {
    if (!empty($_FILES['torrent']) && empty($_FILES['torrent']['error']) && file_exists($_FILES['torrent']['tmp_name'])) {
        $szTorrentFile = $_FILES['torrent']['tmp_name'];
        $szTorrentFileName = $_FILES['torrent']['name'];
        $szTorrentContent = file_get_contents($szTorrentFile);
    }
Example #9
0
 public function edited()
 {
     require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/tracker.php';
     $db = JFactory::getDBO();
     $user = JFactory::getUser();
     $params = JComponentHelper::getParams('com_tracker');
     $app = JFactory::getApplication();
     $upload_error = 0;
     $torrent['fid'] = (int) $_POST['fid'];
     $torrent['name'] = $_POST['name'];
     $torrent['filename'] = $_POST['filename'];
     $torrent['old_filename'] = $_POST['old_filename'];
     $torrent['description'] = $_POST['description'];
     $torrent['categoryID'] = (int) $_POST['categoryID'];
     $torrent['licenseID'] = (int) $_POST['licenseID'];
     $uploader['anonymous'] = (int) $_POST['uploader_anonymous'];
     $torrent['upload_multiplier'] = (double) $_POST['upload_multiplier'];
     $torrent['forum_post'] = (int) $_POST['forum_post'];
     $torrent['info_post'] = (int) $_POST['info_post'];
     $torrent['tags'] = $_POST['tags'];
     // If we're in freeleech
     if ($params->get('freeleech') == 1) {
         $torrent['download_multiplier'] = 0;
     } else {
         $torrent['download_multiplier'] = (double) $_POST['download_multiplier'];
     }
     // ------------------------------------------------------------------------------------------------------------------------
     // Now let's see if we've uploaded a new torrent file or choose to keep the old one
     // ------------------------------------------------------------------------------------------------------------------------
     if ($_POST['default_torrent_file'] == 0) {
         // We're keeping the original torrent
         if (empty($torrent['name'])) {
             $torrent['name'] = $torrent['old_filename'];
         }
         if (empty($torrent['filename'])) {
             $torrent['filename'] = $torrent['name'] . '.torrent';
         } else {
             $torrent['filename'] = $torrent['filename'] . '.torrent';
         }
         // Rename the filename if we've changed it
         if ($torrent['filename'] != $torrent['old_filename'] . '.torrent') {
             $pre_file = JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . '_';
             rename($pre_file . $torrent['old_filename'] . '.torrent', $pre_file . $torrent['filename']);
         }
     } else {
         // We've uploaded a new torrent file to replace the old one
         // Sanitize the filename
         $torrent['filename'] = TrackerHelper::sanitize_filename($_FILES['filename']['name']);
         // If something wrong happened during the file upload, we go back to the editing
         if (!is_uploaded_file($_FILES['filename']['tmp_name'])) {
             $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED'), 'error');
         }
         // If we try to upload an empty file (0 bytes size)
         if ($_FILES['filename']['size'] == 0) {
             $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE'), 'error');
         }
         // Check if the torrent file is really a valid torrent file
         if (!Torrent::is_torrent($_FILES['filename']['tmp_name'])) {
             $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_NOT_BENCODED_FILE'), 'error');
         }
         // Let's create our new torrent object
         $new_torrent = new Torrent($_FILES['filename']['tmp_name']);
         // And check for errors. Need to find a way to test them all :)
         if ($errors = $new_torrent->errors()) {
             var_dump($errors);
         }
         // Private Torrents
         if ($params->get('make_private') == 1 && !$new_torrent->is_private()) {
             $new_torrent->is_private(true);
         }
         // If the user didnt wrote a name for the torrent, we get it from the filename
         if (empty($_POST['filename'])) {
             $filename = pathinfo($_FILES['filename']['name']);
             $torrent['filename'] = $filename['filename'];
         }
         if (empty($torrent['name'])) {
             $torrent['name'] = $new_torrent->name();
         }
         // Since we're updating the torrent, we must check if we're not updating it with another one that already exists
         $query = $db->getQuery(true);
         $query->select('count(fid)');
         $query->from('#__tracker_torrents');
         $query->where('info_hash = UNHEX("' . $new_torrent->hash_info() . '")');
         $query->where('fid <> ' . (int) $torrent['fid']);
         $db->setQuery($query);
         if ($db->loadResult() > 0) {
             $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_TORRENT_ALREADY_EXISTS'), 'error');
         }
     }
     // ------------------------------------------------------------------------------------------------------------------------
     if ($params->get('use_image_file') == 1) {
         // When image_type is don't use image
         if ($_POST['default_image_type'] == 0) {
             $torrent['image_file'] = $_POST['image_file'];
         }
         // When image file is an uploaded file
         if ($_POST['default_image_type'] == 1) {
             if (!is_uploaded_file($_FILES['image_file']['tmp_name'])) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_OPS_SOMETHING_HAPPENED_IMAGE'), 'error');
             }
             if (!filesize($_FILES['image_file']['tmp_name']) || $_FILES['image_file']['size'] == 0) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_EMPTY_FILE_IMAGE'), 'error');
             }
             if (!TrackerHelper::is_image($_FILES['image_file']['tmp_name'])) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_NOT_AN_IMAGE_FILE'), 'error');
             }
             if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) {
                 // Delete the previous image file from disk
                 @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']);
             }
             $image_file_extension = end(explode(".", $_FILES['image_file']['name']));
             $torrent['image_file'] = $_POST['info_hash'] . '.' . $image_file_extension;
             $image_file_file = $_FILES['jform']['tmp_name']['image_file'];
             // And we should also move the image file if we're using it with the option of uploading an image file
             if (!move_uploaded_file($_FILES['image_file']['tmp_name'], JPATH_SITE . DS . 'images/tracker/torrent_image/' . $torrent['image_file'])) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error');
             }
         }
         // When image file is an external link
         if ($_POST['default_image_type'] == 2) {
             // If the remote file is unavailable
             if (@(!file_get_contents($_POST['image_file'], 0, NULL, 0, 1))) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&amp;view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_INVALID_FILE'), 'error');
             }
             // check if the remote file is not an image
             if (!is_array(@getimagesize($_POST['image_file']))) {
                 $app->redirect(JRoute::_('index.php?option=com_tracker&amp;view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_REMOTE_IMAGE_NOT_IMAGE'), 'error');
             }
             if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) {
                 // Delete the previous image file from disk
                 @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']);
             }
             $torrent['image_file'] = $_POST['image_file'];
         }
         if ($_POST['default_image_type'] == 3) {
             if (file_exists('file://' . JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']) && !empty($_POST['image_file'])) {
                 // Delete the previous image file from disk
                 @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $_POST['image_file']);
             }
             $torrent['image_file'] = "";
         }
     } else {
         $torrent['image_file'] = $_POST['image_file'];
     }
     // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     // All is good, let's update the record in the database
     // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     $query = $db->getQuery(true);
     $query->update('#__tracker_torrents');
     $query->set('name = ' . $db->quote($torrent['name']));
     $query->set('alias = ' . $db->quote($torrent['name']));
     $query->set('filename = ' . $db->quote($torrent['filename']));
     $query->set('description = ' . $db->quote($torrent['description']));
     $query->set('categoryID = ' . $db->quote($torrent['categoryID']));
     $query->set('licenseID = ' . $db->quote($torrent['licenseID']));
     $query->set('uploader_anonymous = ' . $db->quote($uploader['anonymous']));
     $query->set('download_multiplier = ' . $db->quote($torrent['download_multiplier']));
     $query->set('upload_multiplier = ' . $db->quote($torrent['upload_multiplier']));
     $query->set('forum_post = ' . $db->quote($torrent['forum_post']));
     $query->set('info_post = ' . $db->quote($torrent['info_post']));
     $query->set('image_file = ' . $db->quote($torrent['image_file']));
     $query->set('tags = ' . $db->quote($torrent['tags']));
     $query->set('flags = 2');
     // Since we're updating the torrent file we must change some values
     if ($_POST['default_torrent_file'] == 1) {
         $query->set('info_hash = UNHEX("' . $new_torrent->hash_info() . '")');
         $query->set('size = ' . $db->quote($new_torrent->size()));
         $query->set('number_files = ' . $db->quote(count($new_torrent->content())));
     }
     $query->where('fid = ' . (int) $torrent['fid']);
     $db->setQuery($query);
     if (!$db->query()) {
         JError::raiseError(500, $db->getErrorMsg());
         $upload_error = $upload_error + 1;
     }
     // We're uploading a new torrent file, the torrent contents probably changed
     if ($_POST['default_torrent_file'] == 1) {
         // We need to delete the old values
         $query->clear();
         $query = $db->getQuery(true);
         $query->delete('#__tracker_files_in_torrents');
         $query->where('torrentID =' . $db->quote($torrent['fid']));
         $db->setQuery($query);
         $db->query();
         if ($error = $db->getErrorMsg()) {
             $this->setError($error);
             return false;
         }
         // And add the new ones
         foreach ($new_torrent->content() as $filename => $filesize) {
             $query->clear();
             $query = $db->getQuery(true);
             $query->insert('#__tracker_files_in_torrents');
             $query->set('torrentID = ' . $db->quote($torrent['fid']));
             $query->set('filename = ' . $db->quote($filename));
             $query->set('size = ' . $db->quote($filesize));
             $db->setQuery($query);
             if (!$db->query()) {
                 JError::raiseError(500, $db->getErrorMsg());
             }
         }
         // And we need to overwrite the previous torrent from the server with the new one
         if (!move_uploaded_file($_FILES['filename']['tmp_name'], JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . "_" . $_FILES['filename']['name'])) {
             $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_UPLOAD_PROBLEM_MOVING_FILE'), 'error');
         }
         // But we also need to delete the old torrent file
         @unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent['fid'] . "_" . $torrent['old_filename'] . '.torrent');
     }
     // If we're in freeleech we need to edit the record of the torrent in the freeleech table
     if ($params->get('freeleech') == 1) {
         $query->clear();
         $query = $db->getQuery(true);
         $query->update('#__tracker_torrents_freeleech');
         $query->set('download_multiplier = ' . $_POST['download_multiplier']);
         $query->where('fid = ' . (int) $torrent['fid']);
         $db->setQuery($query);
         if (!$db->query()) {
             JError::raiseError(500, $db->getErrorMsg());
         }
     }
     if ($upload_error == 0) {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=torrent&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_OK'), 'message');
     } else {
         $app->redirect(JRoute::_('index.php?option=com_tracker&view=edit&id=' . $torrent['fid']), JText::_('COM_TRACKER_EDIT_NOK'), 'error');
     }
 }
Example #10
0
 public static function run($hash, $state = null, $time = null, $successful_time = null)
 {
     global $saveUploadedTorrents;
     if (is_null($state)) {
         self::getState($hash, $state, $time, $successful_time);
     }
     if ($state == self::STE_INPROGRESS && time() - $time > self::MAX_LOCK_TIME) {
         $state = 0;
     }
     if ($state != self::STE_INPROGRESS) {
         $state = self::STE_INPROGRESS;
         if (!self::setState($hash, $state)) {
             return false;
         }
         $fname = rTorrentSettings::get()->session . $hash . ".torrent";
         if (is_readable($fname)) {
             $torrent = new Torrent($fname);
             if (!$torrent->errors()) {
                 if (preg_match('`^http://(?P<tracker>rutracker)\\.org/forum/viewtopic\\.php\\?t=(?P<id>\\d+)$`', $torrent->comment(), $matches) || preg_match('`^http://(?P<tracker>kinozal)\\.tv/details\\.php\\?id=(?P<id>\\d+)$`', $torrent->comment(), $matches)) {
                     if ($matches["tracker"] == "rutracker") {
                         $client = self::makeClient($torrent->comment());
                         if ($client->status == 200 && preg_match("`ajax.form_token\\s*=\\s*'(?P<form_token>[^']+)';.*topic_id\\s*:\\s*(?P<topic_id>\\d+),\\s*t_hash\\s*:\\s*'(?P<t_hash>[^']+)'`s", $client->results, $matches1)) {
                             $client->setcookies();
                             $client->fetch("http://rutracker.org/forum/ajax.php", "POST", "application/x-www-form-urlencoded; charset=UTF-8", "action=get_info_hash" . "&topic_id=" . $matches1["topic_id"] . "&t_hash=" . $matches1["t_hash"] . "&form_token=" . $matches1["form_token"]);
                             if ($client->status == 200) {
                                 $ret = json_decode($client->results, true);
                                 if ($ret && array_key_exists("ih_hex", $ret) && strtoupper($ret["ih_hex"]) == $hash) {
                                     self::setState($hash, self::STE_UPTODATE);
                                     return true;
                                 }
                             }
                         }
                         $client->setcookies();
                         $client->fetchComplex("http://dl.rutracker.org/forum/dl.php?t=" . $matches["id"]);
                     } else {
                         if ($matches["tracker"] == "kinozal") {
                             $client = self::makeClient("http://kinozal.tv/get_srv_details.php?action=2&id=" . $matches["id"]);
                             if ($client->status == 200 && preg_match('`<li>.*(?P<hash>[0-9A-Fa-f]{40})</li>`', $client->results, $matches1)) {
                                 if (strtoupper($matches1["hash"]) == $hash) {
                                     self::setState($hash, self::STE_UPTODATE);
                                     return true;
                                 }
                             }
                             $client->setcookies();
                             $client->fetchComplex("http://dl.kinozal.tv/download.php?id=" . $matches["id"]);
                         } else {
                             self::setState($hash, self::STE_NOT_NEED);
                             return true;
                         }
                     }
                     if ($client->status == 200) {
                         $torrent = new Torrent($client->results);
                         if (!$torrent->errors()) {
                             if ($torrent->hash_info() != $hash) {
                                 $req = new rXMLRPCRequest(array(new rXMLRPCCommand("d.get_directory_base", $hash), new rXMLRPCCommand("d.get_custom1", $hash), new rXMLRPCCommand("d.get_throttle_name", $hash), new rXMLRPCCommand("d.get_connection_seed", $hash), new rXMLRPCCommand("d.is_open", $hash), new rXMLRPCCommand("d.is_active", $hash), new rXMLRPCCommand("d.get_state", $hash), new rXMLRPCCommand("d.stop", $hash), new rXMLRPCCommand("d.close", $hash)));
                                 if ($req->success()) {
                                     $addition = array(getCmd("d.set_connection_seed=") . $req->val[3], getCmd("d.set_custom") . "=chk-state," . self::STE_UPDATED, getCmd("d.set_custom") . "=chk-time," . time(), getCmd("d.set_custom") . "=chk-stime," . time());
                                     $isStart = $req->val[4] != 0 && $req->val[5] != 0 && $req->val[6] != 0;
                                     if (!empty($req->val[2])) {
                                         $addition[] = getCmd("d.set_throttle_name=") . $req->val[2];
                                     }
                                     if (preg_match('/rat_(\\d+)/', $req->val[3], $ratio)) {
                                         $addition[] = getCmd("view.set_visible=") . "rat_" . $ratio;
                                     }
                                     $label = rawurldecode($req->val[1]);
                                     if (rTorrent::sendTorrent($torrent, $isStart, false, $req->val[0], $label, $saveUploadedTorrents, false, true, $addition)) {
                                         $req = new rXMLRPCRequest(new rXMLRPCCommand("d.erase", $hash));
                                         if ($req->success()) {
                                             $state = null;
                                         }
                                     }
                                 }
                             } else {
                                 $state = self::STE_UPTODATE;
                             }
                         } else {
                             $state = self::STE_DELETED;
                         }
                     } else {
                         $state = $client->status < 0 ? self::STE_CANT_REACH_TRACKER : self::STE_DELETED;
                     }
                 } else {
                     $state = self::STE_NOT_NEED;
                 }
             }
         }
         if ($state == self::STE_INPROGRESS) {
             $state == self::STE_ERROR;
         }
         if (!is_null($state)) {
             self::setState($hash, $state);
         }
     }
     return $state != self::STE_CANT_REACH_TRACKER;
 }
Example #11
0
 public function bulk_import()
 {
     require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/tracker.php';
     require_once JPATH_COMPONENT_SITE . '/helpers/Torrent.php';
     $db = JFactory::getDBO();
     $params = JComponentHelper::getParams('com_tracker');
     $app = JFactory::getApplication();
     $user = JFactory::getUser();
     $filename = $params->get('import_filename');
     $source_folder = $params->get('import_source_folder');
     if (empty($filename) || $filename == '-1') {
         $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_INVALID_FILE'));
         return false;
     }
     $filename = JUri::root() . DS . 'tmp' . DS . $filename;
     @($handle = fopen($filename, "r"));
     $header = NULL;
     $data = array();
     if (($handle = fopen($filename, 'r')) !== FALSE) {
         while (($row = fgetcsv($handle, 1000, $params->get('field_separator'))) !== FALSE) {
             if (!$header) {
                 $header = $row;
             } else {
                 $data[] = array_combine($header, $row);
             }
         }
         fclose($handle);
     }
     foreach ($data as &$imported_torrent) {
         // Let's start to play with it
         $temp_torrent['name'] = $imported_torrent['Name'];
         $temp_torrent['categoryID'] = $imported_torrent['CategoryID'];
         $temp_torrent['description'] = $imported_torrent['Description'];
         if (empty($imported_torrent['Uploader'])) {
             $temp_torrent['uploader'] = $user->id;
         } else {
             $temp_torrent['uploader'] = $imported_torrent['Uploader'];
         }
         if ($params->get('enable_licenses') == 1) {
             $temp_torrent['licenseID'] = $imported_torrent['LicenseID'];
         } else {
             $temp_torrent['licenseID'] = 0;
         }
         if ($params->get('forum_post_id') == 1) {
             $temp_torrent['forum_post'] = $imported_torrent['ForumPost'];
         } else {
             $temp_torrent['forum_post'] = 0;
         }
         if ($params->get('torrent_information') == 1) {
             $temp_torrent['info_post'] = $imported_torrent['InfoPost'];
         } else {
             $temp_torrent['info_post'] = 0;
         }
         if ($params->get('allow_upload_anonymous') == 1) {
             $temp_torrent['uploader_anonymous'] = $imported_torrent['UploaderAnonymous'];
         } else {
             $temp_torrent['uploader_anonymous'] = 0;
         }
         if ($params->get('torrent_tags') == 1) {
             $temp_torrent['tags'] = $imported_torrent['Tags'];
         } else {
             $temp_torrent['tags'] = '';
         }
         if ($params->get('freeleech') == 1) {
             $temp_torrent['download_multiplier'] = 0;
         } else {
             $temp_torrent['download_multiplier'] = 1;
         }
         // ------------------------------------------------------------------------------------------------------------------------
         // Let's take care of the .torrent file first
         $torrent_file = JPATH_ROOT . DS . $source_folder . DS . $imported_torrent['Filename'];
         $temp_torrent['filename'] = $imported_torrent['Filename'];
         // If we try to use an empty file
         if (@filesize($torrent_file) == 0) {
             $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' - ' . JText::_('COM_TRACKER_UTILITY_IMPORT_EMPTY_FILE') . ' ( ' . $imported_torrent['Filename'] . ' )');
             return false;
         }
         // Check if the torrent file is really a valid torrent file
         if (!Torrent::is_torrent($torrent_file)) {
             $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' - ' . JText::_('COM_TRACKER_UTILITY_IMPORT_NOT_BENCODED_FILE') . ' ( ' . $imported_torrent['Filename'] . ' )');
             return false;
         }
         // Let's create our new torrent object
         $torrent = new Torrent($torrent_file);
         // And check for errors. Need to find a way to test them all :)
         if ($errors = $torrent->errors()) {
             var_dump($errors);
         }
         // Private Torrents
         if ($params->get('make_private') == 1 && !$torrent->is_private()) {
             $torrent->is_private(true);
         }
         // If the user didnt wrote a name for the torrent, we get it from the filename
         if (empty($temp_torrent['name'])) {
             $filename = pathinfo($torrent_file);
             $torrent->name($filename['filename']);
         }
         $query = $db->getQuery(true);
         $query->select('count(fid)');
         $query->from('#__tracker_torrents');
         $query->where('info_hash = UNHEX("' . $torrent->hash_info() . '")');
         $db->setQuery($query);
         if ($db->loadResult() > 0) {
             $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_ALREADY_EXISTS') . ' - ' . $imported_torrent['Filename']);
             return false;
         }
         // ------------------------------------------------------------------------------------------------------------------------
         // The .torrent file is valid, let's continue to our image file (if we choose to use it)
         $image_type = $imported_torrent['ImageType'];
         if ($params->get('use_image_file')) {
             // When image_type is 'don't use image'
             if ($image_type == 0) {
                 $image_file_query_value = "";
             }
             // When image file is 'uploaded file'
             if ($image_type == 1) {
                 $image_file = JPATH_ROOT . DS . $source_folder . DS . $imported_torrent['Image'];
                 if (!is_file($image_file)) {
                     $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_OPS_SOMETHING_HAPPENED_IMAGE') . ' - ' . $imported_torrent['Image']);
                     return false;
                 }
                 if (!filesize($image_file)) {
                     $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_EMPTY_FILE_IMAGE') . ' - ' . $imported_torrent['Image']);
                     return false;
                 }
                 if (!TrackerHelper::is_image($image_file)) {
                     $this->setError(JText::_('COM_TRACKER_UTILITY_IMPORT_NOT_AN_IMAGE_FILE') . ' - ' . $imported_torrent['Image']);
                     return false;
                 }
                 $image_file_extension = end(explode(".", $image_file));
                 $image_file_query_value = $torrent->hash_info() . '.' . $image_file_extension;
                 $image_file_file = $image_file;
             }
             // When image file is an external link
             if ($image_type == 2) {
                 // If the remote file is unavailable
                 if (@(!file_get_contents($imported_torrent['Image'], 0, NULL, 0, 1))) {
                     echo JText::_('COM_TRACKER_UTILITY_IMPORT_REMOTE_IMAGE_INVALID_FILE');
                     continue 3;
                 }
                 // check if the remote file is not an image
                 if (!is_array(@getimagesize($imported_torrent['Image']))) {
                     echo JText::_('COM_TRACKER_UTILITY_IMPORT_REMOTE_IMAGE_NOT_IMAGE');
                     continue 3;
                 }
                 $image_file_query_value = $imported_torrent['Image'];
             }
         } else {
             $image_file_query_value = "";
         }
         // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
         // All is good, let's insert the record in the database
         // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
         //Insert the torrent into the table
         $query->clear();
         $query = $db->getQuery(true);
         $query->insert('#__tracker_torrents');
         $query->set('info_hash = UNHEX("' . $torrent->hash_info() . '")');
         $query->set('ctime = unix_timestamp()');
         $query->set('name = ' . $db->quote($temp_torrent['name']));
         $query->set('alias = ' . $db->quote($temp_torrent['name']));
         $query->set('filename = ' . $db->quote($temp_torrent['filename']));
         $query->set('description = ' . $db->quote($temp_torrent['description']));
         $query->set('categoryID = ' . $db->quote($temp_torrent['categoryID']));
         $query->set('size = ' . $db->quote($torrent->size()));
         $query->set('created_time = ' . $db->quote(date("Y-m-d H:i:s")));
         $query->set('uploader = ' . $db->quote($user->id));
         $query->set('number_files = ' . $db->quote(count($torrent->content())));
         $query->set('uploader_anonymous = ' . $db->quote($temp_torrent['uploader_anonymous']));
         $query->set('forum_post = ' . $db->quote($temp_torrent['forum_post']));
         $query->set('info_post = ' . $db->quote($temp_torrent['info_post']));
         $query->set('licenseID = ' . $db->quote($temp_torrent['licenseID']));
         $query->set('upload_multiplier = 1');
         $query->set('download_multiplier = ' . $db->quote($temp_torrent['download_multiplier']));
         $query->set('image_file = ' . $db->quote($image_file_query_value));
         $query->set('tags = ' . $db->quote($temp_torrent['tags']));
         $query->set('state = 1');
         $db->setQuery($query);
         if (!$db->query()) {
             JError::raiseError(500, $db->getErrorMsg());
         }
         // Get the torrent ID that we've just inserted in the database
         $torrent_id = $db->insertid();
         // Insert the list of files of the torrent in the database
         foreach ($torrent->content() as $filename => $filesize) {
             $query->clear();
             $query = $db->getQuery(true);
             $query->insert('#__tracker_files_in_torrents');
             $query->set('torrentID = ' . $db->quote($torrent_id));
             $query->set('filename = ' . $db->quote($filename));
             $query->set('size = ' . $db->quote($filesize));
             $db->setQuery($query);
             if (!$db->query()) {
                 JError::raiseError(500, $db->getErrorMsg());
             }
         }
         // If we're in freeleech we need to add the record of the new torrent to the freeleech table
         if ($params->get('freeleech') == 1) {
             $query->clear();
             $query = $db->getQuery(true);
             $query->insert('#__tracker_torrents_freeleech');
             $query->set('fid = ' . $db->quote($torrent_id));
             $query->set('download_multiplier = 1');
             $db->setQuery($query);
             if (!$db->query()) {
                 JError::raiseError(500, $db->getErrorMsg());
             }
         }
         $upload_error = 0;
         // Lets try to save the torrent before we continue
         if (!copy($torrent_file, JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $temp_torrent['filename'])) {
             $upload_error = 1;
             echo JText::_('COM_TRACKER_UTILITY_IMPORT_COULDNT_COPY_TORRENT');
             continue;
         } else {
             unlink($torrent_file);
         }
         // And we should also move the image file if we're using it with the option of uploading an image file
         if ($params->get('use_image_file') && $imported_torrent['ImageType'] == 1) {
             if (!copy($image_file, JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value)) {
                 $upload_error = 1;
                 echo JText::_('COM_TRACKER_UTILITY_IMPORT_COULDNT_COPY_TORRENT_IMAGE');
                 continue 2;
             } else {
                 unlink($image_file);
             }
         }
         if ($upload_error == 1) {
             $query->clear();
             $query = $db->getQuery(true);
             $query->delete('#__tracker_files_in_torrents');
             $query->where('torrent=' . $db->quote($torrent_id));
             $db->setQuery($query);
             $db->query();
             if ($error = $db->getErrorMsg()) {
                 $this->setError($error);
                 return false;
             }
             $query->clear();
             $query = $db->getQuery(true);
             $query->delete('#__tracker_torrents');
             $query->where('fid=' . $db->quote($torrent_id));
             $db->setQuery($query);
             $db->query();
             @unlink(JPATH_SITE . DS . $params->get('torrent_dir') . $torrent_id . "_" . $temp_torrent['filename']);
             if ($image_type == 1) {
                 @unlink(JPATH_SITE . DS . 'images/tracker/torrent_image/' . $image_file_query_value);
             }
             continue;
         }
         JFactory::getApplication()->enqueueMessage(JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT') . ' \'' . $temp_torrent['filename'] . '\' ' . JText::_('COM_TRACKER_UTILITY_IMPORT_TORRENT_SUCCESS') . '<br>');
     }
     return true;
 }
Example #12
0
function is_torrent($filePath)
{
    $torrent = new Torrent($filePath);
    $isAccepted = $torrent->errors() ? false : true;
    if (!$isAccepted) {
        die("erreurs : <pre>" . print_r($torrent->errors(), true) . "</pre>");
    }
    $isWellFormed = $torrent->name() != null && $torrent->announce() != null;
    return $isAccepted && $isWellFormed;
}