From ebe47b1ba35f95b2d59492a7fb250007a7307c4d Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Thu, 7 Apr 2022 15:44:43 +0800 Subject: [PATCH] improve Nexus boot --- app/Console/Commands/Test.php | 2 - app/Models/Peer.php | 2 +- app/Repositories/TrackerRepository.php | 7 ++- nexus/Nexus.php | 71 ++++++++++---------------- 4 files changed, 34 insertions(+), 48 deletions(-) diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index d15915c0..f94bfaf7 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -134,8 +134,6 @@ class Test extends Command // $key = "dddd1"; // $model = \App\Models\TorrentSecret::query()->where('id', 1)->first(); // \Nexus\Database\NexusDB::cache_put($key, $model); - $value = NexusDB::cache_get("tracker_report_authkey_secret:1:10002"); - dd($value); } diff --git a/app/Models/Peer.php b/app/Models/Peer.php index cafe63a1..0e803c8d 100644 --- a/app/Models/Peer.php +++ b/app/Models/Peer.php @@ -98,7 +98,7 @@ class Peer extends NexusModel } else { $this->connectable = self::CONNECTABLE_NO; } - Cache::put($cacheKey, $this->connectable, 600); + Cache::put($cacheKey, $this->connectable, 3600); $log .= ", do check, connectable: " . $this->connectable; } else { $log .= ", don't do check"; diff --git a/app/Repositories/TrackerRepository.php b/app/Repositories/TrackerRepository.php index 7a1dab07..93b8ab5f 100644 --- a/app/Repositories/TrackerRepository.php +++ b/app/Repositories/TrackerRepository.php @@ -826,19 +826,22 @@ class TrackerRepository extends BaseRepository private function checkScrapeFields(Request $request): array { - preg_match_all('/info_hash=([^&]*)/i', urldecode($request->getQueryString()), $info_hash_match); + preg_match_all('/info_hash=([^&]*)/i', $request->getQueryString(), $info_hash_match); $info_hash_array = $info_hash_match[1]; + $info_hash_original = []; if (count($info_hash_array) < 1) { throw new TrackerException("key: info_hash is Missing !"); } else { foreach ($info_hash_array as $item) { + $item = urldecode($item); if (($length = strlen($item)) != 20) { throw new TrackerException("Invalid info_hash ! info_hash is not 20 bytes long($length)"); } + $info_hash_original[] = $item; } } - return $info_hash_array; + return $info_hash_original; } /** diff --git a/nexus/Nexus.php b/nexus/Nexus.php index 39525add..a20474ac 100644 --- a/nexus/Nexus.php +++ b/nexus/Nexus.php @@ -1,6 +1,9 @@ retrieveFromServer(['HTTP_X_FORWARDED_PROTO', 'REQUEST_SCHEME', 'HTTP_SCHEME']); if (empty($schema)) { - $tmp = $this->retrieveFromServer(['HTTPS']); - if ($tmp == 'on') { + $https = $this->retrieveFromServer(['HTTPS']); + if ($https == 'on') { $schema = 'https'; } } @@ -106,24 +109,31 @@ final class Nexus public function getRequestIp() { - $ip = $this->retrieveFromServer(['HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_REMOTE_ADDR']); - if (empty($ip)) { - $ip = request()->getClientIp(); - } - return $ip; + return $this->retrieveFromServer(['HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_REMOTE_ADDR', 'REMOTE_ADDR']); } - private function retrieveFromServer(array $fields) + private function retrieveFromServer(array $fields, bool $includeHeader = false) { if ($this->runningInOctane()) { $servers = request()->server(); + $headers = request()->header(); } else { $servers = $_SERVER; + $headers = getallheaders(); } foreach ($fields as $field) { - if (!empty($servers[$field])) { - do_log("got from $field"); - return $servers[$field]; + $result = $servers[$field] ?? null; + if ($result !== null && $result !== '') { + return $result; + } + if ($includeHeader) { + $result = $headers[$field] ?? null; + if (is_array($result)) { + $result = Arr::first($result); + } + if ($result !== null && $result !== '') { + return $result; + } } } } @@ -169,39 +179,20 @@ final class Nexus private function setRequestId() { - $requestId = ''; - $names = ['HTTP_X_REQUEST_ID', 'REQUEST_ID', 'Request-Id', 'request-id']; - if ($this->runningInOctane()) { - $request = request(); - foreach ($names as $name) { - $requestId = $request->server($name, $request->header($name)); - if (!empty($requestId)) { - break; - } - } - } else { - foreach ($names as $name) { - $requestId = $_SERVER[$name] ?? ''; - if (!empty($requestId)) { - break; - } - } - } + $requestId = $this->retrieveFromServer(['HTTP_X_REQUEST_ID', 'REQUEST_ID', 'Request-Id', 'request-id'], true); if (empty($requestId)) { $requestId = $this->generateRequestId(); } - $this->requestId = $requestId; + $this->requestId = (string)$requestId; } private function setScript() { - if ($this->runningInOctane()) { - $request = request(); - $script = $request->header('script_filename', ''); - } else { - $script = strstr(basename($_SERVER['SCRIPT_FILENAME']), '.', true); + $script = $this->retrieveFromServer(['SCRIPT_FILENAME', 'SCRIPT_NAME', 'Script', 'script'], true); + if (str_contains($script, '.')) { + $script = strstr(basename($script), '.', true); } - $this->script = $script; + $this->script = (string)$script; } private function setStartTimestamp() @@ -211,13 +202,7 @@ final class Nexus private function setPlatform() { - if ($this->runningInOctane()) { - $request = request(); - $platform = $request->header('platform', ''); - } else { - $platform = $_SERVER['HTTP_PLATFORM'] ?? ''; - } - $this->platform = $platform; + $this->platform = (string)$this->retrieveFromServer(['HTTP_PLATFORM', 'Platform', 'platform'], true); } public static function js(string $js, string $position, bool $isFile)