Browse Source

update: new auth

tokumeikoi 2 years ago
parent
commit
5ccf508040
48 changed files with 297 additions and 269 deletions
  1. 0 53
      app/Console/Commands/CheckUser.php
  2. 0 1
      app/Console/Kernel.php
  3. 1 1
      app/Http/Controllers/Admin/ConfigController.php
  4. 2 11
      app/Http/Controllers/Admin/PlanController.php
  5. 6 1
      app/Http/Controllers/Admin/SystemController.php
  6. 1 1
      app/Http/Controllers/Admin/TicketController.php
  7. 8 32
      app/Http/Controllers/Passport/AuthController.php
  8. 1 1
      app/Http/Controllers/Staff/TicketController.php
  9. 1 1
      app/Http/Controllers/User/CouponController.php
  10. 8 8
      app/Http/Controllers/User/InviteController.php
  11. 2 7
      app/Http/Controllers/User/KnowledgeController.php
  12. 9 9
      app/Http/Controllers/User/OrderController.php
  13. 8 20
      app/Http/Controllers/User/PlanController.php
  14. 1 1
      app/Http/Controllers/User/ServerController.php
  15. 1 1
      app/Http/Controllers/User/StatController.php
  16. 1 1
      app/Http/Controllers/User/TelegramController.php
  17. 12 12
      app/Http/Controllers/User/TicketController.php
  18. 18 14
      app/Http/Controllers/User/UserController.php
  19. 11 11
      app/Http/Kernel.php
  20. 22 2
      app/Http/Middleware/Admin.php
  21. 2 2
      app/Http/Middleware/CORS.php
  22. 3 1
      app/Http/Middleware/Client.php
  23. 22 2
      app/Http/Middleware/Staff.php
  24. 15 7
      app/Http/Middleware/User.php
  25. 4 1
      app/Http/Routes/AdminRoute.php
  26. 2 3
      app/Http/Routes/PassportRoute.php
  27. 2 4
      app/Http/Routes/UserRoute.php
  28. 3 3
      app/Jobs/StatServerJob.php
  29. 18 1
      app/Services/PlanService.php
  30. 73 36
      app/Services/UserService.php
  31. 0 5
      app/Utils/Helper.php
  32. 1 1
      config/horizon.php
  33. 0 0
      public/assets/admin/components.chunk.css
  34. 0 0
      public/assets/admin/umi.css
  35. 0 0
      public/assets/admin/umi.js
  36. 0 0
      public/theme/v2board/assets/components.chunk.css
  37. 6 2
      public/theme/v2board/assets/i18n/en-US.js
  38. 6 2
      public/theme/v2board/assets/i18n/ja-JP.js
  39. 6 2
      public/theme/v2board/assets/i18n/ko-KR.js
  40. 6 2
      public/theme/v2board/assets/i18n/vi-VN.js
  41. 6 2
      public/theme/v2board/assets/i18n/zh-CN.js
  42. 6 2
      public/theme/v2board/assets/i18n/zh-TW.js
  43. 0 0
      public/theme/v2board/assets/umi.css
  44. 0 0
      public/theme/v2board/assets/umi.js
  45. 0 0
      resources/views/mail/classic/mailLogin.blade.php
  46. 2 2
      resources/views/mail/classic/notify.blade.php
  47. 0 0
      resources/views/mail/default/mailLogin.blade.php
  48. 1 1
      resources/views/mail/default/notify.blade.php

+ 0 - 53
app/Console/Commands/CheckUser.php

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

+ 0 - 1
app/Console/Kernel.php

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

+ 1 - 1
app/Http/Controllers/Admin/ConfigController.php

@@ -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' => [

+ 2 - 11
app/Http/Controllers/Admin/PlanController.php

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

+ 6 - 1
app/Http/Controllers/Admin/SystemController.php

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

+ 1 - 1
app/Http/Controllers/Admin/TicketController.php

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

+ 8 - 32
app/Http/Controllers/Passport/AuthController.php

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

+ 1 - 1
app/Http/Controllers/Staff/TicketController.php

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

