diff --git a/handler/tool.go b/handler/tool.go index f43797e..9623363 100644 --- a/handler/tool.go +++ b/handler/tool.go @@ -71,6 +71,8 @@ func SetUpToolGroup(router *gin.Engine) { toolGroup.POST("/spark_create_outline", CreateSparkPPTSOutline) toolGroup.POST("/spark_create_ppt", CreateSparkPPT) toolGroup.POST("/spark_ppt_create_status", GetSparkCreatePPTStatus) + //国外服务器处理请求 + toolGroup.POST("/online_server_request", HandleOnlineServerRequest) } func SetDeviceStatusV2(c *gin.Context) { @@ -849,3 +851,23 @@ func handleThirdPartyCallback(c *gin.Context) { resp.Message = "success" c.JSON(http.StatusOK, resp) } + +func HandleOnlineServerRequest(c *gin.Context) { + var req proto.OnlineServerReq + var resp proto.GenerateResp + if err := c.ShouldBind(&req); err == nil { + respData, err2 := service.DoRequestToForeignServer(&req) + if err2 != nil { + resp.Code = proto.OperationFailed + resp.Message = err2.Error() + } else { + resp.Code = proto.SuccessCode + resp.Message = "success" + resp.Data = respData + } + } else { + resp.Code = proto.ParameterError + resp.Message = "参数错误" + } + c.JSON(http.StatusOK, resp) +} diff --git a/proto/tool.go b/proto/tool.go index ed3458d..acb7844 100644 --- a/proto/tool.go +++ b/proto/tool.go @@ -140,3 +140,25 @@ type GitHubUserInfo struct { AvatarUrl string `json:"avatar_url"` //头像 Url string `json:"url"` // 用户主页 } + +// 国外服务器负责请求的请求 +type OnlineServerReq struct { + Type string `json:"type"` // 请求类型,get,post + Url string `json:"url"` // 请求地址 + Data any `json:"data"` // 请求数据 + Header []OutlineServerReqData `json:"header"` // 请求头 +} + +type OutlineServerReqData struct { + Key string `json:"key"` // 请求的key + Value string `json:"value"` // 请求的值 +} + +type OnlineServerRespData struct { + Response string `json:"response"` // 响应数据 +} + +type OutlineServerResp struct { + Request OnlineServerReq `json:"request"` // 请求 + Response OnlineServerRespData `json:"response"` // 响应 +} diff --git a/service/toolService.go b/service/toolService.go index 56ee49c..a26131e 100644 --- a/service/toolService.go +++ b/service/toolService.go @@ -5,6 +5,7 @@ import ( "StuAcaWorksAI/proto" "StuAcaWorksAI/worker" "encoding/json" + "errors" "fmt" "github.com/golang-jwt/jwt" "log" @@ -449,3 +450,43 @@ func DoGoogleCallBack(state *proto.ThirdPartyLoginState, code string) { log.Println("do handle gitee callback success, third party login status:", string(thirdPartyLoginStatusStr)) worker.SetRedisWithExpire(state.UUID, string(thirdPartyLoginStatusStr), time.Minute*10) } + +// 国外服务器处理国内服务器要请求外网的请求 +func DoRequestToForeignServer(req *proto.OnlineServerReq) (proto.OutlineServerResp, error) { + var resp proto.OutlineServerResp + resp.Request = *req + switch req.Type { + case "get": + headers := make(map[string]string) + for _, v := range req.Header { + headers[v.Key] = v.Value + } + err2, respBytes := worker.DoGetRequest(req.Url, headers) + if err2 != nil { + log.Println("DoRequestToForeignServer get error:", err2) + return resp, err2 + } + resp.Response.Response = string(respBytes) + case "post": + headers := make(map[string]string) + for _, v := range req.Header { + headers[v.Key] = v.Value + } + dataBytes, err := json.Marshal(req.Data) + if err != nil { + log.Println("DoRequestToForeignServer post error:", err) + break + } + err2, respBytes := worker.DoPostRequestJSON(req.Url, dataBytes, headers) + if err2 != nil { + log.Println("DoRequestToForeignServer get error:", err2) + return resp, err2 + } + resp.Response.Response = string(respBytes) + default: + log.Println("DoRequestToForeignServer type error:", req.Type) + return resp, errors.New("request type error") + } + return resp, nil + +}