ソースを参照

V2Ray节点可以选择加密方式

admin 7 年 前
コミット
d5248f58aa

+ 3 - 3
app/Console/Commands/AutoJob.php

@@ -373,9 +373,6 @@ class AutoJob extends Command
                                 }
                                 }
                             }
                             }
 
 
-                            // 把商品的流量加到账号上
-                            User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic * 1048576);
-
                             // 计算账号过期时间
                             // 计算账号过期时间
                             if ($order->user->expire_time < date('Y-m-d', strtotime("+" . $goods->days . " days"))) {
                             if ($order->user->expire_time < date('Y-m-d', strtotime("+" . $goods->days . " days"))) {
                                 $expireTime = date('Y-m-d', strtotime("+" . $goods->days . " days"));
                                 $expireTime = date('Y-m-d', strtotime("+" . $goods->days . " days"));
@@ -383,6 +380,9 @@ class AutoJob extends Command
                                 $expireTime = $order->user->expire_time;
                                 $expireTime = $order->user->expire_time;
                             }
                             }
 
 
+                            // 把商品的流量加到账号上
+                            User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic * 1048576);
+
                             // 套餐就改流量重置日,流量包不改
                             // 套餐就改流量重置日,流量包不改
                             if ($goods->type == 2) {
                             if ($goods->type == 2) {
                                 if (date('m') == 2 && date('d') == 29) {
                                 if (date('m') == 2 && date('d') == 29) {

+ 34 - 26
app/Http/Controllers/AdminController.php

@@ -237,7 +237,9 @@ class AdminController extends Controller
             $user->protocol_param = $request->get('protocol_param') ? $request->get('protocol_param') : '';
             $user->protocol_param = $request->get('protocol_param') ? $request->get('protocol_param') : '';
             $user->obfs = $request->get('obfs');
             $user->obfs = $request->get('obfs');
             $user->obfs_param = $request->get('obfs_param') ? $request->get('obfs_param') : '';
             $user->obfs_param = $request->get('obfs_param') ? $request->get('obfs_param') : '';
-            $user->gender = $request->get('gender');
+            $user->speed_limit_per_con = intval($request->get('speed_limit_per_con'));
+            $user->speed_limit_per_user = intval($request->get('speed_limit_per_user'));
+            $user->gender = intval($request->get('gender'));
             $user->wechat = $request->get('wechat') ? $request->get('wechat') : '';
             $user->wechat = $request->get('wechat') ? $request->get('wechat') : '';
             $user->qq = $request->get('qq') ? $request->get('qq') : '';
             $user->qq = $request->get('qq') ? $request->get('qq') : '';
             $user->usage = $request->get('usage');
             $user->usage = $request->get('usage');
@@ -350,7 +352,9 @@ class AdminController extends Controller
             $protocol_param = $request->get('protocol_param');
             $protocol_param = $request->get('protocol_param');
             $obfs = $request->get('obfs');
             $obfs = $request->get('obfs');
             $obfs_param = $request->get('obfs_param');
             $obfs_param = $request->get('obfs_param');
-            $gender = $request->get('gender');
+            $speed_limit_per_con = intval($request->get('speed_limit_per_con'));
+            $speed_limit_per_user = intval($request->get('speed_limit_per_user'));
+            $gender = intval($request->get('gender'));
             $wechat = $request->get('wechat');
             $wechat = $request->get('wechat');
             $qq = $request->get('qq');
             $qq = $request->get('qq');
             $usage = $request->get('usage');
             $usage = $request->get('usage');
@@ -390,27 +394,29 @@ class AdminController extends Controller
             DB::beginTransaction();
             DB::beginTransaction();
             try {
             try {
                 $data = [
                 $data = [
-                    'username'        => $username,
-                    'port'            => $port,
-                    'passwd'          => $passwd,
-                    'vmess_id'        => $vmess_id,
-                    'transfer_enable' => toGB($transfer_enable),
-                    'enable'          => $status < 0 ? 0 : $enable, // 如果禁止登陆则同时禁用代理
-                    'method'          => $method,
-                    'protocol'        => $protocol,
-                    'protocol_param'  => $protocol_param,
-                    'obfs'            => $obfs,
-                    'obfs_param'      => $obfs_param,
-                    'gender'          => $gender,
-                    'wechat'          => $wechat,
-                    'qq'              => $qq,
-                    'usage'           => $usage,
-                    'pay_way'         => $pay_way,
-                    'status'          => $status,
-                    'enable_time'     => empty($enable_time) ? date('Y-m-d') : $enable_time,
-                    'expire_time'     => empty($expire_time) ? date('Y-m-d', strtotime("+365 days")) : $expire_time,
-                    'remark'          => $remark,
-                    'level'           => $level,
+                    'username'             => $username,
+                    'port'                 => $port,
+                    'passwd'               => $passwd,
+                    'vmess_id'             => $vmess_id,
+                    'transfer_enable'      => toGB($transfer_enable),
+                    'enable'               => $status < 0 ? 0 : $enable, // 如果禁止登陆则同时禁用代理
+                    'method'               => $method,
+                    'protocol'             => $protocol,
+                    'protocol_param'       => $protocol_param,
+                    'obfs'                 => $obfs,
+                    'obfs_param'           => $obfs_param,
+                    'speed_limit_per_con'  => $speed_limit_per_con,
+                    'speed_limit_per_user' => $speed_limit_per_user,
+                    'gender'               => $gender,
+                    'wechat'               => $wechat,
+                    'qq'                   => $qq,
+                    'usage'                => $usage,
+                    'pay_way'              => $pay_way,
+                    'status'               => $status,
+                    'enable_time'          => empty($enable_time) ? date('Y-m-d') : $enable_time,
+                    'expire_time'          => empty($expire_time) ? date('Y-m-d', strtotime("+365 days")) : $expire_time,
+                    'remark'               => $remark,
+                    'level'                => $level,
                 ];
                 ];
 
 
                 // 只有admin才有权限操作管理员属性
                 // 只有admin才有权限操作管理员属性
@@ -594,7 +600,8 @@ class AdminController extends Controller
                 $ssNode->sort = $request->get('sort') ? intval($request->get('sort')) : 0;
                 $ssNode->sort = $request->get('sort') ? intval($request->get('sort')) : 0;
                 $ssNode->status = $request->get('status') ? intval($request->get('status')) : 1;
                 $ssNode->status = $request->get('status') ? intval($request->get('status')) : 1;
                 $ssNode->v2_alter_id = $request->get('v2_alter_id') ? intval($request->get('v2_alter_id')) : 16;
                 $ssNode->v2_alter_id = $request->get('v2_alter_id') ? intval($request->get('v2_alter_id')) : 16;
-                $ssNode->v2_port = $request->get('v2_port') ? intval($request->get('v2_port')) : 32000;
+                $ssNode->v2_port = $request->get('v2_port') ? intval($request->get('v2_port')) : 10087;
+                $ssNode->v2_method = $request->get('v2_method') ? $request->get('v2_method') : 'aes-128-gcm';
                 $ssNode->v2_net = $request->get('v2_net') ? $request->get('v2_net') : 'tcp';
                 $ssNode->v2_net = $request->get('v2_net') ? $request->get('v2_net') : 'tcp';
                 $ssNode->v2_type = $request->get('v2_type') ? $request->get('v2_type') : 'none';
                 $ssNode->v2_type = $request->get('v2_type') ? $request->get('v2_type') : 'none';
                 $ssNode->v2_host = $request->get('v2_host') ? $request->get('v2_host') : '';
                 $ssNode->v2_host = $request->get('v2_host') ? $request->get('v2_host') : '';
@@ -709,8 +716,9 @@ class AdminController extends Controller
                     'single_obfs'     => $request->get('single') ? $request->get('single_obfs') : '',
                     'single_obfs'     => $request->get('single') ? $request->get('single_obfs') : '',
                     'sort'            => intval($request->get('sort')),
                     'sort'            => intval($request->get('sort')),
                     'status'          => intval($request->get('status')),
                     'status'          => intval($request->get('status')),
-                    'v2_alter_id'     => intval($request->get('v2_alter_id')),
-                    'v2_port'         => $request->get('v2_port') ? $request->get('v2_port') : 32000,
+                    'v2_alter_id'     => $request->get('v2_alter_id') ? intval($request->get('v2_alter_id')) : 16,
+                    'v2_port'         => $request->get('v2_port') ? intval($request->get('v2_port')) : 10087,
+                    'v2_method'       => $request->get('v2_method') ? $request->get('v2_method') : 'aes-128-gcm',
                     'v2_net'          => $request->get('v2_net'),
                     'v2_net'          => $request->get('v2_net'),
                     'v2_type'         => $request->get('v2_type'),
                     'v2_type'         => $request->get('v2_type'),
                     'v2_host'         => $request->get('v2_host'),
                     'v2_host'         => $request->get('v2_host'),

+ 3 - 3
app/Http/Controllers/Api/YzyController.php

@@ -213,9 +213,6 @@ class YzyController extends Controller
                 $user = User::query()->where('id', $order->user_id)->first(); // 重新取出user信息
                 $user = User::query()->where('id', $order->user_id)->first(); // 重新取出user信息
                 Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, ($user->transfer_enable + $goods->traffic * 1048576), '[在线支付]用户购买商品,加上流量');
                 Helpers::addUserTrafficModifyLog($order->user_id, $order->oid, $user->transfer_enable, ($user->transfer_enable + $goods->traffic * 1048576), '[在线支付]用户购买商品,加上流量');
 
 
-                // 把商品的流量加到账号上
-                User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic * 1048576);
-
                 // 计算账号过期时间
                 // 计算账号过期时间
                 if ($order->user->expire_time < date('Y-m-d', strtotime("+" . $goods->days . " days"))) {
                 if ($order->user->expire_time < date('Y-m-d', strtotime("+" . $goods->days . " days"))) {
                     $expireTime = date('Y-m-d', strtotime("+" . $goods->days . " days"));
                     $expireTime = date('Y-m-d', strtotime("+" . $goods->days . " days"));
@@ -223,6 +220,9 @@ class YzyController extends Controller
                     $expireTime = $order->user->expire_time;
                     $expireTime = $order->user->expire_time;
                 }
                 }
 
 
+                // 把商品的流量加到账号上
+                User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic * 1048576);
+
                 // 套餐就改流量重置日,流量包不改
                 // 套餐就改流量重置日,流量包不改
                 if ($goods->type == 2) {
                 if ($goods->type == 2) {
                     if (date('m') == 2 && date('d') == 29) {
                     if (date('m') == 2 && date('d') == 29) {

+ 204 - 121
composer.lock

@@ -895,16 +895,16 @@
         },
         },
         {
         {
             "name": "jaybizzle/crawler-detect",
             "name": "jaybizzle/crawler-detect",
-            "version": "v1.2.76",
+            "version": "v1.2.77",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/JayBizzle/Crawler-Detect.git",
                 "url": "https://github.com/JayBizzle/Crawler-Detect.git",
-                "reference": "728dd7f210819ccafbf008a6ef7956f4f3c3571c"
+                "reference": "28b16dd80c5a690dd8d05aa2602b16815f6eff6d"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/728dd7f210819ccafbf008a6ef7956f4f3c3571c",
-                "reference": "728dd7f210819ccafbf008a6ef7956f4f3c3571c",
+                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/28b16dd80c5a690dd8d05aa2602b16815f6eff6d",
+                "reference": "28b16dd80c5a690dd8d05aa2602b16815f6eff6d",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -946,20 +946,20 @@
                 "crawlerdetect",
                 "crawlerdetect",
                 "php crawler detect"
                 "php crawler detect"
             ],
             ],
-            "time": "2018-12-18T08:52:44+00:00"
+            "time": "2019-01-12T17:16:15+00:00"
         },
         },
         {
         {
             "name": "jenssegers/agent",
             "name": "jenssegers/agent",
-            "version": "v2.6.0",
+            "version": "v2.6.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/jenssegers/agent.git",
                 "url": "https://github.com/jenssegers/agent.git",
-                "reference": "df71082ed2a95fc8a82ba30832ccf72df939f02a"
+                "reference": "41cd1fd6200a9b0d70db75133ee23064c9965980"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/jenssegers/agent/zipball/df71082ed2a95fc8a82ba30832ccf72df939f02a",
-                "reference": "df71082ed2a95fc8a82ba30832ccf72df939f02a",
+                "url": "https://api.github.com/repos/jenssegers/agent/zipball/41cd1fd6200a9b0d70db75133ee23064c9965980",
+                "reference": "41cd1fd6200a9b0d70db75133ee23064c9965980",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -971,11 +971,14 @@
             "require": {
             "require": {
                 "jaybizzle/crawler-detect": "^1.2",
                 "jaybizzle/crawler-detect": "^1.2",
                 "mobiledetect/mobiledetectlib": "^2.7.6",
                 "mobiledetect/mobiledetectlib": "^2.7.6",
-                "php": ">=5.4.0"
+                "php": ">=5.6"
             },
             },
             "require-dev": {
             "require-dev": {
-                "phpunit/phpunit": "^4.0|^5.0|^6.0",
-                "satooshi/php-coveralls": "^1.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5.0|^6.0|^7.0"
+            },
+            "suggest": {
+                "illuminate/support": "^4.0|^5.0"
             },
             },
             "type": "library",
             "type": "library",
             "extra": {
             "extra": {
@@ -1018,7 +1021,7 @@
                 "user agent",
                 "user agent",
                 "useragent"
                 "useragent"
             ],
             ],
-            "time": "2017-11-10T10:35:35+00:00"
+            "time": "2019-01-06T12:37:04+00:00"
         },
         },
         {
         {
             "name": "laravel/framework",
             "name": "laravel/framework",
@@ -1415,6 +1418,82 @@
             ],
             ],
             "time": "2018-10-13T23:28:42+00:00"
             "time": "2018-10-13T23:28:42+00:00"
         },
         },
+        {
+            "name": "markbaker/matrix",
+            "version": "1.1.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPMatrix.git",
+                "reference": "6ea97472b5baf12119b4f31f802835b820dd6d64"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/6ea97472b5baf12119b4f31f802835b820dd6d64",
+                "reference": "6ea97472b5baf12119b4f31f802835b820dd6d64",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://dl.laravel-china.org/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": "^5.6.0|^7.0.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
+                "phpcompatibility/php-compatibility": "^8.0",
+                "phpdocumentor/phpdocumentor": "2.*",
+                "phploc/phploc": "2.*",
+                "phpmd/phpmd": "2.*",
+                "phpunit/phpunit": "^4.8.35|^5.4.0",
+                "sebastian/phpcpd": "2.*",
+                "squizlabs/php_codesniffer": "^3.3.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Matrix\\": "classes/src/"
+                },
+                "files": [
+                    "classes/src/functions/adjoint.php",
+                    "classes/src/functions/antidiagonal.php",
+                    "classes/src/functions/cofactors.php",
+                    "classes/src/functions/determinant.php",
+                    "classes/src/functions/diagonal.php",
+                    "classes/src/functions/identity.php",
+                    "classes/src/functions/inverse.php",
+                    "classes/src/functions/minors.php",
+                    "classes/src/functions/trace.php",
+                    "classes/src/functions/transpose.php",
+                    "classes/src/operations/add.php",
+                    "classes/src/operations/directsum.php",
+                    "classes/src/operations/subtract.php",
+                    "classes/src/operations/multiply.php",
+                    "classes/src/operations/divideby.php",
+                    "classes/src/operations/divideinto.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "PHP Class for working with matrices",
+            "homepage": "https://github.com/MarkBaker/PHPMatrix",
+            "keywords": [
+                "mathematics",
+                "matrix",
+                "vector"
+            ],
+            "time": "2018-11-04T22:12:12+00:00"
+        },
         {
         {
             "name": "mews/captcha",
             "name": "mews/captcha",
             "version": "2.2.4",
             "version": "2.2.4",
@@ -1763,16 +1842,16 @@
         },
         },
         {
         {
             "name": "nesbot/carbon",
             "name": "nesbot/carbon",
-            "version": "1.36.1",
+            "version": "1.36.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983"
+                "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
-                "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9",
+                "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -1823,20 +1902,20 @@
                 "datetime",
                 "datetime",
                 "time"
                 "time"
             ],
             ],
-            "time": "2018-11-22T18:23:02+00:00"
+            "time": "2018-12-28T10:07:33+00:00"
         },
         },
         {
         {
             "name": "nikic/php-parser",
             "name": "nikic/php-parser",
-            "version": "v4.1.0",
+            "version": "v4.2.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0"
+                "reference": "594bcae1fc0bccd3993d2f0d61a018e26ac2865a"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0",
-                "reference": "d0230c5c77a7e3cfa69446febf340978540958c0",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/594bcae1fc0bccd3993d2f0d61a018e26ac2865a",
+                "reference": "594bcae1fc0bccd3993d2f0d61a018e26ac2865a",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -1858,7 +1937,7 @@
             "type": "library",
             "type": "library",
             "extra": {
             "extra": {
                 "branch-alias": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.2-dev"
                 }
                 }
             },
             },
             "autoload": {
             "autoload": {
@@ -1880,7 +1959,7 @@
                 "parser",
                 "parser",
                 "php"
                 "php"
             ],
             ],
