Преглед изворни кода

1.升级登录验证、用户密码由MD5升级为HASH
2.更新IP库

admin пре 7 година
родитељ
комит
04796e46d2

+ 33 - 0
app/Console/Commands/upgradeUserPassword.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Http\Models\User;
+use Illuminate\Console\Command;
+use Hash;
+use Log;
+
+class upgradeUserPassword extends Command
+{
+    protected $signature = 'upgradeUserPassword';
+    protected $description = '用户密码升级(MD5->HASH)';
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function handle()
+    {
+        Log::info('----------------------------【升级用户登录密码】开始----------------------------');
+        
+        // 将用户的登录密码由原有的md5升级为hash,统一升级为与用户名相同的密码
+        $userList = User::query()->get();
+        foreach ($userList as $user) {
+            User::query()->where('id', $user->id)->update(['password' => Hash::make($user->username)]);
+            Log::info('----------------------------升级用户[' . $user->username . ']的登录密码----------------------------');
+        }
+
+        Log::info('----------------------------【升级用户登录密码】结束----------------------------');
+    }
+}

+ 1 - 0
app/Console/Kernel.php

@@ -25,6 +25,7 @@ class Kernel extends ConsoleKernel
         \App\Console\Commands\UserTrafficAbnormalAutoWarning::class,
         \App\Console\Commands\UserExpireAutoWarning::class,
         \App\Console\Commands\UserTrafficAutoWarning::class,
