From 7d2aaf40e48dd81b98651cba4ac62e3d5a2e19b8 Mon Sep 17 00:00:00 2001 From: kandrusyak Date: Fri, 23 Jun 2023 18:05:01 +0300 Subject: [PATCH] add header filter --- main.go | 6 +++++- mw/filter_headers.go | 17 +++++++++++++++ mw/token_from_cookies.go | 6 ------ pkg/api/apiCall.go | 30 ++++++++++++++++++++++++--- services/users/{login.go => users.go} | 16 +++++++++++++- 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 mw/filter_headers.go rename services/users/{login.go => users.go} (76%) diff --git a/main.go b/main.go index 17d3977..07978e4 100644 --- a/main.go +++ b/main.go @@ -23,14 +23,18 @@ func main() { // Middleware e.Use(middleware.Logger()) + e.Use(mw.FilterHeaders) e.Use(mw.TokenFromCookies) e.Use(mw.JWT_MW) // Routes e.GET("/*", checkAuth) - e.POST("/auth/login", users.Login) e.GET("/health", handler.Health) + // Users + e.POST("/auth/login", users.Login) + e.GET("/users/me", users.GetCurrentUser) + e.Logger.Fatal(e.Start(":" + config.Env.Server.Port)) } diff --git a/mw/filter_headers.go b/mw/filter_headers.go new file mode 100644 index 0000000..d262577 --- /dev/null +++ b/mw/filter_headers.go @@ -0,0 +1,17 @@ +package mw + +import ( + "github.com/labstack/echo/v4" +) + +var NOT_ALLOWED_HEADERS = [2]string{"UserId", "Authorization"} + +func FilterHeaders(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + for _, header := range NOT_ALLOWED_HEADERS { + c.Request().Header.Set(header, "") + } + + return next(c) + } +} diff --git a/mw/token_from_cookies.go b/mw/token_from_cookies.go index bcf22be..cb65183 100644 --- a/mw/token_from_cookies.go +++ b/mw/token_from_cookies.go @@ -2,22 +2,16 @@ package mw import ( "github.com/labstack/echo/v4" - "net/http" ) func TokenFromCookies(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { var token, err = c.Request().Cookie("accessToken") - var authToken = c.Request().Header.Get("Authorization") if err != nil { return next(c) } - if authToken != "" { - return c.NoContent(http.StatusBadRequest) - } - c.Request().Header.Set("Authorization", "Bearer "+token.Value) return next(c) diff --git a/pkg/api/apiCall.go b/pkg/api/apiCall.go index 34e08e8..f753503 100644 --- a/pkg/api/apiCall.go +++ b/pkg/api/apiCall.go @@ -7,15 +7,39 @@ import ( "net/http" ) -func PostRequest(url string, model any) ([]byte, error) { +func PostRequest(url string, model any, header http.Header) ([]byte, error) { uJson, err := json.Marshal(model) if err != nil { return nil, err } - resp, err := http.Post(url, - "application/json", bytes.NewReader(uJson)) + client := http.Client{} + req, err := http.NewRequest("POST", url, bytes.NewReader(uJson)) + req.Header = header + req.Header.Set("Content-Type", "application/json") + + resp, err := client.Do(req) + + if err != nil { + return nil, err + } + + data, err := io.ReadAll(resp.Body) + + if err != nil { + return nil, err + } + + return data, nil +} + +func GetRequest(url string, header http.Header) ([]byte, error) { + client := http.Client{} + req, err := http.NewRequest("GET", url, nil) + req.Header = header + req.Header.Set("Content-Type", "application/json") + resp, err := client.Do(req) if err != nil { return nil, err diff --git a/services/users/login.go b/services/users/users.go similarity index 76% rename from services/users/login.go rename to services/users/users.go index 6852169..3cb11d6 100644 --- a/services/users/login.go +++ b/services/users/users.go @@ -19,7 +19,7 @@ func Login(c echo.Context) (err error) { return } - data, err := api.PostRequest(config.Env.MSHosts.UsersHost+"/login", u) + data, err := api.PostRequest(config.Env.MSHosts.UsersHost+"/login", u, c.Request().Header) u.Password = "" @@ -53,3 +53,17 @@ func Login(c echo.Context) (err error) { return c.JSON(http.StatusOK, u) } + +func GetCurrentUser(c echo.Context) error { + u := new(model.User) + + data, err := api.GetRequest(config.Env.MSHosts.UsersHost+"/me", c.Request().Header) + + err = json.Unmarshal(data, &u) + + if err != nil { + return c.NoContent(http.StatusBadGateway) + } + + return c.JSON(http.StatusOK, u) +}