mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 11:21:46 +08:00 
			
		
		
		
	Merge branch 'dev'
This commit is contained in:
		
							
								
								
									
										55
									
								
								app/Console/Commands/ResetUser.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								app/Console/Commands/ResetUser.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Console\Commands;
 | 
			
		||||
 | 
			
		||||
use App\Models\Plan;
 | 
			
		||||
use App\Utils\Helper;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
use Illuminate\Support\Facades\DB;
 | 
			
		||||
 | 
			
		||||
class ResetUser extends Command
 | 
			
		||||
{
 | 
			
		||||
    protected $builder;
 | 
			
		||||
    /**
 | 
			
		||||
     * The name and signature of the console command.
 | 
			
		||||
     *
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $signature = 'reset: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()
 | 
			
		||||
    {
 | 
			
		||||
        ini_set('memory_limit', -1);
 | 
			
		||||
        $users = User::all();
 | 
			
		||||
        foreach ($users as $user)
 | 
			
		||||
        {
 | 
			
		||||
            $user->token = Helper::guid();
 | 
			
		||||
            $user->uuid = Helper::guid(true);
 | 
			
		||||
            $user->save();
 | 
			
		||||
            $this->info("已重置用户{$user->email}的安全信息");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,6 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Console\Commands;
 | 
			
		||||
 | 
			
		||||
use App\Utils\Helper;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
 | 
			
		||||
class Test extends Command
 | 
			
		||||
 
 | 
			
		||||
@@ -58,5 +58,7 @@ class V2boardUpdate extends Command
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $this->info('更新完毕,请重新启动队列服务。');
 | 
			
		||||
        \Artisan::call('cache:clear');
 | 
			
		||||
        \Artisan::call('config:cache');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,6 @@ use App\Utils\Helper;
 | 
			
		||||
use App\Utils\Dict;
 | 
			
		||||
use App\Utils\CacheKey;
 | 
			
		||||
use ReCaptcha\ReCaptcha;
 | 
			
		||||
use Firebase\JWT\JWT;
 | 
			
		||||
 | 
			
		||||
class AuthController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@@ -181,7 +180,7 @@ class AuthController extends Controller
 | 
			
		||||
        $authService = new AuthService($user);
 | 
			
		||||
 | 
			
		||||
        return response()->json([
 | 
			
		||||
            'data' => $authService->generateAuthData('register')
 | 
			
		||||
            'data' => $authService->generateAuthData($request)
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -220,7 +219,7 @@ class AuthController extends Controller
 | 
			
		||||
 | 
			
		||||
        $authService = new AuthService($user);
 | 
			
		||||
        return response([
 | 
			
		||||
            'data' => $authService->generateAuthData('login')
 | 
			
		||||
            'data' => $authService->generateAuthData($request)
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -252,7 +251,7 @@ class AuthController extends Controller
 | 
			
		||||
            Cache::forget($key);
 | 
			
		||||
            $authService = new AuthService($user);
 | 
			
		||||
            return response([
 | 
			
		||||
                'data' => $authService->generateAuthData('token')
 | 
			
		||||
                'data' => $authService->generateAuthData($request)
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,13 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Services;
 | 
			
		||||
 | 
			
		||||
use App\Utils\CacheKey;
 | 
			
		||||
use App\Utils\Helper;
 | 
			
		||||
use Firebase\JWT\JWT;
 | 
			
		||||
use Firebase\JWT\Key;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class AuthService
 | 
			
		||||
{
 | 
			
		||||
@@ -16,26 +19,29 @@ class AuthService
 | 
			
		||||
        $this->user = $user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function generateAuthData($utm)
 | 
			
		||||
    public function generateAuthData(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $guid = Helper::guid();
 | 
			
		||||
        $authData = JWT::encode([
 | 
			
		||||
            'id' => $this->user->id,
 | 
			
		||||
            'session' => $guid,
 | 
			
		||||
        ], config('app.key'), 'HS256');
 | 
			
		||||
        self::addSession($this->user->id, $guid, [
 | 
			
		||||
            'ip' => $request->ip()
 | 
			
		||||
        ]);
 | 
			
		||||
        return [
 | 
			
		||||
            'token' => $this->user->token,
 | 
			
		||||
            'is_admin' => $this->user->is_admin,
 | 
			
		||||
            'auth_data' => JWT::encode([
 | 
			
		||||
                'expired_at' => time() + 3600,
 | 
			
		||||
                'id' => $this->user->id,
 | 
			
		||||
                'utm' => $utm,
 | 
			
		||||
            ], config('app.key'), 'HS256')
 | 
			
		||||
            'auth_data' => $authData
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static function decryptAuthData($jwt)
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!Cache::has($jwt)) {
 | 
			
		||||
                $data = (array)JWT::decode($jwt, new Key(config('app.key'), 'HS256'));
 | 
			
		||||
                if ($data['expired_at'] < time()) return false;
 | 
			
		||||
                if (!self::checkSession($data['id'], $data['session'])) return false;
 | 
			
		||||
                $user = User::select([
 | 
			
		||||
                    'id',
 | 
			
		||||
                    'email',
 | 
			
		||||
@@ -51,4 +57,27 @@ class AuthService
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static function checkSession($userId, $session)
 | 
			
		||||
    {
 | 
			
		||||
        $sessions = (array)Cache::get(CacheKey::get("USER_SESSIONS", $userId)) ?? [];
 | 
			
		||||
        if (!in_array($session, array_keys($sessions))) return false;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static function addSession($userId, $guid, $meta)
 | 
			
		||||
    {
 | 
			
		||||
        $cacheKey = CacheKey::get("USER_SESSIONS", $userId);
 | 
			
		||||
        $sessions = (array)Cache::get($cacheKey, []);
 | 
			
		||||
        $sessions[$guid] = $meta;
 | 
			
		||||
        if (!Cache::put(
 | 
			
		||||
            $cacheKey,
 | 
			
		||||
            $sessions
 | 
			
		||||
        )) return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getSessions()
 | 
			
		||||
    {
 | 
			
		||||
        return (array)Cache::get(CacheKey::get("USER_SESSIONS", $this->user->id), []);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,8 @@ class ServerService
 | 
			
		||||
            ->where('banned', 0)
 | 
			
		||||
            ->select([
 | 
			
		||||
                'id',
 | 
			
		||||
                'uuid'
 | 
			
		||||
                'uuid',
 | 
			
		||||
                'speed_limit'
 | 
			
		||||
            ])
 | 
			
		||||
            ->get();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,8 @@ class CacheKey
 | 
			
		||||
        'SCHEDULE_LAST_CHECK_AT' => '计划任务最后检查时间',
 | 
			
		||||
        'REGISTER_IP_RATE_LIMIT' => '注册频率限制',
 | 
			
		||||
        'LAST_SEND_LOGIN_WITH_MAIL_LINK_TIMESTAMP' => '最后一次发送登入链接时间',
 | 
			
		||||
        'PASSWORD_ERROR_LIMIT' => '密码错误次数限制'
 | 
			
		||||
        'PASSWORD_ERROR_LIMIT' => '密码错误次数限制',
 | 
			
		||||
        'USER_SESSIONS' => '用户session'
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    public static function get(string $key, $uniqueValue)
 | 
			
		||||
 
 | 
			
		||||
@@ -237,5 +237,5 @@ return [
 | 
			
		||||
    | The only modification by laravel config
 | 
			
		||||
    |
 | 
			
		||||
    */
 | 
			
		||||
    'version' => '1.7.0'
 | 
			
		||||
    'version' => '1.7.1.1671082585916'
 | 
			
		||||
];
 | 
			
		||||
 
 | 
			
		||||
