From 03db83c16256142a8c7dd0cf330052399fa134c0 Mon Sep 17 00:00:00 2001 From: "CTFang@WireLab" <ctfang.cs12@nycu.edu.tw> Date: Fri, 28 Jun 2024 04:46:27 +0000 Subject: [PATCH] fix: missing token in header --- backend/WebUI/api_charging.go | 11 +++++++++-- backend/WebUI/api_verify.go | 6 ++++++ backend/WebUI/api_webui.go | 7 +++++++ backend/webui_context/context.go | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/backend/WebUI/api_charging.go b/backend/WebUI/api_charging.go index ef91287..4fca18d 100644 --- a/backend/WebUI/api_charging.go +++ b/backend/WebUI/api_charging.go @@ -131,13 +131,20 @@ func GetChargingRecord(c *gin.Context) { return } - res, err := http.NewRequestWithContext(ctx, http.MethodGet, requestUri, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, requestUri, nil) if err != nil { logger.ProcLog.Error(err) c.JSON(http.StatusInternalServerError, gin.H{}) return } - resp, res_err := httpsClient.Do(res) + + if err = webui_context.GetSelf().RequestBindToken(req, ctx); err != nil { + logger.ProcLog.Error(err) + c.JSON(http.StatusInternalServerError, gin.H{}) + return + } + + resp, res_err := httpsClient.Do(req) if res_err != nil { logger.ProcLog.Error(err) c.JSON(http.StatusInternalServerError, gin.H{}) diff --git a/backend/WebUI/api_verify.go b/backend/WebUI/api_verify.go index face038..a1ced14 100644 --- a/backend/WebUI/api_verify.go +++ b/backend/WebUI/api_verify.go @@ -47,6 +47,12 @@ func GetSmfUserPlaneInfo() (interface{}, error) { logger.ProcLog.Error(err_req) return jsonData, err_req } + + if err = webui_context.GetSelf().RequestBindToken(req, ctx); err != nil { + logger.ProcLog.Error(err) + return jsonData, err + } + resp, err_rsp := httpsClient.Do(req) if err_rsp != nil { logger.ProcLog.Error(err_rsp) diff --git a/backend/WebUI/api_webui.go b/backend/WebUI/api_webui.go index 77c61c7..ae7185b 100644 --- a/backend/WebUI/api_webui.go +++ b/backend/WebUI/api_webui.go @@ -1800,6 +1800,13 @@ func GetRegisteredUEContext(c *gin.Context) { c.JSON(http.StatusInternalServerError, gin.H{}) return } + + if err = webui_context.GetSelf().RequestBindToken(req, ctx); err != nil { + logger.ProcLog.Error(err) + c.JSON(http.StatusInternalServerError, gin.H{}) + return + } + resp, err := httpsClient.Do(req) if err != nil { logger.ProcLog.Error(err) diff --git a/backend/webui_context/context.go b/backend/webui_context/context.go index 6f938b3..9157a5e 100644 --- a/backend/webui_context/context.go +++ b/backend/webui_context/context.go @@ -3,9 +3,12 @@ package webui_context import ( "context" "fmt" + "net/http" "github.com/google/uuid" + "golang.org/x/oauth2" + "github.com/free5gc/openapi" "github.com/free5gc/openapi/Nnrf_NFDiscovery" "github.com/free5gc/openapi/Nnrf_NFManagement" "github.com/free5gc/openapi/models" @@ -164,3 +167,19 @@ func (c *WEBUIContext) GetTokenCtx(serviceName models.ServiceName, targetNF mode return oauth.GetTokenCtx(models.NfType_AF, targetNF, c.NfInstanceID, c.NrfUri, string(serviceName)) } + +// NewRequestWithContext() will not apply header in ctx +// so httpsClient.Do(req) will not have token in header if OAuth2 enable +func (c *WEBUIContext) RequestBindToken(req *http.Request, ctx context.Context) error { + if tok, ok := ctx.Value(openapi.ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + var err error + if latestToken, err = tok.Token(); err != nil { + logger.ConsumerLog.Error(err) + return err + } + latestToken.SetAuthHeader(req) + } + return nil +} -- GitLab