+        \App\Console\Commands\upgradeUserPassword::class,
     ];
 
     /**

+ 15 - 16
app/Http/Controllers/AdminController.php

@@ -38,6 +38,8 @@ use Response;
 use Session;
 use Log;
 use DB;
+use Auth;
+use Hash;
 
 class AdminController extends Controller
 {
@@ -209,7 +211,7 @@ class AdminController extends Controller
 
             $user = new User();
             $user->username = trim($request->get('username'));
-            $user->password = trim($request->get('password')) ? md5(trim($request->get('password'))) : md5(makeRandStr());
+            $user->password = trim($request->get('password')) ? Hash::make(trim($request->get('password'))) : Hash::make(makeRandStr());
             $user->port = $request->get('port');
             $user->passwd = empty($request->get('passwd')) ? makeRandStr() : $request->get('passwd');
             $user->vmess_id = trim($request->get('vmess_id', createGuid()));
@@ -280,7 +282,7 @@ class AdminController extends Controller
 
                 $user = new User();
                 $user->username = '批量生成-' . makeRandStr();
-                $user->password = md5(makeRandStr());
+                $user->password = Hash::make(makeRandStr());
                 $user->port = $port;
                 $user->passwd = makeRandStr();
                 $user->vmess_id = createGuid();
@@ -290,7 +292,7 @@ class AdminController extends Controller
                 $user->protocol_param = '';
                 $user->obfs = Helpers::getDefaultObfs();
                 $user->obfs_param = '';
-                $user->usage = 1;
+                $user->usage = 4;
                 $user->transfer_enable = toGB(1000);
                 $user->enable_time = date('Y-m-d');
                 $user->expire_time = date('Y-m-d', strtotime("+365 days"));
@@ -403,7 +405,7 @@ class AdminController extends Controller
 
                 if (!empty($password)) {
                     if (!(env('APP_DEMO') && $id == 1)) { // 演示环境禁止修改管理员密码
-                        $data['password'] = md5($password);
+                        $data['password'] = Hash::make($password);
                     }
                 }
 
@@ -1247,7 +1249,7 @@ class AdminController extends Controller
                 foreach ($data as $user) {
                     $obj = new User();
                     $obj->username = $user->user;
-                    $obj->password = md5('123456');
+                    $obj->password = Hash::make('123456');
                     $obj->port = $user->port;
                     $obj->passwd = $user->passwd;
                     $obj->vmess_id = $user->vmess_id;
@@ -1406,26 +1408,23 @@ EOF;
     // 修改个人资料
     public function profile(Request $request)
     {
-        $user = Session::get('user');
-
         if ($request->method() == 'POST') {
             $old_password = $request->get('old_password');
             $new_password = $request->get('new_password');
-            $old_password = md5(trim($old_password));
-            $new_password = md5(trim($new_password));
+            $old_password = Hash::make(trim($old_password));
+            $new_password = Hash::make(trim($new_password));
 
-            $user = User::query()->where('id', $user['id'])->first();
-            if ($user->password != $old_password) {
+            if (Auth::user()->password != $old_password) {
                 Session::flash('errorMsg', '旧密码错误,请重新输入');
 
                 return Redirect::back();
-            } elseif ($user->password == $new_password) {
+            } elseif (Auth::user()->password == $new_password) {
                 Session::flash('errorMsg', '新密码不可与旧密码一样,请重新输入');
 
                 return Redirect::back();
             }
 
-            $ret = User::query()->where('id', $user['id'])->update(['password' => $new_password]);
+            $ret = User::query()->where('id', Auth::user()->id)->update(['password' => $new_password]);
             if (!$ret) {
                 Session::flash('errorMsg', '修改失败');
 
@@ -2268,9 +2267,9 @@ EOF;
             return Response::json(['status' => 'fail', 'data' => '', 'message' => "用户不存在"]);
         }
 
-        // 存储当前管理员身份信息,并将当前登录信息改成要切换的用户的身份信息
-        Session::put('admin', Session::get("user"));
-        Session::put('user', $user->toArray());
+        // 存储当前管理员ID,并将当前登录信息改成要切换的用户的身份信息
+        Session::put('admin', Auth::user()->id);
+        Auth::login($user);
 
         return Response::json(['status' => 'success', 'data' => '', 'message' => "身份切换成功"]);
     }

+ 2 - 1
app/Http/Controllers/Api/YzyController.php

@@ -18,6 +18,7 @@ use Illuminate\Http\Request;
 use Log;
 use DB;
 use Mail;
+use Hash;
 
 /**
  * 有赞云支付消息推送接收
@@ -136,7 +137,7 @@ class YzyController extends Controller
 
                 $user = new User();
                 $user->username = '自动生成-' . $payment->order->email;
-                $user->password = md5(makeRandStr());
+                $user->password = Hash::make(makeRandStr());
                 $user->port = $port;
                 $user->passwd = makeRandStr();
                 $user->vmess_id = createGuid();

+ 20 - 34
app/Http/Controllers/LoginController.php

@@ -13,6 +13,7 @@ use Captcha;
 use Session;
 use Cache;
 use Log;
+use Auth;
 
 /**
  * 登录控制器
@@ -36,6 +37,7 @@ class LoginController extends Controller
             $username = trim($request->get('username'));
             $password = trim($request->get('password'));
             $captcha = trim($request->get('captcha'));
+            $remember = trim($request->get('remember'));
 
             if (empty($username) || empty($password)) {
                 Session::flash('errorMsg', '请输入用户名和密码');
@@ -52,69 +54,53 @@ class LoginController extends Controller
                 }
             }
 
-            $user = User::query()->where('username', $username)->where('password', md5($password))->first();
-            if (!$user) {
+            if (!Auth::attempt(['username' => $username, 'password' => $password], $remember)) {
                 Session::flash('errorMsg', '用户名或密码错误');
 
                 return Redirect::back()->withInput();
-            } elseif (!$user->is_admin && $user->status < 0) {
+            } elseif (!Auth::user()->is_admin && Auth::user()->status < 0) {
                 Session::flash('errorMsg', '账号已禁用');
 
                 return Redirect::back();
-            } elseif ($user->status == 0 && self::$systemConfig['is_active_register'] && $user->is_admin == 0) {
-                Session::flash('errorMsg', '账号未激活,请点击<a href="/activeUser?username=' . $user->username . '" target="_blank"><span style="color:#000">【激活账号】</span></a>');
+            } elseif (Auth::user()->status == 0 && self::$systemConfig['is_active_register'] && Auth::user()->is_admin == 0) {
+                Session::flash('errorMsg', '账号未激活,请点击<a href="/activeUser?username=' . Auth::user()->username . '" target="_blank"><span style="color:#000">【激活账号】</span></a>');
 
                 return Redirect::back()->withInput();
             }
 
-            // 更新登录信息
-            $remember_token = "";
-            if ($request->get('remember')) {
-                $remember_token = makeRandStr(20);
-
-                User::query()->where('id', $user->id)->update(['last_login' => time(), 'remember_token' => $remember_token]);
-            } else {
-                User::query()->where('id', $user->id)->update(['last_login' => time(), 'remember_token' => '']);
-            }
-
             // 登录送积分
             if (self::$systemConfig['login_add_score']) {
                 if (!Cache::has('loginAddScore_' . md5($username))) {
                     $score = mt_rand(self::$systemConfig['min_rand_score'], self::$systemConfig['max_rand_score']);
-                    $ret = User::query()->where('id', $user->id)->increment('score', $score);
+                    $ret = User::query()->where('id', Auth::user()->id)->increment('score', $score);
                     if ($ret) {
-                        $this->addUserScoreLog($user->id, $user->score, $user->score + $score, $score, '登录送积分');
+                        $this->addUserScoreLog(Auth::user()->id, Auth::user()->score, Auth::user()->score + $score, $score, '登录送积分');
 
                         // 登录多久后再登录可以获取积分
                         $ttl = self::$systemConfig['login_add_score_range'] ? self::$systemConfig['login_add_score_range'] : 1440;
                         Cache::put('loginAddScore_' . md5($username), '1', $ttl);
 
-                        Session::flash('successMsg', '欢迎回来,系统自动赠送您 ' . $score . ' 积分,您可以用它兑换流量');
+                        Session::flash('successMsg', '欢迎回来,系统自动赠送您 ' . $score . ' 积分,您可以用它兑换流量');
                     }
                 }
             }
 
             // 写入登录日志
-            $this->addUserLoginLog($user->id, getClientIp());
+            $this->addUserLoginLog(Auth::user()->id, getClientIp());
 
-            // 重新取出用户信息
-            $userInfo = User::query()->where('id', $user->id)->first();
-
-            Session::put('user', $userInfo->toArray());
+            // 更新登录信息
+            User::query()->where('id', Auth::user()->id)->update(['last_login' => time()]);
 
             // 根据权限跳转
-            if ($user->is_admin) {
-                return Redirect::to('admin')->cookie('remember', $remember_token, 36000);
+            if (Auth::user()->is_admin) {
+                return Redirect::to('admin');
             }
 
-            return Redirect::to('/')->cookie('remember', $remember_token, 36000);
+            return Redirect::to('/');
         } else {
-            if ($request->cookie("remember")) {
-                $u = User::query()->where('status', '>=', 0)->where("remember_token", $request->cookie("remember"))->first();
-                if ($u) {
-                    Session::put('user', $u->toArray());
-
-                    if ($u->is_admin) {
+            if (Auth::viaRemember()) {
+                if (Auth::check()) {
+                    if (Auth::user()->is_admin) {
                         return Redirect::to('admin');
                     }
 
@@ -135,9 +121,9 @@ class LoginController extends Controller
     // 退出
     public function logout(Request $request)
     {
-        Session::flush();
+        Auth::logout();
 
-        return Redirect::to('login')->cookie('remember', "", 36000);
+        return Redirect::to('login');
     }
 
     // 添加用户登录日志

+ 9 - 14
app/Http/Controllers/PaymentController.php

@@ -12,9 +12,9 @@ use App\Http\Models\PaymentCallback;
 use Illuminate\Http\Request;
 use Response;
 use Redirect;
-use Session;
 use Log;
 use DB;
+use Auth;
 
 class PaymentController extends Controller
 {
@@ -31,8 +31,6 @@ class PaymentController extends Controller
         $goods_id = intval($request->get('goods_id'));
         $coupon_sn = $request->get('coupon_sn');
 
-        $user = Session::get('user');
-
         $goods = Goods::query()->where('is_del', 0)->where('status', 1)->where('id', $goods_id)->first();
         if (!$goods) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:商品或服务已下架']);
@@ -44,7 +42,7 @@ class PaymentController extends Controller
         }
 
         // 判断是否存在同个商品的未支付订单
-        $existsOrder = Order::query()->where('status', 0)->where('user_id', $user['id'])->where('goods_id', $goods_id)->exists();
+        $existsOrder = Order::query()->where('status', 0)->where('user_id', Auth::user()->id)->where('goods_id', $goods_id)->exists();
         if ($existsOrder) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:尚有未支付的订单,请先去支付']);
         }
@@ -52,7 +50,7 @@ class PaymentController extends Controller
         // 限购控制
         $strategy = self::$systemConfig['goods_purchase_limit_strategy'];
         if ($strategy == 'all' || ($strategy == 'package' && $goods->type == 2) || ($strategy == 'free' && $goods->price == 0) || ($strategy == 'package&free' && ($goods->type == 2 || $goods->price == 0))) {
-            $noneExpireOrderExist = Order::query()->where('status', '>=', 0)->where('is_expire', 0)->where('user_id', $user['id'])->where('goods_id', $goods_id)->exists();
+            $noneExpireOrderExist = Order::query()->where('status', '>=', 0)->where('is_expire', 0)->where('user_id', Auth::user()->id)->where('goods_id', $goods_id)->exists();
             if ($noneExpireOrderExist) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:商品不可重复购买']);
             }
@@ -86,7 +84,7 @@ class PaymentController extends Controller
                 ->whereHas('goods', function ($q) {
                     $q->where('type', 2);
                 })
-                ->where('user_id', $user['id'])
+                ->where('user_id', Auth::user()->id)
                 ->where('is_expire', 0)
                 ->where('status', 2)
                 ->get();
@@ -106,7 +104,7 @@ class PaymentController extends Controller
             // 生成订单
             $order = new Order();
             $order->order_sn = $orderSn;
-            $order->user_id = $user['id'];
+            $order->user_id = Auth::user()->id;
             $order->goods_id = $goods_id;
             $order->coupon_id = !empty($coupon) ? $coupon->id : 0;
             $order->origin_amount = $goods->price;
@@ -128,7 +126,7 @@ class PaymentController extends Controller
 
             $payment = new Payment();
             $payment->sn = $sn;
-            $payment->user_id = $user['id'];
+            $payment->user_id = Auth::user()->id;
             $payment->oid = $order->oid;
             $payment->order_sn = $orderSn;
             $payment->pay_way = 1;
@@ -169,16 +167,14 @@ class PaymentController extends Controller
             return Redirect::to('services');
         }
 
-        $user = Session::get('user');
-
-        $payment = Payment::query()->with(['order', 'order.goods'])->where('sn', $sn)->where('user_id', $user['id'])->first();
+        $payment = Payment::query()->with(['order', 'order.goods'])->where('sn', $sn)->where('user_id', Auth::user()->id)->first();
         if (!$payment) {
             return Redirect::to('services');
         }
 
         $order = Order::query()->where('oid', $payment->oid)->first();
         if (!$order) {
-            Session::flash('errorMsg', '订单不存在');
+            \Session::flash('errorMsg', '订单不存在');
 
             return Response::view('payment/' . $sn);
         }
@@ -200,8 +196,7 @@ class PaymentController extends Controller
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '请求失败']);
         }
 
-        $user = Session::get('user');
-        $payment = Payment::query()->where('sn', $sn)->where('user_id', $user['id'])->first();
+        $payment = Payment::query()->where('sn', $sn)->where('user_id', Auth::user()->id)->first();
         if (!$payment) {
             return Response::json(['status' => 'error', 'data' => '', 'message' => '支付失败']);
         } elseif ($payment->status > 0) {

+ 6 - 2
app/Http/Controllers/RegisterController.php

@@ -15,6 +15,7 @@ use Redirect;
 use Session;
 use Cache;
 use Mail;
+use Hash;
 
 /**
  * 注册控制器
@@ -160,7 +161,7 @@ class RegisterController extends Controller
             // 创建新用户
             $user = new User();
             $user->username = $username;
-            $user->password = md5($password);
+            $user->password = Hash::make($password);
             $user->port = $port;
             $user->passwd = makeRandStr();
             $user->vmess_id = createGuid();
@@ -197,6 +198,9 @@ class RegisterController extends Controller
                 if (self::$systemConfig['is_invite_register'] && $affArr['code_id']) {
                     Invite::query()->where('id', $affArr['code_id'])->update(['fuid' => $user->id, 'status' => 1]);
                 }
+
+                // 清除邀请人Cookie
+                \Cookie::unqueue('register_aff');
             }
 
             // 发送邮件
@@ -270,7 +274,7 @@ class RegisterController extends Controller
         // 没有用邀请码或者邀请码是管理员生成的,则检查cookie或者url链接
         if (!$referral_uid) {
             // 检查一下cookie里有没有aff
-            $cookieAff = \Request::cookie('register_aff') ? \Request::cookie('register_aff') : 0;
+            $cookieAff = \Request::hasCookie('register_aff') ? \Request::cookie('register_aff') : 0;
             if ($cookieAff) {
                 $affUser = User::query()->where('id', $cookieAff)->exists();
                 $referral_uid = $affUser ? $cookieAff : 0;

+ 4 - 5
app/Http/Controllers/TicketController.php

@@ -10,8 +10,8 @@ use App\Mail\closeTicket;
 use App\Mail\replyTicket;
 use Illuminate\Http\Request;
 use Response;
-use Session;
 use Mail;
+use Auth;
 
 /**
  * 工单控制器
@@ -40,7 +40,6 @@ class TicketController extends Controller
     public function replyTicket(Request $request)
     {
         $id = $request->get('id');
-        $user = Session::get('user');
 
         if ($request->method() == 'POST') {
             $content = clean($request->get('content'));
@@ -49,7 +48,7 @@ class TicketController extends Controller
 
             $obj = new TicketReply();
             $obj->ticket_id = $id;
-            $obj->user_id = $user['id'];
+            $obj->user_id = Auth::user()->id;
             $obj->content = $content;
             $obj->created_at = date('Y-m-d H:i:s');
             $obj->save();
@@ -65,7 +64,7 @@ class TicketController extends Controller
                 $content = "标题:" . $ticket->title . "<br>管理员回复:" . $content;
 
                 // 发通知邮件
-                if (!$user['is_admin']) {
+                if (!Auth::user()->is_admin) {
                     if (self::$systemConfig['crash_warning_email']) {
                         try {
                             Mail::to(self::$systemConfig['crash_warning_email'])->send(new replyTicket(self::$systemConfig['website_name'], $title, $content));
@@ -84,7 +83,7 @@ class TicketController extends Controller
                 }
 
                 // 通过ServerChan发微信消息提醒管理员
-                if (!$user['is_admin'] && self::$systemConfig['is_server_chan'] && self::$systemConfig['server_chan_key']) {
+                if (!Auth::user()->is_admin && self::$systemConfig['is_server_chan'] && self::$systemConfig['server_chan_key']) {
                     $serverChan = new ServerChan();
                     $serverChan->send($title, $content);
                 }

+ 56 - 95
app/Http/Controllers/UserController.php

@@ -38,6 +38,8 @@ use Cache;
 use Mail;
 use Log;
 use DB;
+use Auth;
+use Hash;
 
 class UserController extends Controller
 {
@@ -50,9 +52,7 @@ class UserController extends Controller
 
     public function index(Request $request)
     {
-        $user = Session::get('user');
-
-        $user = User::query()->where('id', $user['id'])->first();
+        $user = User::query()->where('id', Auth::user()->id)->first();
         $user->totalTransfer = flowAutoShow($user->transfer_enable);
         $user->usedTransfer = flowAutoShow($user->u + $user->d);
         $user->usedPercent = $user->transfer_enable > 0 ? round(($user->u + $user->d) / $user->transfer_enable, 2) : 1;
@@ -77,12 +77,12 @@ class UserController extends Controller
         }
 
         // 如果没有唯一码则生成一个
-        $subscribe = UserSubscribe::query()->where('user_id', $user['id'])->first();
+        $subscribe = UserSubscribe::query()->where('user_id', Auth::user()->id)->first();
         if (!$subscribe) {
             $code = $this->makeSubscribeCode();
 
             $obj = new UserSubscribe();
-            $obj->user_id = $user['id'];
+            $obj->user_id = Auth::user()->id;
             $obj->code = $code;
             $obj->times = 0;
             $obj->save();
@@ -94,10 +94,10 @@ class UserController extends Controller
         $view['link'] = self::$systemConfig['subscribe_domain'] ? self::$systemConfig['subscribe_domain'] . '/s/' . $code : self::$systemConfig['website_url'] . '/s/' . $code;
 
         // 近期登录日志
-        $view['userLoginLog'] = UserLoginLog::query()->where('user_id', $user['id'])->orderBy('id', 'desc')->limit(10)->get();
+        $view['userLoginLog'] = UserLoginLog::query()->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->limit(10)->get();
 
         // 节点列表
-        $userLabelIds = UserLabel::query()->where('user_id', $user['id'])->pluck('label_id');
+        $userLabelIds = UserLabel::query()->where('user_id', Auth::user()->id)->pluck('label_id');
         if (empty($userLabelIds)) {
             $view['nodeList'] = [];
 
@@ -225,8 +225,6 @@ class UserController extends Controller
     // 修改个人资料
     public function profile(Request $request)
     {
-        $user = Session::get('user');
-
         if ($request->method() == 'POST') {
             $old_password = $request->get('old_password');
             $new_password = $request->get('new_password');
@@ -239,28 +237,27 @@ class UserController extends Controller
 
             // 修改密码
             if ($old_password && $new_password) {
-                $old_password = md5(trim($old_password));
-                $new_password = md5(trim($new_password));
+                $old_password = Hash::make(trim($old_password));
+                $new_password = Hash::make(trim($new_password));
 
-                $user = User::query()->where('id', $user['id'])->first();
-                if ($user->password != $old_password) {
+                if (Auth::user()->password != $old_password) {
                     Session::flash('errorMsg', '旧密码错误,请重新输入');
 
                     return Redirect::to('profile#tab_1');
-                } elseif ($user->password == $new_password) {
+                } elseif (Auth::user()->password == $new_password) {
                     Session::flash('errorMsg', '新密码不可与旧密码一样,请重新输入');
 
                     return Redirect::to('profile#tab_1');
                 }
 
                 // 演示环境禁止改管理员密码
-                if (env('APP_DEMO') && $user['id'] == 1) {
+                if (env('APP_DEMO') && Auth::user()->id == 1) {
                     Session::flash('errorMsg', '演示环境禁止修改管理员密码');
 
                     return Redirect::to('profile#tab_1');
                 }
 
-                $ret = User::query()->where('id', $user['id'])->update(['password' => $new_password]);
+                $ret = User::query()->where('id', Auth::user()->id)->update(['password' => $new_password]);
                 if (!$ret) {
                     Session::flash('errorMsg', '修改失败');
 
@@ -280,7 +277,7 @@ class UserController extends Controller
                     return Redirect::to('profile#tab_2');
                 }
 
-                $ret = User::query()->where('id', $user['id'])->update(['wechat' => $wechat, 'qq' => $qq]);
+                $ret = User::query()->where('id', Auth::user()->id)->update(['wechat' => $wechat, 'qq' => $qq]);
                 if (!$ret) {
                     Session::flash('errorMsg', '修改失败');
 
@@ -317,14 +314,14 @@ class UserController extends Controller
                     'obfs'     => $obfs
                 ];
 
-                $ret = User::query()->where('id', $user['id'])->update($data);
+                $ret = User::query()->where('id', Auth::user()->id)->update($data);
                 if (!$ret) {
                     Session::flash('errorMsg', '修改失败');
 
                     return Redirect::to('profile#tab_3');
                 } else {
                     // 更新session
-                    $user = User::query()->where('id', $user['id'])->first()->toArray();
+                    $user = User::query()->where('id', Auth::user()->id)->first()->toArray();
                     Session::remove('user');
                     Session::put('user', $user);
 
@@ -338,7 +335,7 @@ class UserController extends Controller
             $view['method_list'] = Helpers::methodList();
             $view['protocol_list'] = Helpers::protocolList();
             $view['obfs_list'] = Helpers::obfsList();
-            $view['info'] = User::query()->where('id', $user['id'])->first();
+            $view['info'] = User::query()->where('id', Auth::user()->id)->first();
             $view['website_logo'] = self::$systemConfig['website_logo'];
             $view['website_analytics'] = self::$systemConfig['website_analytics'];
             $view['website_customer_service'] = self::$systemConfig['website_customer_service'];
@@ -350,13 +347,11 @@ class UserController extends Controller
     // 流量日志
     public function trafficLog(Request $request)
     {
-        $user = Session::get('user');
-
         $dailyData = [];
         $hourlyData = [];
 
         // 节点一个月内的流量
-        $userTrafficDaily = UserTrafficDaily::query()->where('user_id', $user['id'])->where('node_id', 0)->where('created_at', '>=', date('Y-m', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
+        $userTrafficDaily = UserTrafficDaily::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
 
         $dailyTotal = date('d', time()) - 1; // 今天不算,减一
         $dailyCount = count($userTrafficDaily);
@@ -368,7 +363,7 @@ class UserController extends Controller
         }
 
         // 节点一天内的流量
-        $userTrafficHourly = UserTrafficHourly::query()->where('user_id', $user['id'])->where('node_id', 0)->where('created_at', '>=', date('Y-m-d', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
+        $userTrafficHourly = UserTrafficHourly::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m-d', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
         $hourlyTotal = date('H', time());
         $hourlyCount = count($userTrafficHourly);
         for ($x = 0; $x < ($hourlyTotal - $hourlyCount); $x++) {
@@ -410,13 +405,11 @@ class UserController extends Controller
     // 工单
     public function ticketList(Request $request)
     {
-        $user = Session::get('user');
-
         $view['website_logo'] = self::$systemConfig['website_logo'];
         $view['website_analytics'] = self::$systemConfig['website_analytics'];
         $view['website_customer_service'] = self::$systemConfig['website_customer_service'];
 
-        $view['ticketList'] = Ticket::query()->where('user_id', $user['id'])->orderBy('id', 'desc')->paginate(10)->appends($request->except('page'));
+        $view['ticketList'] = Ticket::query()->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->paginate(10)->appends($request->except('page'));
 
         return Response::view('user.ticketList', $view);
     }
@@ -424,10 +417,7 @@ class UserController extends Controller
     // 订单
     public function orderList(Request $request)
     {
-        $user = Session::get('user');
-
-        $view['orderList'] = Order::query()->with(['user', 'goods', 'coupon', 'payment'])->where('user_id', $user['id'])->orderBy('oid', 'desc')->paginate(10)->appends($request->except('page'));
-
+        $view['orderList'] = Order::query()->with(['user', 'goods', 'coupon', 'payment'])->where('user_id', Auth::user()->id)->orderBy('oid', 'desc')->paginate(10)->appends($request->except('page'));
         $view['website_logo'] = self::$systemConfig['website_logo'];
         $view['website_analytics'] = self::$systemConfig['website_analytics'];
         $view['website_customer_service'] = self::$systemConfig['website_customer_service'];
@@ -453,14 +443,12 @@ class UserController extends Controller
         $content = clean($request->get('content'));
         $content = str_replace("eval", "", str_replace("atob", "", $content));
 
-        $user = Session::get('user');
-
         if (empty($title) || empty($content)) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '请输入标题和内容']);
         }
 
         $obj = new Ticket();
-        $obj->user_id = $user['id'];
+        $obj->user_id = Auth::user()->id;
         $obj->title = $title;
         $obj->content = $content;
         $obj->status = 0;
@@ -498,8 +486,6 @@ class UserController extends Controller
     {
         $id = intval($request->get('id'));
 
-        $user = Session::get('user');
-
         if ($request->method() == 'POST') {
             $content = clean($request->get('content'));
             $content = str_replace("eval", "", str_replace("atob", "", $content));
@@ -511,7 +497,7 @@ class UserController extends Controller
 
             $obj = new TicketReply();
             $obj->ticket_id = $id;
-            $obj->user_id = $user['id'];
+            $obj->user_id = Auth::user()->id;
             $obj->content = $content;
             $obj->created_at = date('Y-m-d H:i:s');
             $obj->save();
@@ -544,7 +530,7 @@ class UserController extends Controller
             }
         } else {
             $ticket = Ticket::query()->where('id', $id)->with('user')->first();
-            if (empty($ticket) || $ticket->user_id != $user['id']) {
+            if (empty($ticket) || $ticket->user_id != Auth::user()->id) {
                 return Redirect::to('tickets');
             }
 
@@ -564,9 +550,7 @@ class UserController extends Controller
     {
         $id = $request->get('id');
 
-        $user = Session::get('user');
-
-        $ret = Ticket::query()->where('id', $id)->where('user_id', $user['id'])->update(['status' => 2]);
+        $ret = Ticket::query()->where('id', $id)->where('user_id', Auth::user()->id)->update(['status' => 2]);
         if ($ret) {
             return Response::json(['status' => 'success', 'data' => '', 'message' => '关闭成功']);
         } else {
@@ -577,16 +561,14 @@ class UserController extends Controller
     // 邀请码
     public function invite(Request $request)
     {
-        $user = Session::get('user');
-
         // 已生成的邀请码数量
-        $num = Invite::query()->where('uid', $user['id'])->count();
+        $num = Invite::query()->where('uid', Auth::user()->id)->count();
 
         $view['website_logo'] = self::$systemConfig['website_logo'];
         $view['website_analytics'] = self::$systemConfig['website_analytics'];
         $view['website_customer_service'] = self::$systemConfig['website_customer_service'];
         $view['num'] = self::$systemConfig['invite_num'] - $num <= 0 ? 0 : self::$systemConfig['invite_num'] - $num; // 还可以生成的邀请码数量
-        $view['inviteList'] = Invite::query()->where('uid', $user['id'])->with(['generator', 'user'])->paginate(10); // 邀请码列表
+        $view['inviteList'] = Invite::query()->where('uid', Auth::user()->id)->with(['generator', 'user'])->paginate(10); // 邀请码列表
         $view['referral_traffic'] = flowAutoShow(self::$systemConfig['referral_traffic'] * 1048576);
         $view['referral_percent'] = self::$systemConfig['referral_percent'];
 
@@ -609,16 +591,14 @@ class UserController extends Controller
     // 生成邀请码
     public function makeInvite(Request $request)
     {
-        $user = Session::get('user');
-
         // 已生成的邀请码数量
-        $num = Invite::query()->where('uid', $user['id'])->count();
+        $num = Invite::query()->where('uid', Auth::user()->id)->count();
         if ($num >= self::$systemConfig['invite_num']) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '生成失败:最多只能生成' . self::$systemConfig['invite_num'] . '个邀请码']);
         }
 
         $obj = new Invite();
-        $obj->uid = $user['id'];
+        $obj->uid = Auth::user()->id;
         $obj->fuid = 0;
         $obj->code = strtoupper(mb_substr(md5(microtime() . makeRandStr()), 8, 12));
         $obj->status = 0;
@@ -855,14 +835,14 @@ class UserController extends Controller
                 Session::flash('errorMsg', '账号已被禁用');
 
                 return Redirect::back();
-            } elseif (md5($password) == $verify->user->password) {
+            } elseif (Hash::make($password) == $verify->user->password) {
                 Session::flash('errorMsg', '新旧密码一样,请重新输入');
 
                 return Redirect::back();
             }
 
             // 更新密码
-            $ret = User::query()->where('id', $verify->user_id)->update(['password' => md5($password)]);
+            $ret = User::query()->where('id', $verify->user_id)->update(['password' => Hash::make($password)]);
             if (!$ret) {
                 Session::flash('errorMsg', '重设密码失败');
 
@@ -942,8 +922,6 @@ class UserController extends Controller
         $goods_id = intval($id);
         $coupon_sn = $request->get('coupon_sn');
 
-        $user = Session::get('user');
-
         if ($request->method() == 'POST') {
             $goods = Goods::query()->with(['label'])->where('is_del', 0)->where('status', 1)->where('id', $goods_id)->first();
             if (!$goods) {
@@ -953,7 +931,7 @@ class UserController extends Controller
             // 限购控制:all-所有商品限购, free-价格为0的商品限购, none-不限购(默认)
             $strategy = self::$systemConfig['goods_purchase_limit_strategy'];
             if ($strategy == 'all' || ($strategy == 'package' && $goods->type == 2) || ($strategy == 'free' && $goods->price == 0) || ($strategy == 'package&free' && ($goods->type == 2 || $goods->price == 0))) {
-                $noneExpireGoodExist = Order::query()->where('status', '>=', 0)->where('is_expire', 0)->where('user_id', $user['id'])->where('goods_id', $goods_id)->exists();
+                $noneExpireGoodExist = Order::query()->where('status', '>=', 0)->where('is_expire', 0)->where('user_id', Auth::user()->id)->where('goods_id', $goods_id)->exists();
                 if ($noneExpireGoodExist) {
                     return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:商品不可重复购买']);
                 }
@@ -979,7 +957,7 @@ class UserController extends Controller
             }
 
             // 验证账号余额是否充足
-            $user = User::query()->where('id', $user['id'])->first();
+            $user = User::query()->where('id', Auth::user()->id)->first();
             if ($user->balance < $amount) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:您的余额不足,请先充值']);
             }
@@ -991,7 +969,7 @@ class UserController extends Controller
                     ->whereHas('goods', function ($q) {
                         $q->where('type', 2);
                     })
-                    ->where('user_id', $user['id'])
+                    ->where('user_id', Auth::user()->id)
                     ->where('is_expire', 0)
                     ->where('status', 2)
                     ->get();
@@ -1148,33 +1126,31 @@ class UserController extends Controller
     // 积分兑换流量
     public function exchange(Request $request)
     {
-        $user = Session::get('user');
-
         // 积分满100才可以兑换
-        if ($user['score'] < 100) {
+        if (Auth::user()->score < 100) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '兑换失败:满100才可以兑换,请继续累计吧']);
         }
 
         // 账号过期不允许兑换
-        if ($user['expire_time'] < date('Y-m-d')) {
+        if (Auth::user()->expire_time < date('Y-m-d')) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '兑换失败:账号已过期,请先购买服务吧']);
         }
 
         DB::beginTransaction();
         try {
             // 写入积分操作日志
-            $ret = $this->addUserScoreLog($user['id'], $user['score'], 0, -1 * $user['score'], '积分兑换流量');
+            $ret = $this->addUserScoreLog(Auth::user()->id, Auth::user()->score, 0, -1 * Auth::user()->score, '积分兑换流量');
 
             // 扣积分加流量
             if ($ret) {
-                User::query()->where('id', $user['id'])->update(['score' => 0]);
-                User::query()->where('id', $user['id'])->increment('transfer_enable', $user['score'] * 1048576);
+                User::query()->where('id', Auth::user()->id)->update(['score' => 0]);
+                User::query()->where('id', Auth::user()->id)->increment('transfer_enable', Auth::user()->score * 1048576);
             }
 
             DB::commit();
 
             // 更新session
-            $user = User::query()->where('id', $user['id'])->first()->toArray();
+            $user = User::query()->where('id', Auth::user()->id)->first()->toArray();
             Session::remove('user');
             Session::put('user', $user);
 
@@ -1189,21 +1165,18 @@ class UserController extends Controller
     // 推广返利
     public function referral(Request $request)
     {
-        // 生成个人推广链接
-        $user = Session::get('user');
-
         $view['website_logo'] = self::$systemConfig['website_logo'];
         $view['website_analytics'] = self::$systemConfig['website_analytics'];
         $view['website_customer_service'] = self::$systemConfig['website_customer_service'];
         $view['referral_traffic'] = flowAutoShow(self::$systemConfig['referral_traffic'] * 1048576);
         $view['referral_percent'] = self::$systemConfig['referral_percent'];
         $view['referral_money'] = self::$systemConfig['referral_money'];
-        $view['totalAmount'] = ReferralLog::query()->where('ref_user_id', $user['id'])->sum('ref_amount') / 100;
-        $view['canAmount'] = ReferralLog::query()->where('ref_user_id', $user['id'])->where('status', 0)->sum('ref_amount') / 100;
-        $view['link'] = self::$systemConfig['website_url'] . '/register?aff=' . $user['id'];
-        $view['referralLogList'] = ReferralLog::query()->where('ref_user_id', $user['id'])->with('user')->orderBy('id', 'desc')->paginate(10);
-        $view['referralApplyList'] = ReferralApply::query()->where('user_id', $user['id'])->with('user')->orderBy('id', 'desc')->paginate(10);
-        $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', $user['id'])->orderBy('id', 'desc')->paginate(10);
+        $view['totalAmount'] = ReferralLog::query()->where('ref_user_id', Auth::user()->id)->sum('ref_amount') / 100;
+        $view['canAmount'] = ReferralLog::query()->where('ref_user_id', Auth::user()->id)->where('status', 0)->sum('ref_amount') / 100;
+        $view['link'] = self::$systemConfig['website_url'] . '/register?aff=' . Auth::user()->id;
+        $view['referralLogList'] = ReferralLog::query()->where('ref_user_id', Auth::user()->id)->with('user')->orderBy('id', 'desc')->paginate(10);
+        $view['referralApplyList'] = ReferralApply::query()->where('user_id', Auth::user()->id)->with('user')->orderBy('id', 'desc')->paginate(10);
+        $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10);
 
         return Response::view('user.referral', $view);
     }
@@ -1211,21 +1184,19 @@ class UserController extends Controller
     // 申请提现
     public function extractMoney(Request $request)
     {
-        $user = Session::get('user');
-
         // 判断账户是否过期
-        if ($user['expire_time'] < date('Y-m-d')) {
+        if (Auth::user()->expire_time < date('Y-m-d')) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '申请失败:账号已过期,请先购买服务吧']);
         }
 
         // 判断是否已存在申请
-        $referralApply = ReferralApply::query()->where('user_id', $user['id'])->whereIn('status', [0, 1])->first();
+        $referralApply = ReferralApply::query()->where('user_id', Auth::user()->id)->whereIn('status', [0, 1])->first();
         if ($referralApply) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '申请失败:已存在申请,请等待之前的申请处理完']);
         }
 
         // 校验可以提现金额是否超过系统设置的阀值
-        $ref_amount = ReferralLog::query()->where('ref_user_id', $user['id'])->where('status', 0)->sum('ref_amount');
+        $ref_amount = ReferralLog::query()->where('ref_user_id', Auth::user()->id)->where('status', 0)->sum('ref_amount');
         $ref_amount = $ref_amount / 100;
         if ($ref_amount < self::$systemConfig['referral_money']) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '申请失败:满' . self::$systemConfig['referral_money'] . '元才可以提现,继续努力吧']);
@@ -1233,14 +1204,14 @@ class UserController extends Controller
 
         // 取出本次申请关联返利日志ID
         $link_logs = '';
-        $referralLog = ReferralLog::query()->where('ref_user_id', $user['id'])->where('status', 0)->get();
+        $referralLog = ReferralLog::query()->where('ref_user_id', Auth::user()->id)->where('status', 0)->get();
         foreach ($referralLog as $log) {
             $link_logs .= $log->id . ',';
         }
         $link_logs = rtrim($link_logs, ',');
 
         $obj = new ReferralApply();
-        $obj->user_id = $user['id'];
+        $obj->user_id = Auth::user()->id;
         $obj->before = $ref_amount;
         $obj->after = 0;
         $obj->amount = $ref_amount;
@@ -1265,16 +1236,14 @@ class UserController extends Controller
     // 更换订阅地址
     public function exchangeSubscribe(Request $request)
     {
-        $user = Session::get('user');
-
         DB::beginTransaction();
         try {
             // 更换订阅地址
             $code = $this->makeSubscribeCode();
-            UserSubscribe::query()->where('user_id', $user['id'])->update(['code' => $code]);
+            UserSubscribe::query()->where('user_id', Auth::user()->id)->update(['code' => $code]);
 
             // 更换连接密码
-            User::query()->where('id', $user['id'])->update(['passwd' => makeRandStr()]);
+            User::query()->where('id', Auth::user()->id)->update(['passwd' => makeRandStr()]);
 
             DB::commit();
 
@@ -1291,18 +1260,12 @@ class UserController extends Controller
     // 转换成管理员的身份
     public function switchToAdmin(Request $request)
     {
-        if (!Session::has('admin') || !Session::has('user')) {
+        if (!Session::has('admin')) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '非法请求']);
         }
 
-        $admin = Session::get('admin');
-        $user = User::query()->where('id', $admin['id'])->first();
-        if (!$user) {
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => "非法请求"]);
-        }
-
         // 管理员信息重新写入user
-        Session::put('user', Session::get('admin'));
+        Auth::loginUsingId(Session::get('admin'));
         Session::forget('admin');
 
         return Response::json(['status' => 'success', 'data' => '', 'message' => "身份切换成功"]);
@@ -1311,8 +1274,6 @@ class UserController extends Controller
     // 卡券余额充值
     public function charge(Request $request)
     {
-        $user = Session::get('user');
-
         $coupon_sn = trim($request->get('coupon_sn'));
         if (empty($coupon_sn)) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '券码不能为空']);
@@ -1325,7 +1286,7 @@ class UserController extends Controller
 
         DB::beginTransaction();
         try {
-            $user = User::query()->where('id', $user['id'])->first();
+            $user = User::query()->where('id', Auth::user()->id)->first();
 
             // 写入日志
             $this->addUserBalanceLog($user->id, 0, $user->balance, $user->balance + $coupon->amount, $coupon->amount, '用户手动充值 - [充值券:' . $coupon_sn . ']');

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

@@ -4,6 +4,7 @@ namespace App\Http\Middleware;
 
 use Closure;
 use Redirect;
+use Auth;
 
 class Admin
 {
@@ -17,8 +18,8 @@ class Admin
      */
     public function handle($request, Closure $next)
     {
-        if (!$request->session()->get('user')['is_admin']) {
-            return Redirect::to('login');
+        if (!Auth::user()->is_admin) {
+            return Redirect::to('/');
         }
 
         return $next($request);

+ 0 - 1
app/Http/Middleware/Affiliate.php

@@ -4,7 +4,6 @@ namespace App\Http\Middleware;
 
 use Cookie;
 use Closure;
-use Redirect;
 
 class Affiliate
 {

+ 2 - 11
app/Http/Middleware/User.php

@@ -4,7 +4,7 @@ namespace App\Http\Middleware;
 
 use Closure;
 use Redirect;
-use App\Http\Models\User as U;
+use Auth;
 
 class User
 {
@@ -18,16 +18,7 @@ class User
      */
     public function handle($request, Closure $next)
     {
-        if (!$request->session()->has('user')) {
-            if ($request->cookie("remember")) {
-                $u = U::query()->where("remember_token", $request->cookie("remember"))->first();
-                if ($u) {
-                    $request->session()->put('user', $u->toArray());
-
-                    return $next($request);
-                }
-            }
-
+        if (!Auth::check()) {
             return Redirect::to('login');
         }
 

+ 4 - 2
app/Http/Models/User.php

@@ -2,7 +2,8 @@
 
 namespace App\Http\Models;
 
-use Illuminate\Database\Eloquent\Model;
+use Illuminate\Notifications\Notifiable;
+use Illuminate\Foundation\Auth\User as Authenticatable;
 
 /**
  * 用户信息
@@ -10,8 +11,9 @@ use Illuminate\Database\Eloquent\Model;
  *
  * @package App\Http\Models
  */
-class User extends Model
+class User extends Authenticatable
 {
+    use Notifiable;
     protected $table = 'user';
     protected $primaryKey = 'id';
 

+ 152 - 151
composer.lock

@@ -792,16 +792,16 @@
         },
         {
             "name": "jakub-onderka/php-console-color",
-            "version": "0.1",
+            "version": "v0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
-                "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
+                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
-                "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
+                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -811,19 +811,19 @@
                 ]
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": ">=5.4.0"
             },
             "require-dev": {
                 "jakub-onderka/php-code-style": "1.0",
-                "jakub-onderka/php-parallel-lint": "0.*",
+                "jakub-onderka/php-parallel-lint": "1.0",
                 "jakub-onderka/php-var-dump-check": "0.*",
-                "phpunit/phpunit": "3.7.*",
+                "phpunit/phpunit": "~4.3",
                 "squizlabs/php_codesniffer": "1.*"
             },
             "type": "library",
             "autoload": {
-                "psr-0": {
-                    "JakubOnderka\\PhpConsoleColor": "src/"
+                "psr-4": {
+                    "JakubOnderka\\PhpConsoleColor\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -833,24 +833,23 @@
             "authors": [
                 {
                     "name": "Jakub Onderka",
-                    "email": "[email protected]",
-                    "homepage": "http://www.acci.cz"
+                    "email": "[email protected]"
                 }
             ],
-            "time": "2014-04-08T15:00:19+00:00"
+            "time": "2018-09-29T17:23:10+00:00"
         },
         {
             "name": "jakub-onderka/php-console-highlighter",
-            "version": "v0.3.2",
+            "version": "v0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
+                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
-                "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
+                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -860,20 +859,21 @@
                 ]
             },
             "require": {
-                "jakub-onderka/php-console-color": "~0.1",
-                "php": ">=5.3.0"
+                "ext-tokenizer": "*",
+                "jakub-onderka/php-console-color": "~0.2",
+                "php": ">=5.4.0"
             },
             "require-dev": {
                 "jakub-onderka/php-code-style": "~1.0",
-                "jakub-onderka/php-parallel-lint": "~0.5",
+                "jakub-onderka/php-parallel-lint": "~1.0",
                 "jakub-onderka/php-var-dump-check": "~0.1",
                 "phpunit/phpunit": "~4.0",
                 "squizlabs/php_codesniffer": "~1.5"
             },
             "type": "library",
             "autoload": {
-                "psr-0": {
-                    "JakubOnderka\\PhpConsoleHighlighter": "src/"
+                "psr-4": {
+                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -887,20 +887,21 @@
                     "homepage": "http://www.acci.cz/"
                 }
             ],
-            "time": "2015-04-20T18:58:01+00:00"
+            "description": "Highlight PHP code in terminal",
+            "time": "2018-09-29T18:48:56+00:00"
         },
         {
             "name": "jaybizzle/crawler-detect",
-            "version": "v1.2.66",
+            "version": "v1.2.72",
             "source": {
                 "type": "git",
                 "url": "https://github.com/JayBizzle/Crawler-Detect.git",
-                "reference": "55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1"
+                "reference": "92805a35b1fc0fbce7fe390df96891ba10e4a12e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1",
-                "reference": "55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1",
+                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/92805a35b1fc0fbce7fe390df96891ba10e4a12e",
+                "reference": "92805a35b1fc0fbce7fe390df96891ba10e4a12e",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -942,7 +943,7 @@
                 "crawlerdetect",
                 "php crawler detect"
             ],
-            "time": "2018-07-30T20:23:10+00:00"
+            "time": "2018-10-23T19:00:40+00:00"
         },
         {
             "name": "jenssegers/agent",
@@ -1153,16 +1154,16 @@
         },
         {
             "name": "laravel/tinker",
-            "version": "v1.0.7",
+            "version": "v1.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/tinker.git",
-                "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d"
+                "reference": "cafbf598a90acde68985660e79b2b03c5609a405"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/tinker/zipball/e3086ee8cb1f54a39ae8dcb72d1c37d10128997d",
-                "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405",
+                "reference": "cafbf598a90acde68985660e79b2b03c5609a405",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1218,20 +1219,20 @@
                 "laravel",
                 "psysh"
             ],
-            "time": "2018-05-17T13:42:07+00:00"
+            "time": "2018-10-12T19:39:35+00:00"
         },
         {
             "name": "league/flysystem",
-            "version": "1.0.45",
+            "version": "1.0.48",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6"
+                "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a99f94e63b512d75f851b181afcdf0ee9ebef7e6",
-                "reference": "a99f94e63b512d75f851b181afcdf0ee9ebef7e6",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
+                "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1241,15 +1242,15 @@
                 ]
             },
             "require": {
+                "ext-fileinfo": "*",
                 "php": ">=5.5.9"
             },
             "conflict": {
                 "league/flysystem-sftp": "<1.0.6"
             },
             "require-dev": {
-                "ext-fileinfo": "*",
                 "phpspec/phpspec": "^3.4",
-                "phpunit/phpunit": "^5.7"
+                "phpunit/phpunit": "^5.7.10"
             },
             "suggest": {
                 "ext-fileinfo": "Required for MimeType",
@@ -1308,20 +1309,20 @@
                 "sftp",
                 "storage"
             ],
-            "time": "2018-05-07T08:44:23+00:00"
+            "time": "2018-10-15T13:53:10+00:00"
         },
         {
             "name": "markbaker/complex",
-            "version": "1.4.6",
+            "version": "1.4.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/MarkBaker/PHPComplex.git",
-                "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b"
+                "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/a78d82ae4e682c3809fc3023d1b0ce654f6ab12b",
-                "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b",
+                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
+                "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1409,20 +1410,20 @@
                 "complex",
                 "mathematics"
             ],
-            "time": "2018-07-31T08:38:40+00:00"
+            "time": "2018-10-13T23:28:42+00:00"
         },
         {
             "name": "mews/captcha",
-            "version": "2.2.0",
+            "version": "2.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mewebstudio/captcha.git",
-                "reference": "c9885e31bb2c30fe185c1af6078a53a3bef5db8f"
+                "reference": "56b044e650a7f9b234f2262b9e377cfb66b94f03"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/c9885e31bb2c30fe185c1af6078a53a3bef5db8f",
-                "reference": "c9885e31bb2c30fe185c1af6078a53a3bef5db8f",
+                "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/56b044e650a7f9b234f2262b9e377cfb66b94f03",
+                "reference": "56b044e650a7f9b234f2262b9e377cfb66b94f03",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1482,20 +1483,20 @@
                 "laravel5 Captcha",
                 "laravel5 Security"
             ],
-            "time": "2018-04-25T13:44:49+00:00"
+            "time": "2018-10-05T19:58:36+00:00"
         },
         {
             "name": "mews/purifier",
-            "version": "2.1.0",
+            "version": "2.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mewebstudio/Purifier.git",
-                "reference": "7333435c9842e207f3381b7319b63122f8c9403e"
+                "reference": "f46304fcfbd66d142e2c7caf9af7d8b19d6c656d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/7333435c9842e207f3381b7319b63122f8c9403e",
-                "reference": "7333435c9842e207f3381b7319b63122f8c9403e",
+                "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/f46304fcfbd66d142e2c7caf9af7d8b19d6c656d",
+                "reference": "f46304fcfbd66d142e2c7caf9af7d8b19d6c656d",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1506,9 +1507,9 @@
             },
             "require": {
                 "ezyang/htmlpurifier": "4.10.*",
-                "illuminate/config": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*",
-                "illuminate/filesystem": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*",
-                "illuminate/support": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*",
+                "illuminate/config": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.*",
+                "illuminate/filesystem": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.*",
+                "illuminate/support": "5.0.* || 5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.* || 5.7.*",
                 "php": ">=5.5.9"
             },
             "require-dev": {
@@ -1563,20 +1564,20 @@
                 "security",
                 "xss"
             ],
-            "time": "2018-03-21T12:29:49+00:00"
+            "time": "2018-10-05T20:13:17+00:00"
         },
         {
             "name": "mobiledetect/mobiledetectlib",
-            "version": "2.8.32",
+            "version": "2.8.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/serbanghita/Mobile-Detect.git",
-                "reference": "ec69a0c381b5fe44547680d3c7db6ced08e5abb3"
+                "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/ec69a0c381b5fe44547680d3c7db6ced08e5abb3",
-                "reference": "ec69a0c381b5fe44547680d3c7db6ced08e5abb3",
+                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/cd385290f9a0d609d2eddd165a1e44ec1bf12102",
+                "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1621,7 +1622,7 @@
                 "mobile detector",
                 "php mobile detect"
             ],
-            "time": "2018-06-03T13:13:04+00:00"
+            "time": "2018-09-01T15:05:15+00:00"
         },
         {
             "name": "monolog/monolog",
@@ -1759,16 +1760,16 @@
         },
         {
             "name": "nesbot/carbon",
-            "version": "1.33.0",
+            "version": "1.34.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "55667c1007a99e82030874b1bb14d24d07108413"
+                "reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413",
-                "reference": "55667c1007a99e82030874b1bb14d24d07108413",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
+                "reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1816,20 +1817,20 @@
                 "datetime",
                 "time"
             ],
-            "time": "2018-08-07T08:39:47+00:00"
+            "time": "2018-09-20T19:36:25+00:00"
         },
         {
             "name": "nikic/php-parser",
-            "version": "v4.0.3",
+            "version": "v4.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bd088dc940a418f09cda079a9b5c7c478890fb8d"
+                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd088dc940a418f09cda079a9b5c7c478890fb8d",
-                "reference": "bd088dc940a418f09cda079a9b5c7c478890fb8d",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0",
+                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1851,7 +1852,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-master": "4.1-dev"
                 }
             },
             "autoload": {
@@ -1873,7 +1874,7 @@
                 "parser",
                 "php"
             ],
-            "time": "2018-07-15T17:25:16+00:00"
+            "time": "2018-10-10T09:24:14+00:00"
         },
         {
             "name": "openlss/lib-array2xml",
@@ -1932,16 +1933,16 @@
         },
         {
             "name": "overtrue/laravel-lang",
-            "version": "3.0.8",
+            "version": "3.0.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/overtrue/laravel-lang.git",
-                "reference": "c49d5f86c2ab2302c06e10d7ebd66a1ac73e0bab"
+                "reference": "11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/overtrue/laravel-lang/zipball/c49d5f86c2ab2302c06e10d7ebd66a1ac73e0bab",
-                "reference": "c49d5f86c2ab2302c06e10d7ebd66a1ac73e0bab",
+                "url": "https://api.github.com/repos/overtrue/laravel-lang/zipball/11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a",
+                "reference": "11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -1985,7 +1986,7 @@
                 "laravel",
                 "overtrue"
             ],
-            "time": "2017-10-28T12:10:43+00:00"
+            "time": "2018-09-03T09:31:08+00:00"
         },
         {
             "name": "paragonie/random_compat",
@@ -2099,16 +2100,16 @@
         },
         {
             "name": "phpoffice/phpspreadsheet",
-            "version": "1.4.0",
+            "version": "1.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
-                "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9"
+                "reference": "2dfd06c59825914a1a325f2a2ed13634b9d8c411"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/125f462a718956f37d81305ca0df4f17cef0f3b9",
-                "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2dfd06c59825914a1a325f2a2ed13634b9d8c411",
+                "reference": "2dfd06c59825914a1a325f2a2ed13634b9d8c411",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2147,7 +2148,7 @@
                 "dompdf/dompdf": "Option for rendering PDF with PDF Writer",
                 "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
                 "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
-                "tecnick.com/tcpdf": "Option for rendering PDF with PDF Writer"
+                "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
             },
             "type": "library",
             "autoload": {
@@ -2188,7 +2189,7 @@
                 "xls",
                 "xlsx"
             ],
-            "time": "2018-08-06T02:58:06+00:00"
+            "time": "2018-10-21T10:04:54+00:00"
         },
         {
             "name": "psr/http-message",
@@ -2355,16 +2356,16 @@
         },
         {
             "name": "psy/psysh",
-            "version": "v0.9.7",
+            "version": "v0.9.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "4f5b6c090948773a8bfeea6a0f07ab7d0b24e932"
+                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4f5b6c090948773a8bfeea6a0f07ab7d0b24e932",
-                "reference": "4f5b6c090948773a8bfeea6a0f07ab7d0b24e932",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2377,7 +2378,7 @@
                 "dnoegel/php-xdg-base-dir": "0.1",
                 "ext-json": "*",
                 "ext-tokenizer": "*",
-                "jakub-onderka/php-console-highlighter": "0.3.*",
+                "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
                 "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
                 "php": ">=5.4.0",
                 "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
@@ -2431,7 +2432,7 @@
                 "interactive",
                 "shell"
             ],
-            "time": "2018-08-11T15:54:43+00:00"
+            "time": "2018-10-13T15:16:03+00:00"
         },
         {
             "name": "ramsey/uuid",
@@ -2644,16 +2645,16 @@
         },
         {
             "name": "symfony/class-loader",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/class-loader.git",
-                "reference": "31db283fc86d3143e7ff87e922177b457d909c30"
+                "reference": "f31333bdff54c7595f834d510a6d2325573ddb36"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/class-loader/zipball/31db283fc86d3143e7ff87e922177b457d909c30",
-                "reference": "31db283fc86d3143e7ff87e922177b457d909c30",
+                "url": "https://api.github.com/repos/symfony/class-loader/zipball/f31333bdff54c7595f834d510a6d2325573ddb36",
+                "reference": "f31333bdff54c7595f834d510a6d2325573ddb36",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2702,20 +2703,20 @@
             ],
             "description": "Symfony ClassLoader Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T12:28:39+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73"
+                "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73",
+                "url": "https://api.github.com/repos/symfony/console/zipball/3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b",
+                "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2777,20 +2778,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T16:33:53+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v4.1.3",
+            "version": "v4.1.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "2a4df7618f869b456f9096781e78c57b509d76c7"
+                "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/2a4df7618f869b456f9096781e78c57b509d76c7",
-                "reference": "2a4df7618f869b456f9096781e78c57b509d76c7",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/d67de79a70a27d93c92c47f37ece958bf8de4d8a",
+                "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2836,20 +2837,20 @@
             ],
             "description": "Symfony CssSelector Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T09:10:45+00:00"
+            "time": "2018-10-02T16:36:10+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc"
+                "reference": "0a612e9dfbd2ccce03eb174365f31ecdca930ff6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/d5a058ff6ecad26b30c1ba452241306ea34c65cc",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/0a612e9dfbd2ccce03eb174365f31ecdca930ff6",
+                "reference": "0a612e9dfbd2ccce03eb174365f31ecdca930ff6",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -2898,11 +2899,11 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T16:33:53+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v4.1.3",
+            "version": "v4.1.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
@@ -2971,16 +2972,16 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a"
+                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/8a84fcb207451df0013b2c74cbbf1b62d47b999a",
-                "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d",
+                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3022,20 +3023,20 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-03T08:46:40+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6"
+                "reference": "3a4498236ade473c52b92d509303e5fd1b211ab1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6",
-                "reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3a4498236ade473c52b92d509303e5fd1b211ab1",
+                "reference": "3a4498236ade473c52b92d509303e5fd1b211ab1",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3082,20 +3083,20 @@
             ],
             "description": "Symfony HttpFoundation Component",
             "homepage": "https://symfony.com",
-            "time": "2018-08-01T14:04:26+00:00"
+            "time": "2018-10-03T08:48:18+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "8e84cc498f0ffecfbabdea78b87828fd66189544"
+                "reference": "a0944a9a1d8845da724236cde9a310964acadb1c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8e84cc498f0ffecfbabdea78b87828fd66189544",
-                "reference": "8e84cc498f0ffecfbabdea78b87828fd66189544",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a0944a9a1d8845da724236cde9a310964acadb1c",
+                "reference": "a0944a9a1d8845da724236cde9a310964acadb1c",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3177,7 +3178,7 @@
             ],
             "description": "Symfony HttpKernel Component",
             "homepage": "https://symfony.com",
-            "time": "2018-08-01T14:47:47+00:00"
+            "time": "2018-10-03T12:03:34+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -3375,16 +3376,16 @@
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "0414db29bd770ec5a4152683e655f55efd4fa60f"
+                "reference": "1dc2977afa7d70f90f3fefbcd84152813558910e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/0414db29bd770ec5a4152683e655f55efd4fa60f",
-                "reference": "0414db29bd770ec5a4152683e655f55efd4fa60f",
+                "url": "https://api.github.com/repos/symfony/process/zipball/1dc2977afa7d70f90f3fefbcd84152813558910e",
+                "reference": "1dc2977afa7d70f90f3fefbcd84152813558910e",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3426,20 +3427,20 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T12:28:39+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "e20f4bb79502c3c0db86d572f7683a30d4143911"
+                "reference": "585f6e2d740393d546978769dd56e496a6233e0b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/e20f4bb79502c3c0db86d572f7683a30d4143911",
-                "reference": "e20f4bb79502c3c0db86d572f7683a30d4143911",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/585f6e2d740393d546978769dd56e496a6233e0b",
+                "reference": "585f6e2d740393d546978769dd56e496a6233e0b",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3509,20 +3510,20 @@
                 "uri",
                 "url"
             ],
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T12:28:39+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v4.1.3",
+            "version": "v4.1.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65"
+                "reference": "9f0b61e339160a466ebcde167a6c5521c810e304"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65",
-                "reference": "6fcd1bd44fd6d7181e6ea57a6f4e08a09b29ef65",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/9f0b61e339160a466ebcde167a6c5521c810e304",
+                "reference": "9f0b61e339160a466ebcde167a6c5521c810e304",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3584,20 +3585,20 @@
             ],
             "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:24:31+00:00"
+            "time": "2018-10-02T16:36:10+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.14",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3"
+                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f62a394bd3de96f2f5e8f4c7d685035897fb3cb3",
-                "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
+                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -3659,7 +3660,7 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2018-10-02T16:33:53+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
@@ -5359,16 +5360,16 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.1.3",
+            "version": "v4.1.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "46bc69aa91fc4ab78a96ce67873a6b0c148fd48c"
+                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/46bc69aa91fc4ab78a96ce67873a6b0c148fd48c",
-                "reference": "46bc69aa91fc4ab78a96ce67873a6b0c148fd48c",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9",
+                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -5420,7 +5421,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:24:31+00:00"
+            "time": "2018-10-02T16:36:10+00:00"
         },
         {
             "name": "webmozart/assert",

+ 35 - 36
config/app.php

@@ -200,43 +200,42 @@ return [
     */
 
     'aliases' => [
-
-        'App' => Illuminate\Support\Facades\App::class,
-        'Artisan' => Illuminate\Support\Facades\Artisan::class,
-        'Auth' => Illuminate\Support\Facades\Auth::class,
-        'Blade' => Illuminate\Support\Facades\Blade::class,
-        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
-        'Bus' => Illuminate\Support\Facades\Bus::class,
-        'Cache' => Illuminate\Support\Facades\Cache::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,
-        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
-        'Event' => Illuminate\Support\Facades\Event::class,
-        'File' => Illuminate\Support\Facades\File::class,
-        'Gate' => Illuminate\Support\Facades\Gate::class,
-        'Hash' => Illuminate\Support\Facades\Hash::class,
-        'Lang' => Illuminate\Support\Facades\Lang::class,
-        'Log' => Illuminate\Support\Facades\Log::class,
-        'Mail' => Illuminate\Support\Facades\Mail::class,
+        'App'          => Illuminate\Support\Facades\App::class,
+        'Artisan'      => Illuminate\Support\Facades\Artisan::class,
+        'Auth'         => Illuminate\Support\Facades\Auth::class,
+        'Blade'        => Illuminate\Support\Facades\Blade::class,
+        'Broadcast'    => Illuminate\Support\Facades\Broadcast::class,
+        'Bus'          => Illuminate\Support\Facades\Bus::class,
+        'Cache'        => Illuminate\Support\Facades\Cache::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,
+        'Eloquent'     => Illuminate\Database\Eloquent\Model::class,
+        'Event'        => Illuminate\Support\Facades\Event::class,
+        'File'         => Illuminate\Support\Facades\File::class,
+        'Gate'         => Illuminate\Support\Facades\Gate::class,
+        'Hash'         => Illuminate\Support\Facades\Hash::class,
+        'Lang'         => Illuminate\Support\Facades\Lang::class,
+        'Log'          => Illuminate\Support\Facades\Log::class,
+        'Mail'         => Illuminate\Support\Facades\Mail::class,
         'Notification' => Illuminate\Support\Facades\Notification::class,
-        'Password' => Illuminate\Support\Facades\Password::class,
-        'Queue' => Illuminate\Support\Facades\Queue::class,
-        'Redirect' => Illuminate\Support\Facades\Redirect::class,
-        'Redis' => Illuminate\Support\Facades\Redis::class,
-        'Request' => Illuminate\Support\Facades\Request::class,
-        'Response' => Illuminate\Support\Facades\Response::class,
-        'Route' => Illuminate\Support\Facades\Route::class,
-        'Schema' => Illuminate\Support\Facades\Schema::class,
-        'Session' => Illuminate\Support\Facades\Session::class,
-        'Storage' => Illuminate\Support\Facades\Storage::class,
-        'URL' => Illuminate\Support\Facades\URL::class,
-        'Validator' => Illuminate\Support\Facades\Validator::class,
-        'View' => Illuminate\Support\Facades\View::class,
-        'Captcha' => Mews\Captcha\Facades\Captcha::class,
-        'Agent' => Jenssegers\Agent\Facades\Agent::class,
-        'Purifier' => Mews\Purifier\Facades\Purifier::class,
+        'Password'     => Illuminate\Support\Facades\Password::class,
+        'Queue'        => Illuminate\Support\Facades\Queue::class,
+        'Redirect'     => Illuminate\Support\Facades\Redirect::class,
+        'Redis'        => Illuminate\Support\Facades\Redis::class,
+        'Request'      => Illuminate\Support\Facades\Request::class,
+        'Response'     => Illuminate\Support\Facades\Response::class,
+        'Route'        => Illuminate\Support\Facades\Route::class,
+        'Schema'       => Illuminate\Support\Facades\Schema::class,
+        'Session'      => Illuminate\Support\Facades\Session::class,
+        'Storage'      => Illuminate\Support\Facades\Storage::class,
+        'URL'          => Illuminate\Support\Facades\URL::class,
+        'Validator'    => Illuminate\Support\Facades\Validator::class,
+        'View'         => Illuminate\Support\Facades\View::class,
+        'Captcha'      => Mews\Captcha\Facades\Captcha::class,
+        'Agent'        => Jenssegers\Agent\Facades\Agent::class,
+        'Purifier'     => Mews\Purifier\Facades\Purifier::class,
 
     ],
 

+ 6 - 6
config/auth.php

@@ -14,7 +14,7 @@ return [
     */
 
     'defaults' => [
-        'guard' => 'web',
+        'guard'     => 'web',
         'passwords' => 'users',
     ],
 
@@ -37,12 +37,12 @@ return [
 
     'guards' => [
         'web' => [
-            'driver' => 'session',
+            'driver'   => 'session',
             'provider' => 'users',
         ],
 
         'api' => [
-            'driver' => 'token',
+            'driver'   => 'token',
             'provider' => 'users',
         ],
     ],
@@ -67,7 +67,7 @@ return [
     'providers' => [
         'users' => [
             'driver' => 'eloquent',
-            'model' => App\User::class,
+            'model'  => App\Http\Models\User::class,
         ],
 
         // 'users' => [
@@ -94,8 +94,8 @@ return [
     'passwords' => [
         'users' => [
             'provider' => 'users',
-            'table' => 'password_resets',
-            'expire' => 60,
+            'table'    => 'password_resets',
+            'expire'   => 60,
         ],
     ],
 

+ 0 - 9
config/captcha.php

@@ -43,13 +43,4 @@ return [
         'contrast'  => -5,
     ],
 
-    // 自动售号机
-    'seller' => [
-        'length'    => 4,
-        'width'     => 90,
-        'height'    => 34,
-        'quality'   => 90,
-        'lines'     => 4,
-    ]
-
 ];

+ 1 - 1
resources/views/admin/layouts.blade.php

@@ -59,7 +59,7 @@
                     <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->
                     <li class="dropdown dropdown-user dropdown-dark">
                         <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
-                            <span class="username username-hide-on-mobile"> {{Session::get('user')['username']}} </span>
+                            <span class="username username-hide-on-mobile"> {{Auth::user()->username}} </span>
                             <!-- DOC: Do not remove below empty space(&nbsp;) as its purposely used -->
                             <img alt="" class="img-circle" src="/assets/images/avatar.png" /> </a>
                         <ul class="dropdown-menu dropdown-menu-default">

+ 1 - 1
resources/views/admin/profile.blade.php

@@ -32,7 +32,7 @@
                         <!-- END SIDEBAR USERPIC -->
                         <!-- SIDEBAR USER TITLE -->
                         <div class="profile-usertitle">
-                            <div class="profile-usertitle-name"> {{Session::get('user')['username']}} </div>
+                            <div class="profile-usertitle-name"> {{Auth::user()->username}} </div>
                             <div class="profile-usertitle-job"> 管理员 </div>
                         </div>
                         <!-- END SIDEBAR USER TITLE -->

+ 0 - 24
resources/views/user/index.blade.php

@@ -1,28 +1,4 @@
 @extends('user.layouts')
-
-@section('css')
-    <link href="/assets/global/plugins/fancybox/source/jquery.fancybox.css" rel="stylesheet" type="text/css" />
-    <style type="text/css">
-        .fancybox > img {
-            width: 75px;
-            height: 75px;
-        }
-        .ticker {
-            background-color: #fff;
-            margin-bottom: 20px;
-            border: 1px solid #e7ecf1!important;
-            border-radius: 4px;
-            -webkit-border-radius: 4px;
-        }
-        .ticker ul {
-            padding: 0;
-        }
-        .ticker li {
-            list-style: none;
-            padding: 15px;
-        }
-    </style>
-@endsection
 @section('title', trans('home.panel'))
 @section('content')
     <!-- BEGIN CONTENT BODY -->

+ 1 - 1
resources/views/user/invite.blade.php

@@ -62,7 +62,7 @@
                                             @foreach($inviteList as $key => $invite)
                                                 <tr>
                                                     <td> {{$key + 1}} </td>
-                                                    <td> <a href="{{url('register?aff='.Session::get('user')['id'].'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
+                                                    <td> <a href="{{url('register?aff='.Auth::user()->id.'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
                                                     <td> {{$invite->dateline}} </td>
                                                     <td>
                                                         @if($invite->status == '0')

+ 3 - 3
resources/views/user/layouts.blade.php

@@ -63,11 +63,11 @@
                     <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->
                     <li class="dropdown dropdown-user dropdown-dark">
                         <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
-                            <span class="username username-hide-on-mobile"> {{Session::get('user')['username']}} </span>
+                            <span class="username username-hide-on-mobile"> {{Auth::user()->username}} </span>
                             <!-- DOC: Do not remove below empty space(&nbsp;) as its purposely used -->
                             <img alt="" class="img-circle" src="/assets/images/avatar.png" /> </a>
                         <ul class="dropdown-menu dropdown-menu-default">
-                            @if(Session::get('user')['is_admin'])
+                            @if(Auth::user()->is_admin)
                                 <li>
                                     <a href="{{url('admin')}}"> <i class="icon-settings"></i>{{trans('home.console')}}</a>
                                 </li>
@@ -174,7 +174,7 @@
     @if(Session::get("admin"))
         <div class="portlet light bordered" style="position:fixed;right:20px;bottom:0px;width:270px;">
             <div class="portlet-body text-right">
-                <h5>当前身份:{{Session::get("user")['username']}}</h5>
+                <h5>当前身份:{{Auth::user()->username}}</h5>
                 <button class="btn btn-sm btn-danger" id="return_to_admin"> 返回管理页面 </button>
             </div>
         </div>

+ 0 - 15
routes/web.php

@@ -143,18 +143,3 @@ Route::group(['namespace' => 'Muv2', 'prefix' => 'mu/v2', 'middleware' => ['Muv2
     Route::get('nodes/{id}/v2rayUsers', 'NodeController@v2rayUsers');
     Route::post('nodes/{id}/traffic', 'NodeController@postTraffic');
 });
-
-// 自动提号机
-Route::group(['prefix' => 'seller', 'middleware' => ['forbidden']], function () {
-    Route::get('/', 'SellerController@index');
-    Route::get('buy/{id}', 'SellerController@buy');
-    Route::post('createPayment', 'SellerController@createPayment'); // 创建支付单
-    Route::get('payment/{sn}', 'SellerController@payment'); // 支付单详情
-    Route::post('redeemCoupon', 'SellerController@redeemCoupon'); // 检查优惠券
-    Route::get('order', 'SellerController@order');
-    Route::post('searchOrder', 'SellerController@searchOrder');
-    Route::get('getPaymentStatus', 'SellerController@getPaymentStatus');
-    Route::get('send', 'SellerController@send');
-    Route::post('sendEmail', 'SellerController@sendEmail'); // 邮件重发
-    Route::any('info', 'SellerController@info'); // 余量查询
-});

BIN
storage/qqwry.dat