From a4f1f40ad4c8bb920d5fa6f1b1af696bd06b57bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=A7=AC=E6=A1=91?= Date: Sun, 6 Sep 2020 13:55:44 +0800 Subject: [PATCH] =?UTF-8?q?Changed=20=E7=B3=BB=E7=BB=9F=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=B0=86=E4=BD=BF=E7=94=A8redis=20Cache=E5=82=A8=E5=AD=98?= =?UTF-8?q?=EF=BC=8C=E5=87=8F=E5=B0=91=E6=9F=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Components/Helpers.php | 56 +++++++----- app/Console/Commands/AutoJob.php | 5 +- app/Console/Commands/updateTextToJson.php | 8 +- app/Http/Controllers/AdminController.php | 51 +++++------ app/Http/Controllers/AuthController.php | 90 +++++++++---------- .../Controllers/Gateway/AbstractPayment.php | 7 -- app/Http/Controllers/Gateway/BitpayX.php | 14 +-- app/Http/Controllers/Gateway/CodePay.php | 13 ++- app/Http/Controllers/Gateway/EPay.php | 20 ++--- app/Http/Controllers/Gateway/F2Fpay.php | 13 ++- app/Http/Controllers/Gateway/PayJs.php | 9 +- app/Http/Controllers/Gateway/PayPal.php | 21 +++-- .../Controllers/User/AffiliateController.php | 19 ++-- .../Controllers/User/SubscribeController.php | 16 ++-- app/Http/Controllers/UserController.php | 43 ++++----- .../Middleware/RedirectIfAuthenticated.php | 2 +- app/Observers/ConfigObserver.php | 13 +++ app/Observers/RuleGroupObserver.php | 3 +- app/Observers/UserGroupObserver.php | 3 +- app/Providers/AppServiceProvider.php | 3 + app/View/Components/ChatUnit.php | 2 +- app/helpers.php | 6 +- composer.json | 50 +++++------ composer.lock | 17 ++-- .../2020_08_21_145711_create_config_table.php | 2 +- .../2020_08_21_150711_preset_data.php | 81 +++++++++-------- tests/Unit/ExampleTest.php | 35 +++++--- 27 files changed, 301 insertions(+), 301 deletions(-) create mode 100644 app/Observers/ConfigObserver.php diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index adc6f588..5707f0c5 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -10,6 +10,7 @@ use App\Models\User; use App\Models\UserCreditLog; use App\Models\UserDataModifyLog; use App\Models\UserSubscribe; +use Cache; use DateTime; use Str; @@ -82,7 +83,7 @@ class Helpers { $user->email = $email; $user->password = $password; // 生成一个可用端口 - $user->port = self::sysConfig()['is_rand_port']? self::getRandPort() : self::getOnlyPort(); + $user->port = self::getPort(); $user->passwd = Str::random(); $user->vmess_id = Str::uuid(); $user->enable = 1; @@ -100,33 +101,28 @@ class Helpers { return $user->id; } - // 获取系统配置 - public static function sysConfig(): array { - $data = Config::all()->pluck('value', 'name')->toArray(); - $data['is_onlinePay'] = ($data['is_AliPay'] || $data['is_QQPay'] || $data['is_WeChatPay'] || $data['is_otherPay'])?: 0; - - return $data; - } - - // 获取一个随机端口 - public static function getRandPort(): int { - $port = random_int(self::sysConfig()['min_port'], self::sysConfig()['max_port']); - - $exists_port = User::pluck('port')->toArray(); - if(in_array($port, $exists_port, true) || in_array($port, self::$denyPorts, true)){ + // 获取一个有效端口 + public static function getPort(): int { + if(sysConfig('is_rand_port')){ $port = self::getRandPort(); - } + }else{ + $port = (int) sysConfig('min_port'); + $exists_port = array_merge(User::where('port', '>=', $port)->pluck('port')->toArray(), self::$denyPorts); + while(in_array($port, $exists_port, true)){ + ++$port; + } + } return $port; } // 获取一个随机端口 - public static function getOnlyPort(): int { - $port = (int) self::sysConfig()['min_port']; + private static function getRandPort(): int { + $port = random_int(sysConfig('min_port'), sysConfig('max_port')); + $exists_port = array_merge(User::where('port', '<>', 0)->pluck('port')->toArray(), self::$denyPorts); - $exists_port = User::where('port', '>=', $port)->pluck('port')->toArray(); - while(in_array($port, $exists_port, true) || in_array($port, self::$denyPorts, true)){ - ++$port; + while(in_array($port, $exists_port, true)){ + $port = random_int(sysConfig('min_port'), sysConfig('max_port')); } return $port; @@ -153,6 +149,24 @@ class Helpers { return $config? $config->name : 'plain'; } + // 获取系统配置 + public static function cacheSysConfig($name) { + if($name === 'is_onlinePay'){ + $value = !empty(array_filter(Cache::many([ + 'is_AliPay', + 'is_QQPay', + 'is_WeChatPay', + 'is_otherPay' + ]))); + Cache::tags('sysConfig')->add('is_onlinePay', $value); + }else{ + $value = Config::find($name)->value; + Cache::tags('sysConfig')->add($name, $value?: false); + } + + return $value; + } + public static function daysToNow($date): int { return (new DateTime())->diff(new DateTime($date))->days; } diff --git a/app/Console/Commands/AutoJob.php b/app/Console/Commands/AutoJob.php index 691b34a4..c65c906b 100644 --- a/app/Console/Commands/AutoJob.php +++ b/app/Console/Commands/AutoJob.php @@ -196,11 +196,8 @@ class AutoJob extends Command { // 端口回收与分配 private function dispatchPort(): void { ## 自动分配端口 - $isRandPort = sysConfig('is_rand_port'); foreach(User::activeUser()->wherePort(0)->get() as $user){ - $port = $isRandPort? Helpers::getRandPort() : Helpers::getOnlyPort(); - - $user->update(['port' => $port]); + $user->update(['port' => Helpers::getPort()]); } // 被封禁 / 过期一个月 的账号自动释放端口 diff --git a/app/Console/Commands/updateTextToJson.php b/app/Console/Commands/updateTextToJson.php index c6b9cb95..896a3e03 100644 --- a/app/Console/Commands/updateTextToJson.php +++ b/app/Console/Commands/updateTextToJson.php @@ -15,18 +15,18 @@ class updateTextToJson extends Command { public function handle(): void { Log::info('----------------------------【数据转换】开始----------------------------'); foreach(ReferralApply::all() as $referralApply){ - $referralApply->link_logs = $this->convertToJson($referralApply->getRawOriginal ('link_logs')); + $referralApply->link_logs = $this->convertToJson($referralApply->getRawOriginal('link_logs')); $referralApply->save(); } Log::info('转换返利表完成'); foreach(UserGroup::all() as $userGroup){ - $userGroup->nodes = $this->convertToJson($userGroup->getRawOriginal ('nodes')); + $userGroup->nodes = $this->convertToJson($userGroup->getRawOriginal('nodes')); $userGroup->save(); } Log::info('转换用户分组表完成'); foreach(RuleGroup::all() as $ruleGroup){ - $ruleGroup->rules = $this->convertToJson($ruleGroup->getRawOriginal ('rules')); - $ruleGroup->nodes = $this->convertToJson($ruleGroup->getRawOriginal ('nodes')); + $ruleGroup->rules = $this->convertToJson($ruleGroup->getRawOriginal('rules')); + $ruleGroup->nodes = $this->convertToJson($ruleGroup->getRawOriginal('nodes')); $ruleGroup->save(); } Log::info('转换审核规则表完成'); diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index b23a32b5..fce057c2 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -53,16 +53,10 @@ use Validator; * @package App\Http\Controllers */ class AdminController extends Controller { - protected static $sysConfig; - - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - public function index() { - $past = strtotime("-".self::$sysConfig['expire_days']." days"); + $past = strtotime("-".sysConfig('expire_days')." days"); - $view['expireDays'] = self::$sysConfig['expire_days']; + $view['expireDays'] = sysConfig('expire_days'); $view['totalUserCount'] = User::count(); // 总用户数 $view['enableUserCount'] = User::whereEnable(1)->count(); // 有效用户数 $view['activeUserCount'] = User::where('t', '>=', $past)->count(); // 活跃用户数 @@ -70,7 +64,7 @@ class AdminController extends Controller { $view['onlineUserCount'] = User::where('t', '>=', strtotime("-10 minutes"))->count(); // 10分钟内在线用户数 $view['expireWarningUserCount'] = User::whereBetween('expired_at', [ date('Y-m-d'), - strtotime("+".self::$sysConfig['expire_days']." days") + strtotime("+".sysConfig('expire_days')." days") ])->count(); // 临近过期用户数 $view['largeTrafficUserCount'] = User::whereRaw('(u + d) >= 107374182400') ->where('status', '<>', -1) @@ -105,7 +99,7 @@ class AdminController extends Controller { ->selectRaw("user_id, sum(total) as totalTraffic") ->get(); // 只统计50M以上的记录,加快速度 foreach($userTotalTrafficList as $user){ - if($user->totalTraffic > self::$sysConfig['traffic_ban_value'] * GB){ + if($user->totalTraffic > sysConfig('traffic_ban_value') * GB){ $result[] = $user->user_id; } } @@ -163,7 +157,7 @@ class AdminController extends Controller { // 临近过期提醒 if($expireWarning){ $query->whereBetween('expired_at', - [date('Y-m-d'), date('Y-m-d', strtotime("+".self::$sysConfig['expire_days']." days"))]); + [date('Y-m-d'), date('Y-m-d', strtotime("+".sysConfig('expire_days')." days"))]); } // 当前在线 @@ -173,7 +167,7 @@ class AdminController extends Controller { // 不活跃用户 if($request->input('unActive')){ - $query->whereBetween('t', [1, strtotime("-".self::$sysConfig['expire_days']." days")])->whereEnable(1); + $query->whereBetween('t', [1, strtotime("-".sysConfig('expire_days')." days")])->whereEnable(1); } // 1小时内流量异常用户 @@ -197,10 +191,10 @@ class AdminController extends Controller { // 流量异常警告 $totalTraffic = UserHourlyDataFlow::userRecentUsed($user->id)->sum('total'); - $user->trafficWarning = $totalTraffic > (self::$sysConfig['traffic_ban_value'] * GB)? 1 : 0; + $user->trafficWarning = $totalTraffic > (sysConfig('traffic_ban_value') * GB)? 1 : 0; // 订阅地址 - $user->link = (self::$sysConfig['subscribe_domain']?: self::$sysConfig['website_url']).'/s/'.$user->subscribe->code; + $user->link = (sysConfig('subscribe_domain')?: sysConfig('website_url')).'/s/'.$user->subscribe->code; } $view['userList'] = $userList; @@ -266,7 +260,7 @@ class AdminController extends Controller { // 生成端口 public function makePort(): int { - return self::$sysConfig['is_rand_port']? Helpers::getRandPort() : Helpers::getOnlyPort(); + return Helpers::getPort(); } // 批量生成账号 @@ -986,7 +980,7 @@ class AdminController extends Controller { // 系统设置 public function system() { - $view = self::$sysConfig; + $view = Config::pluck('value', 'name')->toArray(); $view['labelList'] = Label::orderByDesc('sort')->orderBy('id')->get(); return view('admin.config.system', $view); @@ -994,7 +988,7 @@ class AdminController extends Controller { // 设置某个配置项 public function setConfig(Request $request): JsonResponse { - $name = (string) $request->input('name'); + $name = $request->input('name'); $value = $request->input('value'); if(!$name){ @@ -1002,7 +996,7 @@ class AdminController extends Controller { } // 屏蔽异常配置 - if(!array_key_exists($name, self::$sysConfig)){ + if(!in_array($name, Config::pluck('name')->toArray())){ return Response::json(['status' => 'fail', 'message' => '设置失败:配置不存在']); } @@ -1024,35 +1018,32 @@ class AdminController extends Controller { if($value !== null && in_array($name, ['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay'], true)){ switch($value){ case 'f2fpay': - if(!self::$sysConfig['f2fpay_app_id'] || !self::$sysConfig['f2fpay_private_key'] - || !self::$sysConfig['f2fpay_public_key']){ + if(!sysConfig('f2fpay_app_id') || !sysConfig('f2fpay_private_key') || !sysConfig('f2fpay_public_key')){ return Response::json(['status' => 'fail', 'message' => '请先设置【支付宝F2F】必要参数']); } break; case 'codepay': - if(!self::$sysConfig['codepay_url'] || !self::$sysConfig['codepay_id'] - || !self::$sysConfig['codepay_key']){ + if(!sysConfig('codepay_url') || !sysConfig('codepay_id') || !sysConfig('codepay_key')){ return Response::json(['status' => 'fail', 'message' => '请先设置【码支付】必要参数']); } break; case 'epay': - if(!self::$sysConfig['epay_url'] || !self::$sysConfig['epay_mch_id'] || !self::$sysConfig['epay_key']){ + if(!sysConfig('epay_url') || !sysConfig('epay_mch_id') || !sysConfig('epay_key')){ return Response::json(['status' => 'fail', 'message' => '请先设置【易支付】必要参数']); } break; case 'payjs': - if(!self::$sysConfig['payjs_mch_id'] || !self::$sysConfig['payjs_key']){ + if(!sysConfig('payjs_mch_id') || !sysConfig('payjs_key')){ return Response::json(['status' => 'fail', 'message' => '请先设置【PayJs】必要参数']); } break; case 'bitpayx': - if(!self::$sysConfig['bitpay_secret']){ + if(!sysConfig('bitpay_secret')){ return Response::json(['status' => 'fail', 'message' => '请先设置【麻瓜宝】必要参数']); } break; case 'paypal': - if(!self::$sysConfig['paypal_username'] || !self::$sysConfig['paypal_password'] - || !self::$sysConfig['paypal_secret']){ + if(!sysConfig('paypal_username') || !sysConfig('paypal_password') || !sysConfig('paypal_secret')){ return Response::json(['status' => 'fail', 'message' => '请先设置【PayPal】必要参数']); } break; @@ -1091,12 +1082,12 @@ class AdminController extends Controller { // 推送通知测试 public function sendTestNotification(): JsonResponse { - if(self::$sysConfig['is_notification']){ + if(sysConfig('is_notification')){ $result = PushNotification::send('这是测试的标题', 'ProxyPanel测试内容'); if($result === false){ return Response::json(['status' => 'fail', 'message' => '发送失败,请重新尝试!']); } - switch(self::$sysConfig['is_notification']){ + switch(sysConfig('is_notification')){ case 'serverChan': if(!$result['errno']){ return Response::json(['status' => 'success', 'message' => '发送成功,请查看手机是否收到推送消息']); @@ -1135,7 +1126,7 @@ class AdminController extends Controller { $obj->invitee_id = 0; $obj->code = strtoupper(substr(md5(microtime().Str::random(6)), 8, 12)); $obj->status = 0; - $obj->dateline = date('Y-m-d H:i:s', strtotime("+".self::$sysConfig['admin_invite_days']." days")); + $obj->dateline = date('Y-m-d H:i:s', strtotime("+".sysConfig('admin_invite_days')." days")); $obj->save(); } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index d6a39dfe..3ad30cbc 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -38,12 +38,6 @@ use Validator; * @package App\Http\Controllers */ class AuthController extends Controller { - protected static $sysConfig; - - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - // 登录 public function login(Request $request) { if($request->isMethod('POST')){ @@ -85,10 +79,10 @@ class AuthController extends Controller { Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话 return Redirect::back()->withInput()->withErrors(trans('auth.login_ban', - ['email' => self::$sysConfig['webmaster_email']])); + ['email' => sysConfig('webmaster_email')])); } - if($user->status == 0 && self::$sysConfig['is_activate_account']){ + if($user->status == 0 && sysConfig('is_activate_account')){ Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话 return Redirect::back() @@ -124,7 +118,7 @@ class AuthController extends Controller { // 校验验证码 private function check_captcha($request) { - switch(self::$sysConfig['is_captcha']){ + switch(sysConfig('is_captcha')){ case 1: // 默认图形验证码 if(!Captcha::check($request->input('captcha'))){ return Redirect::back()->withInput()->withErrors(trans('auth.captcha_error')); @@ -169,8 +163,8 @@ class AuthController extends Controller { /** * 添加用户登录日志 * - * @param string $userId 用户ID - * @param string $ip IP地址 + * @param integer $userId 用户ID + * @param string $ip IP地址 */ private function addUserLoginLog($userId, $ip): void { if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ @@ -264,12 +258,12 @@ class AuthController extends Controller { Session::forget('register_token'); // 是否开启注册 - if(!self::$sysConfig['is_register']){ + if(!sysConfig('is_register')){ return Redirect::back()->withErrors(trans('auth.register_close')); } // 校验域名邮箱黑白名单 - if(self::$sysConfig['is_email_filtering']){ + if(sysConfig('is_email_filtering')){ $result = $this->emailChecker($email, 1); if($result !== false){ return $result; @@ -277,12 +271,7 @@ class AuthController extends Controller { } // 如果需要邀请注册 - if(self::$sysConfig['is_invite_register']){ - // 必须使用邀请码 - if(self::$sysConfig['is_invite_register'] == 2 && !$code){ - return Redirect::back()->withInput()->withErrors(trans('auth.code_null')); - } - + if(sysConfig('is_invite_register')){ // 校验邀请码合法性 if($code){ if(Invite::whereCode($code)->whereStatus(0)->doesntExist()){ @@ -290,11 +279,13 @@ class AuthController extends Controller { ->withInput($request->except(['code'])) ->withErrors(trans('auth.code_error')); } + }elseif(sysConfig('is_invite_register') == 2){ // 必须使用邀请码 + return Redirect::back()->withInput()->withErrors(trans('auth.code_null')); } } // 注册前发送激活码 - if(self::$sysConfig['is_activate_account'] == 1){ + if(sysConfig('is_activate_account') == 1){ if(!$verify_code){ return Redirect::back() ->withInput($request->except(['verify_code'])) @@ -319,9 +310,9 @@ class AuthController extends Controller { } // 24小时内同IP注册限制 - if(self::$sysConfig['register_ip_limit'] && Cache::has($cacheKey)){ + if(sysConfig('register_ip_limit') && Cache::has($cacheKey)){ $registerTimes = Cache::get($cacheKey); - if($registerTimes >= self::$sysConfig['register_ip_limit']){ + if($registerTimes >= sysConfig('register_ip_limit')){ return Redirect::back() ->withInput($request->except(['code'])) ->withErrors(trans('auth.register_anti')); @@ -329,8 +320,8 @@ class AuthController extends Controller { } // 获取可用端口 - $port = self::$sysConfig['is_rand_port']? Helpers::getRandPort() : Helpers::getOnlyPort(); - if($port > self::$sysConfig['max_port']){ + $port = Helpers::getPort(); + if($port > sysConfig('max_port')){ return Redirect::back()->withInput()->withErrors(trans('auth.register_close')); } @@ -338,10 +329,10 @@ class AuthController extends Controller { $affArr = $this->getAff($code, $aff); $inviter_id = $affArr['inviter_id']; - $transfer_enable = MB * (self::$sysConfig['default_traffic'] + ($inviter_id? self::$sysConfig['referral_traffic'] : 0)); + $transfer_enable = MB * ((int) sysConfig('default_traffic') + ($inviter_id? (int) sysConfig('referral_traffic') : 0)); // 创建新用户 - $uid = Helpers::addUser($email, Hash::make($password), $transfer_enable, self::$sysConfig['default_days'], + $uid = Helpers::addUser($email, Hash::make($password), $transfer_enable, sysConfig('default_days'), $inviter_id); // 注册失败,抛出异常 @@ -359,7 +350,7 @@ class AuthController extends Controller { } // 更新邀请码 - if(self::$sysConfig['is_invite_register'] && $affArr['code_id']){ + if($affArr['code_id'] && sysConfig('is_invite_register')){ Invite::find($affArr['code_id'])->update(['invitee_id' => $uid, 'status' => 1]); } @@ -367,10 +358,10 @@ class AuthController extends Controller { Cookie::unqueue('register_aff'); // 注册后发送激活码 - if(self::$sysConfig['is_activate_account'] == 2){ + if(sysConfig('is_activate_account') == 2){ // 生成激活账号的地址 $token = $this->addVerifyUrl($uid, $email); - $activeUserUrl = self::$sysConfig['website_url'].'/active/'.$token; + $activeUserUrl = sysConfig('website_url').'/active/'.$token; $logId = Helpers::addNotificationLog('注册激活', '请求地址:'.$activeUserUrl, 1, $email); Mail::to($email)->send(new activeUser($logId, $activeUserUrl)); @@ -381,11 +372,11 @@ class AuthController extends Controller { if($inviter_id){ $referralUser = User::find($inviter_id); if($referralUser && $referralUser->expired_at >= date('Y-m-d')){ - (new UserService($referralUser))->incrementData(self::$sysConfig['referral_traffic'] * MB); + (new UserService($referralUser))->incrementData(sysConfig('referral_traffic') * MB); } } - if(self::$sysConfig['is_activate_account'] == 1){ + if(sysConfig('is_activate_account') == 1){ User::find($uid)->update(['status' => 1]); } @@ -395,7 +386,7 @@ class AuthController extends Controller { return Redirect::to('login')->withInput(); } - $view['emailList'] = self::$sysConfig['is_email_filtering'] != 2? false : EmailFilter::whereType(2)->get(); + $view['emailList'] = sysConfig('is_email_filtering') != 2? false : EmailFilter::whereType(2)->get(); Session::put('register_token', Str::random()); return view('auth.register', $view); @@ -403,9 +394,9 @@ class AuthController extends Controller { //邮箱检查 private function emailChecker($email, $returnType = 0) { - $emailFilterList = $this->emailFilterList(self::$sysConfig['is_email_filtering']); + $emailFilterList = $this->emailFilterList(sysConfig('is_email_filtering')); $emailSuffix = explode('@', $email); // 提取邮箱后缀 - switch(self::$sysConfig['is_email_filtering']){ + switch(sysConfig('is_email_filtering')){ // 黑名单 case 1: if(in_array(strtolower($emailSuffix[1]), $emailFilterList, true)){ @@ -470,7 +461,7 @@ class AuthController extends Controller { // 生成申请的请求地址 private function addVerifyUrl($uid, $email) { - $token = md5(self::$sysConfig['website_name'].$email.microtime()); + $token = md5(sysConfig('website_name').$email.microtime()); $verify = new Verify(); $verify->type = 1; $verify->user_id = $uid; @@ -499,9 +490,9 @@ class AuthController extends Controller { $email = $request->input('email'); // 是否开启重设密码 - if(!self::$sysConfig['is_reset_password']){ + if(!sysConfig('is_reset_password')){ return Redirect::back()->withErrors(trans('auth.reset_password_close', - ['email' => self::$sysConfig['webmaster_email']])); + ['email' => sysConfig('webmaster_email')])); } // 查找账号 @@ -514,9 +505,9 @@ class AuthController extends Controller { $resetTimes = 0; if(Cache::has('resetPassword_'.md5($email))){ $resetTimes = Cache::get('resetPassword_'.md5($email)); - if($resetTimes >= self::$sysConfig['reset_password_times']){ + if($resetTimes >= sysConfig('reset_password_times')){ return Redirect::back()->withErrors(trans('auth.reset_password_limit', - ['time' => self::$sysConfig['reset_password_times']])); + ['time' => sysConfig('reset_password_times')])); } } @@ -524,7 +515,7 @@ class AuthController extends Controller { $token = $this->addVerifyUrl($user->id, $email); // 发送邮件 - $resetPasswordUrl = self::$sysConfig['website_url'].'/reset/'.$token; + $resetPasswordUrl = sysConfig('website_url').'/reset/'.$token; $logId = Helpers::addNotificationLog('重置密码', '请求地址:'.$resetPasswordUrl, 1, $email); Mail::to($email)->send(new resetPassword($logId, $resetPasswordUrl)); @@ -626,16 +617,15 @@ class AuthController extends Controller { $email = $request->input('email'); // 是否开启账号激活 - if(self::$sysConfig['is_activate_account'] != 2){ + if(sysConfig('is_activate_account') != 2){ return Redirect::back()->withInput()->withErrors(trans('auth.active_close', - ['email' => self::$sysConfig['webmaster_email']])); + ['email' => sysConfig('webmaster_email')])); } // 查找账号 $user = User::whereEmail($email)->firstOrFail(); if($user->status < 0){ - return Redirect::back()->withErrors(trans('auth.login_ban', - ['email' => self::$sysConfig['webmaster_email']])); + return Redirect::back()->withErrors(trans('auth.login_ban', ['email' => sysConfig('webmaster_email')])); } if($user->status > 0){ @@ -646,9 +636,9 @@ class AuthController extends Controller { $activeTimes = 0; if(Cache::has('activeUser_'.md5($email))){ $activeTimes = Cache::get('activeUser_'.md5($email)); - if($activeTimes >= self::$sysConfig['active_times']){ + if($activeTimes >= sysConfig('active_times')){ return Redirect::back()->withErrors(trans('auth.active_limit', - ['time' => self::$sysConfig['webmaster_email']])); + ['time' => sysConfig('webmaster_email')])); } } @@ -656,7 +646,7 @@ class AuthController extends Controller { $token = $this->addVerifyUrl($user->id, $email); // 发送邮件 - $activeUserUrl = self::$sysConfig['website_url'].'/active/'.$token; + $activeUserUrl = sysConfig('website_url').'/active/'.$token; $logId = Helpers::addNotificationLog('激活账号', '请求地址:'.$activeUserUrl, 1, $email); Mail::to($email)->send(new activeUser($logId, $activeUserUrl)); @@ -723,7 +713,7 @@ class AuthController extends Controller { // 账号激活后给邀请人送流量 $inviter = $user->inviter; if($inviter){ - (new UserService($inviter))->incrementData(self::$sysConfig['referral_traffic'] * MB); + (new UserService($inviter))->incrementData(sysConfig('referral_traffic') * MB); } Session::flash('successMsg', trans('auth.active_success')); @@ -748,7 +738,7 @@ class AuthController extends Controller { } // 校验域名邮箱黑白名单 - if(self::$sysConfig['is_email_filtering']){ + if(sysConfig('is_email_filtering')){ $result = $this->emailChecker($email); if($result !== false){ return $result; @@ -756,7 +746,7 @@ class AuthController extends Controller { } // 是否开启注册发送验证码 - if(self::$sysConfig['is_activate_account'] != 1){ + if(sysConfig('is_activate_account') != 1){ return Response::json(['status' => 'fail', 'message' => trans('auth.captcha_close')]); } diff --git a/app/Http/Controllers/Gateway/AbstractPayment.php b/app/Http/Controllers/Gateway/AbstractPayment.php index bc43c2f1..69ad9637 100644 --- a/app/Http/Controllers/Gateway/AbstractPayment.php +++ b/app/Http/Controllers/Gateway/AbstractPayment.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Gateway; -use App\Components\Helpers; use App\Models\Payment; use App\Models\PaymentCallback; use Illuminate\Http\JsonResponse; @@ -10,12 +9,6 @@ use Illuminate\Http\Request; use Str; abstract class AbstractPayment { - protected static $sysConfig; - - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - abstract public function purchase(Request $request): JsonResponse; abstract public function notify(Request $request): void; diff --git a/app/Http/Controllers/Gateway/BitpayX.php b/app/Http/Controllers/Gateway/BitpayX.php index d7038658..27771e72 100644 --- a/app/Http/Controllers/Gateway/BitpayX.php +++ b/app/Http/Controllers/Gateway/BitpayX.php @@ -18,10 +18,10 @@ class BitpayX extends AbstractPayment { 'price_amount' => $payment->amount, 'price_currency' => 'CNY', 'title' => '支付单号:'.$payment->trade_no, - 'description' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'], - 'callback_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=bitpayx', - 'success_url' => self::$sysConfig['website_url'].'/invoices', - 'cancel_url' => self::$sysConfig['website_url'].'/invoices', + 'description' => sysConfig('subject_name')?: sysConfig('website_name'), + 'callback_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=bitpayx', + 'success_url' => sysConfig('website_url').'/invoices', + 'cancel_url' => sysConfig('website_url').'/invoices', 'token' => $this->sign($payment->trade_no), ]; $result = $this->sendRequest($data); @@ -40,11 +40,11 @@ class BitpayX extends AbstractPayment { private function sign($tradeNo): string { $data = [ 'merchant_order_id' => $tradeNo, - 'secret' => self::$sysConfig['bitpay_secret'], + 'secret' => sysConfig('bitpay_secret'), 'type' => 'FIAT' ]; - return $this->aliStyleSign($data, self::$sysConfig['bitpay_secret']); + return $this->aliStyleSign($data, sysConfig('bitpay_secret')); } private function sendRequest($data, $type = 'createOrder') { @@ -52,7 +52,7 @@ class BitpayX extends AbstractPayment { 'base_uri' => 'https://api.mugglepay.com/v1/', 'timeout' => 15, 'headers' => [ - 'token' => self::$sysConfig['bitpay_secret'], + 'token' => sysConfig('bitpay_secret'), 'content-type' => 'application/json' ] ]); diff --git a/app/Http/Controllers/Gateway/CodePay.php b/app/Http/Controllers/Gateway/CodePay.php index 4f381bcb..a10e29b7 100644 --- a/app/Http/Controllers/Gateway/CodePay.php +++ b/app/Http/Controllers/Gateway/CodePay.php @@ -12,18 +12,18 @@ class CodePay extends AbstractPayment { $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $data = [ - 'id' => self::$sysConfig['codepay_id'], + 'id' => sysConfig('codepay_id'), 'pay_id' => $payment->trade_no, 'type' => $request->input('type'), //1支付宝支付 2QQ钱包 3微信支付 'price' => $payment->amount, 'page' => 1, 'outTime' => 900, - 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=codepay', - 'return_url' => self::$sysConfig['website_url'].'/invoices', + 'notify_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=codepay', + 'return_url' => sysConfig('website_url').'/invoices', ]; - $data['sign'] = $this->aliStyleSign($data, self::$sysConfig['codepay_key']); + $data['sign'] = $this->aliStyleSign($data, sysConfig('codepay_key')); - $url = self::$sysConfig['codepay_url'].http_build_query($data); + $url = sysConfig('codepay_url').http_build_query($data); $payment->update(['url' => $url]); return Response::json(['status' => 'success', 'url' => $url, 'message' => '创建订单成功!']); @@ -32,8 +32,7 @@ class CodePay extends AbstractPayment { public function notify($request): void { $trade_no = $request->input('pay_id'); if($trade_no && $request->input('pay_no') - && $this->verify($request->except('method'), self::$sysConfig['codepay_key'], $request->input('sign'), - false)){ + && $this->verify($request->except('method'), sysConfig('codepay_key'), $request->input('sign'), false)){ $payment = Payment::whereTradeNo($trade_no)->first(); if($payment){ $ret = $payment->order->update(['status' => 2]); diff --git a/app/Http/Controllers/Gateway/EPay.php b/app/Http/Controllers/Gateway/EPay.php index b4cb088d..5855f457 100644 --- a/app/Http/Controllers/Gateway/EPay.php +++ b/app/Http/Controllers/Gateway/EPay.php @@ -27,18 +27,18 @@ class EPay extends AbstractPayment { } $data = [ - 'pid' => self::$sysConfig['epay_mch_id'], + 'pid' => sysConfig('epay_mch_id'), 'type' => $type, - 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=epay', - 'return_url' => self::$sysConfig['website_url'].'/invoices', + 'notify_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=epay', + 'return_url' => sysConfig('website_url').'/invoices', 'out_trade_no' => $payment->trade_no, - 'name' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'], + 'name' => sysConfig('subject_name')?: sysConfig('website_name'), 'money' => $payment->amount, 'sign_type' => 'MD5' ]; - $data['sign'] = $this->aliStyleSign($data, self::$sysConfig['epay_key']); + $data['sign'] = $this->aliStyleSign($data, sysConfig('epay_key')); - $url = self::$sysConfig['epay_url'].'submit.php?'.http_build_query($data); + $url = sysConfig('epay_url').'submit.php?'.http_build_query($data); $payment->update(['url' => $url]); return Response::json(['status' => 'success', 'url' => $url, 'message' => '创建订单成功!']); @@ -46,7 +46,7 @@ class EPay extends AbstractPayment { public function notify(Request $request): void { if($request->input('trade_status') === 'TRADE_SUCCESS' - && $this->verify($request->except('method'), self::$sysConfig['epay_key'], $request->input('sign'))){ + && $this->verify($request->except('method'), sysConfig('epay_key'), $request->input('sign'))){ $payment = Payment::whereTradeNo($request->input('out_trade_no'))->first(); if($payment){ $ret = $payment->order->update(['status' => 2]); @@ -59,11 +59,11 @@ class EPay extends AbstractPayment { } public function queryInfo(): JsonResponse { - $request = (new Client())->get(self::$sysConfig['epay_url'].'api.php', [ + $request = (new Client())->get(sysConfig('epay_url').'api.php', [ 'query' => [ 'act' => 'query', - 'pid' => self::$sysConfig['epay_mch_id'], - 'key' => self::$sysConfig['epay_key'] + 'pid' => sysConfig('epay_mch_id'), + 'key' => sysConfig('epay_key') ] ]); if($request->getStatusCode() == 200){ diff --git a/app/Http/Controllers/Gateway/F2Fpay.php b/app/Http/Controllers/Gateway/F2Fpay.php index 218a02b7..9b0789d7 100644 --- a/app/Http/Controllers/Gateway/F2Fpay.php +++ b/app/Http/Controllers/Gateway/F2Fpay.php @@ -16,16 +16,15 @@ class F2Fpay extends AbstractPayment { private static $aliConfig; public function __construct() { - parent::__construct(); self::$aliConfig = [ 'use_sandbox' => false, - 'app_id' => self::$sysConfig['f2fpay_app_id'], + 'app_id' => sysConfig('f2fpay_app_id'), 'sign_type' => 'RSA2', - 'ali_public_key' => self::$sysConfig['f2fpay_public_key'], - 'rsa_private_key' => self::$sysConfig['f2fpay_private_key'], + 'ali_public_key' => sysConfig('f2fpay_public_key'), + 'rsa_private_key' => sysConfig('f2fpay_private_key'), 'limit_pay' => [], - 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=f2fpay', - 'return_url' => self::$sysConfig['website_url'].'/invoices', + 'notify_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=f2fpay', + 'return_url' => sysConfig('website_url').'/invoices', 'fee_type' => 'CNY', ]; } @@ -35,7 +34,7 @@ class F2Fpay extends AbstractPayment { $data = [ 'body' => '', - 'subject' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'], + 'subject' => sysConfig('subject_name')?: sysConfig('website_name'), 'trade_no' => $payment->trade_no, 'time_expire' => time() + 900, // 必须 15分钟 内付款 'amount' => $payment->amount, diff --git a/app/Http/Controllers/Gateway/PayJs.php b/app/Http/Controllers/Gateway/PayJs.php index 2ead6669..6d80cc62 100644 --- a/app/Http/Controllers/Gateway/PayJs.php +++ b/app/Http/Controllers/Gateway/PayJs.php @@ -12,10 +12,9 @@ class PayJs extends AbstractPayment { private static $config; public function __construct() { - parent::__construct(); self::$config = [ - 'mchid' => self::$sysConfig['payjs_mch_id'], // 配置商户号 - 'key' => self::$sysConfig['payjs_key'], // 配置通信密钥 + 'mchid' => sysConfig('payjs_mch_id'), // 配置商户号 + 'key' => sysConfig('payjs_key'), // 配置通信密钥 ]; } @@ -23,10 +22,10 @@ class PayJs extends AbstractPayment { $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $result = (new Pay($this::$config))->cashier([ - 'body' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'], + 'body' => sysConfig('subject_name')?: sysConfig('website_name'), 'total_fee' => $payment->amount * 100, 'out_trade_no' => $payment->trade_no, - 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=payjs', + 'notify_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=payjs', ]); // 获取收款二维码内容 diff --git a/app/Http/Controllers/Gateway/PayPal.php b/app/Http/Controllers/Gateway/PayPal.php index 4f88ee8b..285fc034 100644 --- a/app/Http/Controllers/Gateway/PayPal.php +++ b/app/Http/Controllers/Gateway/PayPal.php @@ -18,22 +18,21 @@ class PayPal extends AbstractPayment { protected $exChange; public function __construct() { - parent::__construct(); $this->provider = new ExpressCheckout(); $config = [ 'mode' => 'live', 'live' => [ - 'username' => self::$sysConfig['paypal_username'], - 'password' => self::$sysConfig['paypal_password'], - 'secret' => self::$sysConfig['paypal_secret'], - 'certificate' => self::$sysConfig['paypal_certificate'], - 'app_id' => self::$sysConfig['paypal_app_id'], + 'username' => sysConfig('paypal_username'), + 'password' => sysConfig('paypal_password'), + 'secret' => sysConfig('paypal_secret'), + 'certificate' => sysConfig('paypal_certificate'), + 'app_id' => sysConfig('paypal_app_id'), ], 'payment_action' => 'Sale', 'currency' => 'USD', 'billing_type' => 'MerchantInitiatedBilling', - 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=paypal', + 'notify_url' => (sysConfig('website_callback_url')?: sysConfig('website_url')).'/callback/notify?method=paypal', 'locale' => 'zh_CN', 'validate_ssl' => true, ]; @@ -76,15 +75,15 @@ class PayPal extends AbstractPayment { 'invoice_id' => $trade_no, 'items' => [ [ - 'name' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'], + 'name' => sysConfig('subject_name')?: sysConfig('website_name'), 'price' => $amount, - 'desc' => 'Description for'.(self::$sysConfig['subject_name']?: self::$sysConfig['website_name']), + 'desc' => 'Description for'.(sysConfig('subject_name')?: sysConfig('website_name')), 'qty' => 1 ] ], 'invoice_description' => $trade_no, - 'return_url' => self::$sysConfig['website_url'].'/callback/checkout', - 'cancel_url' => self::$sysConfig['website_url'].'/invoices', + 'return_url' => sysConfig('website_url').'/callback/checkout', + 'cancel_url' => sysConfig('website_url').'/invoices', 'total' => $amount, ]; } diff --git a/app/Http/Controllers/User/AffiliateController.php b/app/Http/Controllers/User/AffiliateController.php index 82f2b5e9..2e09ce99 100644 --- a/app/Http/Controllers/User/AffiliateController.php +++ b/app/Http/Controllers/User/AffiliateController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\User; -use App\Components\Helpers; use App\Http\Controllers\Controller; use App\Models\Order; use App\Models\ReferralApply; @@ -12,24 +11,18 @@ use Illuminate\Http\JsonResponse; use Response; class AffiliateController extends Controller { - protected static $sysConfig; - - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - // 推广返利 public function referral() { if(ReferralLog::uid()->doesntExist() && Order::uid()->whereStatus(2)->doesntExist()){ return Response::view('auth.error', ['message' => '本功能对非付费用户禁用!请 返 回'], 402); } - $view['referral_traffic'] = flowAutoShow(self::$sysConfig['referral_traffic'] * MB); - $view['referral_percent'] = self::$sysConfig['referral_percent']; - $view['referral_money'] = self::$sysConfig['referral_money']; + $view['referral_traffic'] = flowAutoShow(sysConfig('referral_traffic') * MB); + $view['referral_percent'] = sysConfig('referral_percent'); + $view['referral_money'] = sysConfig('referral_money'); $view['totalAmount'] = ReferralLog::uid()->sum('commission') / 100; $view['canAmount'] = ReferralLog::uid()->whereStatus(0)->sum('commission') / 100; - $view['aff_link'] = self::$sysConfig['website_url'].'/register?aff='.Auth::id(); + $view['aff_link'] = sysConfig('website_url').'/register?aff='.Auth::id(); $view['referralLogList'] = ReferralLog::uid() ->with('invitee:id,email') ->latest() @@ -60,10 +53,10 @@ class AffiliateController extends Controller { // 校验可以提现金额是否超过系统设置的阀值 $commission = ReferralLog::uid()->whereStatus(0)->sum('commission'); $commission /= 100; - if($commission < self::$sysConfig['referral_money']){ + if($commission < sysConfig('referral_money')){ return Response::json([ 'status' => 'fail', - 'message' => '申请失败:满'.self::$sysConfig['referral_money'].'元才可以提现,继续努力吧' + 'message' => '申请失败:满'.sysConfig('referral_money').'元才可以提现,继续努力吧' ]); } diff --git a/app/Http/Controllers/User/SubscribeController.php b/app/Http/Controllers/User/SubscribeController.php index 71db2987..653404f8 100644 --- a/app/Http/Controllers/User/SubscribeController.php +++ b/app/Http/Controllers/User/SubscribeController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\User; -use App\Components\Helpers; use App\Http\Controllers\Controller; use App\Models\UserSubscribe; use App\Models\UserSubscribeLog; @@ -12,13 +11,8 @@ use Redirect; use Response; class SubscribeController extends Controller { - protected static $sysConfig; private $subType; - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - // 通过订阅码获取订阅信息 public function getSubscribeByCode(Request $request, $code) { if(empty($code)){ @@ -84,21 +78,21 @@ class SubscribeController extends Controller { } // 打乱数组 - if(self::$sysConfig['rand_subscribe']){ + if(sysConfig('rand_subscribe')){ $nodeList = Arr::shuffle($nodeList); } $scheme = null; // 展示到期时间和剩余流量 - if(self::$sysConfig['is_custom_subscribe']){ + if(sysConfig('is_custom_subscribe')){ $scheme .= $this->infoGenerator('到期时间: '.($user->expired_at < date('Y-m-d')? '过期' : $user->expired_at)).$this->infoGenerator('剩余流量: '.flowAutoShow($user->transfer_enable - $user->u - $user->d)); } // 控制客户端最多获取节点数 foreach($nodeList as $key => $node){ // 控制显示的节点数 - if(self::$sysConfig['subscribe_max'] && $key >= self::$sysConfig['subscribe_max']){ + if(sysConfig('subscribe_max') && $key >= sysConfig('subscribe_max')){ break; } @@ -112,7 +106,7 @@ class SubscribeController extends Controller { ]; // 适配Quantumult的自定义订阅头 - if(self::$sysConfig['is_custom_subscribe']){ + if(sysConfig('is_custom_subscribe')){ $headers['Subscription-Userinfo'] = 'upload='.$user->u.'; download='.$user->d.'; total='.$user->transfer_enable.'; expire='.strtotime($user->expired_at); } @@ -144,7 +138,7 @@ class SubscribeController extends Controller { case 1: case 4: default: - $result = 'ssr://'.base64url_encode('0.0.0.0:0:origin:none:plain:'.base64url_encode('0000').'/?obfsparam=&protoparam=&remarks='.base64url_encode($text).'&group='.base64url_encode(self::$sysConfig['website_name']).'&udpport=0&uot=0'); + $result = 'ssr://'.base64url_encode('0.0.0.0:0:origin:none:plain:'.base64url_encode('0000').'/?obfsparam=&protoparam=&remarks='.base64url_encode($text).'&group='.base64url_encode(sysConfig('website_name')).'&udpport=0&uot=0'); break; } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 4de0a853..fac344ff 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -45,12 +45,6 @@ use Validator; * @package App\Http\Controllers */ class UserController extends Controller { - protected static $sysConfig; - - public function __construct() { - self::$sysConfig = Helpers::sysConfig(); - } - public function index() { $user = Auth::getUser(); $totalTransfer = $user->transfer_enable; @@ -66,7 +60,7 @@ class UserController extends Controller { $view['noticeList'] = Article::type(2)->latest()->Paginate(1); // 公告 //流量异常判断 $hourlyTraffic = UserHourlyDataFlow::userRecentUsed($user->id)->sum('total'); - $view['isTrafficWarning'] = $hourlyTraffic >= (self::$sysConfig['traffic_ban_value'] * GB)?: 0; + $view['isTrafficWarning'] = $hourlyTraffic >= (sysConfig('traffic_ban_value') * GB)?: 0; //付费用户判断 $view['not_paying_user'] = Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist(); $view['userLoginLog'] = UserLoginLog::whereUserId($user->id)->latest()->first(); // 近期登录日志 @@ -79,7 +73,7 @@ class UserController extends Controller { public function checkIn(): JsonResponse { $user = Auth::getUser(); // 系统开启登录加积分功能才可以签到 - if(!self::$sysConfig['is_checkin']){ + if(!sysConfig('is_checkin')){ return Response::json(['status' => 'fail', 'message' => '系统未开启签到功能']); } @@ -88,8 +82,7 @@ class UserController extends Controller { return Response::json(['status' => 'fail', 'message' => '已经签到过了,明天再来吧']); } - $traffic = random_int((int) self::$sysConfig['min_rand_traffic'], - (int) self::$sysConfig['max_rand_traffic']) * MB; + $traffic = random_int((int) sysConfig('min_rand_traffic'), (int) sysConfig('max_rand_traffic')) * MB; if(!(new UserService())->incrementData($traffic)){ return Response::json(['status' => 'fail', 'message' => '签到失败,系统异常']); @@ -100,7 +93,7 @@ class UserController extends Controller { '[签到]'); // 多久后可以再签到 - $ttl = self::$sysConfig['traffic_limit_time']? self::$sysConfig['traffic_limit_time'] * Minute : Day; + $ttl = sysConfig('traffic_limit_time')? sysConfig('traffic_limit_time') * Minute : Day; Cache::put('userCheckIn_'.$user->id, '1', $ttl); return Response::json(['status' => 'success', 'message' => '签到成功,系统送您 '.flowAutoShow($traffic).'流量']); @@ -315,9 +308,9 @@ class UserController extends Controller { $content = "标题:【".$title."】
用户:".$user->email."
内容:".$content; // 发邮件通知管理员 - if(self::$sysConfig['webmaster_email']){ - $logId = Helpers::addNotificationLog($emailTitle, $content, 1, self::$sysConfig['webmaster_email']); - Mail::to(self::$sysConfig['webmaster_email'])->send(new newTicket($logId, $emailTitle, $content)); + if(sysConfig('webmaster_email')){ + $logId = Helpers::addNotificationLog($emailTitle, $content, 1, sysConfig('webmaster_email')); + Mail::to(sysConfig('webmaster_email'))->send(new newTicket($logId, $emailTitle, $content)); } PushNotification::send($emailTitle, $content); @@ -362,9 +355,9 @@ class UserController extends Controller { $content = "标题:【".$ticket->title."】
用户回复:".$content; // 发邮件通知管理员 - if(self::$sysConfig['webmaster_email']){ - $logId = Helpers::addNotificationLog($title, $content, 1, self::$sysConfig['webmaster_email']); - Mail::to(self::$sysConfig['webmaster_email'])->send(new replyTicket($logId, $title, $content)); + if(sysConfig('webmaster_email')){ + $logId = Helpers::addNotificationLog($title, $content, 1, sysConfig('webmaster_email')); + Mail::to(sysConfig('webmaster_email'))->send(new replyTicket($logId, $title, $content)); } PushNotification::send($title, $content); @@ -404,8 +397,8 @@ class UserController extends Controller { $view['num'] = Auth::getUser()->invite_num; // 还可以生成的邀请码数量 $view['inviteList'] = Invite::uid()->with(['invitee', 'inviter'])->paginate(10); // 邀请码列表 - $view['referral_traffic'] = flowAutoShow(self::$sysConfig['referral_traffic'] * MB); - $view['referral_percent'] = self::$sysConfig['referral_percent']; + $view['referral_traffic'] = flowAutoShow(sysConfig('referral_traffic') * MB); + $view['referral_percent'] = sysConfig('referral_percent'); return view('user.invite', $view); } @@ -422,7 +415,7 @@ class UserController extends Controller { $obj->invitee_id = 0; $obj->code = strtoupper(mb_substr(md5(microtime().Str::random()), 8, 12)); $obj->status = 0; - $obj->dateline = date('Y-m-d H:i:s', strtotime("+".self::$sysConfig['user_invite_days']." days")); + $obj->dateline = date('Y-m-d H:i:s', strtotime("+".sysConfig('user_invite_days')." days")); $obj->save(); User::uid()->decrement('invite_num', 1); @@ -512,16 +505,16 @@ class UserController extends Controller { //付费用户判断 $view['not_paying_user'] = Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist(); //客户端安装 - $view['Shadowrocket_install'] = 'itms-services://?action=download-manifest&url='.self::$sysConfig['website_url'].'/clients/Shadowrocket.plist'; - $view['Quantumult_install'] = 'itms-services://?action=download-manifest&url='.self::$sysConfig['website_url'].'/clients/Quantumult.plist'; + $view['Shadowrocket_install'] = 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Shadowrocket.plist'; + $view['Quantumult_install'] = 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Quantumult.plist'; // 订阅连接 $subscribe = UserSubscribe::whereUserId(Auth::id())->firstOrFail(); $view['subscribe_status'] = $subscribe->status; - $subscribe_link = (self::$sysConfig['subscribe_domain']?: self::$sysConfig['website_url']).'/s/'.$subscribe->code; + $subscribe_link = (sysConfig('subscribe_domain')?: sysConfig('website_url')).'/s/'.$subscribe->code; $view['link'] = $subscribe_link; $view['subscribe_link'] = 'sub://'.base64url_encode($subscribe_link); - $view['Shadowrocket_link'] = 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.(self::$sysConfig['website_name'].'-'.self::$sysConfig['website_url']); - $view['Shadowrocket_linkQrcode'] = 'sub://'.base64url_encode($subscribe_link).'#'.base64url_encode(self::$sysConfig['website_name']); + $view['Shadowrocket_link'] = 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.(sysConfig('website_name').'-'.sysConfig('website_url')); + $view['Shadowrocket_linkQrcode'] = 'sub://'.base64url_encode($subscribe_link).'#'.base64url_encode(sysConfig('website_name')); $view['Quantumult_linkOut'] = 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Pro.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'); $view['Quantumult_linkIn'] = 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/BacktoCN.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'); diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index e9cdb6fb..1f2e909e 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -3,8 +3,8 @@ namespace App\Http\Middleware; use App\Providers\RouteServiceProvider; -use Closure; use Auth; +use Closure; class RedirectIfAuthenticated { /** diff --git a/app/Observers/ConfigObserver.php b/app/Observers/ConfigObserver.php new file mode 100644 index 00000000..337fc999 --- /dev/null +++ b/app/Observers/ConfigObserver.php @@ -0,0 +1,13 @@ +put($config->name, $config->value?: 0); + } +} diff --git a/app/Observers/RuleGroupObserver.php b/app/Observers/RuleGroupObserver.php index b95a5e8a..b15f1ebb 100644 --- a/app/Observers/RuleGroupObserver.php +++ b/app/Observers/RuleGroupObserver.php @@ -17,8 +17,7 @@ class RuleGroupObserver { } }elseif(Arr::exists($changes, 'nodes')){ $nodes = Node::whereType(4) - ->whereIn('id', - array_diff($ruleGroup->nodes, $ruleGroup->getOriginal('nodes')?: [])) + ->whereIn('id', array_diff($ruleGroup->nodes, $ruleGroup->getOriginal('nodes')?: [])) ->get(); if($nodes){ reloadNode::dispatchNow($nodes); diff --git a/app/Observers/UserGroupObserver.php b/app/Observers/UserGroupObserver.php index 600c3215..e21e9d2b 100644 --- a/app/Observers/UserGroupObserver.php +++ b/app/Observers/UserGroupObserver.php @@ -19,8 +19,7 @@ class UserGroupObserver { $changes = $userGroup->getChanges(); if(Arr::exists($changes, 'nodes')){ $nodes = Node::whereType(4) - ->whereIn('id', - array_diff($userGroup->nodes, $userGroup->getOriginal('nodes')?: [])) + ->whereIn('id', array_diff($userGroup->nodes, $userGroup->getOriginal('nodes')?: [])) ->get(); if($nodes){ reloadNode::dispatchNow($nodes); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 54161649..576b4d05 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,11 +2,13 @@ namespace App\Providers; +use App\Models\Config; use App\Models\Node; use App\Models\Order; use App\Models\RuleGroup; use App\Models\User; use App\Models\UserGroup; +use App\Observers\ConfigObserver; use App\Observers\NodeObserver; use App\Observers\OrderObserver; use App\Observers\RuleGroupObserver; @@ -40,6 +42,7 @@ class AppServiceProvider extends ServiceProvider { URL::forceScheme('https'); } + Config::observe(ConfigObserver::class); Node::observe(NodeObserver::class); Order::observe(OrderObserver::class); RuleGroup::observe(RuleGroupObserver::class); diff --git a/app/View/Components/ChatUnit.php b/app/View/Components/ChatUnit.php index afdb7cd1..8d493674 100644 --- a/app/View/Components/ChatUnit.php +++ b/app/View/Components/ChatUnit.php @@ -12,7 +12,7 @@ class ChatUnit extends Component { $this->user = $user; $this->ticket = $ticket; } - + public function render() { return view('components.chat-unit'); } diff --git a/app/helpers.php b/app/helpers.php index f435682a..4674a328 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -172,6 +172,10 @@ if(!function_exists('filterEmoji')){ // 获取系统设置 if(!function_exists('sysConfig')){ function sysConfig($name) { - return Helpers::sysConfig()[$name]; + $ret = Cache::tags('sysConfig')->get($name); + if(is_null($ret)){ + return Helpers::cacheSysConfig($name); + } + return $ret; } } \ No newline at end of file diff --git a/composer.json b/composer.json index 93873e4c..8046d53a 100644 --- a/composer.json +++ b/composer.json @@ -8,31 +8,31 @@ ], "license": "MIT", "require": { - "php": "^7.2.5", - "fideloper/proxy": "^4.2", - "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^6.3", - "ipip/db": "^1.0", - "itbdw/ip-database": "^2.0", - "jenssegers/agent": "^2.6", - "laravel/framework": "^7.24", - "laravel/tinker": "^2.0", - "mews/captcha": "^3.1", - "mews/purifier": "^3.2", - "openlss/lib-array2xml": "^1.0", - "overtrue/laravel-lang": "^4.0", - "phpoffice/phpspreadsheet": "^1.14", - "rap2hpoutre/laravel-log-viewer": "^1.6", - "riverslei/payment": "^5.1", - "simplesoftwareio/simple-qrcode": "^3.0", - "spatie/laravel-permission": "^3.16", - "srmklive/paypal": "^1.7", - "xhat/payjs": "^1.4", - "zbrettonye/geetest": "^1.1", - "zbrettonye/hcaptcha": "^1.0", - "zbrettonye/no-captcha": "^1.0", - "ext-json": "*", - "ext-openssl": "*" + "php": "^7.2.5", + "ext-json": "*", + "ext-openssl": "*", + "fideloper/proxy": "^4.2", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^6.3", + "ipip/db": "^1.0", + "itbdw/ip-database": "^2.0", + "jenssegers/agent": "^2.6", + "laravel/framework": "^7.24", + "laravel/tinker": "^2.0", + "mews/captcha": "^3.1", + "mews/purifier": "^3.2", + "openlss/lib-array2xml": "^1.0", + "overtrue/laravel-lang": "^4.0", + "phpoffice/phpspreadsheet": "^1.14", + "rap2hpoutre/laravel-log-viewer": "^1.6", + "riverslei/payment": "^5.1", + "simplesoftwareio/simple-qrcode": "^3.0", + "spatie/laravel-permission": "^3.16", + "srmklive/paypal": "^1.7", + "xhat/payjs": "^1.4", + "zbrettonye/geetest": "^1.1", + "zbrettonye/hcaptcha": "^1.0", + "zbrettonye/no-captcha": "^1.0" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.4", diff --git a/composer.lock b/composer.lock index f183333e..02c56e90 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7763dce1918821fed204495e2f09880e", + "content-hash": "9cc259d29a4a2882654c83d01a78b8eb", "packages": [ { "name": "asm89/stack-cors", @@ -2250,16 +2250,16 @@ }, { "name": "nesbot/carbon", - "version": "2.39.0", + "version": "2.39.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0a41ea7f7fedacf307b7a339800e10356a042918" + "reference": "7af467873250583cc967a59ee9df29fabab193c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0a41ea7f7fedacf307b7a339800e10356a042918", - "reference": "0a41ea7f7fedacf307b7a339800e10356a042918", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7af467873250583cc967a59ee9df29fabab193c1", + "reference": "7af467873250583cc967a59ee9df29fabab193c1", "shasum": "" }, "require": { @@ -2272,7 +2272,7 @@ "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.8", + "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.35", "phpunit/phpunit": "^7.5 || ^8.0", @@ -2335,7 +2335,7 @@ "type": "tidelift" } ], - "time": "2020-08-24T12:35:58+00:00" + "time": "2020-09-04T13:11:37+00:00" }, { "name": "nikic/php-parser", @@ -9575,7 +9575,8 @@ "prefer-lowest": false, "platform": { "php": "^7.2.5", - "ext-json": "*" + "ext-json": "*", + "ext-openssl": "*" }, "platform-dev": [], "plugin-api-version": "1.1.0" diff --git a/database/migrations/2020_08_21_145711_create_config_table.php b/database/migrations/2020_08_21_145711_create_config_table.php index fcf8a5d9..1aa5bb35 100644 --- a/database/migrations/2020_08_21_145711_create_config_table.php +++ b/database/migrations/2020_08_21_145711_create_config_table.php @@ -12,7 +12,7 @@ class CreateConfigTable extends Migration { */ public function up() { Schema::create('config', function(Blueprint $table) { - $table->string('name')->primary()->comment('配置名'); + $table->string('name')->primary()->unique()->index()->comment('配置名'); $table->text('value')->nullable()->comment('配置值'); }); } diff --git a/database/migrations/2020_08_21_150711_preset_data.php b/database/migrations/2020_08_21_150711_preset_data.php index 011e5e45..8bc897ed 100644 --- a/database/migrations/2020_08_21_150711_preset_data.php +++ b/database/migrations/2020_08_21_150711_preset_data.php @@ -195,43 +195,50 @@ class PresetData extends Migration { Config::insert(['name' => $config]); } - Config::whereName('invite_num')->update(['value' => 3]); - Config::whereName('is_register')->update(['value' => 1]); - Config::whereName('is_invite_register')->update(['value' => 2]); - Config::whereName('website_name')->update(['value' => 'ProxyPanel']); - Config::whereName('is_reset_password')->update(['value' => 1]); - Config::whereName('reset_password_times')->update(['value' => 3]); - Config::whereName('website_url')->update(['value' => 'https://demo.proxypanel.ml']); - Config::whereName('active_times')->update(['value' => 3]); - Config::whereName('is_checkin')->update(['value' => 1]); - Config::whereName('min_rand_traffic')->update(['value' => 10]); - Config::whereName('max_rand_traffic')->update(['value' => 500]); - Config::whereName('traffic_limit_time')->update(['value' => 1440]); - Config::whereName('referral_traffic')->update(['value' => 1024]); - Config::whereName('referral_percent')->update(['value' => 0.2]); - Config::whereName('referral_money')->update(['value' => 100]); - Config::whereName('referral_status')->update(['value' => 1]); - Config::whereName('default_traffic')->update(['value' => 1024]); - Config::whereName('traffic_warning_percent')->update(['value' => 80]); - Config::whereName('expire_days')->update(['value' => 15]); - Config::whereName('reset_traffic')->update(['value' => 1]); - Config::whereName('default_days')->update(['value' => 7]); - Config::whereName('subscribe_max')->update(['value' => 3]); - Config::whereName('min_port')->update(['value' => 10000]); - Config::whereName('max_port')->update(['value' => 65535]); - Config::whereName('is_traffic_ban')->update(['value' => 1]); - Config::whereName('traffic_ban_value')->update(['value' => 10]); - Config::whereName('traffic_ban_time')->update(['value' => 60]); - Config::whereName('is_clear_log')->update(['value' => 1]); - Config::whereName('is_subscribe_ban')->update(['value' => 1]); - Config::whereName('subscribe_ban_times')->update(['value' => 20]); - Config::whereName('auto_release_port')->update(['value' => 1]); - Config::whereName('register_ip_limit')->update(['value' => 5]); - Config::whereName('detection_check_times')->update(['value' => 3]); - Config::whereName('alipay_transport')->update(['value' => 'http']); - Config::whereName('alipay_currency')->update(['value' => 'USD']); - Config::whereName('user_invite_days')->update(['value' => 7]); - Config::whereName('admin_invite_days')->update(['value' => 7]); + $presetDates = [ + 'invite_num' => 3, + 'is_register' => 1, + 'is_invite_register' => 2, + 'website_name' => 'ProxyPanel', + 'is_reset_password' => 1, + 'reset_password_times' => 3, + 'website_url' => 'https://demo.proxypanel.ml', + 'active_times' => 3, + 'is_checkin' => 1, + 'min_rand_traffic' => 10, + 'max_rand_traffic' => 500, + 'traffic_limit_time' => 1440, + 'referral_traffic' => 1024, + 'referral_percent' => 0.2, + 'referral_money' => 100, + 'referral_status' => 1, + 'default_traffic' => 1024, + 'traffic_warning_percent' => 80, + 'expire_days' => 15, + 'reset_traffic' => 1, + 'default_days' => 7, + 'subscribe_max' => 3, + 'min_port' => 10000, + 'max_port' => 65535, + 'is_traffic_ban' => 1, + 'traffic_ban_value' => 10, + 'traffic_ban_time' => 60, + 'is_clear_log' => 1, + 'is_subscribe_ban' => 1, + 'subscribe_ban_times' => 20, + 'auto_release_port' => 1, + 'register_ip_limit' => 5, + 'detection_check_times' => 3, + 'alipay_transport' => 'http', + 'alipay_currency' => 'USD', + 'user_invite_days' => 7, + 'admin_invite_days' => 7, + ]; + + foreach($presetDates as $key => $value){ + Config::find($key)->update(['value' => $value]); + } + // 节点用标签 $labelList = [ diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php index 358cfc88..abde8d19 100644 --- a/tests/Unit/ExampleTest.php +++ b/tests/Unit/ExampleTest.php @@ -3,16 +3,29 @@ namespace Tests\Unit; use PHPUnit\Framework\TestCase; +use Redis; -class ExampleTest extends TestCase -{ - /** - * A basic test example. - * - * @return void - */ - public function testBasicTest() - { - $this->assertTrue(true); - } +class ExampleTest extends TestCase { + /** + * A basic test example. + * + * @return void + */ + public function testBasicTest() { + try{ + //create redis instance + $redis = new Redis(); + //connect with server and port + $redis->connect('localhost', 6379); + //set value + $redis->set('website', 'www.phpflow.com'); + //get value + $website = $redis->get('website'); + //print www.phpflow.com + echo $website; + + }catch(Exception $ex){ + echo $ex->getMessage(); + } + } }