瀏覽代碼

Updated Framework to laravel 7

兔姬桑 4 年之前
父節點
當前提交
a66622ac93
共有 100 個文件被更改,包括 758 次插入2768 次删除
  1. 1 2
      .editorconfig
  2. 2 2
      .env.example
  3. 4 4
      .gitattributes
  4. 4 4
      app/Console/Commands/updateTextToJson.php
  5. 1 1
      app/Console/Commands/updateUserLevel.php
  6. 19 19
      app/Exceptions/Handler.php
  7. 6 6
      app/Http/Controllers/Admin/AffiliateController.php
  8. 3 3
      app/Http/Controllers/Admin/CouponController.php
  9. 2 2
      app/Http/Controllers/Admin/EmailFilterController.php
  10. 4 4
      app/Http/Controllers/Admin/MarketingController.php
  11. 4 4
      app/Http/Controllers/Admin/RuleController.php
  12. 8 8
      app/Http/Controllers/Admin/RuleGroupController.php
  13. 6 6
      app/Http/Controllers/Admin/ShopController.php
  14. 4 4
      app/Http/Controllers/Admin/SubscribeController.php
  15. 3 3
      app/Http/Controllers/Admin/TicketController.php
  16. 6 6
      app/Http/Controllers/Admin/ToolsController.php
  17. 6 6
      app/Http/Controllers/Admin/UserGroupController.php
  18. 38 41
      app/Http/Controllers/AdminController.php
  19. 12 12
      app/Http/Controllers/AuthController.php
  20. 13 13
      app/Http/Controllers/NodeController.php
  21. 4 4
      app/Http/Controllers/PaymentController.php
  22. 3 3
      app/Http/Controllers/User/AffiliateController.php
  23. 21 21
      app/Http/Controllers/UserController.php
  24. 3 1
      app/Http/Kernel.php
  25. 1 2
      app/Http/Middleware/Authenticate.php
  26. 6 7
      app/Http/Middleware/RedirectIfAuthenticated.php
  27. 4 1
      app/Http/Middleware/TrimStrings.php
  28. 1 1
      app/Http/Middleware/TrustProxies.php
  29. 5 4
      app/Http/Middleware/isForbidden.php
  30. 3 2
      app/Http/Middleware/isSecurity.php
  31. 1 1
      app/Observers/RuleGroupObserver.php
  32. 1 1
      app/Observers/UserGroupObserver.php
  33. 6 0
      app/Providers/RouteServiceProvider.php
  34. 28 40
      composer.json
  35. 317 447
      composer.lock
  36. 4 4
      config/HCaptcha.php
  37. 1 1
      config/NoCaptcha.php
  38. 6 20
      config/app.php
  39. 14 0
      config/auth.php
  40. 1 0
      config/cache.php
  41. 16 14
      config/captcha.php
  42. 34 0
      config/cors.php
  43. 6 6
      config/database.php
  44. 0 202
      config/debugbar.php
  45. 17 1
      config/filesystems.php
  46. 9 98
      config/geetest.php
  47. 0 198
      config/ide-helper.php
  48. 0 20
      config/image.php
  49. 10 0
      config/logging.php
  50. 52 78
      config/mail.php
  51. 0 30
      config/paypal.php
  52. 0 129
      config/permission.php
  53. 0 105
      config/purifier.php
  54. 2 0
      config/queue.php
  55. 1 5
      config/services.php
  56. 7 5
      config/session.php
  57. 0 33
      config/tinker.php
  58. 0 50
      config/trustedproxy.php
  59. 2 1
      database/factories/UserFactory.php
  60. 1 1
      database/seeds/DatabaseSeeder.php
  61. 0 7
      fix_git.sh
  62. 6 10
      package.json
  63. 7 8
      phpunit.xml
  64. 1 1
      public/.htaccess
  65. 0 3
      public/nginx.htaccess
  66. 1 1
      queue.sh
  67. 0 31
      resources/js/app.js
  68. 1 14
      resources/js/bootstrap.js
  69. 1 1
      resources/views/auth/error.blade.php
  70. 4 5
      resources/views/auth/login.blade.php
  71. 0 74
      resources/views/vendor/geetest/geetest.blade.php
  72. 0 223
      resources/views/vendor/laravel-log-viewer/log.blade.php
  73. 0 20
      resources/views/vendor/mail/html/button.blade.php
  74. 0 11
      resources/views/vendor/mail/html/footer.blade.php
  75. 0 7
      resources/views/vendor/mail/html/header.blade.php
  76. 0 55
      resources/views/vendor/mail/html/layout.blade.php
  77. 0 27
      resources/views/vendor/mail/html/message.blade.php
  78. 0 13
      resources/views/vendor/mail/html/panel.blade.php
  79. 0 7
      resources/views/vendor/mail/html/promotion.blade.php
  80. 0 13
      resources/views/vendor/mail/html/promotion/button.blade.php
  81. 0 7
      resources/views/vendor/mail/html/subcopy.blade.php
  82. 0 3
      resources/views/vendor/mail/html/table.blade.php
  83. 0 285
      resources/views/vendor/mail/html/themes/default.css
  84. 0 1
      resources/views/vendor/mail/markdown/button.blade.php
  85. 0 1
      resources/views/vendor/mail/markdown/footer.blade.php
  86. 0 1
      resources/views/vendor/mail/markdown/header.blade.php
  87. 0 9
      resources/views/vendor/mail/markdown/layout.blade.php
  88. 0 27
      resources/views/vendor/mail/markdown/message.blade.php
  89. 0 1
      resources/views/vendor/mail/markdown/panel.blade.php
  90. 0 1
      resources/views/vendor/mail/markdown/promotion.blade.php
  91. 0 1
      resources/views/vendor/mail/markdown/promotion/button.blade.php
  92. 0 1
      resources/views/vendor/mail/markdown/subcopy.blade.php
  93. 0 1
      resources/views/vendor/mail/markdown/table.blade.php
  94. 0 58
      resources/views/vendor/notifications/email.blade.php
  95. 0 38
      resources/views/vendor/pagination/bootstrap-4.blade.php
  96. 0 38
      resources/views/vendor/pagination/default.blade.php
  97. 0 40
      resources/views/vendor/pagination/semantic-ui.blade.php
  98. 0 19
      resources/views/vendor/pagination/simple-bootstrap-4.blade.php
  99. 0 17
      resources/views/vendor/pagination/simple-default.blade.php
  100. 4 2
      routes/channels.php

+ 1 - 2
.editorconfig

@@ -11,6 +11,5 @@ trim_trailing_whitespace = true
 [*.md]
 trim_trailing_whitespace = false
 
-[*.yml]
-indent_style = space
+[*.{yml,yaml}]
 indent_size = 2

+ 2 - 2
.env.example

@@ -1,8 +1,8 @@
-APP_DEMO=false
 APP_NAME=ProxyPanel
 APP_ENV=local
 APP_KEY=
 APP_DEBUG=false
+APP_DEMO=false
 APP_URL=http://localhost
 APP_TIMEZONE=Asia/Shanghai
 APP_LOCALE=zh-CN
@@ -30,7 +30,7 @@ REDIS_HOST=127.0.0.1
 REDIS_PASSWORD=null
 REDIS_PORT=6379
 
-MAIL_DRIVER=smtp #或使用 mailgun
+MAIL_MAILER=smtp #或使用 mailgun
 # SMTP设置
 MAIL_HOST=smtp.exmail.qq.com
 MAIL_PORT=465

+ 4 - 4
.gitattributes

@@ -1,5 +1,5 @@
-*.js linguist-language=php
-*.css linguist-language=php
-*.scss linguist-language=php
-*.html linguist-language=php
+* text=auto
+*.css linguist-vendored
+*.scss linguist-vendored
+*.js linguist-vendored
 CHANGELOG.md export-ignore

+ 4 - 4
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->getOriginal('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->getOriginal('nodes'));
+			$userGroup->nodes = $this->convertToJson($userGroup->getRawOriginal ('nodes'));
 			$userGroup->save();
 		}
 		Log::info('转换用户分组表完成');
 		foreach(RuleGroup::all() as $ruleGroup){
-			$ruleGroup->rules = $this->convertToJson($ruleGroup->getOriginal('rules'));
-			$ruleGroup->nodes = $this->convertToJson($ruleGroup->getOriginal('nodes'));
+			$ruleGroup->rules = $this->convertToJson($ruleGroup->getRawOriginal ('rules'));
+			$ruleGroup->nodes = $this->convertToJson($ruleGroup->getRawOriginal ('nodes'));
 			$ruleGroup->save();
 		}
 		Log::info('转换审核规则表完成');

+ 1 - 1
app/Console/Commands/updateUserLevel.php

@@ -20,7 +20,7 @@ class updateUserLevel extends Command {
 		// 获取商品列表,取新等级
 		$goodsLevel = Goods::type(2)->where('level', '<>', 0)->pluck('id')->toArray();
 		// 取生效的套餐
-		$orderList = Order::with('goods')->whereIn('goods_id', $goodsLevel)->active()->get();
+		$orderList = Order::active()->with('goods')->whereIn('goods_id', $goodsLevel)->get();
 		foreach($orderList as $order){
 			$ret = $order->user->update(['level' => $order->goods->level]);
 

+ 19 - 19
app/Exceptions/Handler.php

@@ -3,15 +3,14 @@
 namespace App\Exceptions;
 
 use ErrorException;
-use Exception;
 use Illuminate\Auth\AuthenticationException;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
-use Illuminate\Http\Request;
 use Illuminate\Session\TokenMismatchException;
 use Log;
 use ReflectionException;
 use Response;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Throwable;
 
 class Handler extends ExceptionHandler {
 	/**
@@ -34,12 +33,12 @@ class Handler extends ExceptionHandler {
 	/**
 	 * Report or log an exception.
 	 *
-	 * @param  Exception  $exception
+	 * @param  \Throwable  $exception
+	 * @return void
 	 *
-	 * @return mixed|void
-	 * @throws Exception
+	 * @throws \Exception
 	 */
-	public function report(Exception $exception) {
+	public function report(Throwable $exception) {
 		// 记录异常来源
 		Log::info('异常来源:'.get_class($exception));
 
@@ -55,12 +54,13 @@ class Handler extends ExceptionHandler {
 	/**
 	 * Render an exception into an HTTP response.
 	 *
-	 * @param  Request    $request
-	 * @param  Exception  $exception
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Throwable                $exception
+	 * @return \Symfony\Component\HttpFoundation\Response
 	 *
-	 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
+	 * @throws \Throwable
 	 */
-	public function render($request, Exception $exception) {
+	public function render($request, Throwable $exception) {
 		// 调试模式下直接返回错误信息
 		if(config('app.debug')){
 			return parent::render($request, $exception);
@@ -74,7 +74,7 @@ class Handler extends ExceptionHandler {
 				return Response::json(['status' => 'fail', 'message' => trans('error.MissingPage')]);
 			}
 
-			return Response::view('auth.error', ['message' => trans('error.MissingPage')]);
+			return Response::view('auth.error', ['message' => trans('error.MissingPage')], 404);
 		}
 
 		// 捕获身份校验异常
@@ -83,7 +83,7 @@ class Handler extends ExceptionHandler {
 				return Response::json(['status' => 'fail', 'message' => trans('error.Unauthorized')]);
 			}
 
-			return Response::view('auth.error', ['message' => trans('error.Unauthorized')]);
+			return Response::view('auth.error', ['message' => trans('error.Unauthorized')], 401);
 		}
 
 		// 捕获CSRF异常
@@ -95,9 +95,9 @@ class Handler extends ExceptionHandler {
 				]);
 			}
 
-			return Response::view('auth.error', [
-				'message' => trans('error.RefreshPage').'<a href="/login" target="_blank">'.trans('error.Refresh').'</a>'
-			]);
+			return Response::view('auth.error',
+				['message' => trans('error.RefreshPage').'<a href="/login" target="_blank">'.trans('error.Refresh').'</a>'],
+				419);
 		}
 
 		// 捕获反射异常
@@ -106,7 +106,7 @@ class Handler extends ExceptionHandler {
 				return Response::json(['status' => 'fail', 'message' => trans('error.SystemError')]);
 			}
 
-			return Response::view('auth.error', ['message' => trans('error.SystemError')]);
+			return Response::view('auth.error', ['message' => trans('error.SystemError')], 500);
 		}
 
 		// 捕获系统错误异常
@@ -118,9 +118,9 @@ class Handler extends ExceptionHandler {
 				]);
 			}
 
-			return Response::view('auth.error', [
-				'message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="/logs" target="_blank">'.trans('error.log').'</a>'
-			]);
+			return Response::view('auth.error',
+				['message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="/logs" target="_blank">'.trans('error.log').'</a>'],
+				500);
 		}
 
 		return parent::render($request, $exception);

+ 6 - 6
app/Http/Controllers/Admin/AffiliateController.php