-            "time": "2018-10-10T09:24:14+00:00"
+            "time": "2019-01-12T16:31:37+00:00"
         },
         },
         {
         {
             "name": "openlss/lib-array2xml",
             "name": "openlss/lib-array2xml",
@@ -1939,16 +2018,16 @@
         },
         },
         {
         {
             "name": "overtrue/laravel-lang",
             "name": "overtrue/laravel-lang",
-            "version": "3.0.13",
+            "version": "3.0.14",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/overtrue/laravel-lang.git",
                 "url": "https://github.com/overtrue/laravel-lang.git",
-                "reference": "11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a"
+                "reference": "95888a0a9a5b048ba52de57fc01a098f23292b2d"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/overtrue/laravel-lang/zipball/11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a",
-                "reference": "11d8386a5dee3cfedf4ee7e2da6af0d3b3fe268a",
+                "url": "https://api.github.com/repos/overtrue/laravel-lang/zipball/95888a0a9a5b048ba52de57fc01a098f23292b2d",
+                "reference": "95888a0a9a5b048ba52de57fc01a098f23292b2d",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -1992,20 +2071,20 @@
                 "laravel",
                 "laravel",
                 "overtrue"
                 "overtrue"
             ],
             ],
-            "time": "2018-09-03T09:31:08+00:00"
+            "time": "2019-01-13T14:37:42+00:00"
         },
         },
         {
         {
             "name": "paragonie/random_compat",
             "name": "paragonie/random_compat",
-            "version": "v2.0.17",
+            "version": "v2.0.18",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/paragonie/random_compat.git",
                 "url": "https://github.com/paragonie/random_compat.git",
-                "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d"
+                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d",
-                "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
+                "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2047,20 +2126,20 @@
                 "pseudorandom",
                 "pseudorandom",
                 "random"
                 "random"
             ],
             ],
-            "time": "2018-07-04T16:31:37+00:00"
+            "time": "2019-01-03T20:59:08+00:00"
         },
         },
         {
         {
             "name": "paypal/rest-api-sdk-php",
             "name": "paypal/rest-api-sdk-php",
-            "version": "1.13.0",
+            "version": "1.14.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/paypal/PayPal-PHP-SDK.git",
                 "url": "https://github.com/paypal/PayPal-PHP-SDK.git",
-                "reference": "192e217beed14c8e75624e821fdc8ec51e2a21f5"
+                "reference": "72e2f2466975bf128a31e02b15110180f059fc04"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/paypal/PayPal-PHP-SDK/zipball/192e217beed14c8e75624e821fdc8ec51e2a21f5",
-                "reference": "192e217beed14c8e75624e821fdc8ec51e2a21f5",
+                "url": "https://api.github.com/repos/paypal/PayPal-PHP-SDK/zipball/72e2f2466975bf128a31e02b15110180f059fc04",
+                "reference": "72e2f2466975bf128a31e02b15110180f059fc04",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2102,20 +2181,20 @@
                 "rest",
                 "rest",
                 "sdk"
                 "sdk"
             ],
             ],
-            "time": "2017-11-13T19:21:59+00:00"
+            "time": "2019-01-04T20:04:25+00:00"
         },
         },
         {
         {
             "name": "phpoffice/phpspreadsheet",
             "name": "phpoffice/phpspreadsheet",
-            "version": "1.5.2",
+            "version": "1.6.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
-                "reference": "cd60531c44f580fbdfbd55dfb935af791f09be5d"
+                "reference": "bf00f0cc5f55c354018f9a9ef15e6e3e1a229051"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/cd60531c44f580fbdfbd55dfb935af791f09be5d",
-                "reference": "cd60531c44f580fbdfbd55dfb935af791f09be5d",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/bf00f0cc5f55c354018f9a9ef15e6e3e1a229051",
+                "reference": "bf00f0cc5f55c354018f9a9ef15e6e3e1a229051",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2127,6 +2206,7 @@
             "require": {
             "require": {
                 "ext-ctype": "*",
                 "ext-ctype": "*",
                 "ext-dom": "*",
                 "ext-dom": "*",
+                "ext-fileinfo": "*",
                 "ext-gd": "*",
                 "ext-gd": "*",
                 "ext-iconv": "*",
                 "ext-iconv": "*",
                 "ext-libxml": "*",
                 "ext-libxml": "*",
@@ -2137,11 +2217,13 @@
                 "ext-xmlwriter": "*",
                 "ext-xmlwriter": "*",
                 "ext-zip": "*",
                 "ext-zip": "*",
                 "ext-zlib": "*",
                 "ext-zlib": "*",
-                "markbaker/complex": "^1.4.1",
+                "markbaker/complex": "^1.4",
+                "markbaker/matrix": "^1.1",
                 "php": "^5.6|^7.0",
                 "php": "^5.6|^7.0",
                 "psr/simple-cache": "^1.0"
                 "psr/simple-cache": "^1.0"
             },
             },
             "require-dev": {
             "require-dev": {
+                "doctrine/instantiator": "^1.0.0",
                 "dompdf/dompdf": "^0.8.0",
                 "dompdf/dompdf": "^0.8.0",
                 "friendsofphp/php-cs-fixer": "@stable",
                 "friendsofphp/php-cs-fixer": "@stable",
                 "jpgraph/jpgraph": "^4.0",
                 "jpgraph/jpgraph": "^4.0",
@@ -2199,7 +2281,7 @@
                 "xls",
                 "xls",
                 "xlsx"
                 "xlsx"
             ],
             ],
-            "time": "2018-11-25T17:40:15+00:00"
+            "time": "2019-01-02T04:42:54+00:00"
         },
         },
         {
         {
             "name": "predis/predis",
             "name": "predis/predis",
@@ -2828,16 +2910,16 @@
         },
         },
         {
         {
             "name": "symfony/class-loader",
             "name": "symfony/class-loader",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/class-loader.git",
                 "url": "https://github.com/symfony/class-loader.git",
-                "reference": "420458095cf60025eb0841276717e0da7f75e50e"
+                "reference": "4513348012c25148f8cbc3a7761a1d1e60ca3e87"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e",
-                "reference": "420458095cf60025eb0841276717e0da7f75e50e",
+                "url": "https://api.github.com/repos/symfony/class-loader/zipball/4513348012c25148f8cbc3a7761a1d1e60ca3e87",
+                "reference": "4513348012c25148f8cbc3a7761a1d1e60ca3e87",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2886,20 +2968,20 @@
             ],
             ],
             "description": "Symfony ClassLoader Component",
             "description": "Symfony ClassLoader Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-11T19:48:54+00:00"
+            "time": "2019-01-01T13:45:19+00:00"
         },
         },
         {
         {
             "name": "symfony/console",
             "name": "symfony/console",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb"
+                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
-                "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
+                "url": "https://api.github.com/repos/symfony/console/zipball/a700b874d3692bc8342199adfb6d3b99f62cc61a",
+                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2961,7 +3043,7 @@
             ],
             ],
             "description": "Symfony Console Component",
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-26T12:48:07+00:00"
+            "time": "2019-01-04T04:42:43+00:00"
         },
         },
         {
         {
             "name": "symfony/contracts",
             "name": "symfony/contracts",
@@ -3039,16 +3121,16 @@
         },
         },
         {
         {
             "name": "symfony/css-selector",
             "name": "symfony/css-selector",
-            "version": "v4.2.1",
+            "version": "v4.2.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "aa9fa526ba1b2ec087ffdfb32753803d999fcfcd"
+                "reference": "76dac1dbe2830213e95892c7c2ec1edd74113ea4"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/aa9fa526ba1b2ec087ffdfb32753803d999fcfcd",
-                "reference": "aa9fa526ba1b2ec087ffdfb32753803d999fcfcd",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/76dac1dbe2830213e95892c7c2ec1edd74113ea4",
+                "reference": "76dac1dbe2830213e95892c7c2ec1edd74113ea4",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3094,20 +3176,20 @@
             ],
             ],
             "description": "Symfony CssSelector Component",
             "description": "Symfony CssSelector Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-11T19:52:12+00:00"
+            "time": "2019-01-03T09:07:35+00:00"
         },
         },
         {
         {
             "name": "symfony/debug",
             "name": "symfony/debug",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "a2233f555ddf55e5600f386fba7781cea1cb82d3"
+                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/a2233f555ddf55e5600f386fba7781cea1cb82d3",
-                "reference": "a2233f555ddf55e5600f386fba7781cea1cb82d3",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
+                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3156,20 +3238,20 @@
             ],
             ],
             "description": "Symfony Debug Component",
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-27T12:43:10+00:00"
+            "time": "2019-01-01T13:45:19+00:00"
         },
         },
         {
         {
             "name": "symfony/event-dispatcher",
             "name": "symfony/event-dispatcher",
-            "version": "v4.2.1",
+            "version": "v4.2.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "921f49c3158a276d27c0d770a5a347a3b718b328"
+                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328",
-                "reference": "921f49c3158a276d27c0d770a5a347a3b718b328",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
+                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3226,20 +3308,20 @@
             ],
             ],
             "description": "Symfony EventDispatcher Component",
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-12-01T08:52:38+00:00"
+            "time": "2019-01-05T16:37:49+00:00"
         },
         },
         {
         {
             "name": "symfony/finder",
             "name": "symfony/finder",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442"
+                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
-                "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
+                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3281,20 +3363,20 @@
             ],
             ],
             "description": "Symfony Finder Component",
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-11T19:48:54+00:00"
+            "time": "2019-01-01T13:45:19+00:00"
         },
         },
         {
         {
             "name": "symfony/http-foundation",
             "name": "symfony/http-foundation",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38"
+                "reference": "2b97319e68816d2120eee7f13f4b76da12e04d03"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38",
-                "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/2b97319e68816d2120eee7f13f4b76da12e04d03",
+                "reference": "2b97319e68816d2120eee7f13f4b76da12e04d03",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3341,20 +3423,20 @@
             ],
             ],
             "description": "Symfony HttpFoundation Component",
             "description": "Symfony HttpFoundation Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-26T10:17:44+00:00"
+            "time": "2019-01-05T08:05:37+00:00"
         },
         },
         {
         {
             "name": "symfony/http-kernel",
             "name": "symfony/http-kernel",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "31f20eb6e00467ae85501dd98770aef17cd9aba7"
+                "reference": "60bd9d7444ca436e131c347d78ec039dd99a34b4"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/31f20eb6e00467ae85501dd98770aef17cd9aba7",
-                "reference": "31f20eb6e00467ae85501dd98770aef17cd9aba7",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/60bd9d7444ca436e131c347d78ec039dd99a34b4",
+                "reference": "60bd9d7444ca436e131c347d78ec039dd99a34b4",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3436,7 +3518,7 @@
             ],
             ],
             "description": "Symfony HttpKernel Component",
             "description": "Symfony HttpKernel Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-12-06T14:59:33+00:00"
+            "time": "2019-01-06T15:53:59+00:00"
         },
         },
         {
         {
             "name": "symfony/polyfill-ctype",
             "name": "symfony/polyfill-ctype",
@@ -3634,16 +3716,16 @@
         },
         },
         {
         {
             "name": "symfony/process",
             "name": "symfony/process",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2"
+                "reference": "0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2",
-                "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2",
+                "url": "https://api.github.com/repos/symfony/process/zipball/0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c",
+                "reference": "0d41dd7d95ed179aed6a13393b0f4f97bfa2d25c",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3685,20 +3767,20 @@
             ],
             ],
             "description": "Symfony Process Component",
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-20T16:10:26+00:00"
+            "time": "2019-01-02T21:24:08+00:00"
         },
         },
         {
         {
             "name": "symfony/routing",
             "name": "symfony/routing",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "94a3dd89bda078bef0c3bf79eb024fe136dd58f9"
+                "reference": "445d3629a26930158347a50d1a5f2456c49e0ae6"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/94a3dd89bda078bef0c3bf79eb024fe136dd58f9",
-                "reference": "94a3dd89bda078bef0c3bf79eb024fe136dd58f9",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/445d3629a26930158347a50d1a5f2456c49e0ae6",
+                "reference": "445d3629a26930158347a50d1a5f2456c49e0ae6",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3768,20 +3850,20 @@
                 "uri",
                 "uri",
                 "url"
                 "url"
             ],
             ],
-            "time": "2018-12-03T13:20:34+00:00"
+            "time": "2019-01-01T13:45:19+00:00"
         },
         },
         {
         {
             "name": "symfony/translation",
             "name": "symfony/translation",
-            "version": "v4.2.1",
+            "version": "v4.2.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6"
+                "reference": "939fb792d73f2ce80e6ae9019d205fc480f1c9a0"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6",
-                "reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/939fb792d73f2ce80e6ae9019d205fc480f1c9a0",
+                "reference": "939fb792d73f2ce80e6ae9019d205fc480f1c9a0",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3847,20 +3929,20 @@
             ],
             ],
             "description": "Symfony Translation Component",
             "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-12-06T10:45:32+00:00"
+            "time": "2019-01-03T09:07:35+00:00"
         },
         },
         {
         {
             "name": "symfony/var-dumper",
             "name": "symfony/var-dumper",
-            "version": "v3.4.20",
+            "version": "v3.4.21",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "6867713afe6c50ade2f34ed6435563b065a52145"
+                "reference": "a5f39641bb62e8b74e343467b145331273f615a2"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145",
-                "reference": "6867713afe6c50ade2f34ed6435563b065a52145",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5f39641bb62e8b74e343467b145331273f615a2",
+                "reference": "a5f39641bb62e8b74e343467b145331273f615a2",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3922,7 +4004,7 @@
                 "debug",
                 "debug",
                 "dump"
                 "dump"
             ],
             ],
-            "time": "2018-11-20T16:10:26+00:00"
+            "time": "2019-01-01T13:45:19+00:00"
         },
         },
         {
         {
             "name": "tijsverkoyen/css-to-inline-styles",
             "name": "tijsverkoyen/css-to-inline-styles",
@@ -3979,16 +4061,16 @@
         },
         },
         {
         {
             "name": "vlucas/phpdotenv",
             "name": "vlucas/phpdotenv",
-            "version": "v2.5.1",
+            "version": "v2.5.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e"
+                "reference": "cfd5dc225767ca154853752abc93aeec040fcf36"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
-                "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/cfd5dc225767ca154853752abc93aeec040fcf36",
+                "reference": "cfd5dc225767ca154853752abc93aeec040fcf36",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -4031,7 +4113,7 @@
                 "env",
                 "env",
                 "environment"
                 "environment"
             ],
             ],
-            "time": "2018-07-29T20:33:41+00:00"
+            "time": "2018-10-30T17:29:25+00:00"
         },
         },
         {
         {
             "name": "youzan/open-sdk",
             "name": "youzan/open-sdk",
@@ -5622,16 +5704,16 @@
         },
         },
         {
         {
             "name": "symfony/yaml",
             "name": "symfony/yaml",
-            "version": "v4.2.1",
+            "version": "v4.2.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "c41175c801e3edfda90f32e292619d10c27103d7"
+                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/c41175c801e3edfda90f32e292619d10c27103d7",
-                "reference": "c41175c801e3edfda90f32e292619d10c27103d7",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/d0aa6c0ea484087927b49fd513383a7d36190ca6",
+                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -5683,20 +5765,20 @@
             ],
             ],
             "description": "Symfony Yaml Component",
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
             "homepage": "https://symfony.com",
-            "time": "2018-11-11T19:52:12+00:00"
+            "time": "2019-01-03T09:07:35+00:00"
         },
         },
         {
         {
             "name": "webmozart/assert",
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.4.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -5706,7 +5788,8 @@
                 ]
                 ]
             },
             },
             "require": {
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0",
+                "symfony/polyfill-ctype": "^1.8"
             },
             },
             "require-dev": {
             "require-dev": {
                 "phpunit/phpunit": "^4.6",
                 "phpunit/phpunit": "^4.6",
@@ -5739,7 +5822,7 @@
                 "check",
                 "check",
                 "validate"
                 "validate"
             ],
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2018-12-25T11:19:39+00:00"
         }
         }
     ],
     ],
     "aliases": [],
     "aliases": [],

+ 32 - 10
resources/views/admin/addNode.blade.php

@@ -10,16 +10,21 @@
         <div class="row">
         <div class="row">
             <div class="col-md-12">
             <div class="col-md-12">
                 <div class="tab-pane active">
                 <div class="tab-pane active">
+                    <div class="row">
+                        <div class="col-md-12">
+                            <div class="note note-info">
+                                <p><strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署ShadowsocksR Python版后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;</p>
+                                <p>V2Ray Go版节点部署 <a href="https://github.com/ssrpanel/SSRPanel/wiki/V2Ray%E5%AE%8C%E6%95%B4%E9%85%8D%E7%BD%AE%E7%A4%BA%E4%BE%8B%EF%BC%88Go%E7%89%88%EF%BC%89" target="_blank">教程</a>;</p>
+                                <p>Shadowsocks Go版节点部署 <a href="https://github.com/ssrpanel/SSRPanel/wiki/SS-Go%E7%89%88%E8%8A%82%E7%82%B9%E9%83%A8%E7%BD%B2" target="_blank">教程</a>;</p>
+                                <p>更改服务器的SSH端口 <a href="https://github.com/ssrpanel/SSRPanel/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A6%81%E6%AD%A2PING%E3%80%81%E6%94%B9SSH%E7%AB%AF%E5%8F%A3%E5%8F%B7" target="_blank">教程</a>;</p>
+                            </div>
+                        </div>
+                    </div>
                     <div class="portlet light bordered">
                     <div class="portlet light bordered">
                         <div class="portlet-body form">
                         <div class="portlet-body form">
                             <!-- BEGIN FORM-->
                             <!-- BEGIN FORM-->
                             <form action="{{url('admin/addNode')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
                             <form action="{{url('admin/addNode')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
                                 <div class="form-body">
                                 <div class="form-body">
-                                    <div class="alert alert-danger">
-                                        <strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署SSR后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;
-                                        V2Ray GO版节点部署<a href="https://github.com/ssrpanel/SSRPanel/wiki/V2Ray%E5%AE%8C%E6%95%B4%E9%85%8D%E7%BD%AE%E7%A4%BA%E4%BE%8B%EF%BC%88Go%E7%89%88%EF%BC%89" target="_blank">教程</a>;
-                                        更改服务器的SSH端口<a href="https://github.com/ssrpanel/SSRPanel/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A6%81%E6%AD%A2PING%E3%80%81%E6%94%B9SSH%E7%AB%AF%E5%8F%A3%E5%8F%B7" target="_blank">教程</a>;
-                                    </div>
                                     <div class="row">
                                     <div class="row">
                                         <div class="col-md-6">
                                         <div class="col-md-6">
                                             <!-- BEGIN SAMPLE FORM PORTLET-->
                                             <!-- BEGIN SAMPLE FORM PORTLET-->
@@ -375,12 +380,26 @@
                                                             <label for="v2_alter_id" class="col-md-3 control-label">额外ID</label>
                                                             <label for="v2_alter_id" class="col-md-3 control-label">额外ID</label>
                                                             <div class="col-md-8">
                                                             <div class="col-md-8">
                                                                 <input type="text" class="form-control" name="v2_alter_id" value="16" id="v2_alter_id" placeholder="16">
                                                                 <input type="text" class="form-control" name="v2_alter_id" value="16" id="v2_alter_id" placeholder="16">
+                                                                <span class="help-block"> 后端配置注意保持一致 </span>
                                                             </div>
                                                             </div>
                                                         </div>
                                                         </div>
                                                         <div class="form-group">
                                                         <div class="form-group">
                                                             <label for="v2_port" class="col-md-3 control-label">端口</label>
                                                             <label for="v2_port" class="col-md-3 control-label">端口</label>
                                                             <div class="col-md-8">
                                                             <div class="col-md-8">
                                                                 <input type="text" class="form-control" name="v2_port" value="10087" id="v2_port" placeholder="10087">
                                                                 <input type="text" class="form-control" name="v2_port" value="10087" id="v2_port" placeholder="10087">
+                                                                <span class="help-block"> 后端配置注意保持一致 </span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="form-group">
+                                                            <label for="v2_method" class="col-md-3 control-label">加密方式</label>
+                                                            <div class="col-md-8">
+                                                                <select class="form-control" name="v2_method" id="v2_method">
+                                                                    <option value="none">none</option>
+                                                                    <option value="aes-128-cfb">aes-128-cfb</option>
+                                                                    <option value="aes-128-gcm" selected>aes-128-gcm</option>
+                                                                    <option value="chacha20-poly1305">chacha20-poly1305</option>
+                                                                </select>
+                                                                <span class="help-block"> 使用WebSocket传输协议时不要使用none </span>
                                                             </div>
                                                             </div>
                                                         </div>
                                                         </div>
                                                         <div class="form-group">
                                                         <div class="form-group">
@@ -388,10 +407,11 @@
                                                             <div class="col-md-8">
                                                             <div class="col-md-8">
                                                                 <select class="form-control" name="v2_net" id="v2_net">
                                                                 <select class="form-control" name="v2_net" id="v2_net">
                                                                     <option value="tcp" selected>TCP</option>
                                                                     <option value="tcp" selected>TCP</option>
-                                                                    <option value="kcp">mKCP</option>
-                                                                    <option value="ws">WebSocket</option>
-                                                                    <option value="h2">HTTP/2</option>
+                                                                    <option value="kcp">mKCP(kcp)</option>
+                                                                    <option value="ws">WebSocket(ws)</option>
+                                                                    <option value="h2">HTTP/2(h2)</option>
                                                                 </select>
                                                                 </select>
+                                                                <span class="help-block"> 使用WebSocket传输协议时请启用TLS </span>
                                                             </div>
                                                             </div>
                                                         </div>
                                                         </div>
                                                         <div class="form-group">
                                                         <div class="form-group">
@@ -412,11 +432,11 @@
                                                             <label for="v2_host" class="col-md-3 control-label">伪装域名</label>
                                                             <label for="v2_host" class="col-md-3 control-label">伪装域名</label>
                                                             <div class="col-md-8">
                                                             <div class="col-md-8">
                                                                 <input type="text" class="form-control" name="v2_host" id="v2_host">
                                                                 <input type="text" class="form-control" name="v2_host" id="v2_host">
-                                                                <span class="help-block"> 伪装类型为http时多个伪装域名逗号隔开,WebSocket只允许单个 </span>
+                                                                <span class="help-block"> 伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个 </span>
                                                             </div>
                                                             </div>
                                                         </div>
                                                         </div>
                                                         <div class="form-group">
                                                         <div class="form-group">
-                                                            <label for="v2_path" class="col-md-3 control-label">WS/H2路径</label>
+                                                            <label for="v2_path" class="col-md-3 control-label">ws/h2路径</label>
                                                             <div class="col-md-8">
                                                             <div class="col-md-8">
                                                                 <input type="text" class="form-control" name="v2_path" id="v2_path">
                                                                 <input type="text" class="form-control" name="v2_path" id="v2_path">
                                                             </div>
                                                             </div>
@@ -510,6 +530,7 @@
             var service = $("input:radio[name='service']:checked").val();
             var service = $("input:radio[name='service']:checked").val();
             var v2_alter_id = $('#v2_alter_id').val();
             var v2_alter_id = $('#v2_alter_id').val();
             var v2_port = $('#v2_port').val();
             var v2_port = $('#v2_port').val();
+            var v2_method = $("#v2_method option:selected").val();
             var v2_net = $('#v2_net').val();
             var v2_net = $('#v2_net').val();
             var v2_type = $('#v2_type').val();
             var v2_type = $('#v2_type').val();
             var v2_host = $('#v2_host').val();
             var v2_host = $('#v2_host').val();
@@ -556,6 +577,7 @@
                     type: service,
                     type: service,
                     v2_alter_id: v2_alter_id,
                     v2_alter_id: v2_alter_id,
                     v2_port: v2_port,
                     v2_port: v2_port,
+                    v2_method: v2_method,
                     v2_net: v2_net,
                     v2_net: v2_net,
                     v2_type: v2_type,
                     v2_type: v2_type,
                     v2_host: v2_host,
                     v2_host: v2_host,

+ 2 - 4
resources/views/admin/addUser.blade.php

@@ -276,12 +276,11 @@
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <hr>
                                             <hr>
-                                            <!--
                                             <div class="form-group">
                                             <div class="form-group">
                                                 <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
                                                 <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">
                                                     <div class="input-group">
                                                     <div class="input-group">
-                                                        <input type="text" class="form-control" name="speed_limit_per_con" value="204800" id="speed_limit_per_con" autocomplete="off" disabled />
+                                                        <input type="text" class="form-control" name="speed_limit_per_con" value="204800" id="speed_limit_per_con" autocomplete="off" />
                                                         <span class="input-group-addon">KB</span>
                                                         <span class="input-group-addon">KB</span>
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
@@ -290,13 +289,12 @@
                                                 <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
                                                 <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">
                                                     <div class="input-group">
                                                     <div class="input-group">
-                                                        <input type="text" class="form-control" name="speed_limit_per_user" value="204800" id="speed_limit_per_user" autocomplete="off" disabled />
+                                                        <input type="text" class="form-control" name="speed_limit_per_user" value="204800" id="speed_limit_per_user" autocomplete="off" />
                                                         <span class="input-group-addon">KB</span>
                                                         <span class="input-group-addon">KB</span>
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <hr>
                                             <hr>
-                                            -->
                                             <div class="form-group">
                                             <div class="form-group">
                                                 <label for="vmess_id" class="col-md-3 control-label">VMess UUID</label>
                                                 <label for="vmess_id" class="col-md-3 control-label">VMess UUID</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">

+ 371 - 350
resources/views/admin/editNode.blade.php

@@ -9,448 +9,467 @@
         <div class="row">
         <div class="row">
             <div class="col-md-12">
             <div class="col-md-12">
                 <!-- BEGIN PAGE BASE CONTENT -->
                 <!-- BEGIN PAGE BASE CONTENT -->
-                <div class="tab-pane active">
-                    <div class="portlet light bordered">
-                        <div class="portlet-body form">
-                            <!-- BEGIN FORM-->
-                            <form action="{{url('admin/editNode')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
-                                <div class="form-body">
-                                    <div class="row">
-                                        <div class="col-md-6">
-                                            <!-- BEGIN SAMPLE FORM PORTLET-->
-                                            <div class="portlet light bordered">
-                                                <div class="portlet-title">
-                                                    <div class="caption">
-                                                        <span class="caption-subject font-dark bold uppercase">基础信息</span>
+                <div class="row">
+                    <div class="col-md-12">
+                        <div class="note note-info">
+                            <p><strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署ShadowsocksR Python版后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;</p>
+                            <p>V2Ray Go版节点部署 <a href="https://github.com/ssrpanel/SSRPanel/wiki/V2Ray%E5%AE%8C%E6%95%B4%E9%85%8D%E7%BD%AE%E7%A4%BA%E4%BE%8B%EF%BC%88Go%E7%89%88%EF%BC%89" target="_blank">教程</a>;</p>
+                            <p>Shadowsocks Go版节点部署 <a href="https://github.com/ssrpanel/SSRPanel/wiki/SS-Go%E7%89%88%E8%8A%82%E7%82%B9%E9%83%A8%E7%BD%B2" target="_blank">教程</a>;</p>
+                            <p>更改服务器的SSH端口 <a href="https://github.com/ssrpanel/SSRPanel/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A6%81%E6%AD%A2PING%E3%80%81%E6%94%B9SSH%E7%AB%AF%E5%8F%A3%E5%8F%B7" target="_blank">教程</a>;</p>
+                        </div>
+                    </div>
+                </div>
+                <div class="portlet light bordered">
+                    <div class="portlet-body form">
+                        <!-- BEGIN FORM-->
+                        <form action="{{url('admin/editNode')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
+                            <div class="form-body">
+                                <div class="row">
+                                    <div class="col-md-6">
+                                        <div class="portlet light bordered">
+                                            <div class="portlet-title">
+                                                <div class="caption">
+                                                    <span class="caption-subject font-dark bold uppercase">基础信息</span>
+                                                </div>
+                                            </div>
+                                            <div class="portlet-body">
+                                                <div class="form-group">
+                                                    <label for="is_nat" class="col-md-3 control-label">NAT</label>
+                                                    <div class="col-md-8">
+                                                        <div class="mt-radio-inline">
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_nat" value="1" {{$node->is_nat == '1' ? 'checked' : ''}}> 是
+                                                                <span></span>
+                                                            </label>
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_nat" value="0" {{$node->is_nat == '0' ? 'checked' : ''}}> 否
+                                                                <span></span>
+                                                            </label>
+                                                        </div>
+                                                        <span class="help-block"> NAT机需要<a href="https://github.com/ssrpanel/SSRPanel/wiki/NAT-VPS%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B" target="_blank">配置DDNS</a>,TCP阻断检测无效,务必填写域名 </span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="name" class="col-md-3 control-label"> 节点名称 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="name" value="{{$node->name}}" id="name" placeholder="" autofocus required>
+                                                        <input type="hidden" name="id" value="{{$node->id}}">
+                                                        <input type="hidden" name="_token" value="{{csrf_token()}}">
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="server" class="col-md-3 control-label"> 域名 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="server" value="{{$node->server}}" id="server" placeholder="服务器域名地址,填则优先取域名地址">
+                                                        <span class="help-block">如果开启Namesilo且域名是Namesilo上购买的,则会强制更新域名的DNS记录为本节点IP,如果其他节点绑定了该域名则会清空其域名信息</span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="ip" class="col-md-3 control-label"> IPV4地址 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="ip" value="{{$node->ip}}" id="ip" placeholder="服务器IPV4地址" {{$node->is_nat ? 'readonly=readonly' : ''}} required>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="ipv6" class="col-md-3 control-label"> IPV6地址 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="ipv6" value="{{$node->ipv6}}" id="ipv6" placeholder="服务器IPV6地址,填写则用户可见,域名无效">
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="ssh_port" class="col-md-3 control-label"> SSH端口 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="ssh_port" value="{{$node->ssh_port}}" id="ssh_port" placeholder="服务器SSH端口" required>
+                                                        <span class="help-block">请务必正确填写此值,否则TCP阻断检测可能误报</span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="traffic_rate" class="col-md-3 control-label"> 流量比例 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="traffic_rate" value="{{$node->traffic_rate}}" value="1.0" id="traffic_rate" placeholder="" required>
+                                                        <span class="help-block"> 举例:0.1用100M结算10M,5用100M结算500M </span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="labels" class="col-md-3 control-label">标签</label>
+                                                    <div class="col-md-8">
+                                                        <select id="labels" class="form-control select2-multiple" name="labels[]" multiple>
+                                                            @foreach($label_list as $label)
+                                                                <option value="{{$label->id}}" @if(in_array($label->id, $node->labels)) selected @endif>{{$label->name}}</option>
+                                                            @endforeach
+                                                        </select>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="group_id" class="col-md-3 control-label"> 所属分组 </label>
+                                                    <div class="col-md-8">
+                                                        <select class="form-control" name="group_id" id="group_id">
+                                                            <option value="0">请选择</option>
+                                                            @if(!$group_list->isEmpty())
+                                                                @foreach($group_list as $group)
+                                                                    <option value="{{$group->id}}" {{$node->group_id == $group->id ? 'selected' : ''}}>{{$group->name}}</option>
+                                                                @endforeach
+                                                            @endif
+                                                        </select>
+                                                        <span class="help-block">订阅时分组展示</span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="country_code" class="col-md-3 control-label"> 国家/地区 </label>
+                                                    <div class="col-md-8">
+                                                        <select class="form-control" name="country_code" id="country_code">
+                                                            <option value="">请选择</option>
+                                                            @if(!$country_list->isEmpty())
+                                                                @foreach($country_list as $country)
+                                                                    <option value="{{$country->country_code}}" {{$node->country_code == $country->country_code ? 'selected' : ''}}>{{$country->country_code}} - {{$country->country_name}}</option>
+                                                                @endforeach
+                                                            @endif
+                                                        </select>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="desc" class="col-md-3 control-label"> 描述 </label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="desc" value="{{$node->desc}}" id="desc" placeholder="简单描述">
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="sort" class="col-md-3 control-label">排序</label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control" name="sort" value="{{$node->sort}}" id="sort" placeholder="">
+                                                        <span class="help-block"> 值越大排越前 </span>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="status" class="col-md-3 control-label">状态</label>
+                                                    <div class="col-md-8">
+                                                        <div class="mt-radio-inline">
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="status" value="1" {{$node->status == '1' ? 'checked' : ''}}> 正常
+                                                                <span></span>
+                                                            </label>
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="status" value="0" {{$node->status == '0' ? 'checked' : ''}}> 维护
+                                                                <span></span>
+                                                            </label>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="is_subscribe" class="col-md-3 control-label">订阅</label>
+                                                    <div class="col-md-8">
+                                                        <div class="mt-radio-inline">
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_subscribe" value="1" {{$node->is_subscribe ? 'checked' : ''}}> 允许
+                                                                <span></span>
+                                                            </label>
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_subscribe" value="0" {{!$node->is_subscribe ? 'checked' : ''}}> 不允许
+                                                                <span></span>
+                                                            </label>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="is_tcp_check" class="col-md-3 control-label">TCP阻断检测</label>
+                                                    <div class="col-md-8">
+                                                        <div class="mt-radio-inline">
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_tcp_check" value="1" {{$node->is_tcp_check == '1' ? 'checked' : ''}}> 开启
+                                                                <span></span>
+                                                            </label>
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="is_tcp_check" value="0" {{$node->is_tcp_check == '0' ? 'checked' : ''}}> 关闭
+                                                                <span></span>
+                                                            </label>
+                                                        </div>
+                                                        <span class="help-block"> 每30~60分钟随机进行TCP阻断检测 </span>
+                                                    </div>
+                                                </div>
+                                                <!--
+                                                <div class="form-group">
+                                                    <label for="bandwidth" class="col-md-3 control-label">出口带宽</label>
+                                                    <div class="col-md-8">
+                                                        <div class="input-group">
+                                                            <input type="text" class="form-control" name="bandwidth" value="{{$node->bandwidth}}" id="bandwidth" placeholder="" required>
+                                                            <span class="input-group-addon">M</span>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="form-group">
+                                                    <label for="traffic" class="col-md-3 control-label">每月可用流量</label>
+                                                    <div class="col-md-8">
+                                                        <div class="input-group">
+                                                            <input type="text" class="form-control right" name="traffic" value="{{$node->traffic}}" id="traffic" placeholder="" required>
+                                                            <span class="input-group-addon">G</span>
+                                                        </div>
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
-                                                <div class="portlet-body">
+                                                <div class="form-group">
+                                                    <label for="monitor_url" class="col-md-3 control-label">监控地址</label>
+                                                    <div class="col-md-8">
+                                                        <input type="text" class="form-control right" name="monitor_url" value="{{$node->monitor_url}}" id="monitor_url" placeholder="节点实时监控地址">
+                                                        <span class="help-block"> 例如:http://us1.xxx.com/monitor.php </span>
+                                                    </div>
+                                                </div>
+                                                -->
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-md-6">
+                                        <div class="portlet light bordered">
+                                            <div class="portlet-title">
+                                                <div class="caption">
+                                                    <span class="caption-subject font-dark bold">扩展信息</span>
+                                                </div>
+                                            </div>
+                                            <div class="portlet-body">
+                                                <div class="form-group">
+                                                    <label for="service" class="col-md-3 control-label">类型</label>
+                                                    <div class="col-md-8">
+                                                        <div class="mt-radio-inline">
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="service" value="1" @if($node->type == 1) checked @endif> Shadowsocks(R)
+                                                                <span></span>
+                                                            </label>
+                                                            <label class="mt-radio">
+                                                                <input type="radio" name="service" value="2" @if($node->type == 2) checked @endif> V2Ray
+                                                                <span></span>
+                                                            </label>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <hr />
+                                                <!-- SS/SSR 设置部分 -->
+                                                <div class="ssr-setting {{$node->type == 1 ? '' : 'hidden'}}">
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="is_nat" class="col-md-3 control-label">NAT</label>
+                                                        <label for="method" class="col-md-3 control-label">加密方式</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="mt-radio-inline">
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_nat" value="1" {{$node->is_nat == '1' ? 'checked' : ''}}> 是
-                                                                    <span></span>
-                                                                </label>
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_nat" value="0" {{$node->is_nat == '0' ? 'checked' : ''}}> 否
-                                                                    <span></span>
-                                                                </label>
-                                                            </div>
-                                                            <span class="help-block"> NAT机需要<a href="https://github.com/ssrpanel/SSRPanel/wiki/NAT-VPS%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B" target="_blank">配置DDNS</a>,TCP阻断检测无效,务必填写域名 </span>
+                                                            <select class="form-control" name="method" id="method">
+                                                                @foreach ($method_list as $method)
+                                                                    <option value="{{$method->name}}" @if($method->name == $node->method) selected @endif>{{$method->name}}</option>
+                                                                @endforeach
+                                                            </select>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="name" class="col-md-3 control-label"> 节点名称 </label>
+                                                        <label for="protocol" class="col-md-3 control-label">协议</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="name" value="{{$node->name}}" id="name" placeholder="" autofocus required>
-                                                            <input type="hidden" name="id" value="{{$node->id}}">
-                                                            <input type="hidden" name="_token" value="{{csrf_token()}}">
+                                                            <select class="form-control" name="protocol" id="protocol">
+                                                                @foreach ($protocol_list as $protocol)
+                                                                    <option value="{{$protocol->name}}" @if($protocol->name == $node->protocol) selected @endif>{{$protocol->name}}</option>
+                                                                @endforeach
+                                                            </select>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="server" class="col-md-3 control-label"> 域名 </label>
+                                                        <label for="protocol_param" class="col-md-3 control-label"> 协议参数 </label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="server" value="{{$node->server}}" id="server" placeholder="服务器域名地址,填则优先取域名地址">
-                                                            <span class="help-block">如果开启Namesilo且域名是Namesilo上购买的,则会强制更新域名的DNS记录为本节点IP,如果其他节点绑定了该域名则会清空其域名信息</span>
+                                                            <input type="text" class="form-control" name="protocol_param" value="{{$node->protocol_param}}" id="protocol_param" placeholder="">
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="ip" class="col-md-3 control-label"> IPV4地址 </label>
+                                                        <label for="obfs" class="col-md-3 control-label">混淆</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="ip" value="{{$node->ip}}" id="ip" placeholder="服务器IPV4地址" {{$node->is_nat ? 'readonly=readonly' : ''}} required>
+                                                            <select class="form-control" name="obfs" id="obfs">
+                                                                @foreach ($obfs_list as $obfs)
+                                                                    <option value="{{$obfs->name}}" @if($obfs->name == $node->obfs) selected @endif>{{$obfs->name}}</option>
+                                                                @endforeach
+                                                            </select>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="ipv6" class="col-md-3 control-label"> IPV6地址 </label>
+                                                        <label for="obfs_param" class="col-md-3 control-label"> 混淆参数 </label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="ipv6" value="{{$node->ipv6}}" id="ipv6" placeholder="服务器IPV6地址,填写则用户可见,域名无效">
+                                                            <textarea class="form-control" rows="5" name="obfs_param" id="obfs_param">{{$node->obfs_param}}</textarea>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="ssh_port" class="col-md-3 control-label"> SSH端口 </label>
+                                                        <label for="compatible" class="col-md-3 control-label">兼容SS</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="ssh_port" value="{{$node->ssh_port}}" id="ssh_port" placeholder="服务器SSH端口" required>
-                                                            <span class="help-block">请务必正确填写此值,否则TCP阻断检测可能误报</span>
+                                                            <div class="mt-radio-inline">
+                                                                <label class="mt-radio">
+                                                                    <input type="radio" name="compatible" value="1" {{$node->compatible == '1' ? 'checked' : ''}}> 是
+                                                                    <span></span>
+                                                                </label>
+                                                                <label class="mt-radio">
+                                                                    <input type="radio" name="compatible" value="0" {{$node->compatible == '0' ? 'checked' : ''}}> 否
+                                                                    <span></span>
+                                                                </label>
+                                                            </div>
+                                                            <span class="help-block"> 如果兼容请在服务端配置协议和混淆时加上<span style="color:red">_compatible</span> </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
+                                                    <hr />
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="traffic_rate" class="col-md-3 control-label"> 流量比例 </label>
+                                                        <label for="single" class="col-md-3 control-label">单端口</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="traffic_rate" value="{{$node->traffic_rate}}" value="1.0" id="traffic_rate" placeholder="" required>
-                                                            <span class="help-block"> 举例:0.1用100M结算10M,5用100M结算500M </span>
+                                                            <select class="form-control" name="single" id="single">
+                                                                <option value="0" {{!$node->single ? 'selected' : ''}}>关闭</option>
+                                                                <option value="1" {{$node->single ? 'selected' : ''}}>启用</option>
+                                                            </select>
+                                                            <span class="help-block"> 如果启用请配置服务端的<span style="color:red"> <a href="javascript:showTnc();">additional_ports</a> </span>信息 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <div class="form-group">
-                                                        <label for="labels" class="col-md-3 control-label">标签</label>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_force" class="col-md-3 control-label">[单] 模式</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <select id="labels" class="form-control select2-multiple" name="labels[]" multiple>
-                                                                @foreach($label_list as $label)
-                                                                    <option value="{{$label->id}}" @if(in_array($label->id, $node->labels)) selected @endif>{{$label->name}}</option>
-                                                                @endforeach
+                                                            <select class="form-control" name="single_force" id="single_force">
+                                                                <option value="0" {{$node->single_force == '0' ? 'selected' : ''}}>兼容模式</option>
+                                                                <option value="1" {{$node->single_force == '1' ? 'selected' : ''}}>严格模式</option>
                                                             </select>
                                                             </select>
+                                                            <span class="help-block"> 严格模式:用户的端口无法连接,只能通过以下指定的端口号进行连接(<a href="javascript:showPortsOnlyConfig();">如何配置</a>)</span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <div class="form-group">
-                                                        <label for="group_id" class="col-md-3 control-label"> 所属分组 </label>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_port" class="col-md-3 control-label">[单] 端口号</label>
+                                                        <div class="col-md-8">
+                                                            <input type="text" class="form-control" name="single_port" value="{{$node->single_port}}" id="single_port" placeholder="443">
+                                                            <span class="help-block"> 推荐80或443,后端需要配置 </span>
+                                                        </div>
+                                                    </div>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_passwd" class="col-md-3 control-label">[单] 密码</label>
+                                                        <div class="col-md-8">
+                                                            <input type="text" class="form-control" name="single_passwd" value="{{$node->single_passwd}}" id="single_passwd" placeholder="password">
+                                                            <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
+                                                        </div>
+                                                    </div>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_method" class="col-md-3 control-label">[单] 加密方式</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <select class="form-control" name="group_id" id="group_id">
-                                                                <option value="0">请选择</option>
-                                                                @if(!$group_list->isEmpty())
-                                                                    @foreach($group_list as $group)
-                                                                        <option value="{{$group->id}}" {{$node->group_id == $group->id ? 'selected' : ''}}>{{$group->name}}</option>
-                                                                    @endforeach
-                                                                @endif
+                                                            <select class="form-control" name="single_method" id="single_method">
+                                                                @foreach ($method_list as $method)
+                                                                    <option value="{{$method->name}}" @if($method->name == $node->single_method) selected @endif>{{$method->name}}</option>
+                                                                @endforeach
                                                             </select>
                                                             </select>
-                                                            <span class="help-block">订阅时分组展示</span>
+                                                            <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <div class="form-group">
-                                                        <label for="country_code" class="col-md-3 control-label"> 国家/地区 </label>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_protocol" class="col-md-3 control-label">[单] 协议</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <select class="form-control" name="country_code" id="country_code">
-                                                                <option value="">请选择</option>
-                                                                @if(!$country_list->isEmpty())
-                                                                    @foreach($country_list as $country)
-                                                                        <option value="{{$country->country_code}}" {{$node->country_code == $country->country_code ? 'selected' : ''}}>{{$country->country_code}} - {{$country->country_name}}</option>
-                                                                    @endforeach
-                                                                @endif
+                                                            <select class="form-control" name="single_protocol" id="single_protocol">
+                                                                <option value="origin" {{$node->single_protocol == 'origin' ? 'selected' : ''}}>origin</option>
+                                                                <option value="verify_deflate" {{$node->single_protocol == 'verify_deflate' ? 'selected' : ''}}>verify_deflate</option>
+                                                                <option value="auth_sha1_v4" {{$node->single_protocol == 'auth_sha1_v4' ? 'selected' : ''}}>auth_sha1_v4</option>
+                                                                <option value="auth_aes128_md5" {{$node->single_protocol == 'auth_aes128_md5' ? 'selected' : ''}}>auth_aes128_md5</option>
+                                                                <option value="auth_aes128_sha1" {{$node->single_protocol == 'auth_aes128_sha1' ? 'selected' : ''}}>auth_aes128_sha1</option>
+                                                                <option value="auth_chain_a" {{$node->single_protocol == 'auth_chain_a' ? 'selected' : ''}}>auth_chain_a</option>
                                                             </select>
                                                             </select>
+                                                            <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <div class="form-group">
-                                                        <label for="desc" class="col-md-3 control-label"> 描述 </label>
+                                                    <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
+                                                        <label for="single_obfs" class="col-md-3 control-label">[单] 混淆</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="desc" value="{{$node->desc}}" id="desc" placeholder="简单描述">
+                                                            <select class="form-control" name="single_obfs" id="single_obfs">
+                                                                <option value="plain" {{$node->single_obfs == 'plain' ? 'selected' : ''}}>plain</option>
+                                                                <option value="http_simple" {{$node->single_obfs == 'http_simple' ? 'selected' : ''}}>http_simple</option>
+                                                                <option value="random_head" {{$node->single_obfs == 'random_head' ? 'selected' : ''}}>random_head</option>
+                                                                <option value="tls1.2_ticket_auth" {{$node->single_obfs == 'tls1.2_ticket_auth' ? 'selected' : ''}}>tls1.2_ticket_auth</option>
+                                                            </select>
+                                                            <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
+                                                </div>
+                                                <!-- V2ray 设置部分 -->
+                                                <div class="v2ray-setting {{$node->type == 2 ? '' : 'hidden'}}">
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="sort" class="col-md-3 control-label">排序</label>
+                                                        <label for="v2_alter_id" class="col-md-3 control-label">额外ID</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control" name="sort" value="{{$node->sort}}" id="sort" placeholder="">
-                                                            <span class="help-block"> 值越大排越前 </span>
+                                                            <input type="text" class="form-control" name="v2_alter_id" value="{{$node->v2_alter_id}}" id="v2_alter_id" placeholder="16">
+                                                            <span class="help-block"> 后端配置注意保持一致 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="status" class="col-md-3 control-label">状态</label>
+                                                        <label for="v2_port" class="col-md-3 control-label">端口号</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="mt-radio-inline">
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="status" value="1" {{$node->status == '1' ? 'checked' : ''}}> 正常
-                                                                    <span></span>
-                                                                </label>
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="status" value="0" {{$node->status == '0' ? 'checked' : ''}}> 维护
-                                                                    <span></span>
-                                                                </label>
-                                                            </div>
+                                                            <input type="text" class="form-control" name="v2_port" value="{{$node->v2_port}}" id="v2_port" placeholder="10087">
+                                                            <span class="help-block"> 后端配置注意保持一致 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="is_subscribe" class="col-md-3 control-label">订阅</label>
+                                                        <label for="v2_method" class="col-md-3 control-label">加密方式</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="mt-radio-inline">
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_subscribe" value="1" {{$node->is_subscribe ? 'checked' : ''}}> 允许
-                                                                    <span></span>
-                                                                </label>
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_subscribe" value="0" {{!$node->is_subscribe ? 'checked' : ''}}> 不允许
-                                                                    <span></span>
-                                                                </label>
-                                                            </div>
+                                                            <select class="form-control" name="v2_method" id="v2_method">
+                                                                <option value="none" @if($node->v2_method == 'none') selected @endif>none</option>
+                                                                <option value="aes-128-cfb" @if($node->v2_method == 'aes-128-cfb') selected @endif>aes-128-cfb</option>
+                                                                <option value="aes-128-gcm" @if($node->v2_method == 'aes-128-gcm') selected @endif>aes-128-gcm</option>
+                                                                <option value="chacha20-poly1305" @if($node->v2_method == 'chacha20-poly1305') selected @endif>chacha20-poly1305</option>
+                                                            </select>
+                                                            <span class="help-block"> 使用WebSocket传输协议时不要使用none </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="is_tcp_check" class="col-md-3 control-label">TCP阻断检测</label>
+                                                        <label for="v2_net" class="col-md-3 control-label">传输协议</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="mt-radio-inline">
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_tcp_check" value="1" {{$node->is_tcp_check == '1' ? 'checked' : ''}}> 开启
-                                                                    <span></span>
-                                                                </label>
-                                                                <label class="mt-radio">
-                                                                    <input type="radio" name="is_tcp_check" value="0" {{$node->is_tcp_check == '0' ? 'checked' : ''}}> 关闭
-                                                                    <span></span>
-                                                                </label>
-                                                            </div>
-                                                            <span class="help-block"> 每30~60分钟随机进行TCP阻断检测 </span>
+                                                            <select class="form-control" name="v2_net" id="v2_net">
+                                                                <option value="tcp" @if($node->v2_net == 'tcp') selected @endif>TCP</option>
+                                                                <option value="kcp" @if($node->v2_net == 'kcp') selected @endif>mKCP(kcp)</option>
+                                                                <option value="ws" @if($node->v2_net == 'ws') selected @endif>WebSocket(ws)</option>
+                                                                <option value="h2" @if($node->v2_net == 'h2') selected @endif>HTTP/2(h2)</option>
+                                                            </select>
+                                                            <span class="help-block"> 使用WebSocket传输协议时请启用TLS </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <!--
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="bandwidth" class="col-md-3 control-label">出口带宽</label>
+                                                        <label for="v2_type" class="col-md-3 control-label">伪装类型</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="input-group">
-                                                                <input type="text" class="form-control" name="bandwidth" value="{{$node->bandwidth}}" id="bandwidth" placeholder="" required>
-                                                                <span class="input-group-addon">M</span>
-                                                            </div>
+                                                            <select class="form-control" name="v2_type" id="v2_type">
+                                                                <option value="none" @if($node->v2_type == 'none') selected @endif>无伪装</option>
+                                                                <option value="http" @if($node->v2_type == 'http') selected @endif>HTTP数据流</option>
+                                                                <option value="srtp" @if($node->v2_type == 'srtp') selected @endif>视频通话数据 (SRTP)</option>
+                                                                <option value="utp" @if($node->v2_type == 'utp') selected @endif>BT下载数据 (uTP)</option>
+                                                                <option value="wechat-video" @if($node->v2_type == 'wechat-video') selected @endif>微信视频通话</option>
+                                                                <option value="dtls" @if($node->v2_type == 'dtls') selected @endif>DTLS1.2数据包</option>
+                                                                <option value="wireguard" @if($node->v2_type == 'wireguard') selected @endif>WireGuard数据包</option>
+                                                            </select>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="traffic" class="col-md-3 control-label">每月可用流量</label>
+                                                        <label for="v2_host" class="col-md-3 control-label">伪装域名</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <div class="input-group">
-                                                                <input type="text" class="form-control right" name="traffic" value="{{$node->traffic}}" id="traffic" placeholder="" required>
-                                                                <span class="input-group-addon">G</span>
-                                                            </div>
+                                                            <input type="text" class="form-control" name="v2_host" value="{{$node->v2_host}}" id="v2_host">
+                                                            <span class="help-block"> 伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个 </span>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="monitor_url" class="col-md-3 control-label">监控地址</label>
+                                                        <label for="v2_path" class="col-md-3 control-label">ws/h2路径</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
-                                                            <input type="text" class="form-control right" name="monitor_url" value="{{$node->monitor_url}}" id="monitor_url" placeholder="节点实时监控地址">
-                                                            <span class="help-block"> 例如:http://us1.xxx.com/monitor.php </span>
+                                                            <input type="text" class="form-control" name="v2_path" value="{{$node->v2_path}}" id="v2_path">
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    -->
-                                                </div>
-                                            </div>
-                                            <!-- END SAMPLE FORM PORTLET-->
-                                        </div>
-                                        <div class="col-md-6">
-                                            <!-- BEGIN SAMPLE FORM PORTLET-->
-                                            <div class="portlet light bordered">
-                                                <div class="portlet-title">
-                                                    <div class="caption">
-                                                        <span class="caption-subject font-dark bold">扩展信息</span>
-                                                    </div>
-                                                </div>
-                                                <div class="portlet-body">
                                                     <div class="form-group">
                                                     <div class="form-group">
-                                                        <label for="service" class="col-md-3 control-label">类型</label>
+                                                        <label for="v2_tls" class="col-md-3 control-label">TLS</label>
                                                         <div class="col-md-8">
                                                         <div class="col-md-8">
                                                             <div class="mt-radio-inline">
                                                             <div class="mt-radio-inline">
                                                                 <label class="mt-radio">
                                                                 <label class="mt-radio">
-                                                                    <input type="radio" name="service" value="1" @if($node->type == 1) checked @endif> Shadowsocks(R)
+                                                                    <input type="radio" name="v2_tls" value="1" @if($node->v2_tls == 1) checked @endif> 是
                                                                     <span></span>
                                                                     <span></span>
                                                                 </label>
                                                                 </label>
                                                                 <label class="mt-radio">
                                                                 <label class="mt-radio">
-                                                                    <input type="radio" name="service" value="2" @if($node->type == 2) checked @endif> V2Ray
+                                                                    <input type="radio" name="v2_tls" value="0" @if($node->v2_tls == 0) checked @endif> 否
                                                                     <span></span>
                                                                     <span></span>
                                                                 </label>
                                                                 </label>
                                                             </div>
                                                             </div>
                                                         </div>
                                                         </div>
                                                     </div>
                                                     </div>
-                                                    <hr />
-                                                    <!-- SS/SSR 设置部分 -->
-                                                    <div class="ssr-setting {{$node->type == 1 ? '' : 'hidden'}}">
-                                                        <div class="form-group">
-                                                            <label for="method" class="col-md-3 control-label">加密方式</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="method" id="method">
-                                                                    @foreach ($method_list as $method)
-                                                                        <option value="{{$method->name}}" @if($method->name == $node->method) selected @endif>{{$method->name}}</option>
-                                                                    @endforeach
-                                                                </select>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="protocol" class="col-md-3 control-label">协议</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="protocol" id="protocol">
-                                                                    @foreach ($protocol_list as $protocol)
-                                                                        <option value="{{$protocol->name}}" @if($protocol->name == $node->protocol) selected @endif>{{$protocol->name}}</option>
-                                                                    @endforeach
-                                                                </select>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="protocol_param" class="col-md-3 control-label"> 协议参数 </label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="protocol_param" value="{{$node->protocol_param}}" id="protocol_param" placeholder="">
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="obfs" class="col-md-3 control-label">混淆</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="obfs" id="obfs">
-                                                                    @foreach ($obfs_list as $obfs)
-                                                                        <option value="{{$obfs->name}}" @if($obfs->name == $node->obfs) selected @endif>{{$obfs->name}}</option>
-                                                                    @endforeach
-                                                                </select>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="obfs_param" class="col-md-3 control-label"> 混淆参数 </label>
-                                                            <div class="col-md-8">
-                                                                <textarea class="form-control" rows="5" name="obfs_param" id="obfs_param">{{$node->obfs_param}}</textarea>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="compatible" class="col-md-3 control-label">兼容SS</label>
-                                                            <div class="col-md-8">
-                                                                <div class="mt-radio-inline">
-                                                                    <label class="mt-radio">
-                                                                        <input type="radio" name="compatible" value="1" {{$node->compatible == '1' ? 'checked' : ''}}> 是
-                                                                        <span></span>
-                                                                    </label>
-                                                                    <label class="mt-radio">
-                                                                        <input type="radio" name="compatible" value="0" {{$node->compatible == '0' ? 'checked' : ''}}> 否
-                                                                        <span></span>
-                                                                    </label>
-                                                                </div>
-                                                                <span class="help-block"> 如果兼容请在服务端配置协议和混淆时加上<span style="color:red">_compatible</span> </span>
-                                                            </div>
-                                                        </div>
-                                                        <hr />
-                                                        <div class="form-group">
-                                                            <label for="single" class="col-md-3 control-label">单端口</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="single" id="single">
-                                                                    <option value="0" {{!$node->single ? 'selected' : ''}}>关闭</option>
-                                                                    <option value="1" {{$node->single ? 'selected' : ''}}>启用</option>
-                                                                </select>
-                                                                <span class="help-block"> 如果启用请配置服务端的<span style="color:red"> <a href="javascript:showTnc();">additional_ports</a> </span>信息 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_force" class="col-md-3 control-label">[单] 模式</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="single_force" id="single_force">
-                                                                    <option value="0" {{$node->single_force == '0' ? 'selected' : ''}}>兼容模式</option>
-                                                                    <option value="1" {{$node->single_force == '1' ? 'selected' : ''}}>严格模式</option>
-                                                                </select>
-                                                                <span class="help-block"> 严格模式:用户的端口无法连接,只能通过以下指定的端口号进行连接(<a href="javascript:showPortsOnlyConfig();">如何配置</a>)</span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_port" class="col-md-3 control-label">[单] 端口号</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="single_port" value="{{$node->single_port}}" id="single_port" placeholder="443">
-                                                                <span class="help-block"> 推荐80或443,后端需要配置 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_passwd" class="col-md-3 control-label">[单] 密码</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="single_passwd" value="{{$node->single_passwd}}" id="single_passwd" placeholder="password">
-                                                                <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_method" class="col-md-3 control-label">[单] 加密方式</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="single_method" id="single_method">
-                                                                    @foreach ($method_list as $method)
-                                                                        <option value="{{$method->name}}" @if($method->name == $node->single_method) selected @endif>{{$method->name}}</option>
-                                                                    @endforeach
-                                                                </select>
-                                                                <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_protocol" class="col-md-3 control-label">[单] 协议</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="single_protocol" id="single_protocol">
-                                                                    <option value="origin" {{$node->single_protocol == 'origin' ? 'selected' : ''}}>origin</option>
-                                                                    <option value="verify_deflate" {{$node->single_protocol == 'verify_deflate' ? 'selected' : ''}}>verify_deflate</option>
-                                                                    <option value="auth_sha1_v4" {{$node->single_protocol == 'auth_sha1_v4' ? 'selected' : ''}}>auth_sha1_v4</option>
-                                                                    <option value="auth_aes128_md5" {{$node->single_protocol == 'auth_aes128_md5' ? 'selected' : ''}}>auth_aes128_md5</option>
-                                                                    <option value="auth_aes128_sha1" {{$node->single_protocol == 'auth_aes128_sha1' ? 'selected' : ''}}>auth_aes128_sha1</option>
-                                                                    <option value="auth_chain_a" {{$node->single_protocol == 'auth_chain_a' ? 'selected' : ''}}>auth_chain_a</option>
-                                                                </select>
-                                                                <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group single-setting {{!$node->single ? 'hidden' : ''}}">
-                                                            <label for="single_obfs" class="col-md-3 control-label">[单] 混淆</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="single_obfs" id="single_obfs">
-                                                                    <option value="plain" {{$node->single_obfs == 'plain' ? 'selected' : ''}}>plain</option>
-                                                                    <option value="http_simple" {{$node->single_obfs == 'http_simple' ? 'selected' : ''}}>http_simple</option>
-                                                                    <option value="random_head" {{$node->single_obfs == 'random_head' ? 'selected' : ''}}>random_head</option>
-                                                                    <option value="tls1.2_ticket_auth" {{$node->single_obfs == 'tls1.2_ticket_auth' ? 'selected' : ''}}>tls1.2_ticket_auth</option>
-                                                                </select>
-                                                                <span class="help-block"> 展示和生成配置用,后端配置注意保持一致 </span>
-                                                            </div>
-                                                        </div>
-                                                    </div>
-                                                    <!-- V2ray 设置部分 -->
-                                                    <div class="v2ray-setting {{$node->type == 2 ? '' : 'hidden'}}">
-                                                        <div class="form-group">
-                                                            <label for="v2_alter_id" class="col-md-3 control-label">额外ID</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="v2_alter_id" value="{{$node->v2_alter_id}}" id="v2_alter_id" placeholder="16">
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_port" class="col-md-3 control-label">端口号</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="v2_port" value="{{$node->v2_port}}" id="v2_port" placeholder="10087">
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_net" class="col-md-3 control-label">传输协议</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="v2_net" id="v2_net">
-                                                                    <option value="tcp" @if($node->v2_net == 'tcp') selected @endif>TCP</option>
-                                                                    <option value="kcp" @if($node->v2_net == 'kcp') selected @endif>mKCP</option>
-                                                                    <option value="ws" @if($node->v2_net == 'ws') selected @endif>WebSocket</option>
-                                                                    <option value="h2" @if($node->v2_net == 'h2') selected @endif>HTTP/2</option>
-                                                                </select>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_type" class="col-md-3 control-label">伪装类型</label>
-                                                            <div class="col-md-8">
-                                                                <select class="form-control" name="v2_type" id="v2_type">
-                                                                    <option value="none" @if($node->v2_type == 'none') selected @endif>无伪装</option>
-                                                                    <option value="http" @if($node->v2_type == 'http') selected @endif>HTTP数据流</option>
-                                                                    <option value="srtp" @if($node->v2_type == 'srtp') selected @endif>视频通话数据 (SRTP)</option>
-                                                                    <option value="utp" @if($node->v2_type == 'utp') selected @endif>BT下载数据 (uTP)</option>
-                                                                    <option value="wechat-video" @if($node->v2_type == 'wechat-video') selected @endif>微信视频通话</option>
-                                                                    <option value="dtls" @if($node->v2_type == 'dtls') selected @endif>DTLS1.2数据包</option>
-                                                                    <option value="wireguard" @if($node->v2_type == 'wireguard') selected @endif>WireGuard数据包</option>
-                                                                </select>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_host" class="col-md-3 control-label">伪装域名</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="v2_host" value="{{$node->v2_host}}" id="v2_host">
-                                                                <span class="help-block"> 伪装类型为http时多个伪装域名逗号隔开,WebSocket只允许单个 </span>
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_path" class="col-md-3 control-label">WS/H2路径</label>
-                                                            <div class="col-md-8">
-                                                                <input type="text" class="form-control" name="v2_path" value="{{$node->v2_path}}" id="v2_path">
-                                                            </div>
-                                                        </div>
-                                                        <div class="form-group">
-                                                            <label for="v2_tls" class="col-md-3 control-label">TLS</label>
-                                                            <div class="col-md-8">
-                                                                <div class="mt-radio-inline">
-                                                                    <label class="mt-radio">
-                                                                        <input type="radio" name="v2_tls" value="1" @if($node->v2_tls == 1) checked @endif> 是
-                                                                        <span></span>
-                                                                    </label>
-                                                                    <label class="mt-radio">
-                                                                        <input type="radio" name="v2_tls" value="0" @if($node->v2_tls == 0) checked @endif> 否
-                                                                        <span></span>
-                                                                    </label>
-                                                                </div>
-                                                            </div>
-                                                        </div>
-                                                    </div>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
-                                            <!-- END SAMPLE FORM PORTLET-->
                                         </div>
                                         </div>
                                     </div>
                                     </div>
                                 </div>
                                 </div>
-                                <div class="form-actions">
-                                    <div class="row">
-                                        <div class="col-md-12">
-                                            <button type="submit" class="btn green">提 交</button>
-                                        </div>
+                            </div>
+                            <div class="form-actions">
+                                <div class="row">
+                                    <div class="col-md-12">
+                                        <button type="submit" class="btn green">提 交</button>
                                     </div>
                                     </div>
                                 </div>
                                 </div>
-                            </form>
-                            <!-- END FORM-->
-                        </div>
+                            </div>
+                        </form>
+                        <!-- END FORM-->
                     </div>
                     </div>
                 </div>
                 </div>
                 <!-- END PAGE BASE CONTENT -->
                 <!-- END PAGE BASE CONTENT -->
@@ -510,6 +529,7 @@
             var service = $("input:radio[name='service']:checked").val();
             var service = $("input:radio[name='service']:checked").val();
             var v2_alter_id = $('#v2_alter_id').val();
             var v2_alter_id = $('#v2_alter_id').val();
             var v2_port = $('#v2_port').val();
             var v2_port = $('#v2_port').val();
+            var v2_method = $("#v2_method option:selected").val();
             var v2_net = $('#v2_net').val();
             var v2_net = $('#v2_net').val();
             var v2_type = $('#v2_type').val();
             var v2_type = $('#v2_type').val();
             var v2_host = $('#v2_host').val();
             var v2_host = $('#v2_host').val();
@@ -557,6 +577,7 @@
                     type: service,
                     type: service,
                     v2_alter_id: v2_alter_id,
                     v2_alter_id: v2_alter_id,
                     v2_port: v2_port,
                     v2_port: v2_port,
+                    v2_method: v2_method,
                     v2_net: v2_net,
                     v2_net: v2_net,
                     v2_type: v2_type,
                     v2_type: v2_type,
                     v2_host: v2_host,
                     v2_host: v2_host,

+ 2 - 4
resources/views/admin/editUser.blade.php

@@ -323,12 +323,11 @@
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <hr>
                                             <hr>
-                                            <!--
                                             <div class="form-group">
                                             <div class="form-group">
                                                 <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
                                                 <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">
                                                     <div class="input-group">
                                                     <div class="input-group">
-                                                        <input type="text" class="form-control" name="speed_limit_per_con" value="{{$user->speed_limit_per_con}}" id="speed_limit_per_con" autocomplete="off" disabled>
+                                                        <input type="text" class="form-control" name="speed_limit_per_con" value="{{$user->speed_limit_per_con}}" id="speed_limit_per_con" autocomplete="off">
                                                         <span class="input-group-addon">KB</span>
                                                         <span class="input-group-addon">KB</span>
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
@@ -337,13 +336,12 @@
                                                 <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
                                                 <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">
                                                     <div class="input-group">
                                                     <div class="input-group">
-                                                        <input type="text" class="form-control" name="speed_limit_per_user" value="{{$user->speed_limit_per_user}}" id="speed_limit_per_user" autocomplete="off" disabled>
+                                                        <input type="text" class="form-control" name="speed_limit_per_user" value="{{$user->speed_limit_per_user}}" id="speed_limit_per_user" autocomplete="off">
                                                         <span class="input-group-addon">KB</span>
                                                         <span class="input-group-addon">KB</span>
                                                     </div>
                                                     </div>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
                                             <hr>
                                             <hr>
-                                            -->
                                             <div class="form-group">
                                             <div class="form-group">
                                                 <label for="vmess_id" class="col-md-3 control-label">VMess UUID</label>
                                                 <label for="vmess_id" class="col-md-3 control-label">VMess UUID</label>
                                                 <div class="col-md-8">
                                                 <div class="col-md-8">

+ 1 - 0
sql/db.sql

@@ -58,6 +58,7 @@ CREATE TABLE `ss_node` (
   `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '状态:0-维护、1-正常',
   `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '状态:0-维护、1-正常',
   `v2_alter_id` INT(11) NOT NULL DEFAULT '16' COMMENT 'V2ray额外ID',
   `v2_alter_id` INT(11) NOT NULL DEFAULT '16' COMMENT 'V2ray额外ID',
   `v2_port` INT(11) NOT NULL DEFAULT '0' COMMENT 'V2ray端口',
   `v2_port` INT(11) NOT NULL DEFAULT '0' COMMENT 'V2ray端口',
+  `v2_method` VARCHAR(32) NOT NULL DEFAULT 'aes-128-gcm' COMMENT 'V2ray加密方式',
   `v2_net` VARCHAR(16) NOT NULL DEFAULT 'tcp' COMMENT 'V2ray传输协议',
   `v2_net` VARCHAR(16) NOT NULL DEFAULT 'tcp' COMMENT 'V2ray传输协议',
   `v2_type` VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT 'V2ray伪装类型',
   `v2_type` VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT 'V2ray伪装类型',
   `v2_host` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'V2ray伪装的域名',
   `v2_host` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'V2ray伪装的域名',

+ 3 - 0
sql/update/20190114.sql

@@ -0,0 +1,3 @@
+-- 节点表加入V2ray加密方式
+ALTER TABLE `ss_node`
+	ADD COLUMN `v2_method` VARCHAR(32) NOT NULL DEFAULT 'aes-128-gcm' COMMENT 'V2ray加密方式' AFTER `v2_port`;