Files
nexusphp/public/scrape.php

74 lines
2.5 KiB
PHP
Raw Permalink Normal View History

2020-12-26 01:42:23 +08:00
<?php
2021-02-26 15:15:13 +08:00
require_once('../include/bittorrent_announce.php');
2022-03-19 14:55:43 +08:00
require ROOT_PATH . 'include/core.php';
//require_once('../include/benc.php');
2020-12-26 01:42:23 +08:00
dbconn_announce();
// BLOCK ACCESS WITH WEB BROWSERS AND CHEATS!
block_browser();
2025-10-14 14:54:44 +07:00
$passkey = $_GET['passkey'] ?? '';
if (empty($passkey)) {
err('require passkey');
}
$redis = $Cache->getRedis();
$passkeyInvalidKey = "passkey_invalid";
// check passkey
if (!$az = $Cache->get_value('user_passkey_'.$passkey.'_content')){
$res = sql_query("SELECT id, username, downloadpos, enabled, uploaded, downloaded, class, parked, clientselect, showclienterror, passkey, donor, donoruntil, seedbonus, tracker_url_id FROM users WHERE passkey=". sqlesc($passkey)." LIMIT 1");
$az = mysql_fetch_array($res);
do_log("[check passkey], currentUser: " . nexus_json_encode($az));
$Cache->cache_value('user_passkey_'.$passkey.'_content', $az, 3600);
}
if (!$az) {
$redis->set("$passkeyInvalidKey:$passkey", TIMENOW, ['ex' => 24*3600]);
err("Invalid passkey! Re-download the .torrent from $BASEURL");
}
if ($az["enabled"] == "no")
err("Your account is disabled!", 300);
elseif ($az["parked"] == "yes")
err("Your account is parked! (Read the FAQ)", 300);
elseif ($az["downloadpos"] == "no")
err("Your downloading privileges have been disabled! (Read the rules)", 300);
$userid = intval($az['id'] ?? 0);
unset($GLOBALS['CURUSER']);
$CURUSER = $GLOBALS["CURUSER"] = $az;
2020-12-26 01:42:23 +08:00
preg_match_all('/info_hash=([^&]*)/i', $_SERVER["QUERY_STRING"], $info_hash_array);
$fields = "info_hash, times_completed, seeders, leechers";
if (count($info_hash_array[1]) < 1) {
warn("Require info_hash.", 86400);
2021-03-18 20:32:35 +08:00
// $query = "SELECT $fields FROM torrents ORDER BY id";
2020-12-26 01:42:23 +08:00
}
else {
$query = "SELECT $fields FROM torrents WHERE " . hash_where_arr('info_hash', $info_hash_array[1]);
}
$cacheKey = md5(http_build_query($info_hash_array[1]));
$cacheData = \Nexus\Database\NexusDB::cache_get($cacheKey);
if ($cacheData) {
do_log("[SCRAPE_FROM_CACHE]: " . $_SERVER["QUERY_STRING"]);
benc_resp($cacheData);
exit(0);
}
2020-12-26 01:42:23 +08:00
$res = sql_query($query);
if (mysql_num_rows($res) < 1){
warn("Torrent not registered with this tracker.", 86400);
2020-12-26 01:42:23 +08:00
}
$torrent_details = [];
2020-12-26 01:42:23 +08:00
while ($row = mysql_fetch_assoc($res)) {
$torrent_details[$row['info_hash']] = [
'complete' => (int)$row['seeders'],
'downloaded' => (int)$row['times_completed'],
'incomplete' => (int)$row['leechers']
];
2020-12-26 01:42:23 +08:00
}
$d = ['files' => $torrent_details];
2023-03-04 13:26:20 +08:00
\Nexus\Database\NexusDB::cache_put($cacheKey, $d, 1200);
benc_resp($d);