+ 1 - 1
app/Http/Controllers/User/CouponController.php

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

+ 8 - 8
app/Http/Controllers/User/InviteController.php

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

+ 2 - 7
app/Http/Controllers/User/KnowledgeController.php

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

+ 9 - 9
app/Http/Controllers/User/OrderController.php

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

+ 8 - 20
app/Http/Controllers/User/PlanController.php

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

+ 1 - 1
app/Http/Controllers/User/ServerController.php

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

+ 1 - 1
app/Http/Controllers/User/StatController.php

@@ -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([

+ 1 - 1
app/Http/Controllers/User/TelegramController.php

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

+ 12 - 12
app/Http/Controllers/User/TicketController.php

@@ -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 - 14
app/Http/Controllers/User/UserController.php

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

+ 11 - 11
app/Http/Kernel.php

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

+ 22 - 2
app/Http/Middleware/Admin.php

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

+ 2 - 2
app/Http/Middleware/CORS.php

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

+ 3 - 1
app/Http/Middleware/Client.php

@@ -26,7 +26,9 @@ class Client
         if (!$user) {
             abort(403, 'token is error');
         }
-        $request->user = $user;
+        $request->merge([
+            'user' => $user
+        ]);
         return $next($request);
     }
 }

+ 22 - 2
app/Http/Middleware/Staff.php

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

+ 15 - 7
app/Http/Middleware/User.php

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

+ 4 - 1
app/Http/Routes/AdminRoute.php

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

+ 2 - 3
app/Http/Routes/PassportRoute.php

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

+ 2 - 4
app/Http/Routes/UserRoute.php

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

+ 3 - 3
app/Jobs/StatServerJob.php

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

+ 18 - 1
app/Services/PlanService.php

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

+ 73 - 36
app/Services/UserService.php

@@ -15,48 +15,85 @@ use Illuminate\Support\Facades\DB;
 
 class UserService
 {
-    public function getResetDay(User $user)
+    private function calcResetDayByMonthFirstDay()
     {
-        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;
+        $today = date('d');
+        $lastDay = date('d', strtotime('last day of +0 months'));
+        return $lastDay - $today;
+    }
 
-        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'));
+    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)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 ((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)) 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;
     }

+ 0 - 5
app/Utils/Helper.php

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

+ 1 - 1
config/horizon.php

