From f84eebdb75a6af1894b057b0255b01992bdd4f03 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 27 七月 2022 16:16:12 +0800
Subject: [PATCH] 优化部分hook订阅

---
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
index a2619fa..94fe8df 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/media/MediaController.java
@@ -1,9 +1,14 @@
 package com.genersoft.iot.vmp.vmanager.gb28181.media;
 
 import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.conf.security.SecurityUtils;
+import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
+import com.genersoft.iot.vmp.media.zlm.dto.OnPublishHookParam;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.service.IStreamPushService;
 import com.genersoft.iot.vmp.service.IMediaService;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import io.swagger.annotations.Api;
@@ -16,6 +21,8 @@
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+
 
 @Api(tags = "濯掍綋娴佺浉鍏�")
 @Controller
@@ -26,16 +33,10 @@
     private final static Logger logger = LoggerFactory.getLogger(MediaController.class);
 
     @Autowired
-    private IVideoManagerStorage storager;
-
-    @Autowired
-    private IStreamPushService streamPushService;
+    private IRedisCatchStorage redisCatchStorage;
 
     @Autowired
     private IMediaService mediaService;
-
-    @Autowired
-    private IMediaServerService mediaServerService;
 
 
     /**
@@ -52,20 +53,51 @@
     })
     @GetMapping(value = "/stream_info_by_app_and_stream")
     @ResponseBody
-    public WVPResult<StreamInfo> getStreamInfoByAppAndStream(@RequestParam String app, @RequestParam String stream, @RequestParam(required = false) String mediaServerId){
-        StreamInfo streamInfoByAppAndStreamWithCheck = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId);
+    public WVPResult<StreamInfo> getStreamInfoByAppAndStream(HttpServletRequest request, @RequestParam String app,
+                                                             @RequestParam String stream,
+                                                             @RequestParam(required = false) String mediaServerId,
+                                                             @RequestParam(required = false) String callId,
+                                                             @RequestParam(required = false) Boolean useSourceIpAsStreamIp){
+        boolean authority = false;
+        if (callId != null) {
+            // 鏉冮檺鏍¢獙
+            StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream);
+            if (streamAuthorityInfo.getCallId().equals(callId)) {
+                authority = true;
+            }else {
+                WVPResult<StreamInfo> result = new WVPResult<>();
+                result.setCode(401);
+                result.setMsg("fail");
+                return result;
+            }
+        }else {
+            // 鏄惁鐧婚檰鐢ㄦ埛, 鐧婚檰鐢ㄦ埛杩斿洖瀹屾暣淇℃伅
+            LoginUser userInfo = SecurityUtils.getUserInfo();
+            if (userInfo!= null) {
+                authority = true;
+            }
+        }
+
+        StreamInfo streamInfo;
+
+        if (useSourceIpAsStreamIp != null && useSourceIpAsStreamIp) {
+            String host = request.getHeader("Host");
+            String localAddr = host.split(":")[0];
+            logger.info("浣跨敤{}浣滀负杩斿洖娴佺殑ip", localAddr);
+            streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, localAddr, authority);
+        }else {
+            streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, authority);
+        }
+
         WVPResult<StreamInfo> result = new WVPResult<>();
-        if (streamInfoByAppAndStreamWithCheck != null){
+        if (streamInfo != null){
             result.setCode(0);
             result.setMsg("scccess");
-            result.setData(streamInfoByAppAndStreamWithCheck);
+            result.setData(streamInfo);
         }else {
             result.setCode(-1);
             result.setMsg("fail");
         }
         return result;
     }
-
-
-
 }

--
Gitblit v1.8.0