From 0107d51a7d91acc53a5ee4f352a9893024b7e9dc Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Sat, 4 Mar 2023 23:28:47 +0800 Subject: [PATCH] nastools approve --- .env.example | 1 + app/Console/Commands/Test.php | 3 +-- .../SettingResource/Pages/EditSetting.php | 9 ++++++++ .../Controllers/AuthenticateController.php | 12 +++++++++- app/Http/Kernel.php | 2 +- app/Http/Resources/UserResource.php | 4 ++-- app/Providers/RouteServiceProvider.php | 9 ++++++++ app/Repositories/AuthenticateRepository.php | 22 +++++++++++++++++++ include/functions_announce.php | 6 +++-- nexus/Install/settings.default.php | 2 ++ public/confirm.php | 4 ++-- public/takelogin.php | 2 +- public/usercp.php | 2 +- resources/lang/en/label.php | 3 +++ resources/lang/zh_CN/label.php | 3 +++ resources/lang/zh_TW/label.php | 2 ++ routes/third-party.php | 2 ++ 17 files changed, 76 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index e9b583eb..71754d25 100644 --- a/.env.example +++ b/.env.example @@ -80,3 +80,4 @@ SFTP_ROOT=/tmp UID_STARTS=10001 PHP_PATH= +NAS_TOOLS_KEY= diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index c27e6c17..99b903d7 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -95,8 +95,7 @@ class Test extends Command */ public function handle() { - $r = unserialize('{"command":"O:31:\"App\\Jobs\\CalculateUserSeedBonus\":3:{s:41:\"\u0000App\\Jobs\\CalculateUserSeedBonus\u0000beginUid\";i:32000;s:39:\"\u0000App\\Jobs\\CalculateUserSeedBonus\u0000endUid\";i:34000;s:42:\"\u0000App\\Jobs\\CalculateUserSeedBonus\u0000requestId\";s:32:\"2f6563f399f26f57b02882463199a49d\";}'); - dd($r); + } } diff --git a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php index 0aacad46..cecc7ca8 100644 --- a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php +++ b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php @@ -131,6 +131,15 @@ class EditSetting extends Page implements Forms\Contracts\HasForms ->integer() ->label(__('label.setting.system.maximum_number_of_medals_can_be_worn')) , + Forms\Components\TextInput::make('system.cookie_valid_days') + ->integer() + ->label(__('label.setting.system.cookie_valid_days')) + , + Forms\Components\TextInput::make('system.maximum_upload_speed') + ->integer() + ->label(__('label.setting.system.maximum_upload_speed')) + ->helperText(__('label.setting.system.maximum_upload_speed_help')) + , ])->columns(2); $tabs = apply_filter('nexus_setting_tabs', $tabs); diff --git a/app/Http/Controllers/AuthenticateController.php b/app/Http/Controllers/AuthenticateController.php index 5e8e4400..7141c31d 100644 --- a/app/Http/Controllers/AuthenticateController.php +++ b/app/Http/Controllers/AuthenticateController.php @@ -58,7 +58,7 @@ class AuthenticateController extends Controller // $passhash = md5($user->passhash . $ip); $passhash = md5($user->passhash); do_log(sprintf('passhash: %s, ip: %s, md5: %s', $user->passhash, $ip, $passhash)); - logincookie($user->id, $passhash,false, 0x7fffffff, true, true, true); + logincookie($user->id, $passhash,false, get_setting('system.cookie_valid_days', 365) * 86400, true, true, true); $user->last_login = now(); $user->save(); } @@ -66,5 +66,15 @@ class AuthenticateController extends Controller return redirect('index.php'); } + public function nasToolsApprove(Request $request) + { + $request->validate([ + 'data' => 'required|string' + ]); + $user = $this->repository->nasToolsApprove($request->data); + $resource = new UserResource($user); + return $this->success($resource); + } + } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index a76bfca9..e078ce22 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -67,7 +67,7 @@ class Kernel extends HttpKernel 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'permission' => \App\Http\Middleware\Permission::class, 'admin' => \App\Http\Middleware\Admin::class, diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 2a5e9140..039d8daa 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -16,7 +16,6 @@ class UserResource extends JsonResource { $out = [ 'id' => $this->id, - 'email' => $this->email, 'username' => $this->username, 'status' => $this->status, 'enabled' => $this->enabled, @@ -32,7 +31,7 @@ class UserResource extends JsonResource 'downloaded' => $this->downloaded, 'downloaded_text' => mksize($this->downloaded), 'bonus' => number_format($this->seedbonus, 1), - 'seed_points' => floatval($this->seed_points), + 'seed_points' => number_format($this->seed_points, 1), 'seedtime' => $this->seedtime, 'seedtime_text' => mkprettytime($this->seedtime), 'leechtime' => $this->leechtime, @@ -41,6 +40,7 @@ class UserResource extends JsonResource 'valid_medals' => MedalResource::collection($this->whenLoaded('valid_medals')), ]; if ($request->routeIs('user.me')) { + $out['email'] = $this->email; $out['downloaded_human'] = mksize($this->downloaded); $out['uploaded_human'] = mksize($this->uploaded); $out['seed_time'] = mkprettytime($this->seedtime); diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index b9228a8f..f9470399 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -50,6 +50,11 @@ class RouteServiceProvider extends ServiceProvider Route::prefix('api') ->namespace($this->namespace) ->group(base_path('routes/tracker.php')); + + Route::prefix('api') + ->namespace($this->namespace) + ->middleware('throttle:third-party') + ->group(base_path('routes/third-party.php')); }); } @@ -63,5 +68,9 @@ class RouteServiceProvider extends ServiceProvider RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); }); + + RateLimiter::for('third-party', function (Request $request) { + return Limit::perMinute(10)->by(getip()); + }); } } diff --git a/app/Repositories/AuthenticateRepository.php b/app/Repositories/AuthenticateRepository.php index ca1ff01c..4b11935f 100644 --- a/app/Repositories/AuthenticateRepository.php +++ b/app/Repositories/AuthenticateRepository.php @@ -4,6 +4,7 @@ namespace App\Repositories; use App\Http\Resources\UserResource; use App\Models\User; use Carbon\Carbon; +use Illuminate\Encryption\Encrypter; use Illuminate\Support\Facades\DB; use Illuminate\Validation\UnauthorizedException; @@ -38,4 +39,25 @@ class AuthenticateRepository extends BaseRepository $result = $user->tokens()->delete(); return $result; } + + public function nasToolsApprove(string $json) + { + $key = env('NAS_TOOLS_KEY'); + $encrypter = new Encrypter($key); + $decrypted = $encrypter->decryptString($json); + $data = json_decode($decrypted, true); + if (!is_array($data) || !isset($data['uid'], $data['passkey'])) { + throw new \InvalidArgumentException("Invalid data format."); + } + $user = User::query() + ->where('id', $data['uid']) + ->where('passkey', $data['passkey']) + ->first() + ; + if (!$user) { + throw new \InvalidArgumentException("Invalid uid or passkey."); + } + $user->checkIsNormal(); + return $user; + } } diff --git a/include/functions_announce.php b/include/functions_announce.php index 956595c0..2ecf16c0 100644 --- a/include/functions_announce.php +++ b/include/functions_announce.php @@ -69,8 +69,10 @@ function check_cheater($userid, $torrentid, $uploaded, $downloaded, $anctime, $s $time = date("Y-m-d H:i:s"); $upspeed = ($uploaded > 0 ? $uploaded / $anctime : 0); - $mustBeCheaterSpeed = 1024 * 1024 * 1000; //1000 MB/s - $mayBeCheaterSpeed = 1024 * 1024 * 100; //100 MB/s +// $mustBeCheaterSpeed = 1024 * 1024 * 1000; //1000 MB/s + $mustBeCheaterSpeed = get_setting('system.maximum_upload_speed', 8000) * 1024 * 1024 / 8; +// $mayBeCheaterSpeed = 1024 * 1024 * 100; //100 MB/s + $mayBeCheaterSpeed = $mustBeCheaterSpeed / 2; if ($uploaded > 1073741824 && $upspeed > ($mustBeCheaterSpeed/$cheaterdet_security)) //Uploaded more than 1 GB with uploading rate higher than 100 MByte/S (For Consertive level). This is no doubt cheating. { diff --git a/nexus/Install/settings.default.php b/nexus/Install/settings.default.php index 78e34aa3..51aca458 100644 --- a/nexus/Install/settings.default.php +++ b/nexus/Install/settings.default.php @@ -441,5 +441,7 @@ return array ( 'change_username_min_interval_in_days' => '365', 'change_username_card_allow_characters_outside_the_alphabets' => 'no', 'maximum_number_of_medals_can_be_worn' => 3, + 'cookie_valid_days' => 365, + 'maximum_upload_speed' => 8000, ], ); diff --git a/public/confirm.php b/public/confirm.php index e74a6a48..0bfed73b 100644 --- a/public/confirm.php +++ b/public/confirm.php @@ -29,7 +29,7 @@ sql_query("UPDATE users SET status='confirmed', editsecret='' WHERE id=".sqlesc( if (!mysql_affected_rows()) httperr(); - + if ($securelogin == "yes") { $securelogin_indentity_cookie = true; @@ -40,7 +40,7 @@ else // when it's op, default is not use secure login $securelogin_indentity_cookie = false; $passh = md5($row["passhash"]); } -logincookie($id, $passh,1,0x7fffffff,$securelogin_indentity_cookie); +logincookie($id, $passh,1,get_setting('system.cookie_valid_days', 365) * 86400,$securelogin_indentity_cookie); //sessioncookie($row["id"], $passh,false); header("Refresh: 0; url=ok.php?type=confirm"); diff --git a/public/takelogin.php b/public/takelogin.php index a22beb47..694c92ff 100644 --- a/public/takelogin.php +++ b/public/takelogin.php @@ -104,7 +104,7 @@ if (isset($_POST["logout"]) && $_POST["logout"] == "yes") } else { - logincookie($row["id"], $passh,1,0x7fffffff,$securelogin_indentity_cookie, $ssl, $trackerssl); + logincookie($row["id"], $passh,1,get_setting('system.cookie_valid_days', 365) * 86400,$securelogin_indentity_cookie, $ssl, $trackerssl); //sessioncookie($row["id"], $passh,false); } diff --git a/public/usercp.php b/public/usercp.php index 71c295af..eac87740 100644 --- a/public/usercp.php +++ b/public/usercp.php @@ -786,7 +786,7 @@ tr_small($lang_usercp['row_funbox']," 'Does the name change card allow characters other than English letters', 'change_username_min_interval_in_days' => 'The minimum interval days of Change user name', 'maximum_number_of_medals_can_be_worn' => 'Maximum number of medals that can be worn', + 'cookie_valid_days' => 'Cookie Valid days', + 'maximum_upload_speed' => 'Maximum upload speed', + 'maximum_upload_speed_help' => 'A single torrent upload speed exceeding this value is instantly disabled for the account, in Mbps. For example: 100 Mbps = 12.5 MB/s', ], ], 'user' => [ diff --git a/resources/lang/zh_CN/label.php b/resources/lang/zh_CN/label.php index 568002e9..47c4c78a 100644 --- a/resources/lang/zh_CN/label.php +++ b/resources/lang/zh_CN/label.php @@ -89,6 +89,9 @@ return [ 'change_username_card_allow_characters_outside_the_alphabets' => '改名卡是否允许英文字母外的字符', 'change_username_min_interval_in_days' => '修改用户名最小间隔天数', 'maximum_number_of_medals_can_be_worn' => '勋章最大可佩戴数', + 'cookie_valid_days' => 'Cookie 有效天数', + 'maximum_upload_speed' => '最大上传速度', + 'maximum_upload_speed_help' => '单种上传速度超过此值账号即刻禁用,单位 Mbps。如:100 Mbps = 12.5 MB/s', ], ], 'user' => [ diff --git a/resources/lang/zh_TW/label.php b/resources/lang/zh_TW/label.php index 9d868d09..07ec88c4 100644 --- a/resources/lang/zh_TW/label.php +++ b/resources/lang/zh_TW/label.php @@ -89,6 +89,8 @@ return [ 'change_username_card_allow_characters_outside_the_alphabets' => '改名卡是否允許英文字母外的字符', 'change_username_min_interval_in_days' => '修改用戶名最小間隔天數', 'maximum_number_of_medals_can_be_worn' => '勛章最大可佩戴數', + 'cookie_valid_days' => 'Cookie 有效天數', + 'maximum_upload_speed_help' => '單種上傳速度超過此值賬號即刻禁用,單位 Mbps。如:100 Mbps = 12.5 MB/s', ], ], 'user' => [ diff --git a/routes/third-party.php b/routes/third-party.php index eb70c138..1c9fac7c 100644 --- a/routes/third-party.php +++ b/routes/third-party.php @@ -1,3 +1,5 @@