@@ -74,7 +74,7 @@ return [
     |
     */
 
-    'middleware' => ['web', 'admin'],
+    'middleware' => [],
 
     /*
     |--------------------------------------------------------------------------

File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/components.chunk.css


File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.css


File diff suppressed because it is too large
+ 0 - 0
public/assets/admin/umi.js


File diff suppressed because it is too large
+ 0 - 0
public/theme/v2board/assets/components.chunk.css


+ 6 - 2
public/theme/v2board/assets/i18n/en-US.js

@@ -147,7 +147,7 @@ window.settings.i18n['en-US'] = {
   '重置订阅信息': 'Reset Subscription',
   '没有可用节点,如果您未订阅或已过期请': 'No access points are available. If you have not subscribed or the subscription has expired, please',
   '订阅': 'Subscribe',
-  '确定要重置当月流量?': 'Are you sure to reset your usage for the current month?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': 'Click "Confirm" and you will be redirected to the payment page. The system will empty your current month\'s usage after your purchase.',
   '确定': 'Confirm',
   '确定要重置订阅信息?': 'Are you sure to reset your subscription?',
@@ -231,7 +231,11 @@ window.settings.i18n['en-US'] = {
   '余额支付': 'Balance payment',
   '我的工单': 'My Tickets',
   '工单历史': 'Ticket History',
-  '{reset_day} 日后重置流量': 'after {reset_day} days reset usage',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': 'Access Point Name',
   '于 {date} 到期,距离到期还有 {day} 天。': 'Will expire on {date}, {day} days before expiration, ',
   'Telegram 讨论组': 'Telegram Discussion Group',

+ 6 - 2
public/theme/v2board/assets/i18n/ja-JP.js

@@ -147,7 +147,7 @@ window.settings.i18n['ja-JP'] = {
   '重置订阅信息': 'サブスクリプションURLの変更',
   '没有可用节点,如果您未订阅或已过期请': 'ご利用可能なサーバーがありません,プランの期限切れまたは購入なされていない場合は',
   '订阅': '購入',
-  '确定要重置当月流量?': '当月分の使用済みデータ通信量をリセットしますか?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': '「確定」をクリックし次のページへ移動,お支払い後に当月分のデータ通信量は即時リセットされます',
   '确定': '確定',
   '确定要重置订阅信息?': 'サブスクリプションURLやUUIDをご変更なされますか?',
@@ -231,7 +231,11 @@ window.settings.i18n['ja-JP'] = {
   '余额支付': '残高ご利用分',
   '我的工单': 'お問い合わせ',
   '工单历史': 'お問い合わせ履歴',
-  '{reset_day} 日后重置流量': '{reset_day} 日後にカウントリセット',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': 'サーバー名',
   '于 {date} 到期,距离到期还有 {day} 天。': 'ご利用期限は {date} まで,期限まであと {day} 日',
   'Telegram 讨论组': 'Telegramグループ',

+ 6 - 2
public/theme/v2board/assets/i18n/ko-KR.js

@@ -147,7 +147,7 @@ window.settings.i18n['ko-KR'] = {
   '重置订阅信息': '구독 재설정',
   '没有可用节点,如果您未订阅或已过期请': '사용 가능한 액세스 포인트가 없습니다. 구독을 신청하지 않았거나 구독이 만료된 경우',
   '订阅': '구독',
-  '确定要重置当月流量?': '이번 달의 이체 데이터를 재설정하시겠습니까?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': '확인"을 클릭하면 결제 페이지로 이동됩니다. 주문이 완료되면 시스템에서 해당 월의 사용 데이터를 삭제합니다.',
   '确定': '확인',
   '确定要重置订阅信息?': '구독을 재설정하시겠습니까?',
@@ -231,7 +231,11 @@ window.settings.i18n['ko-KR'] = {
   '余额支付': '잔액 지불',
   '我的工单': '나의 티켓',
   '工单历史': '티켓 기록',
-  '{reset_day} 日后重置流量': '{reset_day} 일 후 플로우 재설정',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': '환불 금액',
   '于 {date} 到期,距离到期还有 {day} 天。': '{day}까지, 만료 {day}일 전.',
   'Telegram 讨论组': '텔레그램으로 문의하세요',

+ 6 - 2
public/theme/v2board/assets/i18n/vi-VN.js

@@ -147,7 +147,7 @@ window.settings.i18n['vi-VN'] = {
   '重置订阅信息': 'Reset thông tin gói',
   '没有可用节点,如果您未订阅或已过期请': 'Chưa có node khả dụng, nếu bạn chưa mua gói hoặc đã hết hạn hãy',
   '订阅': 'Mua Gói',
-  '确定要重置当月流量?': 'Xác nhận muốn reset dung lượng tháng này?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': 'Ấn 「OK」 sẽ chuyển đến trang thanh toán, sau khi thanh toán đơn hàng hệ thống sẽ xóa dung lượng đã dùng tháng này của bạn.',
   '确定': 'OK',
   '确定要重置订阅信息?': 'Xác nhận reset thông tin gói dịch vụ?',
@@ -231,7 +231,11 @@ window.settings.i18n['vi-VN'] = {
   '余额支付': 'Thanh toán số dư',
   '我的工单': 'Liên Hệ Với Chúng Tôi',
   '工单历史': 'Lịch sử đơn hàng',
-  '{reset_day} 日后重置流量': '{reset_day} ngày sau reset dung lượng',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': 'Tên node',
   '于 {date} 到期,距离到期还有 {day} 天。': 'Hết hạn vào {date}, còn {day} ngày.',
   'Telegram 讨论组': 'Nhóm Telegram',

+ 6 - 2
public/theme/v2board/assets/i18n/zh-CN.js

@@ -147,7 +147,7 @@ window.settings.i18n['zh-CN'] = {
   '重置订阅信息': '重置订阅信息',
   '没有可用节点,如果您未订阅或已过期请': '没有可用节点,如果您未订阅或已过期请',
   '订阅': '订阅',
-  '确定要重置当月流量?': '确定要重置当月流量?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。',
   '确定': '确定',
   '确定要重置订阅信息?': '确定要重置订阅信息?',
@@ -231,7 +231,11 @@ window.settings.i18n['zh-CN'] = {
   '余额支付': '余额支付',
   '我的工单': '我的工单',
   '工单历史': '工单历史',
-  '{reset_day} 日后重置流量': '{reset_day} 日后重置流量',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': '节点名称',
   '于 {date} 到期,距离到期还有 {day} 天。': '于 {date} 到期,距离到期还有 {day} 天。',
   'Telegram 讨论组': 'Telegram 讨论组',

+ 6 - 2
public/theme/v2board/assets/i18n/zh-TW.js

@@ -147,7 +147,7 @@ window.settings.i18n['zh-TW'] = {
   '重置订阅信息': '重置訂閲資訊',
   '没有可用节点,如果您未订阅或已过期请': '沒有可用節點,如果您未訂閱或已過期請',
   '订阅': '訂閱',
-  '确定要重置当月流量?': '確定要重置當月流量?',
+  '确定重置当前已用流量?': '确定重置当前已用流量?',
   '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。': '點擊「確定」將會跳轉到收銀台,支付訂單後系統將會清空您當月已使用流量。',
   '确定': '確定',
   '确定要重置订阅信息?': '確定要重置訂閱資訊?',
@@ -231,7 +231,11 @@ window.settings.i18n['zh-TW'] = {
   '余额支付': '餘額支付',
   '我的工单': '我的工單',
   '工单历史': '工單歷史',
-  '{reset_day} 日后重置流量': '{reset_day} 日後重置流量',
+  '已用流量将在 {reset_day} 日后重置': '已用流量将在 {reset_day} 日后重置',
+  '已用流量已在今日重置': '已用流量已在今日重置',
+  '重置当前已用流量': '重置当前已用流量',
+  '查看节点状态': '查看节点状态',
+  '当前已使用流量达{rate}%': '当前已使用流量达{rate}%',
   '节点名称': '節點名稱',
   '于 {date} 到期,距离到期还有 {day} 天。': '於 {date} 到期,距離到期還有 {day} 天。',
   'Telegram 讨论组': 'Telegram 討論組',

File diff suppressed because it is too large
+ 0 - 0
public/theme/v2board/assets/umi.css


File diff suppressed because it is too large
+ 0 - 0
public/theme/v2board/assets/umi.js


+ 0 - 0
resources/views/mail/classic/login.blade.php → resources/views/mail/classic/mailLogin.blade.php


+ 2 - 2
resources/views/mail/classic/notify.blade.php

@@ -3,7 +3,7 @@
 
 <head>
     <meta charset="UTF-8">
-    <title>网站公告</title>
+    <title>网站通知</title>
     <style type="text/css">
         img {
             max-width: 100%;
@@ -102,7 +102,7 @@
                             <td class="alert alert-warning"
                                 style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 22px; font-weight: bold; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #0073ba; margin: 0; padding: 20px;"
                                 align="center" bgcolor="#0073ba" valign="top">
-                                网站公告
+                                网站通知
                             </td>
                         </tr>
                         <tr

+ 0 - 0
resources/views/mail/default/login.blade.php → resources/views/mail/default/mailLogin.blade.php


+ 1 - 1
resources/views/mail/default/notify.blade.php

@@ -12,7 +12,7 @@
                         </thead>
                         <tbody>
                         <tr style="padding:40px 40px 0 40px;display:table-cell">
-                            <td style="font-size:24px;line-height:1.5;color:#000;margin-top:40px">公告通知</td>
+                            <td style="font-size:24px;line-height:1.5;color:#000;margin-top:40px">网站通知</td>
                         </tr>
                         <tr>
                             <td style="font-size:14px;color:#333;padding:24px 40px 0 40px">

Some files were not shown because too many files changed in this diff