From 0c4abb5db36efad3cbaab9eddce4fb775736b622 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Wed, 30 Aug 2023 18:21:37 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=BC=9A?= =?UTF-8?q?=E8=AE=AE=E5=88=86=E4=BA=AB=E5=8A=9F=E8=83=BD=20-=20100%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 55 +++++++++++++++--- app/Models/Meeting.php | 57 +++++++++++++++++++ resources/assets/js/App.vue | 2 +- .../manage/components/MeetingManager.vue | 47 ++++++++++----- .../pages/manage/components/MeetingPlayer.vue | 39 +++++++++++-- resources/assets/js/pages/meeting.vue | 4 +- resources/assets/js/routes.js | 2 +- resources/assets/js/store/actions.js | 7 ++- resources/assets/js/store/state.js | 2 +- 9 files changed, 180 insertions(+), 35 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index b3854a43f..420f423de 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -613,7 +613,10 @@ class UsersController extends AbstractController */ public function basic() { - User::auth(); + $sharekey = Request::header('Sharekey'); + if(empty($sharekey) || !Meeting::getShareInfo($sharekey)){ + User::auth(); + } // $userid = Request::input('userid'); $array = Base::json2array($userid); @@ -1120,7 +1123,7 @@ class UsersController extends AbstractController * - join: 加入会议,有效参数:meetingid (必填) * @apiParam {String} [meetingid] 频道ID(不是数字) * @apiParam {String} [name] 会话ID - * @apiParam {String} [meetingsign] 签名 + * @apiParam {String} [sharekey] 分享的key * @apiParam {String} [username] 用户名称 * @apiParam {Array} [userids] 邀请成员 * @@ -1134,11 +1137,17 @@ class UsersController extends AbstractController $meetingid = trim(Request::input('meetingid')); $name = trim(Request::input('name')); $userids = Request::input('userids'); - $meetingsign = trim(Request::input('meetingsign')); + $sharekey = trim(Request::input('sharekey')); $username = trim(Request::input('username')); - $user = empty($meetingsign) ? User::auth() : null; + $user = null; + if(!empty($sharekey) && $type === 'join'){ + if(!Meeting::getShareInfo($sharekey)){ + return Base::retError('分享链接已过期'); + } + }else{ + $user = User::auth(); + } $isCreate = false; - // 创建、加入 if ($type === 'join') { $meeting = Meeting::whereMeetingid($meetingid)->first(); @@ -1169,7 +1178,10 @@ class UsersController extends AbstractController if (empty($meetingSetting['appid']) || empty($meetingSetting['app_certificate'])) { return Base::retError('会议功能配置错误,请联系管理员'); } - $uid = intval(str_pad( Request::header('fd'), 6, 9, STR_PAD_LEFT) . $user?->userid); + $uid = intval(str_pad(Base::generatePassword(4,1), 9, 8, STR_PAD_LEFT)); + if($user){ + $uid = intval(str_pad(Request::header('fd'), 5, 9, STR_PAD_LEFT).$user->userid); + } try { $service = new AgoraTokenGenerator($meetingSetting['appid'], $meetingSetting['app_certificate'], $meeting->channel, $uid); } catch (\Exception $e) { @@ -1198,13 +1210,40 @@ class UsersController extends AbstractController // $data['appid'] = $meetingSetting['appid']; $data['uid'] = $uid; - $data['userimg'] = $meetingsign ? 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png' : $user?->userimg; - $data['nickname'] = $meetingsign ? $username : $user?->nickname; + $data['userimg'] = $sharekey ? Base::fillUrl('avatar/'.$username.'.png') : $user?->userimg; + $data['nickname'] = $sharekey ? $username : $user?->nickname; $data['token'] = $token; $data['msgs'] = $msgs; + $data['sharelink'] = $meeting->getShareLink(); + // + Meeting::setTouristInfo($data); + // return Base::retSuccess('success', $data); } + /** + * @api {get} api/users/meeting/tourist 16. 【会议】游客信息 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName meeting__tourist + * + * @apiParam {String} tourist_id 游客ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function meeting__tourist() + { + $touristId = trim(Request::input('tourist_id')); + if ($touristInfo = Meeting::getTouristInfo($touristId)) { + return Base::retSuccess('success', $touristInfo); + } + return Base::retError('Id不存在'); + } + /** * @api {get} api/users/meeting/invitation 17. 【会议】发送邀请 * diff --git a/app/Models/Meeting.php b/app/Models/Meeting.php index 92ba18bbc..0b9814f7d 100644 --- a/app/Models/Meeting.php +++ b/app/Models/Meeting.php @@ -2,6 +2,10 @@ namespace App\Models; +use Cache; +use App\Module\Base; +use Illuminate\Support\Carbon; + /** * App\Models\Meeting * @@ -30,5 +34,58 @@ namespace App\Models; */ class Meeting extends AbstractModel { + const CACHE_KEY = 'meeting_share_link_code'; + const CACHE_EXPIRED_TIME = 6; // 小时 + /** + * 获取分享链接 + * @return mixed + */ + public function getShareLink() + { + $code = base64_encode("{$this->meetingid}" . Base::generatePassword()); + Cache::put(self::CACHE_KEY.'_'.$code, [ + 'id' => $this->id, + 'meetingid' => $this->meetingid, + 'channel' => $this->channel, + ], Carbon::now()->addHours(self::CACHE_EXPIRED_TIME)); + return Base::fillUrl("meeting/{$this->meetingid}/".$code); + } + + /** + * 获取分享信息 + * @return mixed + */ + public static function getShareInfo($code) + { + if(Cache::has(self::CACHE_KEY.'_'.$code)){ + return Cache::get(self::CACHE_KEY.'_'.$code); + } + return null; + } + + /** + * 保存访客信息 + * @return mixed + */ + public static function setTouristInfo($data) + { + Cache::put(Meeting::CACHE_KEY.'_'.$data['uid'], [ + 'uid' => $data['uid'], + 'userimg' => $data['userimg'], + 'nickname' => $data['nickname'], + ], Carbon::now()->addHours(self::CACHE_EXPIRED_TIME)); + } + + /** + * 获取访客信息 + * @return mixed + */ + public static function getTouristInfo($touristId) + { + if(Cache::has(Meeting::CACHE_KEY.'_'.$touristId)){ + return Base::retSuccess('success', Cache::get(Meeting::CACHE_KEY.'_'.$touristId) ); + } + return null; + } } diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 8861048fc..b9d75db34 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -337,7 +337,7 @@ export default { this.$store.dispatch("call", { url: 'users/basic', data: { - userid: [ (uuid+"").substring(6) ] + userid: [ (uuid+"").substring(5) ] } }).then(({data}) => { $A.eeuiAppSendMessage({ diff --git a/resources/assets/js/pages/manage/components/MeetingManager.vue b/resources/assets/js/pages/manage/components/MeetingManager.vue index aeb43c941..e19d56e79 100644 --- a/resources/assets/js/pages/manage/components/MeetingManager.vue +++ b/resources/assets/js/pages/manage/components/MeetingManager.vue @@ -5,14 +5,14 @@ v-model="addShow" :title="$L(addData.type === 'join' ? '加入会议' : '新会议')" :mask-closable="false" - :closable="!addData.meetingsign"> + :closable="!addData.sharekey">