Explorar el Código

:construction: create

visuddhinanda hace 3 años
padre
commit
81534a02fd

+ 32 - 0
app/Http/Api/AuthApi.php

@@ -0,0 +1,32 @@
+<?php
+namespace App\Http\Api;
+
+use Illuminate\Support\Facades\Log;
+use Illuminate\Http\Request;
+use Firebase\JWT\JWT;
+use Firebase\JWT\Key;
+
+class AuthApi{
+    public static function current(Request $request){
+        if($request->hasHeader('Authorization')){
+            $token = $request->header('Authorization');
+            Log::info('token:'.$token);
+            if(\substr($token,0,6) === 'Bearer'){
+                $token = trim(substr($token,6));
+                $jwt = JWT::decode($token,new Key(env('APP_KEY'),'HS512'));
+                if($jwt->exp < time()){
+                    return false;
+                }else{
+                    //有效的token
+                    return ['user_uid'=>$jwt->uid,'user_id'=>$jwt->id];
+                }
+            }else{
+                return false;
+            }
+        }else if(isset($_COOKIE['user_uid'])){
+            return ['user_uid'=>$_COOKIE['user_uid'],'user_id'=>$_COOKIE['user_id']];
+        }else{
+            return false;
+        }
+    }
+}

+ 11 - 0
app/Http/Api/StudioApi.php

@@ -0,0 +1,11 @@
+<?php
+namespace App\Http\Api;
+
+require_once __DIR__.'/../../../public/app/ucenter/function.php';
+
+class StudioApi{
+    public static function getIdByName($name){
+        $userinfo = new \UserInfo();
+        return $userinfo->getUserByName($name)['userid'];
+    }
+}

+ 200 - 0
app/Http/Controllers/ArticleController.php