@@ -198,7 +198,7 @@ DROP TABLE IF EXISTS `v2_server_route`;
 | 
			
		||||
CREATE TABLE `v2_server_route` (
 | 
			
		||||
                                   `id` int(11) NOT NULL AUTO_INCREMENT,
 | 
			
		||||
                                   `remarks` varchar(255) NOT NULL,
 | 
			
		||||
                                   `match` varchar(255) NOT NULL,
 | 
			
		||||
                                   `match` text NOT NULL,
 | 
			
		||||
                                   `action` varchar(11) NOT NULL,
 | 
			
		||||
                                   `action_value` varchar(255) DEFAULT NULL,
 | 
			
		||||
                                   `created_at` int(11) NOT NULL,
 | 
			
		||||
@@ -397,4 +397,4 @@ CREATE TABLE `v2_user` (
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- 2022-11-27 07:09:04
 | 
			
		||||
-- 2022-12-15 05:24:08
 | 
			
		||||
 
 | 
			
		||||
@@ -639,3 +639,6 @@ CREATE TABLE `v2_server_route` (
 | 
			
		||||
                                   `updated_at` int(11) NOT NULL,
 | 
			
		||||
                                   PRIMARY KEY (`id`)
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `v2_server_route`
 | 
			
		||||
    CHANGE `match` `match` text COLLATE 'utf8mb4_general_ci' NOT NULL AFTER `remarks`;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								public/assets/admin/umi.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/assets/admin/umi.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								public/theme/v2board/assets/umi.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/theme/v2board/assets/umi.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -5,7 +5,6 @@ rm -rf composer.lock composer.phar
 | 
			
		||||
wget https://github.com/composer/composer/releases/latest/download/composer.phar -O composer.phar
 | 
			
		||||
php composer.phar update -vvv
 | 
			
		||||
php artisan v2board:update
 | 
			
		||||
php artisan config:cache
 | 
			
		||||
 | 
			
		||||
if [ -f "/etc/init.d/bt" ]; then
 | 
			
		||||
  chown -R www $(pwd);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,6 @@ rm -rf composer.lock composer.phar
 | 
			
		||||
wget https://github.com/composer/composer/releases/latest/download/composer.phar -O composer.phar
 | 
			
		||||
php composer.phar update -vvv
 | 
			
		||||
php artisan v2board:update
 | 
			
		||||
php artisan config:cache
 | 
			
		||||
 | 
			
		||||
if [ -f "/etc/init.d/bt" ]; then
 | 
			
		||||
  chown -R www $(pwd);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user