Procházet zdrojové kódy

Client Api Beta version

兔姬桑 před 4 roky
rodič
revize
a6dfcb78ac

+ 40 - 18
app/Http/Controllers/Api/Client/V1Controller.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\Api\Client;
 
 use App\Http\Controllers\Controller;
+use App\Models\Goods;
 use Illuminate\Http\Request;
 use Validator;
 
@@ -10,7 +11,7 @@ class V1Controller extends Controller
 {
     public function __construct()
     {
-        $this->middleware('auth:api', ['except' => ['login', 'register']]);
+        $this->middleware('auth:api', ['except' => ['login', 'register', 'shop']]);
         auth()->shouldUse('api');
     }
 
@@ -22,16 +23,27 @@ class V1Controller extends Controller
         ]);
 
         if ($validator->fails()) {
-            return response()->json($validator->errors(), 422);
+            return response()->json(['ret' => 0, 'msg' => $validator->errors()->all()], 422);
         }
 
         if (! $token = auth()->attempt($validator->validated())) {
-            return response()->json(['error' => 'Unauthorized'], 401);
+            return response()->json(['ret' => 0, 'msg' => '登录信息错误'], 401);
         }
 
         return $this->createNewToken($token);
     }
 
+    protected function createNewToken($token)
+    {
+        return response()->json([
+            'ret' => 1,
+            'access_token' => $token,
+            'token_type' => 'bearer',
+            'expires_in' => auth()->factory()->getTTL() * 60,
+            'user' => auth()->user()->profile(),
+        ]);
+    }
+
     public function register(Request $request)
     {
         $validator = Validator::make($request->all(), [
@@ -49,17 +61,14 @@ class V1Controller extends Controller
             ['password' => $request->password]
         ));
 
-        return response()->json([
-            'message' => 'User successfully registered',
-            'user' => $user,
-        ], 201);
+        return response()->json(['ret' => 1, 'user' => $user], 201);
     }
 
     public function logout()
     {
         auth()->logout();
 
-        return response()->json(['message' => 'User successfully signed out']);
+        return response()->json(['ret' => 1]);
     }
 
     public function refresh()
@@ -69,21 +78,34 @@ class V1Controller extends Controller
 
     public function userProfile()
     {
-        return response()->json(auth()->user());
+        return response()->json(auth()->user()->profile());
     }
 
-    public function nodeList()
+    public function nodeList(int $id = null)
     {
-        return response()->json(auth()->user()->userAccessNodes());
+        $user = auth()->user();
+        $nodes = $user->userAccessNodes()->get();
+        if (isset($id)) {
+            $node = $nodes->where('id', $id)->first();
+
+            if (empty($node)) {
+                return response()->json([], 204);
+            }
+
+            return response()->json($node->config($user));
+        }
+        $servers = [];
+        foreach ($nodes as $node) {
+            $servers[] = $node->config($user);
+        }
+
+        return response()->json($servers);
     }
 
-    protected function createNewToken($token)
+    public function shop()
     {
-        return response()->json([
-            'access_token' => $token,
-            'token_type' => 'bearer',
-            'expires_in' => auth()->factory()->getTTL() * 60,
-            'user' => auth()->user(),
-        ]);
+        $shop = Goods::whereStatus(1)->where('type', '<=', '2')->orderByDesc('type')->orderByDesc('sort')->get();
+
+        return response()->json($shop);
     }
 }

+ 2 - 5
app/Models/Node.php

@@ -77,6 +77,7 @@ class Node extends Model
     public function config($user)
     {
         $config = [
+            'id' => $this->id,
             'name' => $this->name,
             'host' => $this->is_relay ? $this->relay_server : ($this->server ?: $this->ip),
             'group' => sysConfig('website_name'),
@@ -109,6 +110,7 @@ class Node extends Model
             case 1:
             case 4:
                 $config = array_merge($config, [
+                    'type' => $this->compatible ? 'shadowsocks' : 'shadowsocksr',
                     'method' => $this->method,
                     'protocol' => $this->protocol,
                     'obfs' => $this->obfs,
@@ -131,11 +133,6 @@ class Node extends Model
                     }
                 }
 
-                if ($this->compatible) {
-                    $config['type'] = 'shadowsocks';
-                } else {
-                    $config['type'] = 'shadowsocksr';
-                }
                 break;
         }
 

+ 27 - 0
app/Models/User.php

@@ -34,6 +34,33 @@ class User extends Authenticatable implements JWTSubject
         return $this->d + $this->u;
     }
 
+    public function profile()
+    {
+        return [
+            'id' => $this->id,
+            'nickname' => $this->username,
+            'account' => $this->email,
+            'port' => $this->port,
+            'passwd' => $this->passwd,
+            'uuid' => $this->vmess_id,
+            'transfer_enable' => $this->transfer_enable,
+            'u' => $this->u,
+            'd' => $this->d,
+            't' => $this->t,
+            'enable' => $this->enable,
+            'speed_limit' => $this->speed_limit,
+            'credit' => $this->credit,
+            'expired_at' => $this->expired_at,
+            'ban_time' => $this->ban_time,
+            'level' => $this->level_name,
+            'group' => $this->group->name ?? null,
+            'last_login' => $this->last_login,
+            'reset_time' => $this->reset_time,
+            'invite_num' => $this->invite_num,
+            'status' => $this->status,
+        ];
+    }
+
     public function onlineIpLogs(): HasMany
     {
         return $this->hasMany(NodeOnlineUserIp::class);

+ 7 - 4
routes/api.php

@@ -51,9 +51,12 @@ Route::group(['namespace' => 'Api\WebApi', 'middleware' => 'webApi'], function (
 // 客户端API
 Route::group(['namespace' => 'Api\Client', 'middleware' => 'api', 'prefix' => 'client/v1'], function () {
     Route::post('login', 'V1Controller@login'); // 登录
-    Route::post('logout', 'V1Controller@logout'); // 退出
-    Route::post('refresh', 'V1Controller@refresh'); // 刷新令牌
-    Route::post('profile', 'V1Controller@userProfile'); // 获取账户信息
-    Route::post('nodeList', 'V1Controller@nodeList'); // 获取账户节点
+    Route::get('logout', 'V1Controller@logout'); // 退出
+    Route::get('refresh', 'V1Controller@refresh'); // 刷新令牌
+    Route::get('profile', 'V1Controller@userProfile'); // 获取账户信息
+    Route::get('nodes', 'V1Controller@nodeList'); // 获取账户全部节点
+    Route::get('node/{id}', 'V1Controller@nodeList'); // 获取账户个别节点
+
     Route::post('register', 'V1Controller@register'); // 注册
+    Route::get('shop', 'V1Controller@shop'); // 获取商品信息
 });