@@ -0,0 +1,200 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Article;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+
+class ArticleController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        $indexCol = ['uid','title','subtitle','summary','owner','lang','status','updated_at','created_at'];
+        switch ($request->get('view')) {
+            case 'studio':
+				# 获取studio内所有channel
+                $user = \App\Http\Api\AuthApi::current($request);
+                if($user){
+                    //判断当前用户是否有指定的studio的权限
+                    if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('name'))){
+                        $table = Article::select($indexCol)->where('owner', $user["user_uid"]);
+                    }else{
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+				break;
+        }
+        //处理搜索
+        if(isset($_GET["search"])){
+            $table = $table->where('title', 'like', $_GET["search"]."%");
+        }
+        //获取记录总条数
+        $count = $table->count();
+        //处理排序
+        if(isset($_GET["order"]) && isset($_GET["dir"])){
+            $table = $table->orderBy($_GET["order"],$_GET["dir"]);
+        }else{
+            //默认排序
+            $table = $table->orderBy('updated_at','desc');
+        }
+        //处理分页
+        if($request->has("limit")){
+
+            if($request->has("offset")){
+                $offset = $request->get("offset");
+            }else{
+                $offset = 0;
+            }
+            $table = $table->skip($offset)->take($request->get("limit"));
+        }
+        //获取数据
+        $result = $table->get();
+        if($result){
+            /*
+            foreach ($result as $key => $value) {
+                # 获取studio信息
+                $studio = $userinfo->getName($value->owner_uid);
+                $value->studio = [
+                    'id'=>$value->owner_uid,
+                    'nickName'=>$studio['nickname'],
+                    'studioName'=>$studio['username'],
+                    'avastar'=>'',
+                    'owner' => [
+                        'id'=>$value->owner_uid,
+                        'nickName'=>$studio['nickname'],
+                        'userName'=>$studio['username'],
+                        'avastar'=>'',
+                    ]
+                ];
+            }*/
+			return $this->ok(["rows"=>$result,"count"=>$count]);
+		}else{
+			return $this->error("没有查询到数据");
+		}
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+        $user = \App\Http\Api\AuthApi::current($request);
+        if($user){
+            //判断当前用户是否有指定的studio的权限
+            if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('studio'))){
+                //查询是否重复
+                if(Article::where('title',$request->get('title'))->where('owner',$user['user_uid'])->exists()){
+                    return $this->error(__('validation.exists'));
+                }else{
+
+                    $newOne = new Article;
+                    $newOne->id = app('snowflake')->id();
+                    $newOne->uid = Str::uuid();
+                    $newOne->title = $request->get('title');
+                    $newOne->lang = $request->get('lang');
+                    $newOne->owner = $user['user_uid'];
+                    $newOne->owner_id = $user['user_id'];
+                    $newOne->editor_id = $user['user_id'];
+                    $newOne->create_time = time()*1000;
+                    $newOne->modify_time = time()*1000;
+                    $newOne->save();
+                    return $this->ok($newOne);
+                }
+            }else{
+                return $this->error(__('auth.failed'));
+            }
+        }else{
+            return $this->error(__('auth.failed'));
+        }
+    }
+
+    /**
+     * Display the specified resource.
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Article  $article
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Request  $request,Article $article)
+    {
+        //
+        if($article){
+            if($article->status<30){
+                //私有文章,判断权限
+                $user = \App\Http\Api\AuthApi::current($request);
+                if($user){
+                    //判断当前用户是否有指定的studio的权限
+                    if($user['user_uid'] !== $article->owner){
+                        //非所有者
+                        //TODO 判断是否协作
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+            }
+            return $this->ok($article);
+        }else{
+            return $this->error("no recorder");
+        }
+
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Article  $article
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Article $article)
+    {
+        //
+        if($article){
+            //鉴权
+            $user = \App\Http\Api\AuthApi::current($request);
+            if($user && $article->owner === $user["user_uid"]){
+                $article->title = $request->get('title');
+                $article->subtitle = $request->get('subtitle');
+                $article->summary = $request->get('summary');
+                $article->content = $request->get('content');
+                $article->lang = $request->get('lang');
+                $article->status = $request->get('status');
+                $article->modify_time = time()*1000;
+                $article->save();
+                return $this->ok($article);
+            }else{
+                //鉴权失败
+                //TODO 判断是否为协作
+                return $this->error(__('auth.failed'));
+            }
+
+        }else{
+            return $this->error("no recorder");
+        }
+
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Article  $article
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Article $article)
+    {
+        //
+    }
+}

+ 105 - 0
app/Http/Controllers/AuthController.php

@@ -0,0 +1,105 @@
+<?php
+
+namespace App\Http\Controllers;
+
+require_once __DIR__.'/../../../public/app/ucenter/function.php';
+
+use Illuminate\Http\Request;
+use Firebase\JWT\JWT;
+use Firebase\JWT\Key;
+use App\Http\Api;
+
+class AuthController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show($id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  int  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($id)
+    {
+        //
+    }
+    public function signIn(Request $request){
+        $userinfo = new \UserInfo();
+        $user = $userinfo->signIn($request->get('username'),$request->get('password'));
+        if($user){
+            $ExpTime = time() + 60 * 60 * 24 * 365;
+            $key = env('APP_KEY');
+            $payload = [
+                'nbf' => time(),
+                'exp' => $ExpTime,
+                'uid' => $user['userid'],
+                'id' => $user['id'],
+            ];
+            $jwt = JWT::encode($payload,$key,'HS512');
+            return $this->ok($jwt);
+        }else{
+            return $this->error('invalid token');
+        }
+    }
+    public function getUserInfoByToken(Request $request){
+        $curr = \App\Http\Api\AuthApi::current($request);
+        if($curr){
+            $userinfo = new \UserInfo();
+		    $username = $userinfo->getName($curr['user_uid']);
+            $user = [
+                "nickName"=> $username['nickname'],
+                "realName"=> $username['username'],
+                "avatar"=> "",
+                "roles"=> []
+            ];
+            return $this->ok($user);
+        }else{
+            return $this->error('invalid token');
+        }
+    }
+
+}
+
+

+ 152 - 0
app/Http/Controllers/GroupController.php

@@ -0,0 +1,152 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\GroupInfo;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+use Illuminate\Support\Facades\Log;
+
+require_once __DIR__.'/../../../public/app/ucenter/function.php';
+class GroupController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index(Request $request)
+    {
+        //
+        $userinfo = new \UserInfo();
+		$result=false;
+		$indexCol = ['uid','name','description','owner','updated_at','created_at'];
+		switch ($request->get('view')) {
+            case 'studio':
+	            # 获取studio内所有channel
+                $user = \App\Http\Api\AuthApi::current($request);
+                if($user){
+                    //判断当前用户是否有指定的studio的权限
+                    if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('name'))){
+                        $table = GroupInfo::select($indexCol)->where('owner', $user["user_uid"]);
+                    }else{
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+				break;
+        }
+        if(isset($_GET["search"])){
+            $table = $table->where('title', 'like', $_GET["search"]."%");
+        }
+        $count = $table->count();
+        if(isset($_GET["order"]) && isset($_GET["dir"])){
+            $table = $table->orderBy($_GET["order"],$_GET["dir"]);
+        }else{
+            if($request->get('view') === 'studio_list'){
+                $table = $table->orderBy('count','desc');
+            }else{
+                $table = $table->orderBy('updated_at','desc');
+            }
+        }
+
+        if(isset($_GET["limit"])){
+            $offset = 0;
+            if(isset($_GET["offset"])){
+                $offset = $_GET["offset"];
+            }
+            $table = $table->skip($offset)->take($_GET["limit"]);
+        }
+        $result = $table->get();
+		if($result){
+            foreach ($result as $key => $value) {
+                # code...
+                $value->role = 'owner';
+                $value->studio = [
+                    'id'=>$value->owner,
+                    'nickName'=>$userinfo->getName($value->owner)['nickname'],
+                    'studioName'=>$userinfo->getName($value->owner)['username'],
+                    'avastar'=>'',
+                    'owner' => [
+                        'id'=>$value->owner,
+                        'nickName'=>$userinfo->getName($value->owner)['nickname'],
+                        'userName'=>$userinfo->getName($value->owner)['username'],
+                        'avastar'=>'',
+                    ]
+                ];
+            }
+			return $this->ok(["rows"=>$result,"count"=>$count]);
+		}else{
+			return $this->error("没有查询到数据");
+		}
+
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  string  $id
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Request  $request,$id)
+    {
+        //
+		$indexCol = ['uid','name','description','owner','updated_at','created_at'];
+
+		$result  = GroupInfo::select($indexCol)->where('uid', $id)->first();
+		if($result){
+            if($result->status<30){
+                //私有,判断权限
+                $user = \App\Http\Api\AuthApi::current($request);
+                if($user){
+                    //判断当前用户是否有指定的studio的权限
+                    if($user['user_uid'] !== $result->owner){
+                        //非所有者
+                        //TODO 判断是否协作
+                        return $this->error(__('auth.failed'));
+                    }
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+            }
+			return $this->ok($result);
+		}else{
+			return $this->error("没有查询到数据");
+		}
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Group  $group
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Group $group)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Group  $group
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Group $group)
+    {
+        //
+    }
+}