From 6fe74647792944431e7a06bf508f4f70f865c0bd Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 1 Dec 2023 20:08:12 +0800 Subject: [PATCH] =?UTF-8?q?marge:=20=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/ue/ue.go | 90 ++++++++++++++++++++--- lib/core/datasource/repo.go | 11 +-- lib/routes/routes.go | 5 ++ src/framework/middleware/pre_authorize.go | 22 +++++- src/framework/utils/repo/repo.go | 6 -- 5 files changed, 107 insertions(+), 27 deletions(-) diff --git a/features/ue/ue.go b/features/ue/ue.go index 9db7e22..164a605 100644 --- a/features/ue/ue.go +++ b/features/ue/ue.go @@ -72,17 +72,21 @@ type N3iwfUEData struct { } var ( - UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" - UriPCFUser = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" - UriPCFUserM = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/{number}" + UriNBInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" + UriUEInfo = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" + UriUENum = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + UriPCFUser = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" + UriPCFUserM = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/batch/{number}" + UriPCFUserFileImport = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/import" + UriPCFUserFileExport = config.DefaultUriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/export" - CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" - CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" - CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" - CustomUriPCFUser = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" - CustomUriPCFUserM = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/{number}" + CustomUriNBInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/nbInfo" + CustomUriUEInfo = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueInfo" + CustomUriUENum = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/ueNum" + CustomUriPCFUser = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo" + CustomUriPCFUserM = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/batch/{number}" + CustomUriPCFUserFileImport = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/import" + CustomUriPCFUserFileExport = config.UriPrefix + "/ueManagement/{apiVersion}/elementType/pcf/objectType/ueInfo/file/export" ) var client = resty.New() @@ -501,3 +505,69 @@ func GetNBInfoFromNF(w http.ResponseWriter, r *http.Request) { return } } + +// Get GetUEInfoFileExportNF from NF/NFs +func GetUEInfoFileExportNF(w http.ResponseWriter, r *http.Request) { + log.Info("GetUEInfoFromNF processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + var neId string + neIds := services.GetParamsArrByName("neId", r) + if len(neIds) == 1 { + neId = neIds[0] + } else { + services.ResponseNotFound404UriNotExist(w, r) + return + } + + // token, err := services.CheckFrontValidRequest(w, r) + // if err != nil { + // log.Error("Request error:", err) + // return + // } + // log.Debug("token:", token) + + neInfo, err := dborm.XormGetNeInfo("PCF", neId) + if err != nil { + log.Error("Failed to XormGetNeInfo:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else if neInfo == nil { + err := global.ErrCMNotFoundTargetNE + log.Error(global.ErrCMNotFoundTargetNE) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + log.Trace("neInfo:", neInfo) + + hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port) + requestURI2NF := fmt.Sprintf("%s%s", hostUri, r.RequestURI) + + log.Debug("requestURI2NF:", requestURI2NF) + + resp, err := client.R(). + EnableTrace(). + SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}). + // SetHeaders(map[string]string{"accessToken": token}). + SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}). + SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + Get(requestURI2NF) + if err != nil { + log.Error("Get system state from NF is failed:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + w.WriteHeader(resp.StatusCode()) + w.Write(resp.Body()) + // var response services.MapResponse + // _ = json.Unmarshal(resp.Body(), &response) + // services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} diff --git a/lib/core/datasource/repo.go b/lib/core/datasource/repo.go index 71bc422..7b81a4e 100644 --- a/lib/core/datasource/repo.go +++ b/lib/core/datasource/repo.go @@ -13,9 +13,6 @@ func PageNumSize(pageNum, pageSize any) (int, int) { pageNumStr := fmt.Sprintf("%v", pageNum) num := 1 if v, err := strconv.Atoi(pageNumStr); err == nil && v > 0 { - if num > 5000 { - num = 5000 - } num = v } @@ -23,13 +20,7 @@ func PageNumSize(pageNum, pageSize any) (int, int) { pageSizeStr := fmt.Sprintf("%v", pageSize) size := 10 if v, err := strconv.Atoi(pageSizeStr); err == nil && v > 0 { - if size < 0 { - size = 10 - } else if size > 1000 { - size = 1000 - } else { - size = v - } + size = v } return num - 1, size } diff --git a/lib/routes/routes.go b/lib/routes/routes.go index c4b9cf0..7b4b56f 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -273,6 +273,11 @@ func init() { Register("PUT", ue.CustomUriPCFUserM, ue.PutPCFUserInfo, nil) Register("DELETE", ue.UriPCFUserM, ue.DeletePCFUserInfo, nil) Register("DELETE", ue.CustomUriPCFUserM, ue.DeletePCFUserInfo, nil) + //PCF User file + Register("GET", ue.UriPCFUserFileExport, ue.GetUEInfoFileExportNF, nil) + Register("GET", ue.CustomUriPCFUserFileExport, ue.GetUEInfoFromNF, nil) + Register("PUT", ue.UriPCFUserFileImport, ue.PutPCFUserInfo, nil) + Register("PUT", ue.CustomUriPCFUserFileImport, ue.PutPCFUserInfo, nil) // UE Number Register("GET", ue.UriUENum, ue.GetUENumFromNF, nil) diff --git a/src/framework/middleware/pre_authorize.go b/src/framework/middleware/pre_authorize.go index 4ded217..81f4289 100644 --- a/src/framework/middleware/pre_authorize.go +++ b/src/framework/middleware/pre_authorize.go @@ -1,6 +1,8 @@ package middleware import ( + "strings" + AdminConstants "ems.agt/src/framework/constants/admin" commonConstants "ems.agt/src/framework/constants/common" "ems.agt/src/framework/i18n" @@ -11,6 +13,9 @@ import ( "github.com/gin-gonic/gin" ) +/**无Token可访问白名单 */ +var URL_WHITE_LIST = []string{"/performanceManagement", "/faultManagement"} + // PreAuthorize 用户身份授权认证校验 // // 只需含有其中角色 "hasRoles": {"xxx"}, @@ -24,6 +29,21 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc { return func(c *gin.Context) { language := ctxUtils.AcceptLanguage(c) + requestURI := c.Request.RequestURI + + // 判断白名单 + isWhite := false + for _, w := range URL_WHITE_LIST { + if strings.Contains(requestURI, w) { + isWhite = true + break + } + } + if isWhite { + c.Next() + return + } + // 获取请求头标识信息 tokenStr := ctxUtils.Authorization(c) if tokenStr == "" { @@ -61,7 +81,7 @@ func PreAuthorize(options map[string][]string) gin.HandlerFunc { perms := loginUser.Permissions verifyOk := verifyRolePermission(roles, perms, options) if !verifyOk { - msg := i18n.TTemplate(language, "app.common.err403", map[string]any{"method": c.Request.Method, "requestURI": c.Request.RequestURI}) + msg := i18n.TTemplate(language, "app.common.err403", map[string]any{"method": c.Request.Method, "requestURI": requestURI}) c.JSON(403, result.CodeMsg(403, msg)) c.Abort() // 停止执行后续的处理函数 return diff --git a/src/framework/utils/repo/repo.go b/src/framework/utils/repo/repo.go index 47bdf86..02da857 100644 --- a/src/framework/utils/repo/repo.go +++ b/src/framework/utils/repo/repo.go @@ -13,18 +13,12 @@ import ( func PageNumSize(pageNum, pageSize any) (int64, int64) { // 记录起始索引 num := parse.Number(pageNum) - if num > 5000 { - num = 5000 - } if num < 1 { num = 1 } // 显示记录数 size := parse.Number(pageSize) - if size > 50000 { - size = 50000 - } if size < 0 { size = 10 }