diff --git a/features/dbrest/dbrest.go b/features/dbrest/dbrest.go index c27ff51d..d4679790 100644 --- a/features/dbrest/dbrest.go +++ b/features/dbrest/dbrest.go @@ -44,8 +44,9 @@ var ( XormCommonUri = config.DefaultUriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal XormDatabaseUri = config.DefaultUriPrefix + "/database/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for crontask - XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external - XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external + XormDataRestUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" + XormExtDataUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external + XormDataSQLUri = config.DefaultUriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external CustomXormCommonUri = config.UriPrefix + "/databaseManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for internal CustomXormExtDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{elementTypeValue}/{objectTypeValue}" // for external diff --git a/features/ue/ue.go b/features/ue/ue.go index 2be1c868..e8965376 100644 --- a/features/ue/ue.go +++ b/features/ue/ue.go @@ -3,6 +3,7 @@ package ue import ( "encoding/json" "fmt" + "io" "net/http" "time" @@ -71,13 +72,17 @@ 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" + 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" - 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" + 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" ) var client = resty.New() @@ -160,6 +165,215 @@ func GetUEInfoFromNF(w http.ResponseWriter, r *http.Request) { } } +// Get UEInfo from NF/NFs +func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("PostPCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + 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(neType, 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) + + body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 + if err != nil { + log.Error("io.ReadAll is failed:", err) + services.ResponseNotFound404UriNotExist(w, r) + return + } + 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"}). + SetBody(body). + Post(requestURI2NF) + if err != nil { + log.Error("Failed to post:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.DataResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + +// Get UEInfo from NF/NFs +func PutPCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("PutPCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + 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(neType, 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) + + body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小 + if err != nil { + log.Error("io.ReadAll is failed:", err) + services.ResponseNotFound404UriNotExist(w, r) + return + } + 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"}). + SetBody(body). + Put(requestURI2NF) + if err != nil { + log.Error("Failed to put:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.DataResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + +// Get UEInfo from NF/NFs +func DeletePCFUserInfo(w http.ResponseWriter, r *http.Request) { + log.Info("DeletePCFUserInfo processing... ") + + // vars := mux.Vars(r) + // neType := vars["elementTypeValue"] + // if neType == "" { + // services.ResponseNotFound404UriNotExist(w, r) + // return + // } + //neTypeLower := strings.ToLower(neType) + neType := "PCF" + 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(neType, 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"}). + Delete(requestURI2NF) + if err != nil { + log.Error("Failed to delete:", err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } else { + var response services.DataResponse + _ = json.Unmarshal(resp.Body(), &response) + services.ResponseWithJson(w, resp.StatusCode(), response) + return + } +} + // Get UEInfo from SMF func GetUENumFromNF(w http.ResponseWriter, r *http.Request) { log.Info("GetUENumFromNF processing... ") diff --git a/lib/routes/routes.go b/lib/routes/routes.go index 886fb54a..c4b9cf0e 100644 --- a/lib/routes/routes.go +++ b/lib/routes/routes.go @@ -99,6 +99,11 @@ func init() { Register("PUT", dbrest.CustomXormCommonUri, dbrest.DatabaseUpdateData, nil) Register("DELETE", dbrest.CustomXormCommonUri, dbrest.DatabaseDeleteData, nil) + Register("GET", dbrest.XormDataRestUri, dbrest.ExtDatabaseGetData, nil) + Register("POST", dbrest.XormDataRestUri, dbrest.ExtDatabaseInsertData, nil) + Register("PUT", dbrest.XormDataRestUri, dbrest.ExtDatabaseUpdateData, nil) + Register("DELETE", dbrest.XormDataRestUri, dbrest.ExtDatabaseDeleteData, nil) + Register("GET", dbrest.XormExtDataUri, dbrest.ExtDatabaseGetData, nil) Register("POST", dbrest.XormExtDataUri, dbrest.ExtDatabaseInsertData, nil) Register("PUT", dbrest.XormExtDataUri, dbrest.ExtDatabaseUpdateData, nil) @@ -247,11 +252,29 @@ func init() { // AAAA Register("GET", aaaa.CustomUriAAAASSO, aaaa.GetSSOFromAAAA, nil) - // UEInfo + // UEInfo: SMF Register("GET", ue.UriUEInfo, ue.GetUEInfoFromNF, nil) Register("GET", ue.CustomUriUEInfo, ue.GetUEInfoFromNF, nil) - // UEInfo + // UEInfo: PCF + Register("GET", ue.UriPCFUser, ue.GetUEInfoFromNF, nil) + Register("GET", ue.CustomUriPCFUser, ue.GetUEInfoFromNF, nil) + Register("POST", ue.UriPCFUser, ue.PostPCFUserInfo, nil) + Register("POST", ue.CustomUriPCFUser, ue.PostPCFUserInfo, nil) + Register("PUT", ue.UriPCFUser, ue.PutPCFUserInfo, nil) + Register("PUT", ue.CustomUriPCFUser, ue.PutPCFUserInfo, nil) + Register("DELETE", ue.UriPCFUser, ue.DeletePCFUserInfo, nil) + Register("DELETE", ue.CustomUriPCFUser, ue.DeletePCFUserInfo, nil) + + // PCFUEInfo: batch add/modify/delete + Register("POST", ue.UriPCFUserM, ue.PostPCFUserInfo, nil) + Register("POST", ue.CustomUriPCFUserM, ue.PostPCFUserInfo, nil) + Register("PUT", ue.UriPCFUserM, ue.PutPCFUserInfo, nil) + Register("PUT", ue.CustomUriPCFUserM, ue.PutPCFUserInfo, nil) + Register("DELETE", ue.UriPCFUserM, ue.DeletePCFUserInfo, nil) + Register("DELETE", ue.CustomUriPCFUserM, ue.DeletePCFUserInfo, nil) + + // UE Number Register("GET", ue.UriUENum, ue.GetUENumFromNF, nil) Register("GET", ue.CustomUriUENum, ue.GetUENumFromNF, nil)