diff --git a/app/Console/Commands/AttendanceMigrate.php b/app/Console/Commands/AttendanceMigrate.php
index d3e22f29..554bbff7 100644
--- a/app/Console/Commands/AttendanceMigrate.php
+++ b/app/Console/Commands/AttendanceMigrate.php
@@ -41,7 +41,7 @@ class AttendanceMigrate extends Command
{
$rep = new AttendanceRepository();
$result = $rep->migrateAttendance();
- $log = sprintf('[%s], %s, result: %s, query: %s', REQUEST_ID, __METHOD__, var_export($result, true), last_query());
+ $log = sprintf('[%s], %s, result: %s, query: %s', nexus() ? nexus()->getRequestId() : 'NO_REQUEST_ID', __METHOD__, var_export($result, true), last_query());
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/BackuAll.php b/app/Console/Commands/BackuAll.php
index abc8f9bc..f17fd855 100644
--- a/app/Console/Commands/BackuAll.php
+++ b/app/Console/Commands/BackuAll.php
@@ -42,7 +42,7 @@ class BackuAll extends Command
$result = $rep->backupAll();
$log = sprintf(
'[%s], %s, result: %s',
- REQUEST_ID, __METHOD__, var_export($result, true)
+ nexus()->getRequestId(), __METHOD__, var_export($result, true)
);
$this->info($log);
do_log($log);
diff --git a/app/Console/Commands/BackupCronjob.php b/app/Console/Commands/BackupCronjob.php
index 153a8e6d..09871d4e 100644
--- a/app/Console/Commands/BackupCronjob.php
+++ b/app/Console/Commands/BackupCronjob.php
@@ -42,7 +42,7 @@ class BackupCronjob extends Command
$result = $rep->cronjobBackup();
$log = sprintf(
'[%s], %s, result: %s',
- REQUEST_ID, __METHOD__, var_export($result, true)
+ nexus()->getRequestId(), __METHOD__, var_export($result, true)
);
$this->info($log);
do_log($log);
diff --git a/app/Console/Commands/BackupDatabase.php b/app/Console/Commands/BackupDatabase.php
index f8c7e979..9b8825fa 100644
--- a/app/Console/Commands/BackupDatabase.php
+++ b/app/Console/Commands/BackupDatabase.php
@@ -40,7 +40,7 @@ class BackupDatabase extends Command
{
$rep = new ToolRepository();
$result = $rep->backupDatabase();
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
}
diff --git a/app/Console/Commands/BackupWeb.php b/app/Console/Commands/BackupWeb.php
index d31eb24a..be0d9fba 100644
--- a/app/Console/Commands/BackupWeb.php
+++ b/app/Console/Commands/BackupWeb.php
@@ -40,7 +40,7 @@ class BackupWeb extends Command
{
$rep = new ToolRepository();
$result = $rep->backupWeb();
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
}
diff --git a/app/Console/Commands/DeleteExpiredToken.php b/app/Console/Commands/DeleteExpiredToken.php
index f822ff92..6be57d14 100644
--- a/app/Console/Commands/DeleteExpiredToken.php
+++ b/app/Console/Commands/DeleteExpiredToken.php
@@ -55,7 +55,7 @@ class DeleteExpiredToken extends Command
$query->where('last_used_at', '<', Carbon::now()->subDays($days));
$result = $query->delete();
- $log = sprintf('[%s], %s, result: %s, query: %s', REQUEST_ID, __METHOD__, var_export($result, true), last_query());
+ $log = sprintf('[%s], %s, result: %s, query: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true), last_query());
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/ExamAssign.php b/app/Console/Commands/ExamAssign.php
index 92965d65..f5a73f4c 100644
--- a/app/Console/Commands/ExamAssign.php
+++ b/app/Console/Commands/ExamAssign.php
@@ -45,7 +45,7 @@ class ExamAssign extends Command
$end = $this->option('end');
$this->info(sprintf('uid: %s, examId: %s, begin: %s, end: %s', $uid, $examId, $begin, $end));
$result = $examRep->assignToUser($uid, $examId, $begin, $end);
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/ExamAssignCronjob.php b/app/Console/Commands/ExamAssignCronjob.php
index 44dc4bde..b0fc7855 100644
--- a/app/Console/Commands/ExamAssignCronjob.php
+++ b/app/Console/Commands/ExamAssignCronjob.php
@@ -40,7 +40,7 @@ class ExamAssignCronjob extends Command
{
$examRep = new ExamRepository();
$result = $examRep->cronjonAssign();
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/ExamCheckoutCronjob.php b/app/Console/Commands/ExamCheckoutCronjob.php
index 979dc4f5..56944739 100644
--- a/app/Console/Commands/ExamCheckoutCronjob.php
+++ b/app/Console/Commands/ExamCheckoutCronjob.php
@@ -42,7 +42,7 @@ class ExamCheckoutCronjob extends Command
$ignoreTimeRange = $this->option('ignore-time-range');
$this->info('ignore-time-range: ' . var_export($ignoreTimeRange, true));
$result = $examRep->cronjobCheckout($ignoreTimeRange);
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/ExamUpdateProgress.php b/app/Console/Commands/ExamUpdateProgress.php
index bcc78745..a24f341b 100644
--- a/app/Console/Commands/ExamUpdateProgress.php
+++ b/app/Console/Commands/ExamUpdateProgress.php
@@ -42,7 +42,7 @@ class ExamUpdateProgress extends Command
$uid = $this->argument('uid');
$examRep = new ExamRepository();
$result = $examRep->updateProgress($uid);
- $this->info(REQUEST_ID . ", result: " . var_export($result, true));
+ $this->info(nexus()->getRequestId() . ", result: " . var_export($result, true));
return 0;
}
}
diff --git a/app/Console/Commands/HitAndRunUpdateStatus.php b/app/Console/Commands/HitAndRunUpdateStatus.php
index 7baeb85e..8ad0980a 100644
--- a/app/Console/Commands/HitAndRunUpdateStatus.php
+++ b/app/Console/Commands/HitAndRunUpdateStatus.php
@@ -44,7 +44,7 @@ class HitAndRunUpdateStatus extends Command
$result = $rep->cronjobUpdateStatus($uid, $torrentId);
$log = sprintf(
'[%s], %s, uid: %s, torrentId: %s, result: %s',
- REQUEST_ID, __METHOD__, $uid, $torrentId, var_export($result, true)
+ nexus()->getRequestId(), __METHOD__, $uid, $torrentId, var_export($result, true)
);
$this->info($log);
do_log($log);
diff --git a/app/Console/Commands/MigrateTorrentTag.php b/app/Console/Commands/MigrateTorrentTag.php
index fc294529..9ac1d4ba 100644
--- a/app/Console/Commands/MigrateTorrentTag.php
+++ b/app/Console/Commands/MigrateTorrentTag.php
@@ -43,7 +43,7 @@ class MigrateTorrentTag extends Command
{
$rep = new TagRepository();
$result = $rep->migrateTorrentTag();
- $log = sprintf('[%s], %s, result: %s, query: %s', REQUEST_ID, __METHOD__, var_export($result, true), last_query());
+ $log = sprintf('[%s], %s, result: %s, query: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true), last_query());
$this->info($log);
do_log($log);
return 0;
diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php
index 230eefd7..db247f98 100644
--- a/app/Console/Commands/Test.php
+++ b/app/Console/Commands/Test.php
@@ -65,8 +65,11 @@ class Test extends Command
*/
public function handle()
{
- $redis = Redis::connection()->client();
- $r = $redis->get('5da94a358e67cb5181166ae2611c2fd9');
+ $peerId = '-UT355W-%af%b0ky%86N%a6%17i%f8%c1%0a';
+ $peerId = '-UT355W-%af%b0ky%86N%a6%17i%f8%c1%0a';
+ $peerId = '-UT355W-%AF%B0ky%86N%A6%17i%F8%C1';
+ $peerId = '-UT355W-%AF%B0ky%86N%A6%17i%F8%C1%0A';
+ $r = strlen(urldecode($peerId));
dd($r);
}
diff --git a/app/Console/Commands/UserResetPassword.php b/app/Console/Commands/UserResetPassword.php
index 43b2fa01..538c68a8 100644
--- a/app/Console/Commands/UserResetPassword.php
+++ b/app/Console/Commands/UserResetPassword.php
@@ -47,7 +47,7 @@ class UserResetPassword extends Command
$rep = new UserRepository();
$result = $rep->resetPassword($uid, $password, $passwordConfirmation);
- $log = sprintf('[%s], %s, result: %s', REQUEST_ID, __METHOD__, var_export($result, true));
+ $log = sprintf('[%s], %s, result: %s', nexus()->getRequestId(), __METHOD__, var_export($result, true));
$this->info($log);
do_log($log);
}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 0cf41a39..250b41d6 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -21,6 +21,7 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
// \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+ \App\Http\Middleware\BootNexus::class,
];
/**
diff --git a/app/Http/Middleware/BootNexus.php b/app/Http/Middleware/BootNexus.php
new file mode 100644
index 00000000..80e79fa2
--- /dev/null
+++ b/app/Http/Middleware/BootNexus.php
@@ -0,0 +1,29 @@
+server()), nexus_json_encode($request->header()), nexus_json_encode($request->query()), nexus_json_encode($request->input())
+ ));
+ return $next($request);
+ }
+
+
+}
diff --git a/app/Http/Middleware/Permission.php b/app/Http/Middleware/Permission.php
index 0b824eb8..7fe477c9 100644
--- a/app/Http/Middleware/Permission.php
+++ b/app/Http/Middleware/Permission.php
@@ -20,7 +20,7 @@ class Permission
{
/** @var User $user */
$user = $request->user();
- if (!$user || (IS_PLATFORM_ADMIN && !$user->canAccessAdmin())) {
+ if (!$user || (nexus()->isPlatformAdmin() && !$user->canAccessAdmin())) {
do_log("denied!");
throw new UnauthorizedException('Unauthorized!');
}
diff --git a/app/Http/Middleware/Platform.php b/app/Http/Middleware/Platform.php
index 56e1c2d7..a7ee857d 100644
--- a/app/Http/Middleware/Platform.php
+++ b/app/Http/Middleware/Platform.php
@@ -17,11 +17,10 @@ class Platform
*/
public function handle(Request $request, Closure $next)
{
- do_log(nexus_json_encode($_SERVER));
- if (empty(CURRENT_PLATFORM)) {
+ if (empty(nexus()->getPlatform())) {
throw new \InvalidArgumentException("Require platform header.");
}
- if (!in_array(CURRENT_PLATFORM, PLATFORMS)) {
+ if (!nexus()->isPlatformValid()) {
throw new \InvalidArgumentException("Invalid platform: " . CURRENT_PLATFORM);
}
return $next($request);
diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php
index a8a252df..5a70b40d 100644
--- a/app/Http/Middleware/TrimStrings.php
+++ b/app/Http/Middleware/TrimStrings.php
@@ -15,5 +15,7 @@ class TrimStrings extends Middleware
'current_password',
'password',
'password_confirmation',
+ 'peer_id',
+ 'info_hash',
];
}
diff --git a/app/Listeners/ResetNexus.php b/app/Listeners/ResetNexus.php
new file mode 100644
index 00000000..75b302ab
--- /dev/null
+++ b/app/Listeners/ResetNexus.php
@@ -0,0 +1,21 @@
+getRequestId() . "] %channel%.%level_name%: %message% %context% %extra%\n";
return tap(new LineFormatter($format, 'Y-m-d H:i:s', true, true), function ($formatter) {
$formatter->includeStacktraces();
});
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index faa701f6..5904a028 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -6,6 +6,7 @@ use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;
use Illuminate\Http\Resources\Json\JsonResource;
+use Nexus\Nexus;
class AppServiceProvider extends ServiceProvider
{
@@ -28,5 +29,6 @@ class AppServiceProvider extends ServiceProvider
{
// JsonResource::withoutWrapping();
DB::connection(config('database.default'))->enableQueryLog();
+// Nexus::boot();
}
}
diff --git a/app/Repositories/AgentAllowRepository.php b/app/Repositories/AgentAllowRepository.php
index 63d865f9..839db108 100644
--- a/app/Repositories/AgentAllowRepository.php
+++ b/app/Repositories/AgentAllowRepository.php
@@ -82,8 +82,8 @@ class AgentAllowRepository extends BaseRepository
$agentAllowId = $agentAllow->id;
$logPrefix = "[ID: $agentAllowId]";
$isPeerIdAllowed = $isAgentAllowed = $isPeerIdTooLow = $isAgentTooLow = false;
- //check peer_id
- if ($agentAllow->peer_id_pattern == '') {
+ //check peer_id, when handle scrape request, no peer_id, so let it pass
+ if ($agentAllow->peer_id_pattern == '' || $peerId === null) {
$isPeerIdAllowed = true;
} else {
$pattern = $agentAllow->peer_id_pattern;
diff --git a/app/Repositories/AuthenticateRepository.php b/app/Repositories/AuthenticateRepository.php
index 8a4d2fb0..7669fb9a 100644
--- a/app/Repositories/AuthenticateRepository.php
+++ b/app/Repositories/AuthenticateRepository.php
@@ -17,7 +17,7 @@ class AuthenticateRepository extends BaseRepository
if (!$user || md5($user->secret . $password . $user->secret) != $user->passhash) {
throw new \InvalidArgumentException('Username or password invalid.');
}
- if (IS_PLATFORM_ADMIN && !$user->canAccessAdmin()) {
+ if (nexus()->isPlatformAdmin() && !$user->canAccessAdmin()) {
throw new UnauthorizedException('Unauthorized!');
}
$user->checkIsNormal();
diff --git a/app/Repositories/DashboardRepository.php b/app/Repositories/DashboardRepository.php
index 766c8f96..4b41a193 100644
--- a/app/Repositories/DashboardRepository.php
+++ b/app/Repositories/DashboardRepository.php
@@ -54,7 +54,7 @@ class DashboardRepository extends BaseRepository
$result[$name] = [
'name' => $name,
'text' => nexus_trans("dashboard.system_info.$name"),
- 'value' => $_SERVER['SERVER_SOFTWARE'],
+ 'value' => $_SERVER['SERVER_SOFTWARE'] ?? '',
];
$name = 'load_average';
$result[$name] = [
diff --git a/app/Repositories/TrackerRepository.php b/app/Repositories/TrackerRepository.php
index 1bc4c8c5..3a4ad288 100644
--- a/app/Repositories/TrackerRepository.php
+++ b/app/Repositories/TrackerRepository.php
@@ -51,11 +51,10 @@ class TrackerRepository extends BaseRepository
public function announce(Request $request): \Illuminate\Http\Response
{
- do_log(nexus_json_encode($_SERVER));
+ do_log("queryString: " . $request->getQueryString());
try {
$withPeers = false;
$queries = $this->checkAnnounceFields($request);
- do_log("[QUERIES] " . json_encode(Arr::only($queries, ['ip', 'user_agent', 'uploaded', 'downloaded', 'left', 'event'])), 'debug');
$user = $this->checkUser($request);
$clientAllow = $this->checkClient($request);
$torrent = $this->checkTorrent($queries, $user);
@@ -108,7 +107,7 @@ class TrackerRepository extends BaseRepository
} catch (\Exception $exception) {
//other system exception
do_log("[" . get_class($exception) . "] " . $exception->getMessage() . "\n" . $exception->getTraceAsString(), 'error');
- $repDict = $this->generateFailedAnnounceResponse("system error, report to sysop please, hint: " . REQUEST_ID);
+ $repDict = $this->generateFailedAnnounceResponse("system error, report to sysop please, hint: " . nexus()->getRequestId());
} finally {
if (isset($user) && count($this->userUpdates)) {
$user->update($this->userUpdates);
@@ -218,8 +217,8 @@ class TrackerRepository extends BaseRepository
}
foreach (['info_hash', 'peer_id'] as $item) {
- if (\strlen((string) $queries[$item]) !== 20) {
- throw new TrackerException("Invalid $item ! $item is not 20 bytes long");
+ if (($length = \strlen((string) $queries[$item])) !== 20) {
+ throw new TrackerException("Invalid $item ! $item is not 20 bytes long($length)");
}
}
@@ -502,7 +501,7 @@ class TrackerRepository extends BaseRepository
unset($queries['key']);
$lockKey = md5(http_build_query($queries));
$redis = Redis::connection()->client();
- if (!$redis->set($lockKey, NEXUS_START, ['nx', 'ex' => self::MIN_ANNOUNCE_WAIT_SECOND])) {
+ if (!$redis->set($lockKey, nexus()->getStartTimestamp(), ['nx', 'ex' => 5])) {
do_log('[RE_ANNOUNCE]');
return true;
}
@@ -654,6 +653,7 @@ class TrackerRepository extends BaseRepository
protected function sendFinalAnnounceResponse($repDict): \Illuminate\Http\Response
{
+ do_log("[repDict] " . nexus_json_encode($repDict));
return \response(Bencode::encode($repDict))
->withHeaders(['Content-Type' => 'text/plain; charset=utf-8'])
->withHeaders(['Connection' => 'close'])
@@ -776,7 +776,7 @@ class TrackerRepository extends BaseRepository
public function scrape(Request $request): \Illuminate\Http\Response
{
- do_log(nexus_json_encode($_SERVER));
+ do_log("queryString: " . $request->getQueryString());
try {
$infoHashArr = $this->checkScrapeFields($request);
$user = $this->checkUser($request);
@@ -785,6 +785,9 @@ class TrackerRepository extends BaseRepository
if ($user->clientselect != $clientAllow->id) {
$this->userUpdates['clientselect'] = $clientAllow->id;
}
+ if ($user->showclienterror == 'yes') {
+ $this->userUpdates['showclienterror'] = 'no';
+ }
$repDict = $this->generateScrapeResponse($infoHashArr);
} catch (ClientNotAllowedException $exception) {
do_log("[ClientNotAllowedException] " . $exception->getMessage());
@@ -797,8 +800,9 @@ class TrackerRepository extends BaseRepository
} catch (\Exception $exception) {
//other system exception
do_log("[" . get_class($exception) . "] " . $exception->getMessage() . "\n" . $exception->getTraceAsString(), 'error');
- $repDict = $this->generateFailedAnnounceResponse("system error, report to sysop please, hint: " . REQUEST_ID);
+ $repDict = $this->generateFailedAnnounceResponse("system error, report to sysop please, hint: " . nexus()->getRequestId());
} finally {
+ do_log("userUpdates: " . nexus_json_encode($this->userUpdates));
if (isset($user) && count($this->userUpdates)) {
$user->update($this->userUpdates);
do_log(last_query(), 'debug');
@@ -817,7 +821,7 @@ class TrackerRepository extends BaseRepository
} else {
foreach ($info_hash_array as $item) {
if (strlen($item) != 20) {
- throw new TrackerException("Invalid info_hash ! :attribute is not 20 bytes long");
+ throw new TrackerException("Invalid info_hash ! info_hash is not 20 bytes long");
}
}
}
@@ -852,7 +856,7 @@ class TrackerRepository extends BaseRepository
return Cache::remember($cacheKey, 60, function () use ($infoHash) {
$fieldRaw = 'id, owner, sp_state, seeders, leechers, added, banned, hr, visible, last_action, times_completed';
$torrent = Torrent::query()->where('info_hash', $infoHash)->selectRaw($fieldRaw)->first();
- do_log("cache miss, from database: " . last_query() . ", and get: " . $torrent->id);
+ do_log("[getTorrentByInfoHash] cache miss, from database: " . last_query() . ", and get: " . $torrent->id);
return $torrent;
});
}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 0f565005..44ab0203 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -1,10 +1,13 @@
[
...Octane::prepareApplicationForNextOperation(),
...Octane::prepareApplicationForNextRequest(),
- //
+ \App\Listeners\ResetNexus::class,
],
RequestHandled::class => [
@@ -189,6 +189,7 @@ return [
'routes',
'composer.lock',
'.env',
+ 'include/**/*.php',
],
/*
diff --git a/include/bittorrent.php b/include/bittorrent.php
index c97dcf80..3b7fe025 100644
--- a/include/bittorrent.php
+++ b/include/bittorrent.php
@@ -1,5 +1,4 @@
";
- echo sprintf("[%s] [%s] %s ... done!%s", date('Y-m-d H:i:s'), REQUEST_ID, $msg, $br);
+ echo sprintf("[%s] [%s] %s ... done!%s", date('Y-m-d H:i:s'), nexus()->getRequestId(), $msg, $br);
}
function torrent_promotion_expire($days, $type = 2, $targettype = 1){
diff --git a/include/constants.php b/include/constants.php
index 9c216d2d..3360eb7b 100644
--- a/include/constants.php
+++ b/include/constants.php
@@ -7,31 +7,38 @@ defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
defined('NEXUSWIKIURL') || define("NEXUSWIKIURL","https://doc.nexusphp.org");
defined('VERSION') || define("VERSION","Powered by ".PROJECTNAME."");
defined('THISTRACKER') || define("THISTRACKER","General");
-$showversion = " - Powered by ".PROJECTNAME;
defined('ROOT_PATH') || define('ROOT_PATH', dirname(__DIR__) . '/');
-defined('CURRENT_SCRIPT') || define('CURRENT_SCRIPT', strstr(basename($_SERVER['SCRIPT_FILENAME']), '.', true));
-defined('IS_ANNOUNCE') || define('IS_ANNOUNCE', CURRENT_SCRIPT == 'announce');
-
-defined('PLATFORM_ADMIN') || define('PLATFORM_ADMIN', 'admin');
-defined('PLATFORM_USER') || define('PLATFORM_USER', 'user');
-defined('PLATFORMS') || define('PLATFORMS', [PLATFORM_ADMIN, PLATFORM_USER]);
-defined('CURRENT_PLATFORM') || define('CURRENT_PLATFORM', $_SERVER['HTTP_PLATFORM'] ?? '');
-defined('IS_PLATFORM_ADMIN') || define('IS_PLATFORM_ADMIN', CURRENT_PLATFORM == PLATFORM_ADMIN);
-defined('IS_PLATFORM_USER') || define('IS_PLATFORM_USER', CURRENT_PLATFORM == PLATFORM_USER);
-
-
-//define the REQUEST_ID
-if (!defined('REQUEST_ID')) {
- if (!empty($_SERVER['HTTP_X_REQUEST_ID'])) {
- $requestId = $_SERVER['HTTP_X_REQUEST_ID'];
- } elseif (!empty($_SERVER['REQUEST_ID'])) {
- $requestId = $_SERVER['REQUEST_ID'];
+if (!defined('RUNNING_IN_OCTANE')) {
+ if (!empty($_SERVER['PWD']) && str_contains($_SERVER['PWD'], 'vendor/laravel/octane/bin')) {
+ define('RUNNING_IN_OCTANE', true);
} else {
- $prefix = ($_SERVER['SCRIPT_FILENAME'] ?? '') . implode('', $_SERVER['argv'] ?? []);
- $prefix = substr(md5($prefix), 0, 4);
- // 4 + 23 = 27 characters, after replace '.', 26
- $requestId = str_replace('.', '', uniqid($prefix, true));
- $requestId .= bin2hex(random_bytes(3));
+ define('RUNNING_IN_OCTANE', false);
}
- define('REQUEST_ID', $requestId);
}
+
+//defined('CURRENT_SCRIPT') || define('CURRENT_SCRIPT', strstr(basename($_SERVER['SCRIPT_FILENAME']), '.', true));
+//defined('IS_ANNOUNCE') || define('IS_ANNOUNCE', CURRENT_SCRIPT == 'announce');
+//
+//defined('PLATFORM_ADMIN') || define('PLATFORM_ADMIN', 'admin');
+//defined('PLATFORM_USER') || define('PLATFORM_USER', 'user');
+//defined('PLATFORMS') || define('PLATFORMS', [PLATFORM_ADMIN, PLATFORM_USER]);
+//defined('CURRENT_PLATFORM') || define('CURRENT_PLATFORM', $_SERVER['HTTP_PLATFORM'] ?? '');
+//defined('IS_PLATFORM_ADMIN') || define('IS_PLATFORM_ADMIN', CURRENT_PLATFORM == PLATFORM_ADMIN);
+//defined('IS_PLATFORM_USER') || define('IS_PLATFORM_USER', CURRENT_PLATFORM == PLATFORM_USER);
+//
+//
+////define the REQUEST_ID
+//if (!defined('REQUEST_ID')) {
+// if (!empty($_SERVER['HTTP_X_REQUEST_ID'])) {
+// $requestId = $_SERVER['HTTP_X_REQUEST_ID'];
+// } elseif (!empty($_SERVER['REQUEST_ID'])) {
+// $requestId = $_SERVER['REQUEST_ID'];
+// } else {
+// $prefix = ($_SERVER['SCRIPT_FILENAME'] ?? '') . implode('', $_SERVER['argv'] ?? []);
+// $prefix = substr(md5($prefix), 0, 4);
+// // 4 + 23 = 27 characters, after replace '.', 26
+// $requestId = str_replace('.', '', uniqid($prefix, true));
+// $requestId .= bin2hex(random_bytes(3));
+// }
+// define('REQUEST_ID', $requestId);
+//}
diff --git a/include/core.php b/include/core.php
index 592d7214..7ffa5f70 100644
--- a/include/core.php
+++ b/include/core.php
@@ -1,6 +1,7 @@
getScript(), ['announce', 'scrape'])) {
require $rootpath . get_langfile_path("functions.php");
checkGuestVisit();
}
diff --git a/include/functions.php b/include/functions.php
index b650ec98..716246dc 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -2274,7 +2274,7 @@ function get_style_highlight()
function stdhead($title = "", $msgalert = true, $script = "", $place = "")
{
global $lang_functions;
- global $CURUSER, $CURLANGDIR, $USERUPDATESET, $iplog1, $oldip, $SITE_ONLINE, $FUNDS, $SITENAME, $SLOGAN, $logo_main, $BASEURL, $offlinemsg, $showversion,$enabledonation, $staffmem_class, $titlekeywords_tweak, $metakeywords_tweak, $metadescription_tweak, $cssdate_tweak, $deletenotransfertwo_account, $neverdelete_account, $iniupload_main;
+ global $CURUSER, $CURLANGDIR, $USERUPDATESET, $iplog1, $oldip, $SITE_ONLINE, $FUNDS, $SITENAME, $SLOGAN, $logo_main, $BASEURL, $offlinemsg,$enabledonation, $staffmem_class, $titlekeywords_tweak, $metakeywords_tweak, $metadescription_tweak, $cssdate_tweak, $deletenotransfertwo_account, $neverdelete_account, $iniupload_main;
global $tstart;
global $Cache;
global $Advertisement;
@@ -2302,7 +2302,7 @@ function stdhead($title = "", $msgalert = true, $script = "", $place = "")
$title = $SITENAME." :: " . htmlspecialchars($title);
if ($titlekeywords_tweak)
$title .= " ".htmlspecialchars($titlekeywords_tweak);
- $title .= $showversion;
+ $title .= " - Powered by ".PROJECTNAME;
if ($SITE_ONLINE == "no") {
if (get_user_class() < UC_ADMINISTRATOR) {
die($lang_functions['std_site_down_for_maintenance']);
@@ -2660,7 +2660,7 @@ function stdfoot() {
}
// Variables for End Time
$tend = microtime(true);
- $totaltime = ($tend - NEXUS_START);
+ $totaltime = ($tend - nexus()->getStartTimestamp());
$year = substr($datefounded, 0, 4);
$yearfounded = ($year ? $year : 2007);
print(" (c) "." ".$SITENAME." ".($icplicense_main ? " ".$icplicense_main." " : "").(date("Y") != $yearfounded ? $yearfounded."-" : "").date("Y")." ".VERSION."
");
@@ -2812,7 +2812,7 @@ function base64 ($string, $encode=true) {
function loggedinorreturn($mainpage = false) {
global $CURUSER,$BASEURL;
if (!$CURUSER) {
- if (CURRENT_SCRIPT == 'ajax') {
+ if (nexus()->getScript() == 'ajax') {
exit(fail('Not login!', $_POST));
}
if ($mainpage)
@@ -4840,7 +4840,7 @@ function checkGuestVisit()
if (empty($guestVisitType) || $guestVisitType == 'normal') {
return;
}
- if (in_array(CURRENT_SCRIPT, ['login', 'takelogin', 'image']) && canDoLogin()) {
+ if (in_array(nexus()->getScript(), ['login', 'takelogin', 'image']) && canDoLogin()) {
return;
}
@@ -5225,7 +5225,7 @@ function list_require_search_box_id()
'userdetails' => [$setting['browsecat'], $setting['specialcat']],
'offers' => [$setting['browsecat'], $setting['specialcat']],
];
- return $maps[CURRENT_SCRIPT] ?? [];
+ return $maps[nexus()->getScript()] ?? [];
}
function can_access_torrent($torrent)
diff --git a/include/functions_announce.php b/include/functions_announce.php
index 523158cf..b5ba1e08 100644
--- a/include/functions_announce.php
+++ b/include/functions_announce.php
@@ -344,6 +344,7 @@ function request_local_api($api)
$options = [
CURLOPT_URL => sprintf('%s?%s', trim($api, '/'), $_SERVER['QUERY_STRING']),
CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"],
+ CURLOPT_HTTPHEADER => ['REQUEST_ID: ' . nexus()->getRequestId(), 'Platform: tracker'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 60,
diff --git a/include/globalfunctions.php b/include/globalfunctions.php
index bb875ac1..52f0e137 100644
--- a/include/globalfunctions.php
+++ b/include/globalfunctions.php
@@ -1,4 +1,7 @@
id ?? 0;
- $passkey = $user->passkey ?? $_REQUEST['passkey'] ?? $_REQUEST['authkey'] ?? '';
- $env = env('APP_ENV');
- }
+ if (IN_NEXUS) {
+ global $CURUSER;
+ $user = $CURUSER;
+ $uid = $user['id'] ?? 0;
+ $passkey = $user['passkey'] ?? $_REQUEST['passkey'] ?? $_REQUEST['authkey'] ?? '';
} else {
- $sequence++;
+ $user = \Illuminate\Support\Facades\Auth::user();
+ $uid = $user->id ?? 0;
+ $passkey = $user->passkey ?? request('passkey', request('authkey', ''));
}
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
$content = sprintf(
"[%s] [%s] [%s] [%s] [%s] [%s] %s.%s %s:%s %s%s%s %s%s",
date('Y-m-d H:i:s'),
- defined('REQUEST_ID') ? REQUEST_ID : '',
+ nexus() ? nexus()->getRequestId() : 'NO_REQUEST_ID',
+ nexus() ? nexus()->getLogSequence() : 0,
+ sprintf('%.3f', microtime(true) - (nexus() ? nexus()->getStartTimestamp() : 0)),
$uid,
$passkey,
- $sequence,
- sprintf('%.3f', microtime(true) - NEXUS_START),
$env, $level,
$backtrace[0]['file'] ?? '',
$backtrace[0]['line'] ?? '',
@@ -212,6 +211,9 @@ function do_log($log, $level = 'info')
);
fwrite($fd, $content);
fclose($fd);
+ if (nexus()) {
+ nexus()->incrementLogSequence();
+ }
}
function getLogFile()
@@ -483,26 +485,19 @@ function api(...$args)
$msg = $args[1];
$data = $args[2];
}
- if (defined('LARAVEL_START')) {
- $start = LARAVEL_START;
- if ($data instanceof \Illuminate\Http\Resources\Json\ResourceCollection || $data instanceof \Illuminate\Http\Resources\Json\JsonResource) {
- $data = $data->response()->getData(true);
- if (isset($data['data']) && count($data) == 1) {
- //单纯的集合,无分页等其数据
- $data = $data['data'];
- }
+ if ($data instanceof \Illuminate\Http\Resources\Json\ResourceCollection || $data instanceof \Illuminate\Http\Resources\Json\JsonResource) {
+ $data = $data->response()->getData(true);
+ if (isset($data['data']) && count($data) == 1) {
+ //单纯的集合,无分页等其数据
+ $data = $data['data'];
}
- } elseif (defined('NEXUS_START')) {
- $start = NEXUS_START;
- } else {
- throw new \RuntimeException("no constant START is defined.");
}
return [
'ret' => (int)$ret,
'msg' => (string)$msg,
'data' => $data,
- 'time' => (float)number_format(microtime(true) - $start, 3),
- 'rid' => REQUEST_ID,
+ 'time' => (float)number_format(microtime(true) - nexus()->getStartTimestamp(), 3),
+ 'rid' => nexus()->getRequestId(),
];
}
@@ -669,3 +664,8 @@ function get_hr_ratio($uped, $downed)
return $ratio;
}
+
+function nexus()
+{
+ return \Nexus\Nexus::instance();
+}
diff --git a/nexus/Core/Constant.php b/nexus/Core/Constant.php
new file mode 100644
index 00000000..06670aa0
--- /dev/null
+++ b/nexus/Core/Constant.php
@@ -0,0 +1,73 @@
+defineForOctane();
+ } else {
+ $this->defineForFPM();
+ }
+ $this->defineCommon();
+ }
+
+ private function defineForFPM()
+ {
+ defined('CURRENT_SCRIPT') || define('CURRENT_SCRIPT', strstr(basename($_SERVER['SCRIPT_FILENAME']), '.', true));
+ defined('CURRENT_PLATFORM') || define('CURRENT_PLATFORM', $_SERVER['HTTP_PLATFORM'] ?? '');
+ $requestId = '';
+ if (!empty($_SERVER['HTTP_X_REQUEST_ID'])) {
+ $requestId = $_SERVER['HTTP_X_REQUEST_ID'];
+ } elseif (!empty($_SERVER['REQUEST_ID'])) {
+ $requestId = $_SERVER['REQUEST_ID'];
+ }
+ define('REQUEST_ID', $requestId ?: $this->generateRequestId());
+ }
+
+ private function defineForOctane()
+ {
+ $request = request();
+ defined('CURRENT_SCRIPT') || define('CURRENT_SCRIPT', $request->header('script_filename', ''));
+ defined('CURRENT_PLATFORM') || define('CURRENT_PLATFORM', $request->header('platform', ''));
+ $requestId = $request->header('request_id', '');
+ define('REQUEST_ID', $requestId ?: $this->generateRequestId());
+ }
+
+ private function generateRequestId()
+ {
+ $prefix = ($_SERVER['SCRIPT_FILENAME'] ?? '') . implode('', $_SERVER['argv'] ?? []);
+ $prefix = substr(md5($prefix), 0, 4);
+ // 4 + 23 = 27 characters, after replace '.', 26
+ $requestId = str_replace('.', '', uniqid($prefix, true));
+ $requestId .= bin2hex(random_bytes(3));
+ return $requestId;
+ }
+
+ private function defineCommon()
+ {
+ defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.6.0');
+ defined('RELEASE_DATE') || define('RELEASE_DATE', '2022-03-14');
+ defined('ROOT_PATH') || define('ROOT_PATH', dirname(dirname(__DIR__)) . '/');
+ defined('IN_TRACKER') || define('IN_TRACKER', true);
+ defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
+ defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
+ defined('NEXUSWIKIURL') || define("NEXUSWIKIURL","https://doc.nexusphp.org");
+ defined('VERSION') || define("VERSION","Powered by ".PROJECTNAME."");
+ defined('THISTRACKER') || define("THISTRACKER","General");
+
+ defined('PLATFORM_ADMIN') || define('PLATFORM_ADMIN', 'admin');
+ defined('PLATFORM_USER') || define('PLATFORM_USER', 'user');
+ defined('PLATFORMS') || define('PLATFORMS', [PLATFORM_ADMIN, PLATFORM_USER]);
+ defined('IS_PLATFORM_ADMIN') || define('IS_PLATFORM_ADMIN', CURRENT_PLATFORM == PLATFORM_ADMIN);
+ defined('IS_PLATFORM_USER') || define('IS_PLATFORM_USER', CURRENT_PLATFORM == PLATFORM_USER);
+ defined('IS_ANNOUNCE') || define('IS_ANNOUNCE', CURRENT_SCRIPT == 'announce');
+ }
+
+
+
+}
diff --git a/nexus/Nexus.php b/nexus/Nexus.php
new file mode 100644
index 00000000..a23709b5
--- /dev/null
+++ b/nexus/Nexus.php
@@ -0,0 +1,176 @@
+requestId;
+ }
+
+ public function getStartTimestamp(): float
+ {
+ return $this->startTimestamp;
+ }
+
+
+ public function getPlatform(): string
+ {
+ return $this->platform;
+ }
+
+ public function getScript(): string
+ {
+ return $this->script;
+ }
+
+ public function getLogSequence(): int
+ {
+ return $this->logSequence;
+ }
+
+ public function isPlatformValid(): bool
+ {
+ return in_array($this->platform, self::PLATFORMS);
+ }
+
+ public function isPlatformAdmin(): bool
+ {
+ return $this->platform == self::PLATFORM_ADMIN;
+ }
+
+ public function isPlatformUser(): bool
+ {
+ return $this->platform == self::PLATFORM_USER;
+ }
+
+ public function isScriptAnnounce(): bool
+ {
+ return $this->script == 'announce';
+ }
+
+ public function incrementLogSequence()
+ {
+ $this->logSequence++;
+ }
+
+ private function runningInOctane(): bool
+ {
+ if (defined('RUNNING_IN_OCTANE') && RUNNING_IN_OCTANE) {
+ return true;
+ }
+ return false;
+ }
+
+ private function generateRequestId(): string
+ {
+ $prefix = ($_SERVER['SCRIPT_FILENAME'] ?? '') . implode('', $_SERVER['argv'] ?? []);
+ $prefix = substr(md5($prefix), 0, 4);
+ // 4 + 23 = 27 characters, after replace '.', 26
+ $requestId = str_replace('.', '', uniqid($prefix, true));
+ $requestId .= bin2hex(random_bytes(3));
+ return $requestId;
+ }
+
+ public static function boot()
+ {
+ if (self::$booted) {
+ return;
+ }
+ $instance = new self();
+ $instance->setStartTimestamp();
+ $instance->setRequestId();
+ $instance->setScript();
+ $instance->setPlatform();
+ self::$instance = $instance;
+ self::$booted = true;
+ }
+
+ public static function flush()
+ {
+ self::$booted = false;
+
+ }
+
+ private function setRequestId()
+ {
+ $requestId = '';
+ if ($this->runningInOctane()) {
+ $request = request();
+ $requestId = $request->server('request_id', $request->header('request_id', ''));
+ } else {
+ if (!empty($_SERVER['HTTP_X_REQUEST_ID'])) {
+ $requestId = $_SERVER['HTTP_X_REQUEST_ID'];
+ } elseif (!empty($_SERVER['REQUEST_ID'])) {
+ $requestId = $_SERVER['REQUEST_ID'];
+ }
+ }
+ if (empty($requestId)) {
+ $requestId = $this->generateRequestId();
+ }
+ $this->requestId = $requestId;
+ }
+
+ private function setScript()
+ {
+ if ($this->runningInOctane()) {
+ $request = request();
+ $script = $request->header('script_filename', '');
+ } else {
+ $script = strstr(basename($_SERVER['SCRIPT_FILENAME']), '.', true);
+ }
+ $this->script = $script;
+ }
+
+ private function setStartTimestamp()
+ {
+ $this->startTimestamp = microtime(true);
+ }
+
+ private function setPlatform()
+ {
+ if ($this->runningInOctane()) {
+ $request = request();
+ $platform = $request->header('platform', '');
+ } else {
+ $platform = $_SERVER['HTTP_PLATFORM'] ?? '';
+ }
+ $this->platform = $platform;
+ }
+
+
+}
diff --git a/public/torrents.php b/public/torrents.php
index e9a61067..d0d2a0c4 100644
--- a/public/torrents.php
+++ b/public/torrents.php
@@ -14,7 +14,7 @@ $tagKeyById = $tagRep->createBasicQuery()->get()->keyBy('id');
$renderKeyArr = $tagKeyById->keys()->toArray();
//check searchbox
-switch (CURRENT_SCRIPT) {
+switch (nexus()->getScript()) {
case 'torrents':
$sectiontype = $browsecatmode;
break;