mirror of
https://github.com/torrentpier/torrentpier
synced 2025-08-14 10:37:30 -07:00
Drop Ocelot announcer support 🫡 (#1727)
* Drop Ocelot announcer support * Update tr_complete_count.php * Delete ocelot.sql * Update Torrent.php * Update Torrent.php * Update Torrent.php * Update Torrent.php * Update CHANGELOG.md * Update tr_make_snapshot.php * Update tr_make_snapshot.php * Update tr_make_snapshot.php * Update tr_make_snapshot.php
This commit is contained in:
parent
ba704efba2
commit
2e5b157ede
6 changed files with 28 additions and 261 deletions
|
@ -8,6 +8,7 @@
|
|||
- Release 2.4.5 🍧️ ([belomaxorka](https://github.com/belomaxorka))
|
||||
- Added `TorrentPier instance hash` generation [\#1726](https://github.com/torrentpier/torrentpier/pull/1726) ([belomaxorka](https://github.com/belomaxorka))
|
||||
- Added `m4a` extension support in M3U playback [\#1724](https://github.com/torrentpier/torrentpier/pull/1724) ([belomaxorka](https://github.com/belomaxorka))
|
||||
- Drop Ocelot announcer support 🫡 [\#1727](https://github.com/torrentpier/torrentpier/pull/1727) ([belomaxorka](https://github.com/belomaxorka))
|
||||
- Show torrent's announcers list in `filelist.php` page [\#1708](https://github.com/torrentpier/torrentpier/pull/1708) ([belomaxorka](https://github.com/belomaxorka))
|
||||
- [PHP 8.4] Fixed some deprecations [\#1718](https://github.com/torrentpier/torrentpier/pull/1718) ([belomaxorka](https://github.com/belomaxorka))
|
||||
- [Configurable] Show magnet-links for guests [\#1712](https://github.com/torrentpier/torrentpier/pull/1712) ([belomaxorka](https://github.com/belomaxorka))
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
SET SQL_MODE = "";
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for `bb_bt_tracker`
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `bb_bt_tracker`;
|
||||
CREATE TABLE IF NOT EXISTS `bb_bt_tracker`
|
||||
(
|
||||
`peer_hash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`peer_id` varchar(20) NOT NULL,
|
||||
`user_id` mediumint(9) NOT NULL DEFAULT '0',
|
||||
`ip` varchar(42) NOT NULL DEFAULT '0',
|
||||
`ipv6` varchar(32) DEFAULT NULL,
|
||||
`port` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`client` varchar(51) NOT NULL DEFAULT 'Unknown',
|
||||
`seeder` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`releaser` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`tor_type` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`uploaded` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`downloaded` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`remain` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`speed_up` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`speed_down` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`up_add` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`down_add` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`update_time` int(11) NOT NULL DEFAULT '0',
|
||||
`complete_percent` bigint(20) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`peer_hash`),
|
||||
KEY `topic_id` (`topic_id`),
|
||||
KEY `user_id` (`user_id`)
|
||||
) ENGINE = MyISAM
|
||||
DEFAULT CHARSET = utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of bb_bt_tracker
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for `bb_bt_tracker_snap`
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `bb_bt_tracker_snap`;
|
||||
CREATE TABLE IF NOT EXISTS `bb_bt_tracker_snap`
|
||||
(
|
||||
`topic_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`seeders` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`leechers` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`speed_up` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`speed_down` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`complete` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`topic_id`)
|
||||
) ENGINE = MyISAM
|
||||
DEFAULT CHARSET = utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of bb_bt_tracker_snap
|
||||
-- ----------------------------
|
|
@ -127,16 +127,6 @@ $bb_cfg['torr_server'] = [
|
|||
'disable_for_guest' => true
|
||||
];
|
||||
|
||||
// Ocelot
|
||||
$bb_cfg['ocelot'] = [
|
||||
'enabled' => false,
|
||||
'host' => $domain_name,
|
||||
'port' => 34000,
|
||||
'url' => "http://$domain_name:34000/", // with '/'
|
||||
'secret' => 'some_10_chars', // 10 chars
|
||||
'stats' => 'some_10_chars', // 10 chars
|
||||
];
|
||||
|
||||
// FAQ url help link
|
||||
$bb_cfg['how_to_download_url_help'] = 'viewtopic.php?t=1'; // How to download?
|
||||
$bb_cfg['what_is_torrent_url_help'] = 'viewtopic.php?t=2'; // What is a torrent?
|
||||
|
|
|
@ -11,8 +11,6 @@ if (!defined('BB_ROOT')) {
|
|||
die(basename(__FILE__));
|
||||
}
|
||||
|
||||
global $bb_cfg;
|
||||
|
||||
// Update TORRENT "completed" counters
|
||||
DB()->query("
|
||||
UPDATE
|
||||
|
@ -23,44 +21,3 @@ DB()->query("
|
|||
WHERE
|
||||
tor.topic_id = snap.topic_id
|
||||
");
|
||||
|
||||
/*
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
// Update TORRENT "completed" counters
|
||||
DB()->query("
|
||||
UPDATE
|
||||
" . BB_BT_TORRENTS . " tor,
|
||||
" . BB_BT_TRACKER_SNAP . " snap
|
||||
SET
|
||||
tor.complete_count = snap.complete
|
||||
WHERE
|
||||
tor.topic_id = snap.topic_id
|
||||
");
|
||||
} else {
|
||||
// Get complete counts
|
||||
DB()->query("
|
||||
CREATE TEMPORARY TABLE tmp_complete_count
|
||||
SELECT
|
||||
topic_id, COUNT(*) AS compl_cnt
|
||||
FROM " . BB_BT_TORSTAT . "
|
||||
WHERE completed = 0
|
||||
GROUP BY topic_id
|
||||
");
|
||||
|
||||
// Update USER "completed" counters
|
||||
DB()->query("UPDATE " . BB_BT_TORSTAT . " SET completed = 1");
|
||||
|
||||
// Update TORRENT "completed" counters
|
||||
DB()->query("
|
||||
UPDATE
|
||||
" . BB_BT_TORRENTS . " tor,
|
||||
tmp_complete_count tmp
|
||||
SET
|
||||
tor.complete_count = tor.complete_count + tmp.compl_cnt
|
||||
WHERE
|
||||
tor.topic_id = tmp.topic_id
|
||||
");
|
||||
|
||||
// Drop tmp table
|
||||
DB()->query("DROP TEMPORARY TABLE tmp_complete_count");
|
||||
}*/
|
||||
|
|
|
@ -18,13 +18,11 @@ DB()->expect_slow_query(600);
|
|||
//
|
||||
// Make tracker snapshot
|
||||
//
|
||||
if (!$bb_cfg['ocelot']['enabled']) {
|
||||
define('NEW_BB_BT_TRACKER_SNAP', 'new_tracker_snap');
|
||||
define('OLD_BB_BT_TRACKER_SNAP', 'old_tracker_snap');
|
||||
define('NEW_BB_BT_TRACKER_SNAP', 'new_tracker_snap');
|
||||
define('OLD_BB_BT_TRACKER_SNAP', 'old_tracker_snap');
|
||||
|
||||
DB()->query("DROP TABLE IF EXISTS " . NEW_BB_BT_TRACKER_SNAP . ", " . OLD_BB_BT_TRACKER_SNAP);
|
||||
DB()->query("CREATE TABLE " . NEW_BB_BT_TRACKER_SNAP . " LIKE " . BB_BT_TRACKER_SNAP);
|
||||
}
|
||||
DB()->query("DROP TABLE IF EXISTS " . NEW_BB_BT_TRACKER_SNAP . ", " . OLD_BB_BT_TRACKER_SNAP);
|
||||
DB()->query("CREATE TABLE " . NEW_BB_BT_TRACKER_SNAP . " LIKE " . BB_BT_TRACKER_SNAP);
|
||||
|
||||
$per_cycle = 50000;
|
||||
$row = DB()->fetch_row("SELECT MIN(topic_id) AS start_id, MAX(topic_id) AS finish_id FROM " . BB_BT_TRACKER);
|
||||
|
@ -37,44 +35,25 @@ while (true) {
|
|||
|
||||
$val = [];
|
||||
|
||||
if (!$bb_cfg['ocelot']['enabled']) {
|
||||
$sql = "
|
||||
SELECT
|
||||
topic_id, SUM(seeder) AS seeders, (COUNT(*) - SUM(seeder)) AS leechers,
|
||||
SUM(speed_up) AS speed_up, SUM(speed_down) AS speed_down, SUM(complete) AS completed
|
||||
FROM " . BB_BT_TRACKER . "
|
||||
WHERE topic_id BETWEEN $start_id AND $end_id
|
||||
GROUP BY topic_id
|
||||
";
|
||||
} else {
|
||||
$sql = "
|
||||
SELECT
|
||||
topic_id, SUM(speed_up) AS speed_up, SUM(speed_down) AS speed_down
|
||||
FROM " . BB_BT_TRACKER . "
|
||||
WHERE topic_id BETWEEN $start_id AND $end_id
|
||||
GROUP BY topic_id
|
||||
";
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
topic_id, SUM(seeder) AS seeders, (COUNT(*) - SUM(seeder)) AS leechers,
|
||||
SUM(speed_up) AS speed_up, SUM(speed_down) AS speed_down, SUM(complete) AS completed
|
||||
FROM " . BB_BT_TRACKER . "
|
||||
WHERE topic_id BETWEEN $start_id AND $end_id
|
||||
GROUP BY topic_id
|
||||
";
|
||||
|
||||
foreach (DB()->fetch_rowset($sql) as $row) {
|
||||
$val[] = implode(',', $row);
|
||||
}
|
||||
|
||||
if ($val) {
|
||||
if (!$bb_cfg['ocelot']['enabled']) {
|
||||
DB()->query("
|
||||
REPLACE INTO " . NEW_BB_BT_TRACKER_SNAP . "
|
||||
DB()->query("
|
||||
REPLACE INTO " . NEW_BB_BT_TRACKER_SNAP . "
|
||||
(topic_id, seeders, leechers, speed_up, speed_down, completed)
|
||||
VALUES(" . implode('),(', $val) . ")
|
||||
");
|
||||
} else {
|
||||
DB()->query("
|
||||
INSERT INTO " . BB_BT_TRACKER_SNAP . "
|
||||
(topic_id, speed_up, speed_down)
|
||||
VALUES(" . implode('),(', $val) . ")
|
||||
ON DUPLICATE KEY UPDATE speed_up = VALUES(speed_up), speed_down = VALUES(speed_down)
|
||||
");
|
||||
}
|
||||
VALUES(" . implode('),(', $val) . ")
|
||||
");
|
||||
}
|
||||
|
||||
if ($end_id > $finish_id) {
|
||||
|
@ -84,15 +63,13 @@ while (true) {
|
|||
$start_id += $per_cycle;
|
||||
}
|
||||
|
||||
if (!$bb_cfg['ocelot']['enabled']) {
|
||||
DB()->query("
|
||||
RENAME TABLE
|
||||
DB()->query("
|
||||
RENAME TABLE
|
||||
" . BB_BT_TRACKER_SNAP . " TO " . OLD_BB_BT_TRACKER_SNAP . ",
|
||||
" . NEW_BB_BT_TRACKER_SNAP . " TO " . BB_BT_TRACKER_SNAP . "
|
||||
");
|
||||
");
|
||||
|
||||
DB()->query("DROP TABLE IF EXISTS " . NEW_BB_BT_TRACKER_SNAP . ", " . OLD_BB_BT_TRACKER_SNAP);
|
||||
}
|
||||
DB()->query("DROP TABLE IF EXISTS " . NEW_BB_BT_TRACKER_SNAP . ", " . OLD_BB_BT_TRACKER_SNAP);
|
||||
|
||||
//
|
||||
// Make dl-list snapshot
|
||||
|
|
|
@ -160,14 +160,6 @@ class Torrent
|
|||
'topic_title' => $topic_title,
|
||||
]);
|
||||
|
||||
// Ocelot
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
if ($row = DB()->fetch_row("SELECT info_hash FROM " . BB_BT_TORRENTS . " WHERE attach_id = $attach_id LIMIT 1")) {
|
||||
$info_hash = $row['info_hash'];
|
||||
}
|
||||
self::ocelot_update_tracker('delete_torrent', ['info_hash' => rawurlencode($info_hash), 'id' => $topic_id]);
|
||||
}
|
||||
|
||||
// Delete torrent
|
||||
$sql = "DELETE FROM " . BB_BT_TORRENTS . " WHERE attach_id = $attach_id";
|
||||
|
||||
|
@ -257,7 +249,7 @@ class Torrent
|
|||
*/
|
||||
public static function change_tor_type($attach_id, $tor_status_gold)
|
||||
{
|
||||
global $topic_id, $lang, $bb_cfg;
|
||||
global $topic_id, $lang;
|
||||
|
||||
if (!$torrent = self::get_torrent_info($attach_id)) {
|
||||
bb_die($lang['TOR_NOT_FOUND']);
|
||||
|
@ -269,17 +261,8 @@ class Torrent
|
|||
|
||||
$topic_id = $torrent['topic_id'];
|
||||
$tor_status_gold = (int)$tor_status_gold;
|
||||
$info_hash = null;
|
||||
|
||||
DB()->query("UPDATE " . BB_BT_TORRENTS . " SET tor_type = $tor_status_gold WHERE topic_id = $topic_id");
|
||||
|
||||
// Ocelot
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
if ($row = DB()->fetch_row("SELECT info_hash FROM " . BB_BT_TORRENTS . " WHERE topic_id = $topic_id LIMIT 1")) {
|
||||
$info_hash = $row['info_hash'];
|
||||
}
|
||||
self::ocelot_update_tracker('update_torrent', ['info_hash' => rawurlencode($info_hash), 'freetorrent' => $tor_status_gold]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -412,11 +395,6 @@ class Torrent
|
|||
}
|
||||
}
|
||||
|
||||
// Ocelot
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
self::ocelot_update_tracker('add_torrent', ['info_hash' => rawurlencode($info_hash ?? hex2bin(substr($v2_hash, 0, 40))), 'id' => $topic_id, 'freetorrent' => 0]);
|
||||
}
|
||||
|
||||
if ($row = DB()->fetch_row("SELECT topic_id FROM " . BB_BT_TORRENTS . " $info_hash_where LIMIT 1")) {
|
||||
$msg = sprintf($lang['BT_REG_FAIL_SAME_HASH'], TOPIC_URL . $row['topic_id']);
|
||||
bb_die($msg);
|
||||
|
@ -562,10 +540,6 @@ class Torrent
|
|||
|
||||
if ($bt_userdata = get_bt_userdata($user_id)) {
|
||||
$passkey_val = $bt_userdata['auth_key'];
|
||||
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
self::ocelot_update_tracker('add_user', ['id' => $user_id, 'passkey' => $passkey_val]);
|
||||
}
|
||||
}
|
||||
|
||||
// Ratio limits
|
||||
|
@ -596,7 +570,7 @@ class Torrent
|
|||
}
|
||||
|
||||
// Get tracker announcer
|
||||
$announce_url = $bb_cfg['ocelot']['enabled'] ? $bb_cfg['ocelot']['url'] . "$passkey_val/announce" : $bb_cfg['bt_announce_url'] . "?$passkey_key=$passkey_val";
|
||||
$announce_url = $bb_cfg['bt_announce_url'] . "?$passkey_key=$passkey_val";
|
||||
|
||||
// Replace original announce url with tracker default
|
||||
if ($bb_cfg['bt_replace_ann_url'] || !isset($tor['announce'])) {
|
||||
|
@ -695,7 +669,7 @@ class Torrent
|
|||
*/
|
||||
public static function generate_passkey($user_id, bool $force_generate = false)
|
||||
{
|
||||
global $bb_cfg, $lang;
|
||||
global $lang;
|
||||
|
||||
$user_id = (int)$user_id;
|
||||
|
||||
|
@ -719,19 +693,13 @@ class Torrent
|
|||
if (!$old_passkey) {
|
||||
// Create first passkey
|
||||
DB()->query("INSERT IGNORE INTO " . BB_BT_USERS . " (user_id, auth_key) VALUES ($user_id, '$passkey_val')");
|
||||
if (DB()->affected_rows() == 1) {
|
||||
return $passkey_val;
|
||||
}
|
||||
} else {
|
||||
// Update exists passkey
|
||||
DB()->query("UPDATE IGNORE " . BB_BT_USERS . " SET auth_key = '$passkey_val' WHERE user_id = $user_id LIMIT 1");
|
||||
if (DB()->affected_rows() == 1) {
|
||||
// Ocelot
|
||||
if ($bb_cfg['ocelot']['enabled']) {
|
||||
self::ocelot_update_tracker('change_passkey', ['oldpasskey' => $old_passkey, 'newpasskey' => $passkey_val]);
|
||||
}
|
||||
return $passkey_val;
|
||||
}
|
||||
}
|
||||
|
||||
if (DB()->affected_rows() == 1) {
|
||||
return $passkey_val;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -797,75 +765,6 @@ class Torrent
|
|||
bb_die($msg . $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update torrent on Ocelot tracker
|
||||
*
|
||||
* @param string $action
|
||||
* @param array $updates
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private static function ocelot_update_tracker($action, $updates)
|
||||
{
|
||||
global $bb_cfg;
|
||||
|
||||
$get = $bb_cfg['ocelot']['secret'] . "/update?action=$action";
|
||||
|
||||
foreach ($updates as $key => $value) {
|
||||
$get .= "&$key=$value";
|
||||
}
|
||||
|
||||
$max_attempts = 3;
|
||||
$err = false;
|
||||
|
||||
return !(self::ocelot_send_request($get, $max_attempts, $err) === false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send request to the Ocelot traker
|
||||
*
|
||||
* @param string $get
|
||||
* @param int $max_attempts
|
||||
* @param bool $err
|
||||
*
|
||||
* @return bool|int
|
||||
*/
|
||||
private static function ocelot_send_request($get, $max_attempts = 1, &$err = false)
|
||||
{
|
||||
global $bb_cfg;
|
||||
|
||||
$header = "GET /$get HTTP/1.1\r\nConnection: Close\r\n\r\n";
|
||||
$attempts = $success = $response = 0;
|
||||
|
||||
while (!$success && $attempts++ < $max_attempts) {
|
||||
// Send request
|
||||
$file = fsockopen($bb_cfg['ocelot']['host'], $bb_cfg['ocelot']['port'], $error_num, $error_string);
|
||||
if ($file) {
|
||||
if (fwrite($file, $header) === false) {
|
||||
$err = "Failed to fwrite()";
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$err = "Failed to fsockopen() - $error_num - $error_string";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check for response
|
||||
while (!feof($file)) {
|
||||
$response .= fread($file, 1024);
|
||||
}
|
||||
|
||||
$data_end = strrpos($response, "\n");
|
||||
$status = substr($response, $data_end + 1);
|
||||
|
||||
if ($status == "success") {
|
||||
$success = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the user passkey, false otherwise
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue