Tonychanczm 7 лет назад
Родитель
Сommit
17f795f323
4 измененных файлов с 147 добавлено и 1 удалено
  1. 3 1
      app/Http/Kernel.php
  2. 39 0
      app/Http/Middleware/Muv2.php
  3. 10 0
      app/Http/V2ray/EmptyClass.php
  4. 95 0
      app/Http/V2ray/V2rayGenerator.php

+ 3 - 1
app/Http/Kernel.php

@@ -59,6 +59,8 @@ class Kernel extends HttpKernel
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'admin' => \App\Http\Middleware\Admin::class,
         'user' => \App\Http\Middleware\User::class,
-        'forbidden' => \App\Http\Middleware\Forbidden::class
+        'forbidden' => \App\Http\Middleware\Forbidden::class,
+        'Muv2' => \App\Http\Middleware\Muv2::class
+
     ];
 }

+ 39 - 0
app/Http/Middleware/Muv2.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Http\Models\SsNode;
+use Closure;
+use Redirect;
+
+class Muv2{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        //验证muKey
+        $muKey = $request->header("Token", '');
+        if ($muKey != $_ENV['MU_KEY']) {
+            return response()->json([
+                'ret' => 0,
+                'msg' => 'token or source is invalid'
+            ],401);
+        }
+        //验证ip是否在节点ip列表当中
+        $ssnode = SsNode::query()->where('ip',$_SERVER["REMOTE_ADDR"])->orWhere('ipv6',$_SERVER["REMOTE_ADDR"])->first();
+        if($ssnode == null && $_SERVER["REMOTE_ADDR"] != '127.0.0.1'){
+            return response()->json([
+                'ret' => 0,
+                'msg' => 'token or source is invalid'
+            ],401);
+        }
+
+        return $next($request);
+    }
+
+}

+ 10 - 0
app/Http/V2ray/EmptyClass.php

@@ -0,0 +1,10 @@
+<?php
+
+
+namespace App\Http\V2ray;
+
+
+class EmptyClass
+{
+
+}

+ 95 - 0
app/Http/V2ray/V2rayGenerator.php

@@ -0,0 +1,95 @@
+<?php
+
+
+namespace App\Http\V2ray;
+
+
+use App\Http\V2ray\EmptyClass;
+
+class V2rayGenerator
+{
+
+    private $arr = [
+        "log" => [
+            "access" => "/var/log/access.log",
+            "error" => "/var/log/error.log",
+            "loglevel" => "warning"
+        ],
+        "inbound" => [
+            "port" => 8300,
+            "protocol" => "vmess",
+            "settings" => [
+                "clients" => [
+                ]
+            ]
+        ],
+        "outbound" => [
+            "protocol" => "freedom",
+            // "settings" => ,
+        ],
+        "inboundDetour" => [],
+        "outboundDetour" => [
+            [
+                "protocol" => "blackhole",
+                // "settings" => [],
+                "tag" => "blocked"
+            ]
+        ],
+        "routing" => [
+            "strategy" => "rules",
+            "settings" => [
+                "rules" => [
+                    [
+                        "type" => "field",
+                        "ip" => [
+                            "0.0.0.0/8",
+                            "10.0.0.0/8",
+                            "100.64.0.0/10",
+                            "127.0.0.0/8",
+                            "169.254.0.0/16",
+                            "172.16.0.0/12",
+                            "192.0.0.0/24",
+                            "192.0.2.0/24",
+                            "192.168.0.0/16",
+                            "198.18.0.0/15",
+                            "198.51.100.0/24",
+                            "203.0.113.0/24",
+                            "::1/128",
+                            "fc00::/7",
+                            "fe80::/10"
+                        ],
+                        "outboundTag" => "blocked"
+                    ]
+                ]
+            ]
+        ]
+    ];
+
+
+    public function addUser($uuid, $level, $alertId, $email)
+    {
+        $user = [
+            "id" => $uuid,
+            "level" => $level,
+            "alterId" => $alertId,
+            "email" => $email
+        ];
+        array_push($this->arr["inbound"]['settings']['clients'], $user);
+    }
+
+    public function setPort($port)
+    {
+        $this->arr['inbound']['port'] = $port;
+    }
+
+    public function getArr()
+    {
+        return $this->arr;
+    }
+
+    public function __construct()
+    {
+        $this->arr["outbound"]["settings"] = new EmptyClass();
+        $this->arr["outboundDetour"][0]["settings"] = new EmptyClass();
+    }
+}