SyncController.java 6.45 KB
package com.idss.vulsync.mvc.controller;

import cloud.agileframework.common.constant.Constant;
import cloud.agileframework.mvc.base.RETURN;
import cloud.agileframework.mvc.param.AgileReturn;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.idss.vulsync.entity.vo.BaseRequest;
import com.idss.vulsync.entity.vo.BaseResponse;
import com.idss.vulsync.entity.vo.SyncParamConsultRequestData;
import com.idss.vulsync.entity.vo.SyncParamConsultResponseData;
import com.idss.vulsync.mvc.service.ConsultVulmanageSyncService;
import com.idss.vulsync.utils.AuthUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.security.PublicKey;
import java.util.Base64;
import java.util.LinkedHashMap;

/**
 * @Author: zc
 * @Date: 2024/7/17 13:31
 */
@Slf4j
@Controller
@RequestMapping("/api/v1/")
public class SyncController {

    @Autowired
    AuthUtils authUtils;

    @Autowired
    ConsultVulmanageSyncService consultVulmanageSyncService;
    @Autowired
    ObjectMapper objectMapper;


    @GetMapping("/test")
    public RETURN aaa() {
        log.info("接收到请求test");

        PublicKey publicKey = authUtils.getPublicKey();
        AgileReturn.add("test");
        return RETURN.SUCCESS;
//        return AgileReturn.build();

    }

    public static void main(String[] args) {
        String a="QWEuMUQwUkQ5TzI2";
        String s = new String(Base64.getDecoder().decode(a.getBytes()));
        System.out.println(s);
    }

    /**
     * 资管侧提供服务
     */
    @PostMapping("/assetSvc")
    public RETURN assetSvc(@RequestBody BaseRequest object, HttpServletRequest httpServletRequest) {

        BaseResponse baseResponse = new BaseResponse();
//        boolean validAuth = authUtils.valid(httpServletRequest);
//        if (!validAuth) {
//            baseResponse.setStatusText("认证失败");
//            baseResponse.setStatusCode(2);
//            AgileReturn.add(Constant.ResponseAbout.RESULT, baseResponse);
//            return RETURN.SUCCESS;
//        }


        try {
            String json = objectMapper.writeValueAsString(object);
            log.info("接收到请求{}", json);

            objectMapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, false);
            LinkedHashMap<String, Object> requestMap = objectMapper.readValue(json, TypeFactory.defaultInstance().constructMapType(LinkedHashMap.class, String.class, Object.class));

            String msgID = requestMap.get("msgID").toString();
            Integer msgType = Integer.parseInt(requestMap.get("msgType").toString());
            String reqMsgCnt = requestMap.get("ReqMsgCnt").toString();
            String sign = requestMap.get("Sign").toString();


            requestMap.remove("Timestamp");
            requestMap.remove("Sign");

            if (msgType.equals(1)) {
                //资产同步协商
                SyncParamConsultRequestData syncParamConsultRequestData = objectMapper.readValue(reqMsgCnt, SyncParamConsultRequestData.class);
                String s = objectMapper.writeValueAsString(syncParamConsultRequestData);
                syncParamConsultRequestData=objectMapper.readValue(s, SyncParamConsultRequestData.class);
                requestMap.put("ReqMsgCnt", syncParamConsultRequestData);
            } else if (msgType.equals(2)) {
                //资产ID查询
            }
//            String signJson = objectMapper.writeValueAsString(requestMap);
//            String validSign = authUtils.generateSHA1Sign(signJson);
//            if (!validSign.equals(sign)) {
//                log.info("本次请求数据的签名值服务端为{}", validSign);
//                baseResponse.setStatusText("sign签名不一致");
//                baseResponse.setStatusCode(2);
//                AgileReturn.add(Constant.ResponseAbout.RESULT, baseResponse);
//                return RETURN.SUCCESS;
//            }

            Object rspObj=new Object();

            if (msgType.equals(1)) {
                //资产同步协商
                SyncParamConsultRequestData syncParamConsultRequestData = objectMapper.readValue(reqMsgCnt, SyncParamConsultRequestData.class);
                consultVulmanageSyncService.consultVulmanage(syncParamConsultRequestData);
                SyncParamConsultResponseData responseData=new SyncParamConsultResponseData();
                responseData.setInitDelay(syncParamConsultRequestData.getInitDelay());
                responseData.setUpdCycle(syncParamConsultRequestData.getUpdCycle());
                rspObj=responseData;
            } else if (msgType.equals(2)) {
                //资产ID查询
            }

            baseResponse.setMsgID(msgID);
            baseResponse.setMsgType(msgType);
            baseResponse.setStatusCode(0);
            baseResponse.setStatusText("success");
            baseResponse.setTimestamp(DateUtil.currentSeconds() + "");
            baseResponse.setRspMsgCnt(rspObj);

            LinkedHashMap<String,Object> responseSignMap=new LinkedHashMap<>();
            responseSignMap.put("msgID",baseResponse.getMsgID());
            responseSignMap.put("msgType",baseResponse.getMsgType());
            responseSignMap.put("statusCode",baseResponse.getStatusCode());
            responseSignMap.put("statusText",baseResponse.getStatusText());
            responseSignMap.put("RspMsgCnt",rspObj);

//            String returnSign = authUtils.generateSHA1Sign(objectMapper.writeValueAsString(responseSignMap));
//            String returnSign = "";
//            log.info("本次请求返回数据的签名值为{}", returnSign);
//            baseResponse.setSign(returnSign);

            AgileReturn.add(Constant.ResponseAbout.RESULT, baseResponse);
            return RETURN.SUCCESS;
        } catch (Exception e) {
            log.error("参数解析失败,", e);
        }
        baseResponse.setStatusText("参数解析失败");
        baseResponse.setStatusCode(2);
        AgileReturn.add(Constant.ResponseAbout.RESULT, baseResponse);
        return RETURN.SUCCESS;
    }


}