mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 17:31:49 +08:00 
			
		
		
		
	update: new auth
This commit is contained in:
		| @@ -1,53 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Console\Commands; | ||||
|  | ||||
| use App\Models\User; | ||||
| use Illuminate\Console\Command; | ||||
|  | ||||
| class CheckUser extends Command | ||||
| { | ||||
|     /** | ||||
|      * The name and signature of the console command. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $signature = 'check:user'; | ||||
|  | ||||
|     /** | ||||
|      * The console command description. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $description = '用户检查任务'; | ||||
|  | ||||
|     /** | ||||
|      * Create a new command instance. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      * | ||||
|      * @return mixed | ||||
|      */ | ||||
|     public function handle() | ||||
|     { | ||||
|         $this->resetExpiredUserPlan(); | ||||
|     } | ||||
|  | ||||
|     private function resetExpiredUserPlan($day = 14) | ||||
|     { | ||||
|         User::where('expired_at', '<', $day * 86400) | ||||
|             ->whereNotNull('expired_at') | ||||
|             ->update([ | ||||
|             'plan_id' => NULL, | ||||
|             'group_id' => NULL | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
| @@ -33,7 +33,6 @@ class Kernel extends ConsoleKernel | ||||
|         $schedule->command('check:order')->everyMinute(); | ||||
|         $schedule->command('check:commission')->everyMinute(); | ||||
|         $schedule->command('check:ticket')->everyMinute(); | ||||
|         $schedule->command('check:user')->daily(); | ||||
|         // reset | ||||
|         $schedule->command('reset:traffic')->daily(); | ||||
|         $schedule->command('reset:log')->daily(); | ||||
|   | ||||
| @@ -39,7 +39,7 @@ class ConfigController extends Controller | ||||
|     public function testSendMail(Request $request) | ||||
|     { | ||||
|         $obj = new SendEmailJob([ | ||||
|             'email' => $request->session()->get('email'), | ||||
|             'email' => $request->user['email'], | ||||
|             'subject' => 'This is v2board test email', | ||||
|             'template_name' => 'notify', | ||||
|             'template_value' => [ | ||||
|   | ||||
| @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin; | ||||
| use App\Http\Requests\Admin\PlanSave; | ||||
| use App\Http\Requests\Admin\PlanSort; | ||||
| use App\Http\Requests\Admin\PlanUpdate; | ||||
| use App\Services\PlanService; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\Models\Plan; | ||||
| @@ -16,17 +17,7 @@ class PlanController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         $counts = User::select( | ||||
|             DB::raw("plan_id"), | ||||
|             DB::raw("count(*) as count") | ||||
|         ) | ||||
|             ->where('plan_id', '!=', NULL) | ||||
|             ->where(function ($query) { | ||||
|                 $query->where('expired_at', '>=', time()) | ||||
|                     ->orWhere('expired_at', NULL); | ||||
|             }) | ||||
|             ->groupBy("plan_id") | ||||
|             ->get(); | ||||
|         $counts = PlanService::countActiveUsers(); | ||||
|         $plans = Plan::orderBy('sort', 'ASC')->get(); | ||||
|         foreach ($plans as $k => $v) { | ||||
|             $plans[$k]->count = 0; | ||||
|   | ||||
| @@ -23,7 +23,7 @@ use Laravel\Horizon\Contracts\MasterSupervisorRepository; | ||||
|  | ||||
| class SystemController extends Controller | ||||
| { | ||||
|     public function getStatus() | ||||
|     public function getSystemStatus() | ||||
|     { | ||||
|         return response([ | ||||
|             'data' => [ | ||||
| @@ -33,6 +33,11 @@ class SystemController extends Controller | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getQueueStatus() | ||||
|     { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     protected function getScheduleStatus():bool | ||||
|     { | ||||
|         return (time() - 120) < Cache::get(CacheKey::get('SCHEDULE_LAST_CHECK_AT', null)); | ||||
|   | ||||
| @@ -68,7 +68,7 @@ class TicketController extends Controller | ||||
|         $ticketService->replyByAdmin( | ||||
|             $request->input('id'), | ||||
|             $request->input('message'), | ||||
|             $request->session()->get('id') | ||||
|             $request->user['id'] | ||||
|         ); | ||||
|         return response([ | ||||
|             'data' => true | ||||
|   | ||||
| @@ -167,8 +167,7 @@ class AuthController extends Controller | ||||
|             'token' => $user->token, | ||||
|             'auth_data' => base64_encode("{$user->email}:{$user->password}") | ||||
|         ]; | ||||
|         $request->session()->put('email', $user->email); | ||||
|         $request->session()->put('id', $user->id); | ||||
|  | ||||
|         $user->last_login_at = time(); | ||||
|         $user->save(); | ||||
|  | ||||
| @@ -210,16 +209,8 @@ class AuthController extends Controller | ||||
|             'token' => $user->token, | ||||
|             'auth_data' => base64_encode("{$user->email}:{$user->password}") | ||||
|         ]; | ||||
|         $request->session()->put('email', $user->email); | ||||
|         $request->session()->put('id', $user->id); | ||||
|         if ($user->is_admin) { | ||||
|             $request->session()->put('is_admin', true); | ||||
|             $data['is_admin'] = true; | ||||
|         } | ||||
|         if ($user->is_staff) { | ||||
|             $request->session()->put('is_staff', true); | ||||
|             $data['is_staff'] = true; | ||||
|         } | ||||
|  | ||||
|         if ($user->is_admin) $data['is_admin'] = true; | ||||
|         return response([ | ||||
|             'data' => $data | ||||
|         ]); | ||||
| @@ -250,14 +241,13 @@ class AuthController extends Controller | ||||
|             if ($user->banned) { | ||||
|                 abort(500, __('Your account has been suspended')); | ||||
|             } | ||||
|             $request->session()->put('email', $user->email); | ||||
|             $request->session()->put('id', $user->id); | ||||
|             if ($user->is_admin) { | ||||
|                 $request->session()->put('is_admin', true); | ||||
|             } | ||||
|             $data = [ | ||||
|                 'token' => $user->token, | ||||
|                 'auth_data' => base64_encode("{$user->email}:{$user->password}") | ||||
|             ]; | ||||
|             Cache::forget($key); | ||||
|             return response([ | ||||
|                 'data' => true | ||||
|                 'data' => $data | ||||
|             ]); | ||||
|         } | ||||
|     } | ||||
| @@ -302,19 +292,6 @@ class AuthController extends Controller | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function check(Request $request) | ||||
|     { | ||||
|         $data = [ | ||||
|             'is_login' => $request->session()->get('id') ? true : false | ||||
|         ]; | ||||
|         if ($request->session()->get('is_admin')) { | ||||
|             $data['is_admin'] = true; | ||||
|         } | ||||
|         return response([ | ||||
|             'data' => $data | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function forget(AuthForget $request) | ||||
|     { | ||||
|         if (Cache::get(CacheKey::get('EMAIL_VERIFY_CODE', $request->input('email'))) !== $request->input('email_code')) { | ||||
| @@ -335,5 +312,4 @@ class AuthController extends Controller | ||||
|             'data' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -57,7 +57,7 @@ class TicketController extends Controller | ||||
|         $ticketService->replyByAdmin( | ||||
|             $request->input('id'), | ||||
|             $request->input('message'), | ||||
|             $request->session()->get('id') | ||||
|             $request->user['id'] | ||||
|         ); | ||||
|         return response([ | ||||
|             'data' => true | ||||
|   | ||||
| @@ -16,7 +16,7 @@ class CouponController extends Controller | ||||
|         } | ||||
|         $couponService = new CouponService($request->input('code')); | ||||
|         $couponService->setPlanId($request->input('plan_id')); | ||||
|         $couponService->setUserId($request->session()->get('id')); | ||||
|         $couponService->setUserId($request->user['id']); | ||||
|         $couponService->check(); | ||||
|         return response([ | ||||
|             'data' => $couponService->getCoupon() | ||||
|   | ||||
| @@ -14,11 +14,11 @@ class InviteController extends Controller | ||||
| { | ||||
|     public function save(Request $request) | ||||
|     { | ||||
|         if (InviteCode::where('user_id', $request->session()->get('id'))->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) { | ||||
|         if (InviteCode::where('user_id', $request->user['id'])->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) { | ||||
|             abort(500, __('The maximum number of creations has been reached')); | ||||
|         } | ||||
|         $inviteCode = new InviteCode(); | ||||
|         $inviteCode->user_id = $request->session()->get('id'); | ||||
|         $inviteCode->user_id = $request->user['id']; | ||||
|         $inviteCode->code = Helper::randomChar(8); | ||||
|         return response([ | ||||
|             'data' => $inviteCode->save() | ||||
| @@ -28,7 +28,7 @@ class InviteController extends Controller | ||||
|     public function details(Request $request) | ||||
|     { | ||||
|         return response([ | ||||
|             'data' => CommissionLog::where('invite_user_id', $request->session()->get('id')) | ||||
|             'data' => CommissionLog::where('invite_user_id', $request->user['id']) | ||||
|                 ->where('get_amount', '>', 0) | ||||
|                 ->select([ | ||||
|                     'id', | ||||
| @@ -43,26 +43,26 @@ class InviteController extends Controller | ||||
|  | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         $codes = InviteCode::where('user_id', $request->session()->get('id')) | ||||
|         $codes = InviteCode::where('user_id', $request->user['id']) | ||||
|             ->where('status', 0) | ||||
|             ->get(); | ||||
|         $commission_rate = config('v2board.invite_commission', 10); | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if ($user->commission_rate) { | ||||
|             $commission_rate = $user->commission_rate; | ||||
|         } | ||||
|         $stat = [ | ||||
|             //已注册用户数 | ||||
|             (int)User::where('invite_user_id', $request->session()->get('id'))->count(), | ||||
|             (int)User::where('invite_user_id', $request->user['id'])->count(), | ||||
|             //有效的佣金 | ||||
|             (int)Order::where('status', 3) | ||||
|                 ->where('commission_status', 2) | ||||
|                 ->where('invite_user_id', $request->session()->get('id')) | ||||
|                 ->where('invite_user_id', $request->user['id']) | ||||
|                 ->sum('commission_balance'), | ||||
|             //确认中的佣金 | ||||
|             (int)Order::where('status', 3) | ||||
|                 ->where('commission_status', 0) | ||||
|                 ->where('invite_user_id', $request->session()->get('id')) | ||||
|                 ->where('invite_user_id', $request->user['id']) | ||||
|                 ->sum('commission_balance'), | ||||
|             //佣金比例 | ||||
|             (int)$commission_rate, | ||||
|   | ||||
| @@ -19,14 +19,9 @@ class KnowledgeController extends Controller | ||||
|                 ->first() | ||||
|                 ->toArray(); | ||||
|             if (!$knowledge) abort(500, __('Article does not exist')); | ||||
|             $user = User::find($request->session()->get('id')); | ||||
|             $user = User::find($request->user['id']); | ||||
|             $userService = new UserService(); | ||||
|             if ($userService->isAvailable($user)) { | ||||
|                 $appleId = config('v2board.apple_id'); | ||||
|                 $appleIdPassword = config('v2board.apple_id_password'); | ||||
|             } else { | ||||
|                 $appleId = __('No active subscription. Unable to use our provided Apple ID'); | ||||
|                 $appleIdPassword = __('No active subscription. Unable to use our provided Apple ID'); | ||||
|             if (!$userService->isAvailable($user)) { | ||||
|                 $this->formatAccessData($knowledge['body']); | ||||
|             } | ||||
|             $subscribeUrl = Helper::getSubscribeUrl("/api/v1/client/subscribe?token={$user['token']}"); | ||||
|   | ||||
| @@ -29,7 +29,7 @@ class OrderController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         $model = Order::where('user_id', $request->session()->get('id')) | ||||
|         $model = Order::where('user_id', $request->user['id']) | ||||
|             ->orderBy('created_at', 'DESC'); | ||||
|         if ($request->input('status') !== null) { | ||||
|             $model->where('status', $request->input('status')); | ||||
| @@ -50,7 +50,7 @@ class OrderController extends Controller | ||||
|  | ||||
|     public function detail(Request $request) | ||||
|     { | ||||
|         $order = Order::where('user_id', $request->session()->get('id')) | ||||
|         $order = Order::where('user_id', $request->user['id']) | ||||
|             ->where('trade_no', $request->input('trade_no')) | ||||
|             ->first(); | ||||
|         if (!$order) { | ||||
| @@ -72,14 +72,14 @@ class OrderController extends Controller | ||||
|     public function save(OrderSave $request) | ||||
|     { | ||||
|         $userService = new UserService(); | ||||
|         if ($userService->isNotCompleteOrderByUserId($request->session()->get('id'))) { | ||||
|         if ($userService->isNotCompleteOrderByUserId($request->user['id'])) { | ||||
|             abort(500, __('You have an unpaid or pending order, please try again later or cancel it')); | ||||
|         } | ||||
|  | ||||
|         $planService = new PlanService($request->input('plan_id')); | ||||
|  | ||||
|         $plan = $planService->plan; | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|  | ||||
|         if (!$plan) { | ||||
|             abort(500, __('Subscription plan does not exist')); | ||||
| @@ -94,7 +94,7 @@ class OrderController extends Controller | ||||
|         } | ||||
|  | ||||
|         if ($request->input('period') === 'reset_price') { | ||||
|             if (!$user->plan_id) { | ||||
|             if (!$user->plan_id || $user->expired_at < time() || $user->expired_at !== NULL) { | ||||
|                 abort(500, __('Subscription has expired or no active subscription, unable to purchase Data Reset Package')); | ||||
|             } else { | ||||
|                 if ($user->plan_id !== $plan->id) { | ||||
| @@ -121,7 +121,7 @@ class OrderController extends Controller | ||||
|         DB::beginTransaction(); | ||||
|         $order = new Order(); | ||||
|         $orderService = new OrderService($order); | ||||
|         $order->user_id = $request->session()->get('id'); | ||||
|         $order->user_id = $request->user['id']; | ||||
|         $order->plan_id = $plan->id; | ||||
|         $order->period = $request->input('period'); | ||||
|         $order->trade_no = Helper::generateOrderNo(); | ||||
| @@ -177,7 +177,7 @@ class OrderController extends Controller | ||||
|         $tradeNo = $request->input('trade_no'); | ||||
|         $method = $request->input('method'); | ||||
|         $order = Order::where('trade_no', $tradeNo) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->where('status', 0) | ||||
|             ->first(); | ||||
|         if (!$order) { | ||||
| @@ -216,7 +216,7 @@ class OrderController extends Controller | ||||
|     { | ||||
|         $tradeNo = $request->input('trade_no'); | ||||
|         $order = Order::where('trade_no', $tradeNo) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->first(); | ||||
|         if (!$order) { | ||||
|             abort(500, __('Order does not exist')); | ||||
| @@ -249,7 +249,7 @@ class OrderController extends Controller | ||||
|             abort(500, __('Invalid parameter')); | ||||
|         } | ||||
|         $order = Order::where('trade_no', $request->input('trade_no')) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->first(); | ||||
|         if (!$order) { | ||||
|             abort(500, __('Order does not exist')); | ||||
|   | ||||
| @@ -4,6 +4,7 @@ namespace App\Http\Controllers\User; | ||||
|  | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\Models\User; | ||||
| use App\Services\PlanService; | ||||
| use Illuminate\Http\Request; | ||||
| use App\Models\Plan; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| @@ -12,7 +13,7 @@ class PlanController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if ($request->input('id')) { | ||||
|             $plan = Plan::where('id', $request->input('id'))->first(); | ||||
|             if (!$plan) { | ||||
| @@ -24,29 +25,16 @@ class PlanController extends Controller | ||||
|             return response([ | ||||
|                 'data' => $plan | ||||
|             ]); | ||||
|         } else { | ||||
|             $counts = User::select( | ||||
|                 DB::raw("plan_id"), | ||||
|                 DB::raw("count(*) as count") | ||||
|             ) | ||||
|                 ->where('plan_id', '!=', NULL) | ||||
|                 ->where(function ($query) { | ||||
|                     $query->where('expired_at', '>=', time()) | ||||
|                         ->orWhere('expired_at', NULL); | ||||
|                 }) | ||||
|                 ->groupBy("plan_id") | ||||
|                 ->get() | ||||
|                 ->keyBy('plan_id'); | ||||
|         } | ||||
|  | ||||
|         $counts = PlanService::countActiveUsers(); | ||||
|         $plans = Plan::where('show', 1) | ||||
|             ->orderBy('sort', 'ASC') | ||||
|             ->get(); | ||||
|         if (isset($counts)) { | ||||
|             foreach ($plans as $k => $v) { | ||||
|                 if ($plans[$k]->capacity_limit === NULL) continue; | ||||
|                 if (!isset($counts[$plans[$k]->id])) continue; | ||||
|                 $plans[$k]->capacity_limit = $plans[$k]->capacity_limit - $counts[$plans[$k]->id]->count; | ||||
|             } | ||||
|         foreach ($plans as $k => $v) { | ||||
|             if ($plans[$k]->capacity_limit === NULL) continue; | ||||
|             if (!isset($counts[$plans[$k]->id])) continue; | ||||
|             $plans[$k]->capacity_limit = $plans[$k]->capacity_limit - $counts[$plans[$k]->id]->count; | ||||
|         } | ||||
|         return response([ | ||||
|             'data' => $plans | ||||
|   | ||||
| @@ -19,7 +19,7 @@ class ServerController extends Controller | ||||
| { | ||||
|     public function fetch(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         $servers = []; | ||||
|         $userService = new UserService(); | ||||
|         if ($userService->isAvailable($user)) { | ||||
|   | ||||
| @@ -18,7 +18,7 @@ class StatController extends Controller | ||||
|             'user_id', | ||||
|             'server_rate' | ||||
|         ]) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->where('record_at', '>=', strtotime(date('Y-m-1'))) | ||||
|             ->orderBy('record_at', 'DESC'); | ||||
|         return response([ | ||||
|   | ||||
| @@ -22,6 +22,6 @@ class TelegramController extends Controller | ||||
|  | ||||
|     public function unbind(Request $request) | ||||
|     { | ||||
|         $user = User::where('user_id', $request->session()->get('id'))->first(); | ||||
|         $user = User::where('user_id', $request->user['id'])->first(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,7 @@ class TicketController extends Controller | ||||
|     { | ||||
|         if ($request->input('id')) { | ||||
|             $ticket = Ticket::where('id', $request->input('id')) | ||||
|                 ->where('user_id', $request->session()->get('id')) | ||||
|                 ->where('user_id', $request->user['id']) | ||||
|                 ->first(); | ||||
|             if (!$ticket) { | ||||
|                 abort(500, __('Ticket does not exist')); | ||||
| @@ -38,7 +38,7 @@ class TicketController extends Controller | ||||
|                 'data' => $ticket | ||||
|             ]); | ||||
|         } | ||||
|         $ticket = Ticket::where('user_id', $request->session()->get('id')) | ||||
|         $ticket = Ticket::where('user_id', $request->user['id']) | ||||
|             ->orderBy('created_at', 'DESC') | ||||
|             ->get(); | ||||
|         return response([ | ||||
| @@ -49,21 +49,21 @@ class TicketController extends Controller | ||||
|     public function save(TicketSave $request) | ||||
|     { | ||||
|         DB::beginTransaction(); | ||||
|         if ((int)Ticket::where('status', 0)->where('user_id', $request->session()->get('id'))->lockForUpdate()->count()) { | ||||
|         if ((int)Ticket::where('status', 0)->where('user_id', $request->user['id'])->lockForUpdate()->count()) { | ||||
|             abort(500, __('There are other unresolved tickets')); | ||||
|         } | ||||
|         $ticket = Ticket::create(array_merge($request->only([ | ||||
|             'subject', | ||||
|             'level' | ||||
|         ]), [ | ||||
|             'user_id' => $request->session()->get('id') | ||||
|             'user_id' => $request->user['id'] | ||||
|         ])); | ||||
|         if (!$ticket) { | ||||
|             DB::rollback(); | ||||
|             abort(500, __('Failed to open ticket')); | ||||
|         } | ||||
|         $ticketMessage = TicketMessage::create([ | ||||
|             'user_id' => $request->session()->get('id'), | ||||
|             'user_id' => $request->user['id'], | ||||
|             'ticket_id' => $ticket->id, | ||||
|             'message' => $request->input('message') | ||||
|         ]); | ||||
| @@ -87,7 +87,7 @@ class TicketController extends Controller | ||||
|             abort(500, __('Message cannot be empty')); | ||||
|         } | ||||
|         $ticket = Ticket::where('id', $request->input('id')) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->first(); | ||||
|         if (!$ticket) { | ||||
|             abort(500, __('Ticket does not exist')); | ||||
| @@ -95,14 +95,14 @@ class TicketController extends Controller | ||||
|         if ($ticket->status) { | ||||
|             abort(500, __('The ticket is closed and cannot be replied')); | ||||
|         } | ||||
|         if ($request->session()->get('id') == $this->getLastMessage($ticket->id)->user_id) { | ||||
|         if ($request->user['id'] == $this->getLastMessage($ticket->id)->user_id) { | ||||
|             abort(500, __('Please wait for the technical enginneer to reply')); | ||||
|         } | ||||
|         $ticketService = new TicketService(); | ||||
|         if (!$ticketService->reply( | ||||
|             $ticket, | ||||
|             $request->input('message'), | ||||
|             $request->session()->get('id') | ||||
|             $request->user['id'] | ||||
|         )) { | ||||
|             abort(500, __('Ticket reply failed')); | ||||
|         } | ||||
| @@ -119,7 +119,7 @@ class TicketController extends Controller | ||||
|             abort(500, __('Invalid parameter')); | ||||
|         } | ||||
|         $ticket = Ticket::where('id', $request->input('id')) | ||||
|             ->where('user_id', $request->session()->get('id')) | ||||
|             ->where('user_id', $request->user['id']) | ||||
|             ->first(); | ||||
|         if (!$ticket) { | ||||
|             abort(500, __('Ticket does not exist')); | ||||
| @@ -154,7 +154,7 @@ class TicketController extends Controller | ||||
|         )) { | ||||
|             abort(500, __('Unsupported withdrawal method')); | ||||
|         } | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         $limit = config('v2board.commission_withdraw_limit', 100); | ||||
|         if ($limit > ($user->commission_balance / 100)) { | ||||
|             abort(500, __('The current required minimum withdrawal commission is :limit', ['limit' => $limit])); | ||||
| @@ -164,7 +164,7 @@ class TicketController extends Controller | ||||
|         $ticket = Ticket::create([ | ||||
|             'subject' => $subject, | ||||
|             'level' => 2, | ||||
|             'user_id' => $request->session()->get('id') | ||||
|             'user_id' => $request->user['id'] | ||||
|         ]); | ||||
|         if (!$ticket) { | ||||
|             DB::rollback(); | ||||
| @@ -175,7 +175,7 @@ class TicketController extends Controller | ||||
|             __('Withdrawal account') . ":" . $request->input('withdraw_account') | ||||
|         ); | ||||
|         $ticketMessage = TicketMessage::create([ | ||||
|             'user_id' => $request->session()->get('id'), | ||||
|             'user_id' => $request->user['id'], | ||||
|             'ticket_id' => $ticket->id, | ||||
|             'message' => $message | ||||
|         ]); | ||||
|   | ||||
| @@ -18,17 +18,22 @@ use Illuminate\Support\Facades\Cache; | ||||
|  | ||||
| class UserController extends Controller | ||||
| { | ||||
|     public function logout(Request $request) | ||||
|     public function checkLogin(Request $request) | ||||
|     { | ||||
|         $request->session()->flush(); | ||||
|         $data = [ | ||||
|             'is_login' => $request->user['id'] ? true : false | ||||
|         ]; | ||||
|         if ($request->user['is_admin']) { | ||||
|             $data['is_admin'] = true; | ||||
|         } | ||||
|         return response([ | ||||
|             'data' => true | ||||
|             'data' => $data | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function changePassword(UserChangePassword $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if (!$user) { | ||||
|             abort(500, __('The user does not exist')); | ||||
|         } | ||||
| @@ -46,7 +51,6 @@ class UserController extends Controller | ||||
|         if (!$user->save()) { | ||||
|             abort(500, __('Save failed')); | ||||
|         } | ||||
|         $request->session()->flush(); | ||||
|         return response([ | ||||
|             'data' => true | ||||
|         ]); | ||||
| @@ -54,7 +58,7 @@ class UserController extends Controller | ||||
|  | ||||
|     public function info(Request $request) | ||||
|     { | ||||
|         $user = User::where('id', $request->session()->get('id')) | ||||
|         $user = User::where('id', $request->user['id']) | ||||
|             ->select([ | ||||
|                 'email', | ||||
|                 'transfer_enable', | ||||
| @@ -86,12 +90,12 @@ class UserController extends Controller | ||||
|     { | ||||
|         $stat = [ | ||||
|             Order::where('status', 0) | ||||
|                 ->where('user_id', $request->session()->get('id')) | ||||
|                 ->where('user_id', $request->user['id']) | ||||
|                 ->count(), | ||||
|             Ticket::where('status', 0) | ||||
|                 ->where('user_id', $request->session()->get('id')) | ||||
|                 ->where('user_id', $request->user['id']) | ||||
|                 ->count(), | ||||
|             User::where('invite_user_id', $request->session()->get('id')) | ||||
|             User::where('invite_user_id', $request->user['id']) | ||||
|                 ->count() | ||||
|         ]; | ||||
|         return response([ | ||||
| @@ -101,7 +105,7 @@ class UserController extends Controller | ||||
|  | ||||
|     public function getSubscribe(Request $request) | ||||
|     { | ||||
|         $user = User::where('id', $request->session()->get('id')) | ||||
|         $user = User::where('id', $request->user['id']) | ||||
|             ->select([ | ||||
|                 'plan_id', | ||||
|                 'token', | ||||
| @@ -131,7 +135,7 @@ class UserController extends Controller | ||||
|  | ||||
|     public function resetSecurity(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if (!$user) { | ||||
|             abort(500, __('The user does not exist')); | ||||
|         } | ||||
| @@ -152,7 +156,7 @@ class UserController extends Controller | ||||
|             'remind_traffic' | ||||
|         ]); | ||||
|  | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if (!$user) { | ||||
|             abort(500, __('The user does not exist')); | ||||
|         } | ||||
| @@ -169,7 +173,7 @@ class UserController extends Controller | ||||
|  | ||||
|     public function transfer(UserTransfer $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if (!$user) { | ||||
|             abort(500, __('The user does not exist')); | ||||
|         } | ||||
| @@ -188,7 +192,7 @@ class UserController extends Controller | ||||
|  | ||||
|     public function getQuickLoginUrl(Request $request) | ||||
|     { | ||||
|         $user = User::find($request->session()->get('id')); | ||||
|         $user = User::find($request->user['id']); | ||||
|         if (!$user) { | ||||
|             abort(500, __('The user does not exist')); | ||||
|         } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| namespace App\Http; | ||||
|  | ||||
| use Fruitcake\Cors\HandleCors; | ||||
| use Illuminate\Foundation\Http\Kernel as HttpKernel; | ||||
|  | ||||
| class Kernel extends HttpKernel | ||||
| @@ -14,6 +15,7 @@ class Kernel extends HttpKernel | ||||
|      * @var array | ||||
|      */ | ||||
|     protected $middleware = [ | ||||
|         \App\Http\Middleware\CORS::class, | ||||
|         \App\Http\Middleware\TrustProxies::class, | ||||
|         \App\Http\Middleware\CheckForMaintenanceMode::class, | ||||
|         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | ||||
| @@ -28,22 +30,20 @@ class Kernel extends HttpKernel | ||||
|      */ | ||||
|     protected $middlewareGroups = [ | ||||
|         'web' => [ | ||||
|             \App\Http\Middleware\EncryptCookies::class, | ||||
|             \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | ||||
|             \Illuminate\Session\Middleware\StartSession::class, | ||||
| //            \App\Http\Middleware\EncryptCookies::class, | ||||
| //            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | ||||
| //            \Illuminate\Session\Middleware\StartSession::class, | ||||
|             // \Illuminate\Session\Middleware\AuthenticateSession::class, | ||||
|             \Illuminate\View\Middleware\ShareErrorsFromSession::class, | ||||
|             \App\Http\Middleware\VerifyCsrfToken::class, | ||||
|             \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||||
|             \App\Http\Middleware\CORS::class, | ||||
| //            \Illuminate\View\Middleware\ShareErrorsFromSession::class, | ||||
| //            \App\Http\Middleware\VerifyCsrfToken::class, | ||||
| //            \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||||
|         ], | ||||
|  | ||||
|         'api' => [ | ||||
|             \App\Http\Middleware\EncryptCookies::class, | ||||
|             \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | ||||
|             \Illuminate\Session\Middleware\StartSession::class, | ||||
| //            \App\Http\Middleware\EncryptCookies::class, | ||||
| //            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | ||||
| //            \Illuminate\Session\Middleware\StartSession::class, | ||||
|             \App\Http\Middleware\ForceJson::class, | ||||
|             \App\Http\Middleware\CORS::class, | ||||
|             \App\Http\Middleware\Language::class, | ||||
|             'bindings', | ||||
|         ], | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| namespace App\Http\Middleware; | ||||
|  | ||||
| use Closure; | ||||
| use Illuminate\Support\Facades\Cache; | ||||
|  | ||||
| class Admin | ||||
| { | ||||
| @@ -15,9 +16,28 @@ class Admin | ||||
|      */ | ||||
|     public function handle($request, Closure $next) | ||||
|     { | ||||
|         if (!$request->session()->get('is_admin')) { | ||||
|             abort(403, '权限不足'); | ||||
|         $authorization = $request->input('auth_data') ?? $request->header('authorization'); | ||||
|         if (!$authorization) abort(403, '未登录或登陆已过期'); | ||||
|  | ||||
|         $authData = explode(':', base64_decode($authorization)); | ||||
|         if (!Cache::has($authorization)) { | ||||
|             if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入'); | ||||
|             $user = \App\Models\User::where('password', $authData[1]) | ||||
|                 ->where('email', $authData[0]) | ||||
|                 ->select([ | ||||
|                     'id', | ||||
|                     'email', | ||||
|                     'is_admin', | ||||
|                     'is_staff' | ||||
|                 ]) | ||||
|                 ->first(); | ||||
|             if (!$user) abort(403, '鉴权失败,请重新登入'); | ||||
|             if (!$user->is_admin) abort(403, '鉴权失败,请重新登入'); | ||||
|             Cache::put($authorization, $user->toArray(), 3600); | ||||
|         } | ||||
|         $request->merge([ | ||||
|             'user' => Cache::get($authorization) | ||||
|         ]); | ||||
|         return $next($request); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -17,8 +17,8 @@ class CORS | ||||
|         } | ||||
|         $response = $next($request); | ||||
|         $response->header('Access-Control-Allow-Origin', trim($origin, '/')); | ||||
|         $response->header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS'); | ||||
|         $response->header('Access-Control-Allow-Headers', 'Content-Type,X-Requested-With'); | ||||
|         $response->header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS,HEAD'); | ||||
|         $response->header('Access-Control-Allow-Headers', 'Origin,Content-Type,Accept,Authorization,X-Request-With'); | ||||
|         $response->header('Access-Control-Allow-Credentials', 'true'); | ||||
|         $response->header('Access-Control-Max-Age', 10080); | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,9 @@ class Client | ||||
|         if (!$user) { | ||||
|             abort(403, 'token is error'); | ||||
|         } | ||||
|         $request->user = $user; | ||||
|         $request->merge([ | ||||
|             'user' => $user | ||||
|         ]); | ||||
|         return $next($request); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| namespace App\Http\Middleware; | ||||
|  | ||||
| use Closure; | ||||
| use Illuminate\Support\Facades\Cache; | ||||
|  | ||||
| class Staff | ||||
| { | ||||
| @@ -15,9 +16,28 @@ class Staff | ||||
|      */ | ||||
|     public function handle($request, Closure $next) | ||||
|     { | ||||
|         if (!$request->session()->get('is_staff')) { | ||||
|             abort(403, '权限不足'); | ||||
|         $authorization = $request->input('auth_data') ?? $request->header('authorization'); | ||||
|         if (!$authorization) abort(403, '未登录或登陆已过期'); | ||||
|  | ||||
|         $authData = explode(':', base64_decode($authorization)); | ||||
|         if (!Cache::has($authorization)) { | ||||
|             if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入'); | ||||
|             $user = \App\Models\User::where('password', $authData[1]) | ||||
|                 ->where('email', $authData[0]) | ||||
|                 ->select([ | ||||
|                     'id', | ||||
|                     'email', | ||||
|                     'is_admin', | ||||
|                     'is_staff' | ||||
|                 ]) | ||||
|                 ->first(); | ||||
|             if (!$user) abort(403, '鉴权失败,请重新登入'); | ||||
|             if (!$user->is_staff) abort(403, '鉴权失败,请重新登入'); | ||||
|             Cache::put($authorization, $user->toArray(), 3600); | ||||
|         } | ||||
|         $request->merge([ | ||||
|             'user' => Cache::get($authorization) | ||||
|         ]); | ||||
|         return $next($request); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| namespace App\Http\Middleware; | ||||
|  | ||||
| use Closure; | ||||
| use Illuminate\Support\Facades\Cache; | ||||
|  | ||||
| class User | ||||
| { | ||||
| @@ -16,19 +17,26 @@ class User | ||||
|     public function handle($request, Closure $next) | ||||
|     { | ||||
|         $authorization = $request->input('auth_data') ?? $request->header('authorization'); | ||||
|         if ($authorization) { | ||||
|             $authData = explode(':', base64_decode($authorization)); | ||||
|         if (!$authorization) abort(403, '未登录或登陆已过期'); | ||||
|  | ||||
|         $authData = explode(':', base64_decode($authorization)); | ||||
|         if (!Cache::has($authorization)) { | ||||
|             if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入'); | ||||
|             $user = \App\Models\User::where('password', $authData[1]) | ||||
|                 ->where('email', $authData[0]) | ||||
|                 ->select([ | ||||
|                     'id', | ||||
|                     'email', | ||||
|                     'is_admin', | ||||
|                     'is_staff' | ||||
|                 ]) | ||||
|                 ->first(); | ||||
|             if (!$user) abort(403, '鉴权失败,请重新登入'); | ||||
|             $request->session()->put('email', $user->email); | ||||
|             $request->session()->put('id', $user->id); | ||||
|         } | ||||
|         if (!$request->session()->get('id')) { | ||||
|             abort(403, '未登录或登陆已过期'); | ||||
|             Cache::put($authorization, $user->toArray(), 3600); | ||||
|         } | ||||
|         $request->merge([ | ||||
|             'user' => Cache::get($authorization) | ||||
|         ]); | ||||
|         return $next($request); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -112,7 +112,10 @@ class AdminRoute | ||||
|             $router->post('/payment/drop', 'Admin\\PaymentController@drop'); | ||||
|             $router->post('/payment/show', 'Admin\\PaymentController@show'); | ||||
|             // System | ||||
|             $router->get ('/system/getStatus', 'Admin\\SystemController@getStatus'); | ||||
|             $router->get ('/system/getSystemStatus', 'Admin\\SystemController@getSystemStatus'); | ||||
|             $router->get ('/system/getQueueStats', '\\Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController@index'); | ||||
|             $router->get ('/system/getQueueWorkload', '\\Laravel\\Horizon\\Http\\Controllers\\WorkloadController@index'); | ||||
|             $router->get ('/system/getQueueMasters', '\\Laravel\\Horizon\\Http\\Controllers\\MasterSupervisorController@index'); | ||||
|             // Theme | ||||
|             $router->get ('/theme/getThemes', 'Admin\\ThemeController@getThemes'); | ||||
|             $router->post('/theme/saveThemeConfig', 'Admin\\ThemeController@saveThemeConfig'); | ||||
|   | ||||
| @@ -14,9 +14,8 @@ class PassportRoute | ||||
|             $router->post('/auth/register', 'Passport\\AuthController@register'); | ||||
|             $router->post('/auth/login', 'Passport\\AuthController@login'); | ||||
|             $router->get ('/auth/token2Login', 'Passport\\AuthController@token2Login'); | ||||
|             $router->get ('/auth/check', 'Passport\\AuthController@check'); | ||||
|             $router->post('/auth/forget', 'Passport\\AuthController@forget'); | ||||
|             $router->post('/auth/getTempToken', 'Passport\\AuthController@getTempToken'); | ||||
|             $router->post('/auth/forget', 'Passport\\AuthController@forget');                                           // TODO: 1.7.0 remove | ||||
|             $router->post('/auth/getTempToken', 'Passport\\AuthController@getTempToken');                               // TODO: 1.7.0 remove | ||||
|             $router->post('/auth/getQuickLoginUrl', 'Passport\\AuthController@getQuickLoginUrl'); | ||||
|             $router->post('/auth/loginWithMailLink', 'Passport\\AuthController@loginWithMailLink'); | ||||
|             // Comm | ||||
|   | ||||
| @@ -13,21 +13,19 @@ class UserRoute | ||||
|         ], function ($router) { | ||||
|             // User | ||||
|             $router->get ('/resetSecurity', 'User\\UserController@resetSecurity'); | ||||
|             $router->get ('/logout', 'User\\UserController@logout'); | ||||
|             $router->get ('/info', 'User\\UserController@info'); | ||||
|             $router->post('/changePassword', 'User\\UserController@changePassword'); | ||||
|             $router->post('/update', 'User\\UserController@update'); | ||||
|             $router->get ('/getSubscribe', 'User\\UserController@getSubscribe'); | ||||
|             $router->get ('/getStat', 'User\\UserController@getStat'); | ||||
|             $router->get ('/checkLogin', 'User\\UserController@checkLogin'); | ||||
|             $router->post('/transfer', 'User\\UserController@transfer'); | ||||
|             $router->post('/getQuickLoginUrl', 'User\\UserController@getQuickLoginUrl'); | ||||
|             // Order | ||||
|             $router->post('/order/save', 'User\\OrderController@save'); | ||||
|             $router->post('/order/checkout', 'User\\OrderController@checkout'); | ||||
|             $router->get ('/order/check', 'User\\OrderController@check'); | ||||
|             // TODO: 1.5.6 remove | ||||
|             $router->get ('/order/details', 'User\\OrderController@detail'); | ||||
|             // TODO: 1.5.6 remove | ||||
|             $router->get ('/order/details', 'User\\OrderController@detail');                                            // TODO: 1.7.0 remove | ||||
|             $router->get ('/order/detail', 'User\\OrderController@detail'); | ||||
|             $router->get ('/order/fetch', 'User\\OrderController@fetch'); | ||||
|             $router->get ('/order/getPaymentMethod', 'User\\OrderController@getPaymentMethod'); | ||||
|   | ||||
| @@ -48,10 +48,10 @@ class StatServerJob implements ShouldQueue | ||||
|             // | ||||
|         } | ||||
|  | ||||
|         $data = StatServer::where('record_at', $recordAt) | ||||
|             ->where('server_id', $this->server['id']) | ||||
|         $data = StatServer::lockForUpdate() | ||||
|             ->where('record_at', $recordAt) | ||||
|             ->where('server_id', $this->server->id) | ||||
|             ->where('server_type', $this->protocol) | ||||
|             ->lockForUpdate() | ||||
|             ->first(); | ||||
|         if ($data) { | ||||
|             try { | ||||
|   | ||||
| @@ -4,6 +4,7 @@ namespace App\Services; | ||||
|  | ||||
| use App\Models\Plan; | ||||
| use App\Models\User; | ||||
| use Illuminate\Support\Facades\DB; | ||||
|  | ||||
| class PlanService | ||||
| { | ||||
| @@ -18,6 +19,22 @@ class PlanService | ||||
|     { | ||||
|         if ($this->plan->capacity_limit === NULL) return true; | ||||
|         $count = User::where('plan_id', $this->plan->plan_id)->count(); | ||||
|         return $this->plan->capacity_limit - $count; | ||||
|         return ($this->plan->capacity_limit - $count) > 0; | ||||
|     } | ||||
|  | ||||
|     public static function countActiveUsers() | ||||
|     { | ||||
|         return User::select( | ||||
|             DB::raw("plan_id"), | ||||
|             DB::raw("count(*) as count") | ||||
|         ) | ||||
|             ->where('plan_id', '!=', NULL) | ||||
|             ->where(function ($query) { | ||||
|                 $query->where('expired_at', '>=', time()) | ||||
|                     ->orWhere('expired_at', NULL); | ||||
|             }) | ||||
|             ->groupBy("plan_id") | ||||
|             ->get() | ||||
|             ->keyBy('plan_id'); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -15,48 +15,85 @@ use Illuminate\Support\Facades\DB; | ||||
|  | ||||
| class UserService | ||||
| { | ||||
|     private function calcResetDayByMonthFirstDay() | ||||
|     { | ||||
|         $today = date('d'); | ||||
|         $lastDay = date('d', strtotime('last day of +0 months')); | ||||
|         return $lastDay - $today; | ||||
|     } | ||||
|  | ||||
|     private function calcResetDayByExpireDay(int $expiredAt) | ||||
|     { | ||||
|         $day = date('d', $expiredAt); | ||||
|         $today = date('d'); | ||||
|         $lastDay = date('d', strtotime('last day of +0 months')); | ||||
|         if ((int)$day >= (int)$today && (int)$day >= (int)$lastDay) { | ||||
|             return $lastDay - $today; | ||||
|         } | ||||
|         if ((int)$day >= (int)$today) { | ||||
|             return $day - $today; | ||||
|         } else { | ||||
|             return $lastDay - $today + $day; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private function calcResetDayByYearFirstDay() | ||||
|     { | ||||
|         $nextYear = strtotime(date("Y-01-01", strtotime('+1 year'))); | ||||
|         return (int)(($nextYear - time()) / 86400); | ||||
|     } | ||||
|  | ||||
|     private function calcResetDayByYearExpiredAt(int $expiredAt) | ||||
|     { | ||||
|         $md = date('m-d', $expiredAt); | ||||
|         $nowYear = strtotime(date("Y-{$md}")); | ||||
|         $nextYear = strtotime('+1 year', $nowYear); | ||||
|         return (int)(($nextYear - time()) / 86400); | ||||
|     } | ||||
|  | ||||
|     public function getResetDay(User $user) | ||||
|     { | ||||
|         if ($user->expired_at <= time() || $user->expired_at === NULL) return null; | ||||
|         // if reset method is not reset | ||||
|         if (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 2) return null; | ||||
|  | ||||
|         if ((int)config('v2board.reset_traffic_method') === 0 || | ||||
|             (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 0)) | ||||
|         { | ||||
|             $day = date('d', $user->expired_at); | ||||
|             $today = date('d'); | ||||
|             $lastDay = date('d', strtotime('last day of +0 months')); | ||||
|             return $lastDay - $today; | ||||
|         } | ||||
|         if ((int)config('v2board.reset_traffic_method') === 1 || | ||||
|             (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 1)) | ||||
|         { | ||||
|             $day = date('d', $user->expired_at); | ||||
|             $today = date('d'); | ||||
|             $lastDay = date('d', strtotime('last day of +0 months')); | ||||
|             if ((int)$day >= (int)$today && (int)$day >= (int)$lastDay) { | ||||
|                 return $lastDay - $today; | ||||
|         if (!isset($user->plan->reset_traffic_method)) return null; | ||||
|         if ($user->plan->reset_traffic_method === 2) return null; | ||||
|         switch (true) { | ||||
|             case ($user->plan->reset_traffic_method === NULL): { | ||||
|                 $resetTrafficMethod = config('v2board.reset_traffic_method', 0); | ||||
|                 switch ((int)$resetTrafficMethod) { | ||||
|                     // month first day | ||||
|                     case 0: | ||||
|                         return $this->calcResetDayByMonthFirstDay(); | ||||
|                     // expire day | ||||
|                     case 1: | ||||
|                         return $this->calcResetDayByExpireDay($user->expired_at); | ||||
|                     // no action | ||||
|                     case 2: | ||||
|                         return null; | ||||
|                     // year first day | ||||
|                     case 3: | ||||
|                         return $this->calcResetDayByYearFirstDay(); | ||||
|                     // year expire day | ||||
|                     case 4: | ||||
|                         return $this->calcResetDayByYearExpiredAt($user->expired_at); | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
|             if ((int)$day >= (int)$today) { | ||||
|                 return $day - $today; | ||||
|             } else { | ||||
|                 return $lastDay - $today + $day; | ||||
|             case ($user->plan->reset_traffic_method === 0): { | ||||
|                 return $this->calcResetDayByMonthFirstDay(); | ||||
|             } | ||||
|             case ($user->plan->reset_traffic_method === 1): { | ||||
|                 return $this->calcResetDayByExpireDay($user->expired_at); | ||||
|             } | ||||
|             case ($user->plan->reset_traffic_method === 2): { | ||||
|                 return null; | ||||
|             } | ||||
|             case ($user->plan->reset_traffic_method === 3): { | ||||
|                 return $this->calcResetDayByYearFirstDay(); | ||||
|             } | ||||
|             case ($user->plan->reset_traffic_method === 4): { | ||||
|                 return $this->calcResetDayByYearExpiredAt($user->expired_at); | ||||
|             } | ||||
|         } | ||||
|         if ((int)config('v2board.reset_traffic_method') === 3 || | ||||
|             (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 3)) | ||||
|         { | ||||
|             $nextYear = strtotime(date("Y-01-01", strtotime('+1 year'))); | ||||
|             return (int)(($nextYear - time()) / 86400); | ||||
|         } | ||||
|         if ((int)config('v2board.reset_traffic_method') === 4 || | ||||
|             (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 4)) | ||||
|         { | ||||
|             $md = date('m-d', $user->expired_at); | ||||
|             $nowYear = strtotime(date("Y-{$md}")); | ||||
|             $nextYear = strtotime('+1 year', $nowYear); | ||||
|             return (int)(($nextYear - time()) / 86400); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|   | ||||
| @@ -2,11 +2,6 @@ | ||||
|  | ||||
| namespace App\Utils; | ||||
|  | ||||
| use App\Models\ServerV2ray; | ||||
| use App\Models\ServerShadowsocks; | ||||
| use App\Models\ServerTrojan; | ||||
| use App\Models\User; | ||||
|  | ||||
| class Helper | ||||
| { | ||||
|     public static function guid($format = false) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user