nastools approve

This commit is contained in:
xiaomlove
2023-03-04 23:28:47 +08:00
parent 37920145b0
commit 0107d51a7d
17 changed files with 76 additions and 12 deletions

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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,

View File

@@ -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);

View File

@@ -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());
});
}
}

View File

@@ -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;
}
}