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