@@ -19,7 +19,7 @@ use Response;
 class AffiliateController extends Controller {
 
 	// 提现申请列表
-	public function affiliateList(Request $request): \Illuminate\Http\Response {
+	public function affiliateList(Request $request) {
 		$email = $request->input('email');
 		$status = $request->input('status');
 
@@ -36,11 +36,11 @@ class AffiliateController extends Controller {
 
 		$view['applyList'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.affiliate.affiliateList', $view);
+		return view('admin.affiliate.affiliateList', $view);
 	}
 
 	// 提现申请详情
-	public function affiliateDetail(Request $request): \Illuminate\Http\Response {
+	public function affiliateDetail(Request $request) {
 		$view['basic'] = ReferralApply::with('user:id,email')->find($request->input('id'));
 		$view['commissions'] = [];
 		if($view['basic'] && $view['basic']->link_logs){
@@ -50,7 +50,7 @@ class AffiliateController extends Controller {
 			                                  ->appends($request->except('page'));
 		}
 
-		return Response::view('admin.affiliate.affiliateDetail', $view);
+		return view('admin.affiliate.affiliateDetail', $view);
 	}
 
 	// 设置提现申请状态
@@ -73,7 +73,7 @@ class AffiliateController extends Controller {
 	}
 
 	// 用户返利流水记录
-	public function userRebateList(Request $request): \Illuminate\Http\Response {
+	public function userRebateList(Request $request) {
 		$invitee_email = $request->input('invitee_email');
 		$inviter_email = $request->input('inviter_email');
 		$status = $request->input('status');
@@ -98,6 +98,6 @@ class AffiliateController extends Controller {
 
 		$view['list'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.affiliate.userRebateList', $view);
+		return view('admin.affiliate.userRebateList', $view);
 	}
 }

+ 3 - 3
app/Http/Controllers/Admin/CouponController.php

@@ -25,7 +25,7 @@ use Validator;
  */
 class CouponController extends Controller {
 	// 优惠券列表
-	public function couponList(Request $request): \Illuminate\Http\Response {
+	public function couponList(Request $request) {
 		$sn = $request->input('sn');
 		$type = $request->input('type');
 		$status = $request->input('status');
@@ -46,7 +46,7 @@ class CouponController extends Controller {
 
 		$view['couponList'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.coupon.couponList', $view);
+		return view('admin.coupon.couponList', $view);
 	}
 
 	// 添加优惠券
@@ -121,7 +121,7 @@ class CouponController extends Controller {
 				return Redirect::back()->withInput()->withErrors('生成失败:'.$e->getMessage());
 			}
 		}else{
-			return Response::view('admin.coupon.addCoupon');
+			return view('admin.coupon.addCoupon');
 		}
 	}
 

+ 2 - 2
app/Http/Controllers/Admin/EmailFilterController.php

@@ -18,10 +18,10 @@ use Validator;
  */
 class EmailFilterController extends Controller {
 	// 邮箱过滤列表
-	public function filterList(): \Illuminate\Http\Response {
+	public function filterList() {
 		$view['list'] = EmailFilter::orderByDesc('id')->paginate(15);
 
-		return Response::view('admin.config.emailFilter', $view);
+		return view('admin.config.emailFilter', $view);
 	}
 
 	// 添加邮箱后缀

+ 4 - 4
app/Http/Controllers/Admin/MarketingController.php

@@ -22,7 +22,7 @@ use RuntimeException;
  */
 class MarketingController extends Controller {
 	// 邮件群发消息列表
-	public function emailList(Request $request): \Illuminate\Http\Response {
+	public function emailList(Request $request) {
 		$status = $request->input('status');
 
 		$query = Marketing::whereType(1);
@@ -33,11 +33,11 @@ class MarketingController extends Controller {
 
 		$view['list'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.marketing.emailList', $view);
+		return view('admin.marketing.emailList', $view);
 	}
 
 	// 消息通道群发列表
-	public function pushList(Request $request): \Illuminate\Http\Response {
+	public function pushList(Request $request) {
 		$status = $request->input('status');
 
 		$query = Marketing::whereType(2);
@@ -48,7 +48,7 @@ class MarketingController extends Controller {
 
 		$view['list'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.marketing.pushList', $view);
+		return view('admin.marketing.pushList', $view);
 	}
 
 	// 添加推送消息

+ 4 - 4
app/Http/Controllers/Admin/RuleController.php

@@ -15,7 +15,7 @@ use Validator;
 
 class RuleController extends Controller {
 	// 审计规则列表
-	public function index(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request) {
 		$type = $request->input('type');
 		$query = Rule::query();
 
@@ -24,7 +24,7 @@ class RuleController extends Controller {
 		}
 
 		$view['rules'] = $query->paginate(15)->appends($request->except('page'));
-		return Response::view('admin.rule.index', $view);
+		return view('admin.rule.index', $view);
 	}
 
 	// 添加审计规则
@@ -82,7 +82,7 @@ class RuleController extends Controller {
 	}
 
 	// 用户触发审计规则日志
-	public function ruleLogList(Request $request): \Illuminate\Http\Response {
+	public function ruleLogList(Request $request) {
 		$uid = $request->input('uid');
 		$email = $request->input('email');
 		$nodeId = $request->input('node_id');
@@ -107,7 +107,7 @@ class RuleController extends Controller {
 		$view['nodeList'] = Node::all();
 		$view['ruleList'] = Rule::all();
 		$view['ruleLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));
-		return Response::view('admin.rule.log', $view);
+		return view('admin.rule.log', $view);
 	}
 
 	// 清除所有审计触发日志

+ 8 - 8
app/Http/Controllers/Admin/RuleGroupController.php

@@ -17,17 +17,17 @@ use Validator;
 
 class RuleGroupController extends Controller {
 	// 审计规则分组列表
-	public function index(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request) {
 		$view['ruleGroupList'] = RuleGroup::paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.rule.group.index', $view);
+		return view('admin.rule.group.index', $view);
 	}
 
 	// 添加审计规则分组页面
-	public function create(): \Illuminate\Http\Response {
+	public function create() {
 		$view['ruleList'] = Rule::all();
 
-		return Response::view('admin.rule.group.info', $view);
+		return view('admin.rule.group.info', $view);
 	}
 
 	// 添加审计规则分组
@@ -55,11 +55,11 @@ class RuleGroupController extends Controller {
 	}
 
 	// 编辑审计规则分组页面
-	public function edit($id): \Illuminate\Http\Response {
+	public function edit($id) {
 		$view['ruleGroup'] = RuleGroup::findOrFail($id);
 		$view['ruleList'] = Rule::all();
 
-		return Response::view('admin.rule.group.info', $view);
+		return view('admin.rule.group.info', $view);
 	}
 
 	// 编辑审计规则分组
@@ -100,11 +100,11 @@ class RuleGroupController extends Controller {
 	}
 
 	// 规则分组关联节点
-	public function assignNode($id): \Illuminate\Http\Response {
+	public function assignNode($id) {
 		$view['ruleGroup'] = RuleGroup::find($id);
 		$view['nodeList'] = Node::all();
 
-		return Response::view('admin.rule.group.assign', $view);
+		return view('admin.rule.group.assign', $view);
 	}
 
 	public function assign(Request $request, $id) {

+ 6 - 6
app/Http/Controllers/Admin/ShopController.php

@@ -25,7 +25,7 @@ use Validator;
  */
 class ShopController extends Controller {
 	// 商品列表
-	public function index(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request) {
 		$type = $request->input('type');
 		$status = $request->input('status');
 
@@ -41,15 +41,15 @@ class ShopController extends Controller {
 
 		$view['goodsList'] = $query->orderByDesc('status')->paginate(10)->appends($request->except('page'));
 
-		return Response::view('admin.shop.index', $view);
+		return view('admin.shop.index', $view);
 	}
 
 	// 添加商品页面
-	public function create(): \Illuminate\Http\Response {
+	public function create() {
 		$view['goods'] = null;
 		$view['levelList'] = Level::orderBy('level')->get();
 
-		return Response::view('admin.shop.info', $view);
+		return view('admin.shop.info', $view);
 	}
 
 	// 添加商品
@@ -115,11 +115,11 @@ class ShopController extends Controller {
 	}
 
 	// 编辑商品页面
-	public function edit($id): \Illuminate\Http\Response {
+	public function edit($id) {
 		$view['goods'] = Goods::find($id);
 		$view['levelList'] = Level::orderBy('level')->get();
 
-		return Response::view('admin.shop.info', $view);
+		return view('admin.shop.info', $view);
 	}
 
 	// 编辑商品

+ 4 - 4
app/Http/Controllers/Admin/SubscribeController.php

@@ -18,7 +18,7 @@ use Response;
  */
 class SubscribeController extends Controller {
 	// 订阅码列表
-	public function subscribeList(Request $request): \Illuminate\Http\Response {
+	public function subscribeList(Request $request) {
 		$user_id = $request->input('user_id');
 		$email = $request->input('email');
 		$status = $request->input('status');
@@ -41,11 +41,11 @@ class SubscribeController extends Controller {
 
 		$view['subscribeList'] = $query->latest()->paginate(20)->appends($request->except('page'));
 
-		return Response::view('admin.subscribe.subscribeList', $view);
+		return view('admin.subscribe.subscribeList', $view);
 	}
 
 	//订阅记录
-	public function subscribeLog(Request $request): \Illuminate\Http\Response {
+	public function subscribeLog(Request $request) {
 		$id = $request->input('id');
 		$query = UserSubscribeLog::with('user:email');
 
@@ -55,7 +55,7 @@ class SubscribeController extends Controller {
 
 		$view['subscribeLog'] = $query->latest()->paginate(20)->appends($request->except('page'));
 
-		return Response::view('admin.subscribe.subscribeLog', $view);
+		return view('admin.subscribe.subscribeLog', $view);
 	}
 
 	// 设置用户的订阅的状态

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

@@ -25,7 +25,7 @@ use Response;
  */
 class TicketController extends Controller {
 	// 工单列表
-	public function ticketList(Request $request): \Illuminate\Http\Response {
+	public function ticketList(Request $request) {
 		$email = $request->input('email');
 
 		$query = Ticket::whereIn('admin_id', [0, Auth::id()]);
@@ -38,7 +38,7 @@ class TicketController extends Controller {
 
 		$view['ticketList'] = $query->latest()->paginate(10)->appends($request->except('page'));
 
-		return Response::view('admin.ticket.ticketList', $view);
+		return view('admin.ticket.ticketList', $view);
 	}
 
 	// 创建工单
@@ -122,7 +122,7 @@ class TicketController extends Controller {
 		$view['ticket'] = Ticket::find($id);
 		$view['replyList'] = TicketReply::whereTicketId($id)->oldest()->get();
 
-		return Response::view('admin.ticket.replyTicket', $view);
+		return view('admin.ticket.replyTicket', $view);
 	}
 
 	// 关闭工单

+ 6 - 6
app/Http/Controllers/Admin/ToolsController.php

@@ -44,7 +44,7 @@ class ToolsController extends Controller {
 
 			return Response::json(['status' => 'success', 'data' => $txt, 'message' => '反解析成功']);
 		}
-		return Response::view('admin.tools.decompile');
+		return view('admin.tools.decompile');
 	}
 
 	// 格式转换(SS转SSR)
@@ -100,7 +100,7 @@ class ToolsController extends Controller {
 		$view['protocolList'] = Helpers::protocolList();
 		$view['obfsList'] = Helpers::obfsList();
 
-		return Response::view('admin.tools.convert', $view);
+		return view('admin.tools.convert', $view);
 	}
 
 	// 下载转换好的JSON文件
@@ -195,16 +195,16 @@ class ToolsController extends Controller {
 			return Redirect::back();
 		}
 
-		return Response::view('admin.tools.import');
+		return view('admin.tools.import');
 	}
 
 	// 日志分析
-	public function analysis(): \Illuminate\Http\Response {
+	public function analysis() {
 		$file = storage_path('app/ssserver.log');
 		if(!file_exists($file)){
 			Session::flash('analysisErrorMsg', $file.' 不存在,请先创建文件');
 
-			return Response::view('admin.tools.analysis');
+			return view('admin.tools.analysis');
 		}
 
 		$logs = $this->tail($file, 10000);
@@ -232,6 +232,6 @@ class ToolsController extends Controller {
 			$view['urlList'] = array_unique($url);
 		}
 
-		return Response::view('admin.tools.analysis', $view);
+		return view('admin.tools.analysis', $view);
 	}
 }

+ 6 - 6
app/Http/Controllers/Admin/UserGroupController.php

@@ -15,15 +15,15 @@ use Response;
 use Validator;
 
 class UserGroupController extends Controller {
-	public function index(Request $request): \Illuminate\Http\Response {
+	public function index(Request $request) {
 		$view['list'] = UserGroup::paginate(15)->appends($request->except('page'));
-		return Response::view('admin.user.group.index', $view);
+		return view('admin.user.group.index', $view);
 	}
 
 	// 添加用户分组页面
-	public function create(): \Illuminate\Http\Response {
+	public function create() {
 		$view['nodeList'] = Node::whereStatus(1)->get();
-		return Response::view('admin.user.group.info', $view);
+		return view('admin.user.group.info', $view);
 	}
 
 	// 添加用户分组
@@ -49,11 +49,11 @@ class UserGroupController extends Controller {
 	}
 
 	// 编辑用户分组页面
-	public function edit($id): \Illuminate\Http\Response {
+	public function edit($id) {
 		$view['userGroup'] = UserGroup::findOrFail($id);
 		$view['nodeList'] = Node::whereStatus(1)->get();
 
-		return Response::view('admin.user.group.info', $view);
+		return view('admin.user.group.info', $view);
 	}
 
 	// 编辑用户分组

+ 38 - 41
app/Http/Controllers/AdminController.php

@@ -59,7 +59,7 @@ class AdminController extends Controller {
 		self::$sysConfig = Helpers::sysConfig();
 	}
 
-	public function index(): \Illuminate\Http\Response {
+	public function index() {
 		$past = strtotime("-".self::$sysConfig['expire_days']." days");
 
 		$view['expireDays'] = self::$sysConfig['expire_days'];
@@ -92,7 +92,7 @@ class AdminController extends Controller {
 		// 今日
 		$view['todayRegister'] = User::whereDate('created_at', date('Y-m-d'))->count();
 
-		return Response::view('admin.index', $view);
+		return view('admin.index', $view);
 	}
 
 	// 1小时内流量异常用户
@@ -113,7 +113,7 @@ class AdminController extends Controller {
 	}
 
 	// 用户列表
-	public function userList(Request $request): \Illuminate\Http\Response {
+	public function userList(Request $request) {
 		$id = $request->input('id');
 		$email = $request->input('email');
 		$wechat = $request->input('wechat');
@@ -205,7 +205,7 @@ class AdminController extends Controller {
 
 		$view['userList'] = $userList;
 
-		return Response::view('admin.user.userList', $view);
+		return view('admin.user.userList', $view);
 	}
 
 	// 添加账号
@@ -261,7 +261,7 @@ class AdminController extends Controller {
 		$view['levelList'] = Level::orderBy('level')->get();
 		$view['groupList'] = UserGroup::orderBy('id')->get();
 
-		return Response::view('admin.user.userInfo', $view);
+		return view('admin.user.userInfo', $view);
 	}
 
 	// 生成端口
@@ -414,10 +414,10 @@ class AdminController extends Controller {
 	}
 
 	// 文章列表
-	public function articleList(Request $request): \Illuminate\Http\Response {
+	public function articleList(Request $request) {
 		$view['list'] = Article::orderByDesc('sort')->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.article.articleList', $view);
+		return view('admin.article.articleList', $view);
 	}
 
 	// 添加文章
@@ -461,7 +461,7 @@ class AdminController extends Controller {
 			return Redirect::to('admin/articleList');
 		}
 
-		return Response::view('admin.article.addArticle');
+		return view('admin.article.addArticle');
 	}
 
 	// 编辑文章
@@ -509,7 +509,7 @@ class AdminController extends Controller {
 
 		$view['article'] = Article::find($id);
 
-		return Response::view('admin.article.editArticle', $view);
+		return view('admin.article.editArticle', $view);
 	}
 
 	// 删除文章
@@ -525,7 +525,7 @@ class AdminController extends Controller {
 	}
 
 	// 流量日志
-	public function trafficLog(Request $request): \Illuminate\Http\Response {
+	public function trafficLog(Request $request) {
 		$port = $request->input('port');
 		$user_id = $request->input('user_id');
 		$email = $request->input('email');
@@ -576,7 +576,7 @@ class AdminController extends Controller {
 		$view['list'] = $list;
 		$view['nodeList'] = Node::whereStatus(1)->orderByDesc('sort')->latest()->get();
 
-		return Response::view('admin.logs.trafficLog', $view);
+		return view('admin.logs.trafficLog', $view);
 	}
 
 	// 导出配置信息
@@ -617,7 +617,7 @@ class AdminController extends Controller {
 		                        ->appends($request->except('page'));
 		$view['user'] = $user;
 
-		return Response::view('admin.user.export', $view);
+		return view('admin.user.export', $view);
 	}
 
 	// 导出原版SS用户配置信息
@@ -675,7 +675,7 @@ class AdminController extends Controller {
 			return Redirect::back()->with('successMsg', '修改成功');
 		}
 
-		return Response::view('admin.config.profile');
+		return view('admin.config.profile');
 	}
 
 	// 用户流量监控
@@ -693,7 +693,7 @@ class AdminController extends Controller {
 		$view['email'] = $user->email;
 		$view = array_merge($view, $this->dataFlowChart($user->id));
 
-		return Response::view('admin.logs.userMonitor', $view);
+		return view('admin.logs.userMonitor', $view);
 	}
 
 	// 加密方式、混淆、协议、等级、国家地区
@@ -731,7 +731,7 @@ class AdminController extends Controller {
 		$view['levelList'] = Level::all();
 		$view['labelList'] = Label::with('nodes')->get();
 
-		return Response::view('admin.config.config', $view);
+		return view('admin.config.config', $view);
 	}
 
 	// 删除配置
@@ -985,11 +985,11 @@ class AdminController extends Controller {
 	}
 
 	// 系统设置
-	public function system(): \Illuminate\Http\Response {
+	public function system() {
 		$view = self::$sysConfig;
 		$view['labelList'] = Label::orderByDesc('sort')->orderBy('id')->get();
 
-		return Response::view('admin.config.system', $view);
+		return view('admin.config.system', $view);
 	}
 
 	// 设置某个配置项
@@ -1117,14 +1117,14 @@ class AdminController extends Controller {
 	}
 
 	// 邀请码列表
-	public function inviteList(Request $request): \Illuminate\Http\Response {
+	public function inviteList(Request $request) {
 		$view['inviteList'] = Invite::with(['invitee:id,email', 'inviter:id,email'])
 		                            ->orderBy('status')
 		                            ->latest()
 		                            ->paginate(15)
 		                            ->appends($request->except('page'));
 
-		return Response::view('admin.inviteList', $view);
+		return view('admin.inviteList', $view);
 	}
 
 	// 生成邀请码
@@ -1180,7 +1180,7 @@ class AdminController extends Controller {
 	}
 
 	// 订单列表
-	public function orderList(Request $request): \Illuminate\Http\Response {
+	public function orderList(Request $request) {
 		$email = $request->input('email');
 		$order_sn = $request->input('order_sn');
 		$is_coupon = $request->input('is_coupon');
@@ -1239,14 +1239,12 @@ class AdminController extends Controller {
 
 		$view['orderList'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.orderList', $view);
+		return view('admin.logs.orderList', $view);
 	}
 
 	// 重置用户流量
 	public function resetUserTraffic(Request $request): JsonResponse {
-		$id = $request->input('id');
-
-		User::find($id)->update(['u' => 0, 'd' => 0]);
+		User::find($request->input('id'))->update(['u' => 0, 'd' => 0]);
 
 		return Response::json(['status' => 'success', 'message' => '操作成功']);
 	}
@@ -1273,11 +1271,11 @@ class AdminController extends Controller {
 			return Response::json(['status' => 'fail', 'message' => '充值失败']);
 		}
 
-		return Response::view('admin.handleUserCredit');
+		return view('admin.handleUserCredit');
 	}
 
 	// 用户余额变动记录
-	public function userCreditLogList(Request $request): \Illuminate\Http\Response {
+	public function userCreditLogList(Request $request) {
 		$email = $request->input('email');
 
 		$query = UserCreditLog::with('user:id,email')->latest();
@@ -1290,11 +1288,11 @@ class AdminController extends Controller {
 
 		$view['list'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.userCreditLogList', $view);
+		return view('admin.logs.userCreditLogList', $view);
 	}
 
 	// 用户封禁记录
-	public function userBanLogList(Request $request): \Illuminate\Http\Response {
+	public function userBanLogList(Request $request) {
 		$email = $request->input('email');
 
 		$query = UserBanedLog::with('user:id,email,t')->latest();
@@ -1307,11 +1305,11 @@ class AdminController extends Controller {
 
 		$view['list'] = $query->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.userBanLogList', $view);
+		return view('admin.logs.userBanLogList', $view);
 	}
 
 	// 用户流量变动记录
-	public function userTrafficLogList(Request $request): \Illuminate\Http\Response {
+	public function userTrafficLogList(Request $request) {
 		$email = $request->input('email');
 
 		$query = UserDataModifyLog::with(['user:id,email', 'order.goods:id,name']);
@@ -1324,11 +1322,11 @@ class AdminController extends Controller {
 
 		$view['list'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.userTrafficLogList', $view);
+		return view('admin.logs.userTrafficLogList', $view);
 	}
 
 	// 用户在线IP记录
-	public function userOnlineIPList(Request $request): \Illuminate\Http\Response {
+	public function userOnlineIPList(Request $request) {
 		$email = $request->input('email');
 		$port = $request->input('port');
 		$wechat = $request->input('wechat');
@@ -1366,7 +1364,7 @@ class AdminController extends Controller {
 
 		$view['userList'] = $userList;
 
-		return Response::view('admin.logs.userOnlineIPList', $view);
+		return view('admin.logs.userOnlineIPList', $view);
 	}
 
 	// 转换成某个用户的身份
@@ -1399,13 +1397,13 @@ class AdminController extends Controller {
 			return Response::json(['status' => 'success', 'message' => '添加成功']);
 		}
 
-		return Response::view('admin.label.addLabel');
+		return view('admin.label.addLabel');
 	}
 
 	// 编辑标签
 	public function editLabel(Request $request) {
+		$id = $request->input('id');
 		if($request->isMethod('POST')){
-			$id = $request->input('id');
 			$name = $request->input('name');
 			$sort = $request->input('sort');
 
@@ -1414,10 +1412,9 @@ class AdminController extends Controller {
 			return Response::json(['status' => 'success', 'message' => '添加成功']);
 		}
 
-		$id = $request->input('id');
 		$view['label'] = Label::find($id);
 
-		return Response::view('admin.label.editLabel', $view);
+		return view('admin.label.editLabel', $view);
 	}
 
 	// 删除标签
@@ -1441,7 +1438,7 @@ class AdminController extends Controller {
 	}
 
 	// 邮件发送日志列表
-	public function notificationLog(Request $request): \Illuminate\Http\Response {
+	public function notificationLog(Request $request) {
 		$email = $request->input('email');
 		$type = $request->input('type');
 
@@ -1457,11 +1454,11 @@ class AdminController extends Controller {
 
 		$view['list'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.notificationLog', $view);
+		return view('admin.logs.notificationLog', $view);
 	}
 
 	// 在线IP监控(实时)
-	public function onlineIPMonitor(Request $request): \Illuminate\Http\Response {
+	public function onlineIPMonitor(Request $request) {
 		$ip = $request->input('ip');
 		$email = $request->input('email');
 		$port = $request->input('port');
@@ -1525,6 +1522,6 @@ class AdminController extends Controller {
 		$view['list'] = $onlineIPLogs;
 		$view['nodeList'] = Node::whereStatus(1)->orderByDesc('sort')->latest()->get();
 
-		return Response::view('admin.logs.onlineIPMonitor', $view);
+		return view('admin.logs.onlineIPMonitor', $view);
 	}
 }

+ 12 - 12
app/Http/Controllers/AuthController.php

@@ -119,7 +119,7 @@ class AuthController extends Controller {
 			return Redirect::to('/');
 		}
 
-		return Response::view('auth.login');
+		return view('auth.login');
 	}
 
 	// 校验验证码
@@ -398,7 +398,7 @@ class AuthController extends Controller {
 		$view['emailList'] = self::$sysConfig['is_email_filtering'] != 2? false : EmailFilter::whereType(2)->get();
 		Session::put('register_token', Str::random());
 
-		return Response::view('auth.register', $view);
+		return view('auth.register', $view);
 	}
 
 	//邮箱检查
@@ -534,7 +534,7 @@ class AuthController extends Controller {
 			return Redirect::back()->with('successMsg', trans('auth.reset_password_success_tip'));
 		}
 
-		return Response::view('auth.resetPassword');
+		return view('auth.resetPassword');
 	}
 
 	// 重设密码
@@ -605,7 +605,7 @@ class AuthController extends Controller {
 		// 重新获取一遍verify
 		$view['verify'] = Verify::type(1)->whereToken($token)->first();
 
-		return Response::view('auth.reset', $view);
+		return view('auth.reset', $view);
 	}
 
 	// 激活账号页
@@ -666,7 +666,7 @@ class AuthController extends Controller {
 			return Redirect::back()->with('successMsg', trans('auth.register_active_tip'));
 		}
 
-		return Response::view('auth.activeUser');
+		return view('auth.activeUser');
 	}
 
 	// 激活账号
@@ -684,19 +684,19 @@ class AuthController extends Controller {
 		if(empty($user)){
 			Session::flash('errorMsg', trans('auth.overtime'));
 
-			return Response::view('auth.active');
+			return view('auth.active');
 		}
 
 		if($verify->status > 0){
 			Session::flash('errorMsg', trans('auth.overtime'));
 
-			return Response::view('auth.active');
+			return view('auth.active');
 		}
 
 		if($user->status != 0){
 			Session::flash('errorMsg', trans('auth.email_normal'));
 
-			return Response::view('auth.active');
+			return view('auth.active');
 		}
 
 		if(time() - strtotime($verify->created_at) >= 1800){
@@ -706,7 +706,7 @@ class AuthController extends Controller {
 			$verify->status = 2;
 			$verify->save();
 
-			return Response::view('auth.active');
+			return view('auth.active');
 		}
 
 		// 更新账号状态
@@ -728,7 +728,7 @@ class AuthController extends Controller {
 
 		Session::flash('successMsg', trans('auth.active_success'));
 
-		return Response::view('auth.active');
+		return view('auth.active');
 	}
 
 	// 发送注册验证码
@@ -787,10 +787,10 @@ class AuthController extends Controller {
 	}
 
 	// 公开的邀请码列表
-	public function free(): \Illuminate\Http\Response {
+	public function free() {
 		$view['inviteList'] = Invite::whereInviterId(0)->whereStatus(0)->paginate();
 
-		return Response::view('auth.free', $view);
+		return view('auth.free', $view);
 	}
 
 	// 切换语言

+ 13 - 13
app/Http/Controllers/NodeController.php

@@ -26,7 +26,7 @@ use Validator;
 
 class NodeController extends Controller {
 	// 节点列表
-	public function nodeList(Request $request): \Illuminate\Http\Response {
+	public function nodeList(Request $request) {
 		$status = $request->input('status');
 
 		$query = Node::with(['onlineLogs', 'dailyDataFlows']);
@@ -56,7 +56,7 @@ class NodeController extends Controller {
 
 		$view['nodeList'] = $nodeList;
 
-		return Response::view('admin.node.nodeList', $view);
+		return view('admin.node.nodeList', $view);
 	}
 
 	public function checkNode($id): JsonResponse {
@@ -150,7 +150,7 @@ class NodeController extends Controller {
 			$view['labelList'] = Label::orderByDesc('sort')->orderBy('id')->get();
 			$view['dvList'] = NodeCertificate::orderBy('id')->get();
 
-			return Response::view('admin.node.nodeInfo', $view);
+			return view('admin.node.nodeInfo', $view);
 		}
 	}
 
@@ -305,7 +305,7 @@ class NodeController extends Controller {
 		$view['labelList'] = Label::orderByDesc('sort')->orderBy('id')->get();
 		$view['dvList'] = NodeCertificate::orderBy('id')->get();
 
-		return Response::view('admin.node.nodeInfo', $view);
+		return view('admin.node.nodeInfo', $view);
 	}
 
 	// 删除节点
@@ -344,7 +344,7 @@ class NodeController extends Controller {
 		$view['nodeServer'] = $node->server;
 		$view = array_merge($view, $this->DataFlowChart($node->id, 1));
 
-		return Response::view('admin.node.nodeMonitor', $view);
+		return view('admin.node.nodeMonitor', $view);
 	}
 
 	// Ping节点延迟
@@ -372,7 +372,7 @@ class NodeController extends Controller {
 	}
 
 	// Ping节点延迟日志
-	public function pingLog(Request $request): \Illuminate\Http\Response {
+	public function pingLog(Request $request) {
 		$node_id = $request->input('nodeId');
 		$query = NodePing::query();
 		if(isset($node_id)){
@@ -382,13 +382,13 @@ class NodeController extends Controller {
 		$view['nodeList'] = Node::orderBy('id')->get();
 		$view['pingLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));
 
-		return Response::view('admin.logs.nodePingLog', $view);
+		return view('admin.logs.nodePingLog', $view);
 	}
 
 	// 节点授权列表
-	public function authList(Request $request): \Illuminate\Http\Response {
+	public function authList(Request $request) {
 		$view['list'] = NodeAuth::orderBy('node_id')->paginate(15)->appends($request->except('page'));
-		return Response::view('admin.node.authList', $view);
+		return view('admin.node.authList', $view);
 	}
 
 	// 添加节点授权
@@ -434,7 +434,7 @@ class NodeController extends Controller {
 	}
 
 	// 域名证书列表
-	public function certificateList(Request $request): \Illuminate\Http\Response {
+	public function certificateList(Request $request) {
 		$DvList = NodeCertificate::orderBy('id')->paginate(15)->appends($request->except('page'));
 		foreach($DvList as $Dv){
 			if($Dv->key && $Dv->pem){
@@ -445,7 +445,7 @@ class NodeController extends Controller {
 			}
 		}
 		$view['list'] = $DvList;
-		return Response::view('admin.node.certificateList', $view);
+		return view('admin.node.certificateList', $view);
 	}
 
 	// 添加域名证书
@@ -464,7 +464,7 @@ class NodeController extends Controller {
 			return Response::json(['status' => 'fail', 'message' => '生成失败']);
 		}
 
-		return Response::view('admin.node.certificateInfo');
+		return view('admin.node.certificateInfo');
 	}
 
 	// 编辑域名证书
@@ -485,7 +485,7 @@ class NodeController extends Controller {
 		}
 
 		$view['Dv'] = $Dv;
-		return Response::view('admin.node.certificateInfo', $view);
+		return view('admin.node.certificateInfo', $view);
 	}
 
 	// 删除域名证书

+ 4 - 4
app/Http/Controllers/PaymentController.php

@@ -203,7 +203,7 @@ class PaymentController extends Controller {
 	}
 
 	// 支付单详情
-	public function detail($trade_no): \Illuminate\Http\Response {
+	public function detail($trade_no) {
 		$payment = Payment::uid()->with(['order', 'order.goods'])->whereTradeNo($trade_no)->firstOrFail();
 		$view['payment'] = $payment;
 		$goods = $payment->order->goods;
@@ -212,11 +212,11 @@ class PaymentController extends Controller {
 		$view['pay_type'] = $payment->order->pay_type_label?: 0;
 		$view['pay_type_icon'] = $payment->order->pay_type_icon;
 
-		return Response::view('user.payment', $view);
+		return view('user.payment', $view);
 	}
 
 	// 回调日志
-	public function callbackList(Request $request): \Illuminate\Http\Response {
+	public function callbackList(Request $request) {
 		$status = $request->input('status', 0);
 
 		$query = PaymentCallback::query();
@@ -227,6 +227,6 @@ class PaymentController extends Controller {
 
 		$view['list'] = $query->latest()->paginate(10)->appends($request->except('page'));
 
-		return Response::view('admin.logs.callbackList', $view);
+		return view('admin.logs.callbackList', $view);
 	}
 }

+ 3 - 3
app/Http/Controllers/User/AffiliateController.php

@@ -19,10 +19,10 @@ class AffiliateController extends Controller {
 	}
 
 	// 推广返利
-	public function referral(): \Illuminate\Http\Response {
+	public function referral() {
 		if(ReferralLog::uid()->doesntExist() && Order::uid()->whereStatus(2)->doesntExist()){
 			return Response::view('auth.error',
-				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>']);
+				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>'], 402);
 		}
 		$view['referral_traffic'] = flowAutoShow(self::$sysConfig['referral_traffic'] * MB);
 		$view['referral_percent'] = self::$sysConfig['referral_percent'];
@@ -41,7 +41,7 @@ class AffiliateController extends Controller {
 		                                ->latest()
 		                                ->paginate(10, ['*'], 'user_page');
 
-		return Response::view('user.referral', $view);
+		return view('user.referral', $view);
 	}
 
 	// 申请提现

+ 21 - 21
app/Http/Controllers/UserController.php

@@ -51,7 +51,7 @@ class UserController extends Controller {
 		self::$sysConfig = Helpers::sysConfig();
 	}
 
-	public function index(): \Illuminate\Http\Response {
+	public function index() {
 		$user = Auth::getUser();
 		$totalTransfer = $user->transfer_enable;
 		$usedTransfer = $user->u + $user->d;
@@ -72,7 +72,7 @@ class UserController extends Controller {
 		$view['userLoginLog'] = UserLoginLog::whereUserId($user->id)->latest()->first(); // 近期登录日志
 		$view = array_merge($view, $this->dataFlowChart($user->id));
 
-		return Response::view('user.index', $view);
+		return view('user.index', $view);
 	}
 
 	// 签到
@@ -142,14 +142,14 @@ class UserController extends Controller {
 		}
 		$view['nodeList'] = $nodeList?: [];
 
-		return Response::view('user.nodeList', $view);
+		return view('user.nodeList', $view);
 	}
 
 	// 公告详情
-	public function article(Request $request): \Illuminate\Http\Response {
+	public function article(Request $request) {
 		$view['info'] = Article::findOrFail($request->input('id'));
 
-		return Response::view('user.article', $view);
+		return view('user.article', $view);
 	}
 
 	// 修改个人资料
@@ -206,11 +206,11 @@ class UserController extends Controller {
 			return Redirect::to('profile#tab_2')->with('successMsg', '修改成功');
 		}
 
-		return Response::view('user.profile');
+		return view('user.profile');
 	}
 
 	// 商品列表
-	public function services(Request $request): \Illuminate\Http\Response {
+	public function services(Request $request) {
 		$user = Auth::getUser();
 		// 余额充值商品,只取10个
 		$view['chargeGoodsList'] = Goods::type(3)->whereStatus(1)->orderBy('price')->limit(10)->get();
@@ -227,7 +227,7 @@ class UserController extends Controller {
 		$dataPlusDays = $user->reset_time?: $user->expired_at;
 		$view['dataPlusDays'] = $dataPlusDays > date('Y-m-d')? Helpers::daysToNow($dataPlusDays) : 0;
 
-		return Response::view('user.services', $view);
+		return view('user.services', $view);
 	}
 
 	//重置流量
@@ -252,14 +252,14 @@ class UserController extends Controller {
 	}
 
 	// 工单
-	public function ticketList(Request $request): \Illuminate\Http\Response {
+	public function ticketList(Request $request) {
 		$view['ticketList'] = Ticket::uid()->latest()->paginate(10)->appends($request->except('page'));
 
-		return Response::view('user.ticketList', $view);
+		return view('user.ticketList', $view);
 	}
 
 	// 订单
-	public function invoices(Request $request): \Illuminate\Http\Response {
+	public function invoices(Request $request) {
 		$view['orderList'] = Order::uid()
 		                          ->with(['goods', 'payment'])
 		                          ->orderByDesc('id')
@@ -267,7 +267,7 @@ class UserController extends Controller {
 		                          ->appends($request->except('page'));
 		$view['prepaidPlan'] = Order::userPrepay()->exists();
 
-		return Response::view('user.invoices', $view);
+		return view('user.invoices', $view);
 	}
 
 	public function closePlan(): JsonResponse {
@@ -286,10 +286,10 @@ class UserController extends Controller {
 	}
 
 	// 订单明细
-	public function invoiceDetail($sn): \Illuminate\Http\Response {
+	public function invoiceDetail($sn) {
 		$view['order'] = Order::uid()->with(['goods', 'coupon', 'payment'])->whereOrderSn($sn)->firstOrFail();
 
-		return Response::view('user.invoiceDetail', $view);
+		return view('user.invoiceDetail', $view);
 	}
 
 	// 添加工单
@@ -378,7 +378,7 @@ class UserController extends Controller {
 		$view['ticket'] = $ticket;
 		$view['replyList'] = TicketReply::whereTicketId($id)->with('user')->oldest()->get();
 
-		return Response::view('user.replyTicket', $view);
+		return view('user.replyTicket', $view);
 	}
 
 	// 关闭工单
@@ -396,10 +396,10 @@ class UserController extends Controller {
 	}
 
 	// 邀请码
-	public function invite(): \Illuminate\Http\Response {
+	public function invite() {
 		if(Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist()){
 			return Response::view('auth.error',
-				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>']);
+				['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>'], 402);
 		}
 
 		$view['num'] = Auth::getUser()->invite_num; // 还可以生成的邀请码数量
@@ -407,7 +407,7 @@ class UserController extends Controller {
 		$view['referral_traffic'] = flowAutoShow(self::$sysConfig['referral_traffic'] * MB);
 		$view['referral_percent'] = self::$sysConfig['referral_percent'];
 
-		return Response::view('user.invite', $view);
+		return view('user.invite', $view);
 	}
 
 	// 生成邀请码
@@ -489,11 +489,11 @@ class UserController extends Controller {
 		$view['activePlan'] = Order::userActivePlan()->exists();
 		$view['goods'] = $goods;
 
-		return Response::view('user.buy', $view);
+		return view('user.buy', $view);
 	}
 
 	// 帮助中心
-	public function help(): \Illuminate\Http\Response {
+	public function help() {
 		//$view['articleList'] = Article::type(1)->orderByDesc('sort')->latest()->limit(10)->paginate(5);
 		$data = [];
 		if(Node::whereIn('type', [1, 4])->whereStatus(1)->exists()){
@@ -525,7 +525,7 @@ class UserController extends Controller {
 		$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');
 
-		return Response::view('user.help', $view);
+		return view('user.help', $view);
 	}
 
 	// 更换订阅地址

+ 3 - 1
app/Http/Kernel.php

@@ -17,6 +17,7 @@ use App\Http\Middleware\TrimStrings;
 use App\Http\Middleware\TrustProxies;
 use App\Http\Middleware\VerifyCsrfToken;
 use App\Http\Middleware\WebApi;
+use Fruitcake\Cors\HandleCors;
 use Illuminate\Auth\Middleware\Authenticate;
 use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
 use Illuminate\Auth\Middleware\Authorize;
@@ -42,6 +43,7 @@ class Kernel extends HttpKernel {
 	 * @var array
 	 */
 	protected $middleware = [
+		HandleCors::class,
 		CheckForMaintenanceMode::class,
 		ValidatePostSize::class,
 		TrimStrings::class,
@@ -68,7 +70,7 @@ class Kernel extends HttpKernel {
 
 		'api' => [
 			'throttle:60,1',
-			'bindings',
+			SubstituteBindings::class,
 		],
 	];
 

+ 1 - 2
app/Http/Middleware/Authenticate.php

@@ -9,12 +9,11 @@ class Authenticate extends Middleware {
 	 * Get the path the user should be redirected to when they are not authenticated.
 	 *
 	 * @param  \Illuminate\Http\Request  $request
-	 * @return string
+	 * @return string|null
 	 */
 	protected function redirectTo($request) {
 		if(!$request->expectsJson()){
 			return route('login');
 		}
-		return $request;
 	}
 }

+ 6 - 7
app/Http/Middleware/RedirectIfAuthenticated.php

@@ -2,23 +2,22 @@
 
 namespace App\Http\Middleware;
 
-use Auth;
+use App\Providers\RouteServiceProvider;
 use Closure;
-use Illuminate\Http\Request;
+use Auth;
 
 class RedirectIfAuthenticated {
 	/**
 	 * Handle an incoming request.
 	 *
-	 * @param  Request      $request
-	 * @param  Closure      $next
-	 * @param  string|null  $guard
-	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Closure                  $next
+	 * @param  string|null               $guard
 	 * @return mixed
 	 */
 	public function handle($request, Closure $next, $guard = null) {
 		if(Auth::guard($guard)->check()){
-			return redirect('/');
+			return redirect(RouteServiceProvider::HOME);
 		}
 
 		return $next($request);

+ 4 - 1
app/Http/Middleware/TrimStrings.php

@@ -10,5 +10,8 @@ class TrimStrings extends Middleware {
 	 *
 	 * @var array
 	 */
-	protected $except = [];
+	protected $except = [
+		'password',
+		'password_confirmation',
+	];
 }

+ 1 - 1
app/Http/Middleware/TrustProxies.php

@@ -9,7 +9,7 @@ class TrustProxies extends Middleware {
 	/**
 	 * The trusted proxies for this application.
 	 *
-	 * @var array|string
+	 * @var array|string|null
 	 */
 	protected $proxies;
 

+ 5 - 4
app/Http/Middleware/isForbidden.php

@@ -8,6 +8,7 @@ use App\Components\QQWry;
 use Closure;
 use Illuminate\Http\Request;
 use Log;
+use Response;
 
 class isForbidden {
 	/**
@@ -23,7 +24,7 @@ class isForbidden {
 		if(sysConfig('is_forbid_robot') && Agent::isRobot()){
 			Log::info("识别到机器人访问(".getClientIp().")");
 
-			return response()->view('auth.error', ['message' => trans('error.ForbiddenRobot')], 404);
+			return Response::view('auth.error', ['message' => trans('error.ForbiddenRobot')], 403);
 		}
 
 		// 拒绝通过订阅链接域名访问网站,防止网站被探测
@@ -63,7 +64,7 @@ class isForbidden {
 
 		// 拒绝无IP请求
 		if(empty($ipInfo) || empty($ipInfo['country'])){
-			return response()->view('auth.error', ['message' => trans('error.ForbiddenAccess')], 403);
+			return Response::view('auth.error', ['message' => trans('error.ForbiddenAccess')], 403);
 		}
 
 		if(!in_array($ipInfo['country'], ['本机地址', '局域网'])){
@@ -74,7 +75,7 @@ class isForbidden {
 				       && !in_array($ipInfo['province'], ['香港', '澳门', '台湾']))){
 					Log::info('识别到大陆IP,拒绝访问:'.$ip);
 
-					return response()->view('auth.error', ['message' => trans('error.ForbiddenChina')], 403);
+					return Response::view('auth.error', ['message' => trans('error.ForbiddenChina')], 403);
 				}
 			}
 
@@ -84,7 +85,7 @@ class isForbidden {
 				   || in_array($ipInfo['province'], ['香港', '澳门', '台湾'])){
 					Log::info('识别到海外IP,拒绝访问:'.$ip.' - '.$ipInfo['country']);
 
-					return response()->view('auth.error', ['message' => trans('error.ForbiddenOversea')], 403);
+					return Response::view('auth.error', ['message' => trans('error.ForbiddenOversea')], 403);
 				}
 			}
 		}

+ 3 - 2
app/Http/Middleware/isSecurity.php

@@ -5,6 +5,7 @@ namespace App\Http\Middleware;
 use Cache;
 use Closure;
 use Log;
+use Response;
 
 class isSecurity {
 	/**
@@ -25,9 +26,9 @@ class isSecurity {
 			if($code != $websiteSecurityCode){
 				Log::info("拒绝非安全入口访问(".$ip.")");
 
-				return response()->view('auth.error', [
+				return Response::view('auth.error', [
 					'message' => trans('error.SecurityError').', '.trans('error.Visit').'<a href="/login?securityCode=" target="_self">'.trans('error.SecurityEnter').'</a>'
-				]);
+				], 403);
 			}
 
 			Cache::put($cacheKey, $ip, 7200); // 2小时之内无需再次输入安全码访问

+ 1 - 1
app/Observers/RuleGroupObserver.php

@@ -18,7 +18,7 @@ class RuleGroupObserver {
 		}elseif(Arr::exists($changes, 'nodes')){
 			$nodes = Node::whereType(4)
 			             ->whereIn('id',
-				             array_diff($ruleGroup->nodes, json_decode($ruleGroup->getOriginal('nodes'), true)?: []))
+				             array_diff($ruleGroup->nodes, $ruleGroup->getOriginal('nodes')?: []))
 			             ->get();
 			if($nodes){
 				reloadNode::dispatchNow($nodes);

+ 1 - 1
app/Observers/UserGroupObserver.php

@@ -20,7 +20,7 @@ class UserGroupObserver {
 		if(Arr::exists($changes, 'nodes')){
 			$nodes = Node::whereType(4)
 			             ->whereIn('id',
-				             array_diff($userGroup->nodes, json_decode($userGroup->getOriginal('nodes'), true)?: []))
+				             array_diff($userGroup->nodes, $userGroup->getOriginal('nodes')?: []))
 			             ->get();
 			if($nodes){
 				reloadNode::dispatchNow($nodes);

+ 6 - 0
app/Providers/RouteServiceProvider.php

@@ -6,6 +6,12 @@ use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvi
 use Illuminate\Support\Facades\Route;
 
 class RouteServiceProvider extends ServiceProvider {
+	/**
+	 * The path to the "home" route for your application.
+	 *
+	 * @var string
+	 */
+	public const HOME = '/';
 	/**
 	 * This namespace is applied to your controller routes.
 	 *

+ 28 - 40
composer.json

@@ -1,48 +1,47 @@
 {
-  "name": "laravel/laravel",
+  "name": "proxypanel/proxypanel",
   "type": "project",
-  "description": "The Laravel Framework.",
+  "description": "Proxy panel is a proxy account management system, it supports shadowsocks, shadowsocksr, v2ray, trojan and more.",
   "keywords": [
-	"framework",
-	"laravel"
+	"laravel",
+	"proxypanel"
   ],
   "license": "MIT",
   "require": {
-	"php": "^7.2",
-	"ext-json": "*",
-	"ext-openssl": "*",
-	"barryvdh/laravel-ide-helper": "^2.7",
-	"fideloper/proxy": "^4.3",
-	"guzzlehttp/guzzle": "^6",
+	"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": "5.8.*",
-	"laravel/tinker": "^1.0",
+	"laravel/framework": "^7.24",
+	"laravel/tinker": "^2.0",
 	"mews/captcha": "^3.1",
 	"mews/purifier": "^3.2",
-	"misechow/geetest": "^1.0",
-	"misechow/no-captcha": "^1.0",
 	"openlss/lib-array2xml": "^1.0",
-	"overtrue/laravel-lang": "^3.0",
-	"phpoffice/phpspreadsheet": "^1.13",
-	"predis/predis": "^1.1",
+	"overtrue/laravel-lang": "^4.0",
+	"phpoffice/phpspreadsheet": "^1.14",
 	"rap2hpoutre/laravel-log-viewer": "^1.6",
-	"riverslei/payment": "*",
-	"scyllaly/hcaptcha": "^4.1",
+	"riverslei/payment": "^5.1",
 	"simplesoftwareio/simple-qrcode": "^3.0",
-	"spatie/laravel-permission": "^3.13",
-	"srmklive/paypal": "~1.0",
-	"xhat/payjs": "^1.4"
+	"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": "*"
   },
   "require-dev": {
-	"barryvdh/laravel-debugbar": "^3",
-	"beyondcode/laravel-dump-server": "^1.0",
-	"filp/whoops": "^2.7",
-	"fzaninotto/faker": "^1.9",
-	"mockery/mockery": "^1.3",
-	"nunomaduro/collision": "^3.0",
-	"phpunit/phpunit": "^8"
+	"barryvdh/laravel-debugbar": "^3.4",
+	"barryvdh/laravel-ide-helper": "^2.8",
+	"facade/ignition": "^2.0",
+	"fzaninotto/faker": "^1.9.1",
+	"mockery/mockery": "^1.3.1",
+	"nunomaduro/collision": "^4.1",
+	"phpunit/phpunit": "^8.5"
   },
   "config": {
 	"optimize-autoloader": true,
@@ -81,19 +80,8 @@
 	"post-root-package-install": [
 	  "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
 	],
-	"post-update-cmd": [
-	  "Illuminate\\Foundation\\ComposerScripts::postUpdate",
-	  "@php artisan ide-helper:generate",
-	  "@php artisan ide-helper:meta"
-	],
 	"post-create-project-cmd": [
 	  "@php artisan key:generate --ansi"
 	]
-  },
-  "repositories": {
-	"packagist": {
-	  "type": "composer",
-	  "url": "https://mirrors.aliyun.com/composer/"
-	}
   }
 }

文件差異過大導致無法顯示
+ 317 - 447
composer.lock


+ 4 - 4
config/HCaptcha.php

@@ -1,10 +1,10 @@
 <?php
 
 return [
-    'secret' => env('HCAPTCHA_SECRET'),
-    'sitekey' => env('HCAPTCHA_SITEKEY'),
-    'server-get-config' => TRUE,
-    'options' => [
+    'secret'            => env('HCAPTCHA_SECRET'),
+    'sitekey'           => env('HCAPTCHA_SITEKEY'),
+    'server-get-config' => true,
+    'options'           => [
         'timeout' => 30,
     ],
 ];

+ 1 - 1
config/NoCaptcha.php

@@ -3,7 +3,7 @@
 return [
     'secret' => env('NOCAPTCHA_SECRET'),
     'sitekey' => env('NOCAPTCHA_SITEKEY'),
-    'server-get-config' => TRUE,
+    'server-get-config' => true,
     'options' => [
         'timeout' => 30,
     ],

+ 6 - 20
config/app.php

@@ -164,17 +164,8 @@ return [
         Illuminate\View\ViewServiceProvider::class,
 
         /*
-        * Package Service Providers...
-        */
-        Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, //IDE帮助
-        Barryvdh\Debugbar\ServiceProvider::class,//Debug工具
-        Jenssegers\Agent\AgentServiceProvider::class, //用户浏览器检测
-        Misechow\Geetest\GeetestServiceProvider::class,  // Geetest极验
-        Misechow\NoCaptcha\NoCaptchaServiceProvider::class, // Google reCAPTCHA
-        Overtrue\LaravelLang\TranslationServiceProvider::class, // 多国语言包功能
-        Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class,//日志查看
-        Scyllaly\HCaptcha\HCaptchaServiceProvider::class, //HCaptcha
-        Srmklive\PayPal\Providers\PayPalServiceProvider::class, // PayPal
+         * Package Service Providers...
+         */
 
         /*
          * Application Service Providers...
@@ -199,7 +190,7 @@ return [
     */
 
     'aliases' => [
-        'Agent' => Jenssegers\Agent\Facades\Agent::class,
+
         'App' => Illuminate\Support\Facades\App::class,
         'Arr' => Illuminate\Support\Arr::class,
         'Artisan' => Illuminate\Support\Facades\Artisan::class,
@@ -208,27 +199,21 @@ return [
         'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
         'Bus' => Illuminate\Support\Facades\Bus::class,
         'Cache' => Illuminate\Support\Facades\Cache::class,
-        'Captcha' => Mews\Captcha\Facades\Captcha::class,
         'Config' => Illuminate\Support\Facades\Config::class,
         'Cookie' => Illuminate\Support\Facades\Cookie::class,
         'Crypt' => Illuminate\Support\Facades\Crypt::class,
         'DB' => Illuminate\Support\Facades\DB::class,
-        'Debugbar' => Barryvdh\Debugbar\Facade::class,
         'Eloquent' => Illuminate\Database\Eloquent\Model::class,
         'Event' => Illuminate\Support\Facades\Event::class,
         'File' => Illuminate\Support\Facades\File::class,
         'Gate' => Illuminate\Support\Facades\Gate::class,
-        'Geetest' => Misechow\Geetest\Geetest::class,
         'Hash' => Illuminate\Support\Facades\Hash::class,
-        'HCaptcha' => Scyllaly\HCaptcha\Facades\HCaptcha::class,
+        'Http' => Illuminate\Support\Facades\Http::class,
         'Lang' => Illuminate\Support\Facades\Lang::class,
         'Log' => Illuminate\Support\Facades\Log::class,
         'Mail' => Illuminate\Support\Facades\Mail::class,
-        'NoCaptcha' => Misechow\NoCaptcha\Facades\NoCaptcha::class,
         'Notification' => Illuminate\Support\Facades\Notification::class,
         'Password' => Illuminate\Support\Facades\Password::class,
-        'PayPal' => Srmklive\PayPal\Facades\PayPal::class,
-        'Purifier' => Mews\Purifier\Facades\Purifier::class,
         'Queue' => Illuminate\Support\Facades\Queue::class,
         'Redirect' => Illuminate\Support\Facades\Redirect::class,
         'Redis' => Illuminate\Support\Facades\Redis::class,
@@ -241,7 +226,8 @@ return [
         'Str' => Illuminate\Support\Str::class,
         'URL' => Illuminate\Support\Facades\URL::class,
         'Validator' => Illuminate\Support\Facades\Validator::class,
-        'View' => Illuminate\Support\Facades\View::class
+        'View' => Illuminate\Support\Facades\View::class,
+
     ],
 
 ];

+ 14 - 0
config/auth.php

@@ -97,7 +97,21 @@ return [
             'provider' => 'users',
             'table' => 'password_resets',
             'expire' => 60,
+            'throttle' => 60,
         ],
     ],
 
+    /*
+    |--------------------------------------------------------------------------
+    | Password Confirmation Timeout
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define the amount of seconds before a password confirmation
+    | times out and the user is prompted to re-enter their password via the
+    | confirmation screen. By default, the timeout lasts for three hours.
+    |
+    */
+
+    'password_timeout' => 10800,
+
 ];

+ 1 - 0
config/cache.php

@@ -39,6 +39,7 @@ return [
 
         'array' => [
             'driver' => 'array',
+            'serialize' => false,
         ],
 
         'database' => [

+ 16 - 14
config/captcha.php

@@ -1,16 +1,21 @@
 <?php
 
 return [
-
-    'characters' => '123467890',
-    //'characters' => '2346789abcdefghjmnpqrtuxyzABCDEFGHJMNPQRTUXYZ',
-
+    'characters' => ['2', '3', '4', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'm', 'n', 'p', 'q', 'r', 't', 'u', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'X', 'Y', 'Z'],
     'default' => [
-        'length' => 4, // 启用科学计算后要改为 9
-        'width' => 90,
-        'height' => 43,
+        'length' => 4,
+        'width' => 120,
+        'height' => 36,
         'quality' => 90,
-        'math' => FALSE, // 改为true,启用科学计算
+        'math' => false,
+        'expire' => 60,
+    ],
+    'math' => [
+        'length' => 9,
+        'width' => 120,
+        'height' => 36,
+        'quality' => 90,
+        'math' => true,
     ],
 
     'flat' => [
@@ -19,29 +24,26 @@ return [
         'height' => 46,
         'quality' => 90,
         'lines' => 6,
-        'bgImage' => FALSE,
+        'bgImage' => false,
         'bgColor' => '#ecf2f4',
         'fontColors' => ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
         'contrast' => -5,
     ],
-
     'mini' => [
         'length' => 3,
         'width' => 60,
         'height' => 32,
     ],
-
     'inverse' => [
         'length' => 5,
         'width' => 120,
         'height' => 36,
         'quality' => 90,
-        'sensitive' => TRUE,
+        'sensitive' => true,
         'angle' => 12,
         'sharpen' => 10,
         'blur' => 2,
-        'invert' => TRUE,
+        'invert' => true,
         'contrast' => -5,
     ]
-
 ];

+ 34 - 0
config/cors.php

@@ -0,0 +1,34 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cross-Origin Resource Sharing (CORS) Configuration
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure your settings for cross-origin resource sharing
+    | or "CORS". This determines what cross-origin operations may execute
+    | in web browsers. You are free to adjust these settings as needed.
+    |
+    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
+    |
+    */
+
+    'paths' => ['api/*'],
+
+    'allowed_methods' => ['*'],
+
+    'allowed_origins' => ['*'],
+
+    'allowed_origins_patterns' => [],
+
+    'allowed_headers' => ['*'],
+
+    'exposed_headers' => [],
+
+    'max_age' => 0,
+
+    'supports_credentials' => false,
+
+];

+ 6 - 6
config/database.php

@@ -119,10 +119,10 @@ return [
 
     'redis' => [
 
-        'client' => env('REDIS_CLIENT', 'predis'),
+        'client' => env('REDIS_CLIENT', 'phpredis'),
 
         'options' => [
-            'cluster' => env('REDIS_CLUSTER', 'predis'),
+            'cluster' => env('REDIS_CLUSTER', 'redis'),
             'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
         ],
 
@@ -130,16 +130,16 @@ return [
             'url' => env('REDIS_URL'),
             'host' => env('REDIS_HOST', '127.0.0.1'),
             'password' => env('REDIS_PASSWORD', null),
-            'port' => env('REDIS_PORT', 6379),
-            'database' => env('REDIS_DB', 0),
+            'port' => env('REDIS_PORT', '6379'),
+            'database' => env('REDIS_DB', '0'),
         ],
 
         'cache' => [
             'url' => env('REDIS_URL'),
             'host' => env('REDIS_HOST', '127.0.0.1'),
             'password' => env('REDIS_PASSWORD', null),
-            'port' => env('REDIS_PORT', 6379),
-            'database' => env('REDIS_CACHE_DB', 1),
+            'port' => env('REDIS_PORT', '6379'),
+            'database' => env('REDIS_CACHE_DB', '1'),
         ],
 
         'session' => [

+ 0 - 202
config/debugbar.php

@@ -1,202 +0,0 @@
-<?php
-
-return [
-
-    /*
-     |--------------------------------------------------------------------------
-     | Debugbar Settings
-     |--------------------------------------------------------------------------
-     |
-     | Debugbar is enabled by default, when debug is set to true in app.php.
-     | You can override the value by setting enable to true or false instead of null.
-     |
-     | You can provide an array of URI's that must be ignored (eg. 'api/*')
-     |
-     */
-
-    'enabled' => env('DEBUGBAR_ENABLED', NULL),
-    'except' => [
-        'telescope*'
-    ],
-
-    /*
-     |--------------------------------------------------------------------------
-     | Storage settings
-     |--------------------------------------------------------------------------
-     |
-     | DebugBar stores data for session/ajax requests.
-     | You can disable this, so the debugbar stores data in headers/session,
-     | but this can cause problems with large data collectors.
-     | By default, file storage (in the storage folder) is used. Redis and PDO
-     | can also be used. For PDO, run the package migrations first.
-     |
-     */
-    'storage' => [
-        'enabled' => TRUE,
-        'driver' => 'file', // redis, file, pdo, custom
-        'path' => storage_path('debugbar'), // For file driver
-        'connection' => NULL,   // Leave null for default connection (Redis/PDO)
-        'provider' => '' // Instance of StorageInterface for custom driver
-    ],
-
-    /*
-     |--------------------------------------------------------------------------
-     | Vendors
-     |--------------------------------------------------------------------------
-     |
-     | Vendor files are included by default, but can be set to false.
-     | This can also be set to 'js' or 'css', to only include javascript or css vendor files.
-     | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
-     | and for js: jquery and and highlight.js
-     | So if you want syntax highlighting, set it to true.
-     | jQuery is set to not conflict with existing jQuery scripts.
-     |
-     */
-
-    'include_vendors' => TRUE,
-
-    /*
-     |--------------------------------------------------------------------------
-     | Capture Ajax Requests
-     |--------------------------------------------------------------------------
-     |
-     | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
-     | you can use this option to disable sending the data through the headers.
-     |
-     | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.
-     */
-
-    'capture_ajax' => TRUE,
-    'add_ajax_timing' => FALSE,
-
-    /*
-     |--------------------------------------------------------------------------
-     | Custom Error Handler for Deprecated warnings
-     |--------------------------------------------------------------------------
-     |
-     | When enabled, the Debugbar shows deprecated warnings for Symfony components
-     | in the Messages tab.
-     |
-     */
-    'error_handler' => FALSE,
-
-    /*
-     |--------------------------------------------------------------------------
-     | Clockwork integration
-     |--------------------------------------------------------------------------
-     |
-     | The Debugbar can emulate the Clockwork headers, so you can use the Chrome
-     | Extension, without the server-side code. It uses Debugbar collectors instead.
-     |
-     */
-    'clockwork' => FALSE,
-
-    /*
-     |--------------------------------------------------------------------------
-     | DataCollectors
-     |--------------------------------------------------------------------------
-     |
-     | Enable/disable DataCollectors
-     |
-     */
-
-    'collectors' => [
-        'phpinfo' => TRUE,  // Php version
-        'messages' => TRUE,  // Messages
-        'time' => TRUE,  // Time Datalogger
-        'memory' => TRUE,  // Memory usage
-        'exceptions' => TRUE,  // Exception displayer
-        'log' => TRUE,  // Logs from Monolog (merged in messages if enabled)
-        'db' => TRUE,  // Show database (PDO) queries and bindings
-        'views' => TRUE,  // Views with their data
-        'route' => TRUE,  // Current route information
-        'auth' => FALSE, // Display Laravel authentication status
-        'gate' => TRUE, // Display Laravel Gate checks
-        'session' => TRUE,  // Display session data
-        'symfony_request' => TRUE,  // Only one can be enabled..
-        'mail' => TRUE,  // Catch mail messages
-        'laravel' => FALSE, // Laravel version and environment
-        'events' => FALSE, // All events fired
-        'default_request' => FALSE, // Regular or special Symfony request logger
-        'logs' => FALSE, // Add the latest log messages
-        'files' => FALSE, // Show the included files
-        'config' => FALSE, // Display config settings
-        'cache' => FALSE, // Display cache events
-        'models' => FALSE, // Display models
-    ],
-
-    /*
-     |--------------------------------------------------------------------------
-     | Extra options
-     |--------------------------------------------------------------------------
-     |
-     | Configure some DataCollectors
-     |
-     */
-
-    'options' => [
-        'auth' => [
-            'show_name' => TRUE,   // Also show the users name/email in the debugbar
-        ],
-        'db' => [
-            'with_params' => TRUE,   // Render SQL with the parameters substituted
-            'backtrace' => TRUE,   // Use a backtrace to find the origin of the query in your files.
-            'timeline' => FALSE,  // Add the queries to the timeline
-            'explain' => [                 // Show EXPLAIN output on queries
-                'enabled' => FALSE,
-                'types' => ['SELECT'],     // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
-            ],
-            'hints' => TRUE,    // Show hints for common mistakes
-        ],
-        'mail' => [
-            'full_log' => FALSE
-        ],
-        'views' => [
-            'data' => FALSE,    //Note: Can slow down the application, because the data can be quite large..
-        ],
-        'route' => [
-            'label' => TRUE  // show complete route on bar
-        ],
-        'logs' => [
-            'file' => NULL
-        ],
-        'cache' => [
-            'values' => TRUE // collect cache values
-        ],
-    ],
-
-    /*
-     |--------------------------------------------------------------------------
-     | Inject Debugbar in Response
-     |--------------------------------------------------------------------------
-     |
-     | Usually, the debugbar is added just before </body>, by listening to the
-     | Response after the App is done. If you disable this, you have to add them
-     | in your template yourself. See http://phpdebugbar.com/docs/rendering.html
-     |
-     */
-
-    'inject' => TRUE,
-
-    /*
-     |--------------------------------------------------------------------------
-     | DebugBar route prefix
-     |--------------------------------------------------------------------------
-     |
-     | Sometimes you want to set route prefix to be used by DebugBar to load
-     | its resources from. Usually the need comes from misconfigured web server or
-     | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
-     |
-     */
-    'route_prefix' => '_debugbar',
-
-    /*
-     |--------------------------------------------------------------------------
-     | DebugBar route domain
-     |--------------------------------------------------------------------------
-     |
-     | By default DebugBar route served from the same domain that request served.
-     | To override default domain, specify it as a non-empty value.
-     */
-    'route_domain' => NULL,
-];

+ 17 - 1
config/filesystems.php

@@ -37,7 +37,7 @@ return [
     | may even configure multiple disks of the same driver. Defaults have
     | been setup for each driver as an example of the required options.
     |
-    | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
+    | Supported Drivers: "local", "ftp", "sftp", "s3"
     |
     */
 
@@ -62,8 +62,24 @@ return [
             'region' => env('AWS_DEFAULT_REGION'),
             'bucket' => env('AWS_BUCKET'),
             'url' => env('AWS_URL'),
+            'endpoint' => env('AWS_ENDPOINT'),
         ],
 
     ],
 
+    /*
+    |--------------------------------------------------------------------------
+    | Symbolic Links
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the symbolic links that will be created when the
+    | `storage:link` Artisan command is executed. The array keys should be
+    | the locations of the links and the values should be their targets.
+    |
+    */
+
+    'links' => [
+        public_path('storage') => storage_path('app/public'),
+    ],
+
 ];

+ 9 - 98
config/geetest.php

@@ -1,101 +1,12 @@
 <?php
 return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Language
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your yunpian api key from yunpian provided.
-    |
-    | Options: ['zh-cn', 'zh-tw', 'en', 'ja', 'ko']
-    |
-    */
-    'lang' => 'zh-cn',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config ServerGetKey
-    |--------------------------------------------------------------------------
-    |
-    | Here you can decision whether to get the geetest key from database or not.
-    |
-    */
-    'server-get-config' => TRUE,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Geetest Id
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your yunpian api key from yunpian provided.
-    |
-    */
-    'id' => env('GEETEST_ID'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Geetest Key
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your yunpian api key from yunpian provided.
-    |
-    */
-    'key' => env('GEETEST_KEY'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Geetest URL
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your geetest url for ajax validation.
-    |
-    */
-    'url' => '/geetest',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Geetest Protocol
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your geetest url for ajax validation.
-    |
-    | Options: http or https
-    |
-    */
-    'protocol' => 'http',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Geetest Product
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config your geetest url for ajax validation.
-    |
-    | Options: float, popup, custom, bind
-    |
-    */
-    'product' => 'float',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Client Fail Alert Text
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config the alert text when it failed in client.
-    |
-    */
-    'client_fail_alert' => '请正确完成验证码操作',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Config Server Fail Alert
-    |--------------------------------------------------------------------------
-    |
-    | Here you can config the alert text when it failed in server (two factor validation).
-    |
-    */
-    'server_fail_alert' => '验证码校验失败,请重新尝试',
-
-
+	'lang'              => 'zh-cn',
+	'server-get-config' => true,
+	'id'                => env('GEETEST_ID'),
+	'key'               => env('GEETEST_KEY'),
+	'url'               => '/geetest',
+	'protocol'          => 'http',
+	'product'           => 'float',
+	'client_fail_alert' => '请正确完成验证码操作',
+	'server_fail_alert' => '验证码校验失败',
 ];

+ 0 - 198
config/ide-helper.php

@@ -1,198 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Filename & Format
-    |--------------------------------------------------------------------------
-    |
-    | The default filename (without extension) and the format (php or json)
-    |
-    */
-
-    'filename' => '_ide_helper',
-    'format' => 'php',
-
-    'meta_filename' => '.phpstorm.meta.php',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Fluent helpers
-    |--------------------------------------------------------------------------
-    |
-    | Set to true to generate commonly used Fluent methods
-    |
-    */
-
-    'include_fluent' => FALSE,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Write Model Magic methods
-    |--------------------------------------------------------------------------
-    |
-    | Set to false to disable write magic methods of model
-    |
-    */
-
-    'write_model_magic_where' => TRUE,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Write Eloquent Model Mixins
-    |--------------------------------------------------------------------------
-    |
-    | This will add the necessary DocBlock mixins to the model class
-    | contained in the Laravel Framework. This helps the IDE with
-    | auto-completion.
-    |
-    | Please be aware that this setting changes a file within the /vendor directory.
-    |
-    */
-
-    'write_eloquent_model_mixins' => FALSE,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Helper files to include
-    |--------------------------------------------------------------------------
-    |
-    | Include helper files. By default not included, but can be toggled with the
-    | -- helpers (-H) option. Extra helper files can be included.
-    |
-    */
-
-    'include_helpers' => FALSE,
-
-    'helper_files' => [
-        base_path() . '/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Model locations to include
-    |--------------------------------------------------------------------------
-    |
-    | Define in which directories the ide-helper:models command should look
-    | for models.
-    |
-    */
-
-    'model_locations' => [
-        'app',
-    ],
-
-
-    /*
-    |--------------------------------------------------------------------------
-    | Extra classes
-    |--------------------------------------------------------------------------
-    |
-    | These implementations are not really extended, but called with magic functions
-    |
-    */
-
-    'extra' => [
-        'Eloquent' => ['Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'],
-        'Session' => ['Illuminate\Session\Store'],
-    ],
-
-    'magic' => [
-        'Log' => [
-            'debug' => 'Monolog\Logger::addDebug',
-            'info' => 'Monolog\Logger::addInfo',
-            'notice' => 'Monolog\Logger::addNotice',
-            'warning' => 'Monolog\Logger::addWarning',
-            'error' => 'Monolog\Logger::addError',
-            'critical' => 'Monolog\Logger::addCritical',
-            'alert' => 'Monolog\Logger::addAlert',
-            'emergency' => 'Monolog\Logger::addEmergency',
-        ]
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Interface implementations
-    |--------------------------------------------------------------------------
-    |
-    | These interfaces will be replaced with the implementing class. Some interfaces
-    | are detected by the helpers, others can be listed below.
-    |
-    */
-
-    'interfaces' => [
-
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Support for custom DB types
-    |--------------------------------------------------------------------------
-    |
-    | This setting allow you to map any custom database type (that you may have
-    | created using CREATE TYPE statement or imported using database plugin
-    | / extension to a Doctrine type.
-    |
-    | Each key in this array is a name of the Doctrine2 DBAL Platform. Currently valid names are:
-    | 'postgresql', 'db2', 'drizzle', 'mysql', 'oracle', 'sqlanywhere', 'sqlite', 'mssql'
-    |
-    | This name is returned by getName() method of the specific Doctrine/DBAL/Platforms/AbstractPlatform descendant
-    |
-    | The value of the array is an array of type mappings. Key is the name of the custom type,
-    | (for example, "jsonb" from Postgres 9.4) and the value is the name of the corresponding Doctrine2 type (in
-    | our case it is 'json_array'. Doctrine types are listed here:
-    | http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html
-    |
-    | So to support jsonb in your models when working with Postgres, just add the following entry to the array below:
-    |
-    | "postgresql" => array(
-    |       "jsonb" => "json_array",
-    |  ),
-    |
-    */
-    'custom_db_types' => [
-        'mysql' => [
-            'bit' => 'boolean'
-        ]
-    ],
-
-    /*
-     |--------------------------------------------------------------------------
-     | Support for camel cased models
-     |--------------------------------------------------------------------------
-     |
-     | There are some Laravel packages (such as Eloquence) that allow for accessing
-     | Eloquent model properties via camel case, instead of snake case.
-     |
-     | Enabling this option will support these packages by saving all model
-     | properties as camel case, instead of snake case.
-     |
-     | For example, normally you would see this:
-     |
-     |  * @property \Illuminate\Support\Carbon $created_at
-     |  * @property \Illuminate\Support\Carbon $updated_at
-     |
-     | With this enabled, the properties will be this:
-     |
-     |  * @property \Illuminate\Support\Carbon $createdAt
-     |  * @property \Illuminate\Support\Carbon $updatedAt
-     |
-     | Note, it is currently an all-or-nothing option.
-     |
-     */
-    'model_camel_case_properties' => FALSE,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Property Casts
-    |--------------------------------------------------------------------------
-    |
-    | Cast the given "real type" to the given "type".
-    |
-    */
-    'type_overrides' => [
-        'integer' => 'int',
-        'boolean' => 'bool',
-    ],
-];

+ 0 - 20
config/image.php

@@ -1,20 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Image Driver
-    |--------------------------------------------------------------------------
-    |
-    | Intervention Image supports "GD Library" and "Imagick" to process images
-    | internally. You may choose one of them according to your PHP
-    | configuration. By default PHP's "GD Library" implementation is used.
-    |
-    | Supported: "gd", "imagick"
-    |
-    */
-
-    'driver' => 'gd'
-
-];

+ 10 - 0
config/logging.php

@@ -1,5 +1,6 @@
 <?php
 
+use Monolog\Handler\NullHandler;
 use Monolog\Handler\StreamHandler;
 use Monolog\Handler\SyslogUdpHandler;
 
@@ -89,6 +90,15 @@ return [
             'driver' => 'errorlog',
             'level' => 'debug',
         ],
+
+        'null' => [
+            'driver' => 'monolog',
+            'handler' => NullHandler::class,
+        ],
+
+        'emergency' => [
+            'path' => storage_path('logs/laravel.log'),
+        ],
     ],
 
 ];

+ 52 - 78
config/mail.php

@@ -4,45 +4,73 @@ return [
 
     /*
     |--------------------------------------------------------------------------
-    | Mail Driver
+    | Default Mailer
     |--------------------------------------------------------------------------
     |
-    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
-    | sending of e-mail. You may specify which one you're using throughout
-    | your application here. By default, Laravel is setup for SMTP mail.
-    |
-    | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",
-    |            "sparkpost", "postmark", "log", "array"
+    | This option controls the default mailer that is used to send any email
+    | messages sent by your application. Alternative mailers may be setup
+    | and used as needed; however, this mailer will be used by default.
     |
     */
 
-    'driver' => env('MAIL_DRIVER', 'smtp'),
+    'default' => env('MAIL_MAILER', 'smtp'),
 
     /*
     |--------------------------------------------------------------------------
-    | SMTP Host Address
+    | Mailer Configurations
     |--------------------------------------------------------------------------
     |
-    | Here you may provide the host address of the SMTP server used by your
-    | applications. A default option is provided that is compatible with
-    | the Mailgun mail service which will provide reliable deliveries.
+    | Here you may configure all of the mailers used by your application plus
+    | their respective settings. Several examples have been configured for
+    | you and you are free to add your own as your application requires.
     |
-    */
-
-    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | SMTP Host Port
-    |--------------------------------------------------------------------------
+    | Laravel supports a variety of mail "transport" drivers to be used while
+    | sending an e-mail. You will specify which one you are using for your
+    | mailers below. You are free to add additional mailers as required.
     |
-    | This is the SMTP port used by your application to deliver e-mails to
-    | users of the application. Like the host we have set this value to
-    | stay compatible with the Mailgun e-mail application by default.
+    | Supported: "smtp", "sendmail", "mailgun", "ses",
+    |            "postmark", "log", "array"
     |
     */
 
-    'port' => env('MAIL_PORT', 587),
+    'mailers' => [
+        'smtp' => [
+            'transport' => 'smtp',
+            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+            'port' => env('MAIL_PORT', 587),
+            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
+            'username' => env('MAIL_USERNAME'),
+            'password' => env('MAIL_PASSWORD'),
+            'timeout' => null,
+            'auth_mode' => null,
+        ],
+
+        'ses' => [
+            'transport' => 'ses',
+        ],
+
+        'mailgun' => [
+            'transport' => 'mailgun',
+        ],
+
+        'postmark' => [
+            'transport' => 'postmark',
+        ],
+
+        'sendmail' => [
+            'transport' => 'sendmail',
+            'path' => '/usr/sbin/sendmail -bs',
+        ],
+
+        'log' => [
+            'transport' => 'log',
+            'channel' => env('MAIL_LOG_CHANNEL'),
+        ],
+
+        'array' => [
+            'transport' => 'array',
+        ],
+    ],
 
     /*
     |--------------------------------------------------------------------------
@@ -60,47 +88,6 @@ return [
         'name' => env('MAIL_FROM_NAME', 'Example'),
     ],
 
-    /*
-    |--------------------------------------------------------------------------
-    | E-Mail Encryption Protocol
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify the encryption protocol that should be used when
-    | the application send e-mail messages. A sensible default using the
-    | transport layer security protocol should provide great security.
-    |
-    */
-
-    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | SMTP Server Username
-    |--------------------------------------------------------------------------
-    |
-    | If your SMTP server requires a username for authentication, you should
-    | set it here. This will get used to authenticate with your server on
-    | connection. You may also set the "password" value below this one.
-    |
-    */
-
-    'username' => env('MAIL_USERNAME'),
-
-    'password' => env('MAIL_PASSWORD'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Sendmail System Path
-    |--------------------------------------------------------------------------
-    |
-    | When using the "sendmail" driver to send e-mails, we will need to know
-    | the path to where Sendmail lives on this server. A default path has
-    | been provided here, which will work well on most of your systems.
-    |
-    */
-
-    'sendmail' => '/usr/sbin/sendmail -bs',
-
     /*
     |--------------------------------------------------------------------------
     | Markdown Mail Settings
@@ -120,17 +107,4 @@ return [
         ],
     ],
 
-    /*
-    |--------------------------------------------------------------------------
-    | Log Channel
-    |--------------------------------------------------------------------------
-    |
-    | If you are using the "log" driver, you may specify the logging channel
-    | if you prefer to keep mail messages separate from other log entries
-    | for simpler reading. Otherwise, the default channel will be used.
-    |
-    */
-
-    'log_channel' => env('MAIL_LOG_CHANNEL'),
-
 ];

+ 0 - 30
config/paypal.php

@@ -1,30 +0,0 @@
-<?php
-/**
- * PayPal Setting & API Credentials
- * Created by Raza Mehdi <srmk@outlook.com>.
- */
-
-return [
-    'mode' => env('PAYPAL_MODE', 'sandbox'), // Can only be 'sandbox' Or 'live'. If empty or invalid, 'live' will be used.
-    'sandbox' => [
-        'username' => env('PAYPAL_SANDBOX_API_USERNAME', ''),
-        'password' => env('PAYPAL_SANDBOX_API_PASSWORD', ''),
-        'secret' => env('PAYPAL_SANDBOX_API_SECRET', ''),
-        'certificate' => env('PAYPAL_SANDBOX_API_CERTIFICATE', ''),
-        'app_id' => 'APP-80W284485P519543T', // Used for testing Adaptive Payments API in sandbox mode
-    ],
-    'live' => [
-        'username' => env('PAYPAL_LIVE_API_USERNAME', ''),
-        'password' => env('PAYPAL_LIVE_API_PASSWORD', ''),
-        'secret' => env('PAYPAL_LIVE_API_SECRET', ''),
-        'certificate' => env('PAYPAL_LIVE_API_CERTIFICATE', ''),
-        'app_id' => '', // Used for Adaptive Payments API
-    ],
-
-    'payment_action' => 'Sale', // Can only be 'Sale', 'Authorization' or 'Order'
-    'currency' => env('PAYPAL_CURRENCY', 'USD'),
-    'billing_type' => 'MerchantInitiatedBilling',
-    'notify_url' => '', // Change this accordingly for your application.
-    'locale' => 'zh-CN', // force gateway language  i.e. it_IT, es_ES, en_US ... (for express checkout only)
-    'validate_ssl' => TRUE, // Validate SSL when creating api client.
-];

+ 0 - 129
config/permission.php

@@ -1,129 +0,0 @@
-<?php
-
-return [
-
-    'models' => [
-
-        /*
-         * When using the "HasPermissions" trait from this package, we need to know which
-         * Eloquent model should be used to retrieve your permissions. Of course, it
-         * is often just the "Permission" model but you may use whatever you like.
-         *
-         * The model you want to use as a Permission model needs to implement the
-         * `Spatie\Permission\Contracts\Permission` contract.
-         */
-
-        'permission' => Spatie\Permission\Models\Permission::class,
-
-        /*
-         * When using the "HasRoles" trait from this package, we need to know which
-         * Eloquent model should be used to retrieve your roles. Of course, it
-         * is often just the "Role" model but you may use whatever you like.
-         *
-         * The model you want to use as a Role model needs to implement the
-         * `Spatie\Permission\Contracts\Role` contract.
-         */
-
-        'role' => Spatie\Permission\Models\Role::class,
-
-    ],
-
-    'table_names' => [
-
-        /*
-         * When using the "HasRoles" trait from this package, we need to know which
-         * table should be used to retrieve your roles. We have chosen a basic
-         * default value but you may easily change it to any table you like.
-         */
-
-        'roles' => 'roles',
-
-        /*
-         * When using the "HasPermissions" trait from this package, we need to know which
-         * table should be used to retrieve your permissions. We have chosen a basic
-         * default value but you may easily change it to any table you like.
-         */
-
-        'permissions' => 'permissions',
-
-        /*
-         * When using the "HasPermissions" trait from this package, we need to know which
-         * table should be used to retrieve your models permissions. We have chosen a
-         * basic default value but you may easily change it to any table you like.
-         */
-
-        'model_has_permissions' => 'model_has_permissions',
-
-        /*
-         * When using the "HasRoles" trait from this package, we need to know which
-         * table should be used to retrieve your models roles. We have chosen a
-         * basic default value but you may easily change it to any table you like.
-         */
-
-        'model_has_roles' => 'model_has_roles',
-
-        /*
-         * When using the "HasRoles" trait from this package, we need to know which
-         * table should be used to retrieve your roles permissions. We have chosen a
-         * basic default value but you may easily change it to any table you like.
-         */
-
-        'role_has_permissions' => 'role_has_permissions',
-    ],
-
-    'column_names' => [
-
-        /*
-         * Change this if you want to name the related model primary key other than
-         * `model_id`.
-         *
-         * For example, this would be nice if your primary keys are all UUIDs. In
-         * that case, name this `model_uuid`.
-         */
-
-        'model_morph_key' => 'model_id',
-    ],
-
-    /*
-     * When set to true, the required permission/role names are added to the exception
-     * message. This could be considered an information leak in some contexts, so
-     * the default setting is false here for optimum safety.
-     */
-
-    'display_permission_in_exception' => false,
-
-    'cache' => [
-
-        /*
-         * By default all permissions are cached for 24 hours to speed up performance.
-         * When permissions or roles are updated the cache is flushed automatically.
-         */
-
-        'expiration_time' => \DateInterval::createFromDateString('24 hours'),
-
-        /*
-         * The cache key used to store all permissions.
-         */
-
-        'key' => 'spatie.permission.cache',
-
-        /*
-         * When checking for a permission against a model by passing a Permission
-         * instance to the check, this key determines what attribute on the
-         * Permissions model is used to cache against.
-         *
-         * Ideally, this should match your preferred way of checking permissions, eg:
-         * `$user->can('view-posts')` would be 'name'.
-         */
-
-        'model_key' => 'name',
-
-        /*
-         * You may optionally indicate a specific cache driver to use for permission and
-         * role caching using any of the `store` drivers listed in the cache.php config
-         * file. Using 'default' here means to use the `default` set in cache.php.
-         */
-
-        'store' => 'default',
-    ],
-];

+ 0 - 105
config/purifier.php

@@ -1,105 +0,0 @@
-<?php
-/**
- * Ok, glad you are here
- * first we get a config instance, and set the settings
- * $config = HTMLPurifier_Config::createDefault();
- * $config->set('Core.Encoding', $this->config->get('purifier.encoding'));
- * $config->set('Cache.SerializerPath', $this->config->get('purifier.cachePath'));
- * if ( ! $this->config->get('purifier.finalize')) {
- *     $config->autoFinalize = false;
- * }
- * $config->loadArray($this->getConfig());
- *
- * You must NOT delete the default settings
- * anything in settings should be compacted with params that needed to instance HTMLPurifier_Config.
- *
- * @link http://htmlpurifier.org/live/configdoc/plain.html
- */
-
-return [
-    'encoding' => 'UTF-8',
-    'finalize' => TRUE,
-    'cachePath' => storage_path('app/purifier'),
-    'cacheFileMode' => 0755,
-    'settings' => [
-        'default' => [
-            'HTML.Doctype' => 'HTML 4.01 Transitional',
-            'HTML.Allowed' => 'div,b,strong,i,em,u,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]',
-            'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align',
-            'AutoFormat.AutoParagraph' => TRUE,
-            'AutoFormat.RemoveEmpty' => TRUE,
-        ],
-        'test' => [
-            'Attr.EnableID' => 'true',
-        ],
-        "youtube" => [
-            "HTML.SafeIframe" => 'true',
-            "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/)%",
-        ],
-        'custom_definition' => [
-            'id' => 'html5-definitions',
-            'rev' => 1,
-            'debug' => FALSE,
-            'elements' => [
-                // http://developers.whatwg.org/sections.html
-                ['section', 'Block', 'Flow', 'Common'],
-                ['nav', 'Block', 'Flow', 'Common'],
-                ['article', 'Block', 'Flow', 'Common'],
-                ['aside', 'Block', 'Flow', 'Common'],
-                ['header', 'Block', 'Flow', 'Common'],
-                ['footer', 'Block', 'Flow', 'Common'],
-
-                // Content model actually excludes several tags, not modelled here
-                ['address', 'Block', 'Flow', 'Common'],
-                ['hgroup', 'Block', 'Required: h1 | h2 | h3 | h4 | h5 | h6', 'Common'],
-
-                // http://developers.whatwg.org/grouping-content.html
-                ['figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common'],
-                ['figcaption', 'Inline', 'Flow', 'Common'],
-
-                // http://developers.whatwg.org/the-video-element.html#the-video-element
-                ['video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [
-                    'src' => 'URI',
-                    'type' => 'Text',
-                    'width' => 'Length',
-                    'height' => 'Length',
-                    'poster' => 'URI',
-                    'preload' => 'Enum#auto,metadata,none',
-                    'controls' => 'Bool',
-                ]],
-                ['source', 'Block', 'Flow', 'Common', [
-                    'src' => 'URI',
-                    'type' => 'Text',
-                ]],
-
-                // http://developers.whatwg.org/text-level-semantics.html
-                ['s', 'Inline', 'Inline', 'Common'],
-                ['var', 'Inline', 'Inline', 'Common'],
-                ['sub', 'Inline', 'Inline', 'Common'],
-                ['sup', 'Inline', 'Inline', 'Common'],
-                ['mark', 'Inline', 'Inline', 'Common'],
-                ['wbr', 'Inline', 'Empty', 'Core'],
-
-                // http://developers.whatwg.org/edits.html
-                ['ins', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']],
-                ['del', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']],
-            ],
-            'attributes' => [
-                ['iframe', 'allowfullscreen', 'Bool'],
-                ['table', 'height', 'Text'],
-                ['td', 'border', 'Text'],
-                ['th', 'border', 'Text'],
-                ['tr', 'width', 'Text'],
-                ['tr', 'height', 'Text'],
-                ['tr', 'border', 'Text'],
-            ],
-        ],
-        'custom_attributes' => [
-            ['a', 'target', 'Enum#_blank,_self,_target,_top'],
-        ],
-        'custom_elements' => [
-            ['u', 'Inline', 'Inline', 'Common'],
-        ],
-    ],
-
-];

+ 2 - 0
config/queue.php

@@ -55,6 +55,7 @@ return [
             'secret' => env('AWS_SECRET_ACCESS_KEY'),
             'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
             'queue' => env('SQS_QUEUE', 'your-queue-name'),
+            'suffix' => env('SQS_SUFFIX'),
             'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
         ],
 
@@ -80,6 +81,7 @@ return [
     */
 
     'failed' => [
+        'driver' => env('QUEUE_FAILED_DRIVER', 'database'),
         'database' => env('DB_CONNECTION', 'mysql'),
         'table' => 'failed_jobs',
     ],

+ 1 - 5
config/services.php

@@ -8,7 +8,7 @@ return [
     |--------------------------------------------------------------------------
     |
     | This file is for storing the credentials for third party services such
-    | as Mailgun, SparkPost and others. This file provides a sane default
+    | as Mailgun, Postmark, AWS and more. This file provides the de facto
     | location for this type of information, allowing packages to have
     | a conventional file to locate the various service credentials.
     |
@@ -30,8 +30,4 @@ return [
         'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
     ],
 
-    'sparkpost' => [
-        'secret' => env('SPARKPOST_SECRET'),
-    ],
-
 ];

+ 7 - 5
config/session.php

@@ -92,10 +92,12 @@ return [
     | Session Cache Store
     |--------------------------------------------------------------------------
     |
-    | When using the "apc", "memcached", or "dynamodb" session drivers you may
+    | While using one of the framework's cache driven session backends you may
     | list a cache store that should be used for these sessions. This value
     | must match with one of the application's configured cache "stores".
     |
+    | Affects: "apc", "dynamodb", "memcached", "redis"
+    |
     */
 
     'store' => env('SESSION_STORE', null),
@@ -166,7 +168,7 @@ return [
     |
     */
 
-    'secure' => env('SESSION_SECURE_COOKIE', false),
+    'secure' => env('SESSION_SECURE_COOKIE'),
 
     /*
     |--------------------------------------------------------------------------
@@ -188,12 +190,12 @@ return [
     |
     | This option determines how your cookies behave when cross-site requests
     | take place, and can be used to mitigate CSRF attacks. By default, we
-    | do not enable this as other CSRF protection services are in place.
+    | will set this value to "lax" since this is a secure default value.
     |
-    | Supported: "lax", "strict"
+    | Supported: "lax", "strict", "none", null
     |
     */
 
-    'same_site' => null,
+    'same_site' => 'lax',
 
 ];

+ 0 - 33
config/tinker.php

@@ -1,33 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Console Commands
-    |--------------------------------------------------------------------------
-    |
-    | This option allows you to add additional Artisan commands that should
-    | be available within the Tinker environment. Once the command is in
-    | this array you may execute the command in Tinker using its name.
-    |
-    */
-
-    'commands' => [
-        // App\Console\Commands\ExampleCommand::class,
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Alias Blacklist
-    |--------------------------------------------------------------------------
-    |
-    | Typically, Tinker automatically aliases classes as you require them in
-    | Tinker. However, you may wish to never alias certain classes, which
-    | you may accomplish by listing the classes in the following array.
-    |
-    */
-
-    'dont_alias' => [],
-
-];

+ 0 - 50
config/trustedproxy.php

@@ -1,50 +0,0 @@
-<?php
-
-return [
-
-    /*
-     * Set trusted proxy IP addresses.
-     *
-     * Both IPv4 and IPv6 addresses are
-     * supported, along with CIDR notation.
-     *
-     * The "*" character is syntactic sugar
-     * within TrustedProxy to trust any proxy
-     * that connects directly to your server,
-     * a requirement when you cannot know the address
-     * of your proxy (e.g. if using ELB or similar).
-     *
-     */
-    'proxies' => NULL, // [<ip addresses>,], '*', '<ip addresses>,'
-
-    /*
-     * To trust one or more specific proxies that connect
-     * directly to your server, use an array or a string separated by comma of IP addresses:
-     */
-    // 'proxies' => ['192.168.1.1'],
-    // 'proxies' => '192.168.1.1, 192.168.1.2',
-
-    /*
-     * Or, to trust all proxies that connect
-     * directly to your server, use a "*"
-     */
-    // 'proxies' => '*',
-
-    /*
-     * Which headers to use to detect proxy related data (For, Host, Proto, Port)
-     *
-     * Options include:
-     *
-     * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust)
-     * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust)
-     * - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer)
-     *
-     * - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust)
-     * - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust)
-     * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)
-     *
-     * @link https://symfony.com/doc/current/deployment/proxies.html
-     */
-    'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
-
-];

+ 2 - 1
database/factories/UserFactory.php

@@ -1,9 +1,10 @@
 <?php
 
 /** @var \Illuminate\Database\Eloquent\Factory $factory */
+
 use App\User;
-use Illuminate\Support\Str;
 use Faker\Generator as Faker;
+use Illuminate\Support\Str;
 
 /*
 |--------------------------------------------------------------------------

+ 1 - 1
database/seeds/DatabaseSeeder.php

@@ -11,6 +11,6 @@ class DatabaseSeeder extends Seeder
      */
     public function run()
     {
-        // $this->call(UsersTableSeeder::class);
+        // $this->call(UserSeeder::class);
     }
 }

+ 0 - 7
fix_git.sh

@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-# Clear local git cache
-# Author:SSRPanel
-
-git rm -r --cached .
-git add .
-git commit -m 'update .gitignore'

+ 6 - 10
package.json

@@ -5,21 +5,17 @@
         "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
         "watch": "npm run development -- --watch",
         "watch-poll": "npm run watch -- --watch-poll",
-        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
+        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
         "prod": "npm run production",
         "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
     },
     "devDependencies": {
         "axios": "^0.19",
-        "bootstrap": "^4.1.0",
-        "cross-env": "^5.1",
-        "jquery": "^3.2",
-        "laravel-mix": "^4.0.7",
-        "lodash": "^4.17.13",
-        "popper.js": "^1.12",
-        "resolve-url-loader": "^2.3.1",
+        "cross-env": "^7.0",
+        "laravel-mix": "^5.0.1",
+        "lodash": "^4.17.19",
+        "resolve-url-loader": "^3.1.0",
         "sass": "^1.15.2",
-        "sass-loader": "^7.1.0",
-        "vue": "^2.5.17"
+        "sass-loader": "^8.0.0"
     }
 }

+ 7 - 8
phpunit.xml

@@ -1,13 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit backupGlobals="false"
-         backupStaticAttributes="false"
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
          bootstrap="vendor/autoload.php"
          colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false">
+>
     <testsuites>
         <testsuite name="Unit">
             <directory suffix="Test.php">./tests/Unit</directory>
@@ -26,8 +22,11 @@
         <server name="APP_ENV" value="testing"/>
         <server name="BCRYPT_ROUNDS" value="4"/>
         <server name="CACHE_DRIVER" value="array"/>
-        <server name="MAIL_DRIVER" value="array"/>
+        <!-- <server name="DB_CONNECTION" value="sqlite"/> -->
+        <!-- <server name="DB_DATABASE" value=":memory:"/> -->
+        <server name="MAIL_MAILER" value="array"/>
         <server name="QUEUE_CONNECTION" value="sync"/>
         <server name="SESSION_DRIVER" value="array"/>
+        <server name="TELESCOPE_ENABLED" value="false"/>
     </php>
 </phpunit>

+ 1 - 1
public/.htaccess

@@ -14,7 +14,7 @@
     RewriteCond %{REQUEST_URI} (.+)/$
     RewriteRule ^ %1 [L,R=301]
 
-    # Handle Front Controller...
+    # Send Requests To Front Controller...
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^ index.php [L]

+ 0 - 3
public/nginx.htaccess

@@ -1,3 +0,0 @@
-location / {
-    try_files $uri $uri/ /index.php$is_args$args;
-}

+ 1 - 1
queue.sh

@@ -4,7 +4,7 @@ ps -ef | grep queue:work | grep -v grep
 if [ $? -ne 0 ]
 then
     echo "启动队列监听"
-    nohup php artisan queue:work redis --daemon --queue=default --timeout=120 --tries=3 -vvv >> ./queue.log 2>&1 &
+    nohup php artisan queue:work redis --queue=default --timeout=120 --tries=3 -vvv >> ./queue.log 2>&1 &
 else
     echo "队列监听中"
 fi

+ 0 - 31
resources/js/app.js

@@ -1,32 +1 @@
-/**
- * First we will load all of this project's JavaScript dependencies which
- * includes Vue and other libraries. It is a great starting point when
- * building robust, powerful web applications using Vue and Laravel.
- */
-
 require('./bootstrap');
-
-window.Vue = require('vue');
-
-/**
- * The following block of code may be used to automatically register your
- * Vue components. It will recursively scan this directory for the Vue
- * components and automatically register them with their "basename".
- *
- * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
- */
-
-// const files = require.context('./', true, /\.vue$/i);
-// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));
-
-Vue.component('example-component', require('./components/ExampleComponent.vue').default);
-
-/**
- * Next, we will create a fresh Vue application instance and attach it to
- * the page. Then, you may begin adding components to this application
- * or customize the JavaScript scaffolding to fit your unique needs.
- */
-
-const app = new Vue({
-    el: '#app',
-});

+ 1 - 14
resources/js/bootstrap.js

@@ -1,18 +1,5 @@
 window._ = require('lodash');
 
-/**
- * We'll load jQuery and the Bootstrap jQuery plugin which provides support
- * for JavaScript based Bootstrap features such as modals and tabs. This
- * code may be modified to fit the specific needs of your application.
- */
-
-try {
-    window.Popper = require('popper.js').default;
-    window.$ = window.jQuery = require('jquery');
-
-    require('bootstrap');
-} catch (e) {}
-
 /**
  * We'll load the axios HTTP library which allows us to easily issue requests
  * to our Laravel back-end. This library automatically handles sending the
@@ -37,5 +24,5 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
 //     broadcaster: 'pusher',
 //     key: process.env.MIX_PUSHER_APP_KEY,
 //     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
-//     encrypted: true
+//     forceTLS: true
 // });

+ 1 - 1
resources/views/auth/error.blade.php

@@ -55,7 +55,7 @@
 <div class="page vertical-align text-center" data-animsition-in="fade-in" data-animsition-out="fade-out">
 	<div class="page-content vertical-align-middle">
 		<header>
-			<h1 class="animation-slide-top">(。・_・。)ノI’m sorry~</h1>
+			<h3 class="animation-slide-top">(。・_・。)ノI’m sorry~</h3>
 			<p>{{trans('error.title')}}</p>
 		</header>
 		<p class="error-advise">{!! $message !!}</p>

+ 4 - 5
resources/views/auth/login.blade.php

@@ -30,23 +30,22 @@
 			<div class="form-group form-material floating input-group" data-plugin="formMaterial">
 				<input type="text" class="form-control" name="captcha"/>
 				<label class="floating-label" for="captcha">{{trans('auth.captcha')}}</label>
-				<img src="{{captcha_src()}}" class="float-right" onclick="this.src='/captcha/default?'+Math.random()"
-						alt="{{trans('auth.captcha')}}"/>
+				<img src="{{captcha_src()}}" class="float-right" onclick="this.src='/captcha/default?'+Math.random()" alt="{{trans('auth.captcha')}}"/>
 			</div>
 			@break
 			@case(2)<!-- Geetest -->
-			<div class="form-group form-material floating" data-plugin="formMaterial">
+			<div class="form-group form-material floating vertical-align-middle" data-plugin="formMaterial">
 				{!! Geetest::render() !!}
 			</div>
 			@break
 			@case(3)<!-- Google reCaptcha -->
-			<div class="form-group form-material floating" data-plugin="formMaterial">
+			<div class="form-group form-material floating vertical-align-middle" data-plugin="formMaterial">
 				{!! NoCaptcha::display() !!}
 				{!! NoCaptcha::renderJs(session::get('locale')) !!}
 			</div>
 			@break
 			@case(4)<!-- hCaptcha -->
-			<div class="form-group form-material floating" data-plugin="formMaterial">
+			<div class="form-group form-material floating vertical-align-middle" data-plugin="formMaterial">
 				{!! HCaptcha::display() !!}
 				{!! HCaptcha::renderJs(session::get('locale')) !!}
 			</div>

+ 0 - 74
resources/views/vendor/geetest/geetest.blade.php

@@ -1,74 +0,0 @@
-<script src="https://cdnjs.loli.net/ajax/libs/jquery/2.1.0/jquery.min.js" type="text/javascript"></script>
-<script src="/assets/geetest/gt.js" type="text/javascript"></script>
-<div id="{{ $captchaid }}"></div>
-<p id="wait-{{ $captchaid }}" class="show">{{trans('auth.captcha_loading')}}</p>
-@define use Illuminate\Support\Facades\Config
-<script>
-	var geetest = function (url) {
-		var handlerEmbed = function (captchaObj) {
-			$("#{{ $captchaid }}").closest('form').submit(function (e) {
-				// captchaObj.verify();
-				var validate = captchaObj.getValidate();
-				if (!validate) {
-					Msg(false, "{{trans('auth.captcha_required')}}", 'error');
-					e.preventDefault();
-				}
-			});
-			captchaObj.appendTo("#{{ $captchaid }}");
-			captchaObj.onReady(function () {
-				$("#wait-{{ $captchaid }}")[0].className = "hide";
-			});
-			if ('{{ $product }}' == 'popup') {
-				captchaObj.bindOn($('#{{ $captchaid }}').closest('form').find(':submit'));
-				captchaObj.appendTo("#{{ $captchaid }}");
-			}
-		};
-
-		// 前端第一次验证
-		$.ajax({
-			url: url + "?t=" + (new Date()).getTime(),
-			type: "get",
-			dataType: "json",
-			success: function (data) {
-				initGeetest({
-					gt: data.gt,
-					challenge: data.challenge,
-					product: "{{ $product?$product:Config::get('geetest.product', 'float') }}",
-					offline: !data.success, // 表示用户后台检测极验服务器是否宕机
-					new_captcha: data.new_captcha,  // 用于宕机时表示是新验证码的宕机
-					lang: '{{session::get('locale', 'zh-cn')}}', // 免费版本仅支持中文
-					http: '{{ Config::get('geetest.protocol', 'http') }}' + '://',
-					width: '100%'
-				}, handlerEmbed);
-			}
-		});
-	};
-
-	function Msg(clear, msg, type) {
-		if (!clear) $('.login-form .alert, .register-form .alert').remove();
-
-		var typeClass = 'alert-danger',
-			clear = clear ? clear : false,
-			$elem = $('.login-form, .register-form');
-		type === 'error' ? typeClass = 'alert-danger' : typeClass = 'alert-success';
-
-		var tpl = '<div class="alert ' + typeClass + '">' +
-			'<button class="close" data-close="alert"></button>' +
-			'<span> ' + msg + ' </span></div>';
-
-		if (!clear) {
-			$elem.prepend(tpl);
-		} else {
-			$('.login-form .alert, .register-form .alert').remove();
-		}
-	}
-
-	(function () {
-		geetest('{{ $url?$url:Config::get('geetest.url', 'geetest') }}');
-	})();
-</script>
-<style type="text/css">
-    .hide {
-        display: none;
-    }
-</style>

+ 0 - 223
resources/views/vendor/laravel-log-viewer/log.blade.php

@@ -1,223 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{app()->getLocale()}}">
-<head>
-	<meta charset="utf-8">
-	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-	<meta name="robots" content="noindex, nofollow">
-	<title>系统运行日志</title>
-	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
-	<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">
-	<style type="text/css">
-        body {
-            padding: 25px;
-        }
-
-        h1 {
-            font-size: 1.5em;
-            margin-top: 0;
-        }
-
-        #table-log {
-            font-size: 0.85rem;
-        }
-
-        .sidebar {
-            font-size: 0.85rem;
-            line-height: 1;
-        }
-
-        .btn {
-            font-size: 0.7rem;
-        }
-
-        .stack {
-            font-size: 0.85em;
-        }
-
-        .date {
-            min-width: 75px;
-        }
-
-        .text {
-            word-break: break-all;
-        }
-
-        a.llv-active {
-            z-index: 2;
-            background-color: #f5f5f5;
-            border-color: #777;
-        }
-
-        .list-group-item {
-            word-wrap: break-word;
-        }
-
-        .folder {
-            padding-top: 15px;
-        }
-
-        .div-scroll {
-            height: 80vh;
-            overflow: hidden auto;
-        }
-
-        .nowrap {
-            white-space: nowrap;
-        }
-
-	</style>
-</head>
-<body>
-<div class="container-fluid">
-	<div class="row">
-		<div class="col sidebar mb-3">
-			<h1><i class="fa fa-calendar" aria-hidden="true"></i> 系统运行日志 </h1>
-			<div class="list-group div-scroll">
-				@foreach($folders as $folder)
-					<div class="list-group-item">
-						<a href="?f={{ \Illuminate\Support\Facades\Crypt::encrypt($folder) }}">
-							<span class="fa fa-folder"></span> {{$folder}}
-						</a>
-						@if ($current_folder == $folder)
-							<div class="list-group folder">
-								@foreach($folder_files as $file)
-									<a href="?l={{ \Illuminate\Support\Facades\Crypt::encrypt($file) }}&f={{ \Illuminate\Support\Facades\Crypt::encrypt($folder) }}"
-											class="list-group-item @if ($current_file == $file) llv-active @endif">
-										{{$file}}
-									</a>
-								@endforeach
-							</div>
-						@endif
-					</div>
-				@endforeach
-				@foreach($files as $file)
-					<a href="?l={{ \Illuminate\Support\Facades\Crypt::encrypt($file) }}"
-							class="list-group-item @if ($current_file == $file) llv-active @endif">
-						{{$file}}
-					</a>
-				@endforeach
-			</div>
-		</div>
-		<div class="col-10 table-container">
-			@if ($logs === NULL)
-				<div>
-					Log file >50M, please download it.
-				</div>
-			@else
-				<table id="table-log" class="table table-striped" data-ordering-index="{{ $standardFormat ? 2 : 0 }}">
-					<thead>
-					<tr>
-						@if ($standardFormat)
-							<th>Level</th>
-							<th>Context</th>
-							<th>Date</th>
-						@else
-							<th>Line number</th>
-						@endif
-						<th>Content</th>
-					</tr>
-					</thead>
-					<tbody>
-
-					@foreach($logs as $key => $log)
-						<tr data-display="stack{{{$key}}}">
-							@if ($standardFormat)
-								<td class="nowrap text-{{{$log['level_class']}}}">
-									<span class="fa fa-{{{$log['level_img']}}}"
-											aria-hidden="true"></span>&nbsp;&nbsp;{{$log['level']}}
-								</td>
-								<td class="text">{{$log['context']}}</td>
-							@endif
-							<td class="date">{{{$log['date']}}}</td>
-							<td class="text">
-								@if ($log['stack'])
-									<button type="button"
-											class="float-right expand btn btn-outline-dark btn-sm mb-2 ml-2"
-											data-display="stack{{{$key}}}">
-										<span class="fa fa-search"></span>
-									</button>
-								@endif
-								{{{$log['text']}}}
-								@if (isset($log['in_file']))
-									<br/>{{{$log['in_file']}}}
-								@endif
-								@if ($log['stack'])
-									<div class="stack" id="stack{{{$key}}}"
-											style="display: none; white-space: pre-wrap;">{{{ trim($log['stack']) }}}
-									</div>
-								@endif
-							</td>
-						</tr>
-					@endforeach
-
-					</tbody>
-				</table>
-			@endif
-			<div class="p-3">
-				@if($current_file)
-					<a href="?dl={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
-						<span class="fa fa-download"></span> 下 载
-					</a>
-					-
-					<a id="clean-log"
-							href="?clean={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
-						<span class="fa fa-sync"></span> 清 空
-					</a>
-					-
-					<a id="delete-log"
-							href="?del={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
-						<span class="fa fa-trash"></span> 删 除
-					</a>
-					@if(count($files) > 1)
-					-
-						<a id="delete-all-log"
-								href="?delall=true{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
-							<span class="fa fa-trash-alt"></span> 删除全部
-						</a>
-					@endif
-				@endif
-			</div>
-		</div>
-	</div>
-</div>
-<!-- jQuery for Bootstrap -->
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
-<!-- FontAwesome -->
-<script defer src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
-<!-- Datatables -->
-<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
-<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>
-<script type="text/javascript">
-	$(document).ready(function () {
-		$('.table-container tr').on('click', function () {
-			$('#' + $(this).data('display')).toggle();
-		});
-		$('#table-log').DataTable({
-			"order": [$('#table-log').data('orderingIndex'), 'desc'],
-			"stateSave": true,
-			"stateSaveCallback": function (settings, data) {
-				window.localStorage.setItem("datatable", JSON.stringify(data));
-			},
-			"stateLoadCallback": function (settings) {
-				var data = JSON.parse(window.localStorage.getItem("datatable"));
-				if (data) data.start = 0;
-				return data;
-			},
-			"language": {
-				"lengthMenu": "每页 _MENU_ 条",
-				"paginate": {
-					"previous": "上一页",
-					"next": "下一页"
-				},
-				"search": "搜索",
-				"info": "第 _PAGE_ 页,共 _PAGES_ 页"
-			}
-		});
-		$('#delete-log, #clean-log, #delete-all-log').click(function () {
-			return confirm('确定继续吗?');
-		});
-	});
-</script>
-</body>
-</html>

+ 0 - 20
resources/views/vendor/mail/html/button.blade.php

@@ -1,20 +0,0 @@
-<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0">
-	<tr>
-		<td align="center">
-			<table width="100%" border="0" cellpadding="0" cellspacing="0">
-				<tr>
-					<td align="center">
-						<table border="0" cellpadding="0" cellspacing="0">
-							<tr>
-								<td>
-									<a href="{{ $url }}" class="button button-{{ $color or 'blue' }}"
-											target="_blank">{{ $slot }}</a>
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-</table>

+ 0 - 11
resources/views/vendor/mail/html/footer.blade.php

@@ -1,11 +0,0 @@
-<tr>
-	<td>
-		<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0">
-			<tr>
-				<td class="content-cell" align="center">
-					{{ Illuminate\Mail\Markdown::parse($slot) }}
-				</td>
-			</tr>
-		</table>
-	</td>
-</tr>

+ 0 - 7
resources/views/vendor/mail/html/header.blade.php

@@ -1,7 +0,0 @@
-<tr>
-	<td class="header">
-		<a href="{{$url}}">
-			{{$slot}}
-		</a>
-	</td>
-</tr>

+ 0 - 55
resources/views/vendor/mail/html/layout.blade.php

@@ -1,55 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-</head>
-<body>
-<style type="text/css">
-    @media only screen and (max-width: 600px) {
-        .inner-body {
-            width: 100% !important;
-        }
-
-        .footer {
-            width: 100% !important;
-        }
-    }
-
-    @media only screen and (max-width: 500px) {
-        .button {
-            width: 100% !important;
-        }
-    }
-</style>
-
-<table class="wrapper" width="100%" cellpadding="0" cellspacing="0">
-	<tr>
-		<td align="center">
-			<table class="content" width="100%" cellpadding="0" cellspacing="0">
-			{{ $header or '' }}
-
-			<!-- Email Body -->
-				<tr>
-					<td class="body" width="100%" cellpadding="0" cellspacing="0">
-						<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0">
-							<!-- Body content -->
-							<tr>
-								<td class="content-cell">
-									{{ Illuminate\Mail\Markdown::parse($slot) }}
-
-									{{ $subcopy or '' }}
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-
-				{{ $footer or '' }}
-			</table>
-		</td>
-	</tr>
-</table>
-</body>
-</html>

+ 0 - 27
resources/views/vendor/mail/html/message.blade.php

@@ -1,27 +0,0 @@
-@component('mail::layout')
-{{-- Header --}}
-@slot('header')
-@component('mail::header', ['url' => config('app.url')])
-{{ config('app.name') }}
-@endcomponent
-@endslot
-
-{{-- Body --}}
-{{ $slot }}
-
-{{-- Subcopy --}}
-@isset($subcopy)
-@slot('subcopy')
-@component('mail::subcopy')
-{{ $subcopy }}
-@endcomponent
-@endslot
-@endisset
-
-{{-- Footer --}}
-@slot('footer')
-@component('mail::footer')
-&copy; {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
-@endcomponent
-@endslot
-@endcomponent

+ 0 - 13
resources/views/vendor/mail/html/panel.blade.php

@@ -1,13 +0,0 @@
-<table class="panel" width="100%" cellpadding="0" cellspacing="0">
-	<tr>
-		<td class="panel-content">
-			<table width="100%" cellpadding="0" cellspacing="0">
-				<tr>
-					<td class="panel-item">
-						{{ Illuminate\Mail\Markdown::parse($slot) }}
-					</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-</table>

+ 0 - 7
resources/views/vendor/mail/html/promotion.blade.php

@@ -1,7 +0,0 @@
-<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0">
-	<tr>
-		<td align="center">
-			{{ Illuminate\Mail\Markdown::parse($slot) }}
-		</td>
-	</tr>
-</table>

+ 0 - 13
resources/views/vendor/mail/html/promotion/button.blade.php

@@ -1,13 +0,0 @@
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-	<tr>
-		<td align="center">
-			<table border="0" cellpadding="0" cellspacing="0">
-				<tr>
-					<td>
-						<a href="{{ $url }}" class="button button-green" target="_blank">{{ $slot }}</a>
-					</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-</table>

+ 0 - 7
resources/views/vendor/mail/html/subcopy.blade.php

@@ -1,7 +0,0 @@
-<table class="subcopy" width="100%" cellpadding="0" cellspacing="0">
-	<tr>
-		<td>
-			{{ Illuminate\Mail\Markdown::parse($slot) }}
-		</td>
-	</tr>
-</table>

+ 0 - 3
resources/views/vendor/mail/html/table.blade.php

@@ -1,3 +0,0 @@
-<div class="table">
-	{{ Illuminate\Mail\Markdown::parse($slot) }}
-</div>

+ 0 - 285
resources/views/vendor/mail/html/themes/default.css

@@ -1,285 +0,0 @@
-/* Base */
-
-body, body *:not(html):not(style):not(br):not(tr):not(code) {
-    font-family: Avenir, Helvetica, sans-serif;
-    box-sizing: border-box;
-}
-
-body {
-    background-color: #f5f8fa;
-    color: #74787E;
-    height: 100%;
-    hyphens: auto;
-    line-height: 1.4;
-    margin: 0;
-    -moz-hyphens: auto;
-    -ms-word-break: break-all;
-    width: 100% !important;
-    -webkit-hyphens: auto;
-    -webkit-text-size-adjust: none;
-    word-break: break-all;
-    word-break: break-word;
-}
-
-p,
-ul,
-ol,
-blockquote {
-    line-height: 1.4;
-    text-align: left;
-}
-
-a {
-    color: #3869D4;
-}
-
-a img {
-    border: none;
-}
-
-/* Typography */
-
-h1 {
-    color: #2F3133;
-    font-size: 19px;
-    font-weight: bold;
-    margin-top: 0;
-    text-align: left;
-}
-
-h2 {
-    color: #2F3133;
-    font-size: 16px;
-    font-weight: bold;
-    margin-top: 0;
-    text-align: left;
-}
-
-h3 {
-    color: #2F3133;
-    font-size: 14px;
-    font-weight: bold;
-    margin-top: 0;
-    text-align: left;
-}
-
-p {
-    color: #74787E;
-    font-size: 16px;
-    line-height: 1.5em;
-    margin-top: 0;
-    text-align: left;
-}
-
-p.sub {
-    font-size: 12px;
-}
-
-img {
-    max-width: 100%;
-}
-
-/* Layout */
-
-.wrapper {
-    background-color: #f5f8fa;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-.content {
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-/* Header */
-
-.header {
-    padding: 25px 0;
-    text-align: center;
-}
-
-.header a {
-    color: #bbbfc3;
-    font-size: 19px;
-    font-weight: bold;
-    text-decoration: none;
-    text-shadow: 0 1px 0 white;
-}
-
-/* Body */
-
-.body {
-    background-color: #FFFFFF;
-    border-bottom: 1px solid #EDEFF2;
-    border-top: 1px solid #EDEFF2;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-.inner-body {
-    background-color: #FFFFFF;
-    margin: 0 auto;
-    padding: 0;
-    width: 570px;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 570px;
-}
-
-/* Subcopy */
-
-.subcopy {
-    border-top: 1px solid #EDEFF2;
-    margin-top: 25px;
-    padding-top: 25px;
-}
-
-.subcopy p {
-    font-size: 12px;
-}
-
-/* Footer */
-
-.footer {
-    margin: 0 auto;
-    padding: 0;
-    text-align: center;
-    width: 570px;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 570px;
-}
-
-.footer p {
-    color: #AEAEAE;
-    font-size: 12px;
-    text-align: center;
-}
-
-/* Tables */
-
-.table table {
-    margin: 30px auto;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-.table th {
-    border-bottom: 1px solid #EDEFF2;
-    padding-bottom: 8px;
-}
-
-.table td {
-    color: #74787E;
-    font-size: 15px;
-    line-height: 18px;
-    padding: 10px 0;
-}
-
-.content-cell {
-    padding: 35px;
-}
-
-/* Buttons */
-
-.action {
-    margin: 30px auto;
-    padding: 0;
-    text-align: center;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-.button {
-    border-radius: 3px;
-    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
-    color: #FFF;
-    display: inline-block;
-    text-decoration: none;
-    -webkit-text-size-adjust: none;
-}
-
-.button-blue {
-    background-color: #3097D1;
-    border-top: 10px solid #3097D1;
-    border-right: 18px solid #3097D1;
-    border-bottom: 10px solid #3097D1;
-    border-left: 18px solid #3097D1;
-}
-
-.button-green {
-    background-color: #2ab27b;
-    border-top: 10px solid #2ab27b;
-    border-right: 18px solid #2ab27b;
-    border-bottom: 10px solid #2ab27b;
-    border-left: 18px solid #2ab27b;
-}
-
-.button-red {
-    background-color: #bf5329;
-    border-top: 10px solid #bf5329;
-    border-right: 18px solid #bf5329;
-    border-bottom: 10px solid #bf5329;
-    border-left: 18px solid #bf5329;
-}
-
-/* Panels */
-
-.panel {
-    margin: 0 0 21px;
-}
-
-.panel-content {
-    background-color: #EDEFF2;
-    padding: 16px;
-}
-
-.panel-item {
-    padding: 0;
-}
-
-.panel-item p:last-of-type {
-    margin-bottom: 0;
-    padding-bottom: 0;
-}
-
-/* Promotions */
-
-.promotion {
-    background-color: #FFFFFF;
-    border: 2px dashed #9BA2AB;
-    margin: 0;
-    margin-bottom: 25px;
-    margin-top: 25px;
-    padding: 24px;
-    width: 100%;
-    -premailer-cellpadding: 0;
-    -premailer-cellspacing: 0;
-    -premailer-width: 100%;
-}
-
-.promotion h1 {
-    text-align: center;
-}
-
-.promotion p {
-    font-size: 15px;
-    text-align: center;
-}

+ 0 - 1
resources/views/vendor/mail/markdown/button.blade.php

@@ -1 +0,0 @@
-{{ $slot }}: {{ $url }}

+ 0 - 1
resources/views/vendor/mail/markdown/footer.blade.php

@@ -1 +0,0 @@
-{{ $slot }}

+ 0 - 1
resources/views/vendor/mail/markdown/header.blade.php

@@ -1 +0,0 @@
-[{{ $slot }}]({{ $url }})

+ 0 - 9
resources/views/vendor/mail/markdown/layout.blade.php

@@ -1,9 +0,0 @@
-{!! strip_tags($header) !!}
-
-{!! strip_tags($slot) !!}
-@isset($subcopy)
-
-	{!! strip_tags($subcopy) !!}
-@endisset
-
-{!! strip_tags($footer) !!}

+ 0 - 27
resources/views/vendor/mail/markdown/message.blade.php

@@ -1,27 +0,0 @@
-@component('mail::layout')
-	{{-- Header --}}
-	@slot('header')
-		@component('mail::header', ['url' => config('app.url')])
-			{{ config('app.name') }}
-		@endcomponent
-	@endslot
-
-	{{-- Body --}}
-	{{ $slot }}
-
-	{{-- Subcopy --}}
-	@isset($subcopy)
-		@slot('subcopy')
-			@component('mail::subcopy')
-				{{ $subcopy }}
-			@endcomponent
-		@endslot
-	@endisset
-
-	{{-- Footer --}}
-	@slot('footer')
-		@component('mail::footer')
-			© {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
-		@endcomponent
-	@endslot
-@endcomponent

+ 0 - 1
resources/views/vendor/mail/markdown/panel.blade.php

@@ -1 +0,0 @@
-{{ $slot }}

+ 0 - 1
resources/views/vendor/mail/markdown/promotion.blade.php

@@ -1 +0,0 @@
-{{ $slot }}

+ 0 - 1
resources/views/vendor/mail/markdown/promotion/button.blade.php

@@ -1 +0,0 @@
-[{{ $slot }}]({{ $url }})

+ 0 - 1
resources/views/vendor/mail/markdown/subcopy.blade.php

@@ -1 +0,0 @@
-{{ $slot }}

+ 0 - 1
resources/views/vendor/mail/markdown/table.blade.php

@@ -1 +0,0 @@
-{{ $slot }}

+ 0 - 58
resources/views/vendor/notifications/email.blade.php

@@ -1,58 +0,0 @@
-@component('mail::message')
-	{{-- Greeting --}}
-	@if (! empty($greeting))
-		# {{ $greeting }}
-	@else
-		@if ($level == 'error')
-			# Whoops!
-		@else
-			# Hello!
-		@endif
-	@endif
-
-	{{-- Intro Lines --}}
-	@foreach ($introLines as $line)
-		{{ $line }}
-
-	@endforeach
-
-	{{-- Action Button --}}
-	@isset($actionText)
-		<?php
-		switch($level){
-			case 'success':
-				$color = 'green';
-				break;
-			case 'error':
-				$color = 'red';
-				break;
-			default:
-				$color = 'blue';
-		}
-		?>
-		@component('mail::button', ['url' => $actionUrl, 'color' => $color])
-			{{ $actionText }}
-		@endcomponent
-	@endisset
-
-	{{-- Outro Lines --}}
-	@foreach ($outroLines as $line)
-		{{ $line }}
-
-	@endforeach
-
-	{{-- Salutation --}}
-	@if (! empty($salutation))
-		{{ $salutation }}
-	@else
-		Regards,<br>{{ config('app.name') }}
-	@endif
-
-	{{-- Subcopy --}}
-	@isset($actionText)
-		@component('mail::subcopy')
-			If you’re having trouble clicking the "{{ $actionText }}" button, copy and paste the URL below
-			into your web browser: [{{ $actionUrl }}]({{ $actionUrl }})
-		@endcomponent
-	@endisset
-@endcomponent

+ 0 - 38
resources/views/vendor/pagination/bootstrap-4.blade.php

@@ -1,38 +0,0 @@
-@if ($paginator->hasPages())
-	<ul class="pagination">
-		{{-- Previous Page Link --}}
-		@if ($paginator->onFirstPage())
-			<li class="page-item disabled"><span class="page-link">&laquo;</span></li>
-		@else
-			<li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a>
-			</li>
-		@endif
-
-		{{-- Pagination Elements --}}
-		@foreach ($elements as $element)
-			{{-- "Three Dots" Separator --}}
-			@if (is_string($element))
-				<li class="page-item disabled"><span class="page-link">{{ $element }}</span></li>
-			@endif
-
-			{{-- Array Of Links --}}
-			@if (is_array($element))
-				@foreach ($element as $page => $url)
-					@if ($page == $paginator->currentPage())
-						<li class="page-item active"><span class="page-link">{{ $page }}</span></li>
-					@else
-						<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
-					@endif
-				@endforeach
-			@endif
-		@endforeach
-
-		{{-- Next Page Link --}}
-		@if ($paginator->hasMorePages())
-			<li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a>
-			</li>
-		@else
-			<li class="page-item disabled"><span class="page-link">&raquo;</span></li>
-		@endif
-	</ul>
-@endif

+ 0 - 38
resources/views/vendor/pagination/default.blade.php

@@ -1,38 +0,0 @@
-@if ($paginator->hasPages())
-	<ul class="pagination justify-content-end">
-		{{-- Previous Page Link --}}
-		@if ($paginator->onFirstPage())
-			<li class="page-item disabled"><span class="page-link">&laquo;</span></li>
-		@else
-			<li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a>
-			</li>
-		@endif
-
-		{{-- Pagination Elements --}}
-		@foreach ($elements as $element)
-			{{-- "Three Dots" Separator --}}
-			@if (is_string($element))
-				<li class="page-item disabled"><span class="page-link">{{ $element }}</span></li>
-			@endif
-
-			{{-- Array Of Links --}}
-			@if (is_array($element))
-				@foreach ($element as $page => $url)
-					@if ($page == $paginator->currentPage())
-						<li class="page-item active"><span class="page-link">{{ $page }}</span></li>
-					@else
-						<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
-					@endif
-				@endforeach
-			@endif
-		@endforeach
-
-		{{-- Next Page Link --}}
-		@if ($paginator->hasMorePages())
-			<li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a>
-			</li>
-		@else
-			<li class="page-item disabled"><span class="page-link">&raquo;</span></li>
-		@endif
-	</ul>
-@endif

+ 0 - 40
resources/views/vendor/pagination/semantic-ui.blade.php

@@ -1,40 +0,0 @@
-@if ($paginator->hasPages())
-	<div class="ui pagination menu" role="navigation">
-		{{-- Previous Page Link --}}
-		@if ($paginator->onFirstPage())
-			<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')"> <i
-						class="left chevron icon"></i> </a>
-		@else
-			<a class="icon item" href="{{ $paginator->previousPageUrl() }}" rel="prev"
-					aria-label="@lang('pagination.previous')"> <i class="left chevron icon"></i> </a>
-		@endif
-
-		{{-- Pagination Elements --}}
-		@foreach ($elements as $element)
-			{{-- "Three Dots" Separator --}}
-			@if (is_string($element))
-				<a class="icon item disabled" aria-disabled="true">{{ $element }}</a>
-			@endif
-
-			{{-- Array Of Links --}}
-			@if (is_array($element))
-				@foreach ($element as $page => $url)
-					@if ($page == $paginator->currentPage())
-						<a class="item active" href="{{ $url }}" aria-current="page">{{ $page }}</a>
-					@else
-						<a class="item" href="{{ $url }}">{{ $page }}</a>
-					@endif
-				@endforeach
-			@endif
-		@endforeach
-
-		{{-- Next Page Link --}}
-		@if ($paginator->hasMorePages())
-			<a class="icon item" href="{{ $paginator->nextPageUrl() }}" rel="next"
-					aria-label="@lang('pagination.next')"> <i class="right chevron icon"></i> </a>
-		@else
-			<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.next')"> <i
-						class="right chevron icon"></i> </a>
-		@endif
-	</div>
-@endif

+ 0 - 19
resources/views/vendor/pagination/simple-bootstrap-4.blade.php

@@ -1,19 +0,0 @@
-@if ($paginator->hasPages())
-	<ul class="pagination">
-		{{-- Previous Page Link --}}
-		@if ($paginator->onFirstPage())
-			<li class="page-item disabled"><span class="page-link">@lang('pagination.previous')</span></li>
-		@else
-			<li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}"
-						rel="prev">@lang('pagination.previous')</a></li>
-		@endif
-
-		{{-- Next Page Link --}}
-		@if ($paginator->hasMorePages())
-			<li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}"
-						rel="next">@lang('pagination.next')</a></li>
-		@else
-			<li class="page-item disabled"><span class="page-link">@lang('pagination.next')</span></li>
-		@endif
-	</ul>
-@endif

+ 0 - 17
resources/views/vendor/pagination/simple-default.blade.php

@@ -1,17 +0,0 @@
-@if ($paginator->hasPages())
-	<ul class="pagination">
-		{{-- Previous Page Link --}}
-		@if ($paginator->onFirstPage())
-			<li class="disabled"><span>@lang('pagination.previous')</span></li>
-		@else
-			<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
-		@endif
-
-		{{-- Next Page Link --}}
-		@if ($paginator->hasMorePages())
-			<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
-		@else
-			<li class="disabled"><span>@lang('pagination.next')</span></li>
-		@endif
-	</ul>
-@endif

+ 4 - 2
routes/channels.php

@@ -1,5 +1,7 @@
 <?php
 
+use Illuminate\Support\Facades\Broadcast;
+
 /*
 |--------------------------------------------------------------------------
 | Broadcast Channels
@@ -11,6 +13,6 @@
 |
 */
 
-Broadcast::channel('App.User.{id}', function($user, $id) {
-	return (int) $user->id === (int) $id;
+Broadcast::channel('App.User.{id}', function ($user, $id) {
+    return (int) $user->id === (int) $id;
 });

部分文件因文件數量過多而無法顯示