From ee0b512bfe6db978e0fcd1bf2adf310aa64e6608 Mon Sep 17 00:00:00 2001 From: Piotr Biernat Date: Wed, 22 Oct 2025 17:10:54 +0200 Subject: [PATCH] Removed coupling with useless services in actions --- src/internal/server/access_handler.go | 3 +-- src/internal/server/login_handler.go | 7 +++++-- src/internal/server/refresh_handler.go | 9 ++++---- src/internal/server/register_handler.go | 6 ++---- src/internal/service/auth.go | 5 +++-- src/internal/service/guard.go | 7 ++----- src/internal/ui/access_action.go | 9 +------- src/internal/ui/login_action.go | 17 ++++----------- src/internal/ui/refresh_action.go | 7 ++++--- src/internal/ui/register_action.go | 28 +++++++++++++++++++++++++ 10 files changed, 54 insertions(+), 44 deletions(-) create mode 100644 src/internal/ui/register_action.go diff --git a/src/internal/server/access_handler.go b/src/internal/server/access_handler.go index ecf577b..b6382a0 100644 --- a/src/internal/server/access_handler.go +++ b/src/internal/server/access_handler.go @@ -19,8 +19,7 @@ func (s *Server) AccessHandlerFn(c *fiber.Ctx) error { header := new(dto.AuthorizationHeaderDTO) c.ReqHeaderParser(header) - accessUI := ui.NewAccessActionUI(guardSrv, s.GetDatabase(), s.GetCache()) - if err := accessUI.Execute(header, url, srvName); err != nil { + if err := ui.NewAccessActionUI(guardSrv).Execute(header, url, srvName); err != nil { return s.Error(c, fiber.StatusNotFound, err.Error()) } diff --git a/src/internal/server/login_handler.go b/src/internal/server/login_handler.go index 727e513..df8cd5c 100644 --- a/src/internal/server/login_handler.go +++ b/src/internal/server/login_handler.go @@ -2,6 +2,8 @@ package server import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" + domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" + "git.ego.freeddns.org/egommerce/identity-service/internal/service" "git.ego.freeddns.org/egommerce/identity-service/internal/ui" "github.com/gofiber/fiber/v2" @@ -13,8 +15,9 @@ func (s *Server) LoginHandlerFn(c *fiber.Ctx) error { return s.Error(c, fiber.StatusBadRequest, "Error parsing input") } - loginUI := ui.NewLoginActionUI(s.GetDatabase(), s.GetCache()) - token, err := loginUI.Execute(data) + repo := domain.NewUserRepository(s.GetDatabase()) + authSrv := service.NewAuthService(repo, s.GetCache()) + token, err := ui.NewLoginActionUI(authSrv).Execute(data) if err != nil { // TODO: handle other response status codes return s.Error(c, fiber.StatusBadRequest, err.Error()) } diff --git a/src/internal/server/refresh_handler.go b/src/internal/server/refresh_handler.go index 4e04285..47eacac 100644 --- a/src/internal/server/refresh_handler.go +++ b/src/internal/server/refresh_handler.go @@ -10,16 +10,15 @@ import ( ) func (s *Server) RefreshHandlerFn(c *fiber.Ctx) error { - data := new(dto.AuthRefreshTokenRequestDTO) - if err := c.BodyParser(data); err != nil { - return s.Error(c, fiber.StatusBadRequest, "Error parsing input") + header := new(dto.AuthorizationHeaderDTO) + if err := c.ReqHeaderParser(header); err != nil { + return s.Error(c, fiber.StatusBadRequest, "Error parsing headers") } repo := domain.NewUserRepository(s.GetDatabase()) authSrv := service.NewAuthService(repo, s.GetCache()) - refreshTokenActionUI := ui.NewRefreshTokenActionUI(authSrv) - token, err := refreshTokenActionUI.Execute(data) + token, err := ui.NewRefreshTokenActionUI(authSrv).Execute(header) if err != nil { return s.Error(c, fiber.StatusBadRequest, err.Error()) } diff --git a/src/internal/server/register_handler.go b/src/internal/server/register_handler.go index 345a49c..8180a69 100644 --- a/src/internal/server/register_handler.go +++ b/src/internal/server/register_handler.go @@ -3,7 +3,7 @@ package server import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" - "git.ego.freeddns.org/egommerce/identity-service/internal/service" + "git.ego.freeddns.org/egommerce/identity-service/internal/ui" "github.com/gofiber/fiber/v2" ) @@ -15,9 +15,7 @@ func (s *Server) RegisterHandlerFn(c *fiber.Ctx) error { } repo := domain.NewUserRepository(s.GetDatabase()) - authSrv := service.NewAuthService(repo, s.GetCache()) - - id, err := authSrv.Register(data.Email, data.Username, data.Password) + id, err := ui.NewRegisterActionUI(repo, s.GetCache()).Execute(data) if err != nil { return s.Error(c, fiber.StatusBadRequest, err.Error()) } diff --git a/src/internal/service/auth.go b/src/internal/service/auth.go index 867cecc..7669922 100644 --- a/src/internal/service/auth.go +++ b/src/internal/service/auth.go @@ -6,6 +6,7 @@ import ( "fmt" "strings" + dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" @@ -116,8 +117,8 @@ func (a *AuthService) Register(email, login, passwd string) (string, error) { return id, nil } -func (a *AuthService) getTokenFromAuthorizationHeader(header string) (string, error) { - split := strings.Split(header, " ") +func (a *AuthService) GetTokenFromAuthorizationHeader(header *dto.AuthorizationHeaderDTO) (string, error) { + split := strings.Split(header.Authorization, " ") if len(split) != 2 { return "", ErrParsingAccessToken } diff --git a/src/internal/service/guard.go b/src/internal/service/guard.go index 91e499b..a182b56 100644 --- a/src/internal/service/guard.go +++ b/src/internal/service/guard.go @@ -24,10 +24,7 @@ func NewGuardService(authSrv *AuthService, userRepo *domain.UserRepository, role } func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url, srvName string) error { - token, err := g.authSrv.getTokenFromAuthorizationHeader(authHeader.Authorization) - if err != nil { // FIXME probably never get here cause of jwt parsing in middlewares - return err - } + token, _ := g.authSrv.GetTokenFromAuthorizationHeader(authHeader) uid, _ := g.authSrv.getUIDByAccesssToken(token) user, err := g.userRepo.FindByID(uid) @@ -38,7 +35,7 @@ func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url role := g.roleRepo.GetUserRole(user) if _, err := g.urlRepo.FindByURLAndServiceForRole(url, srvName, role.Name); err != nil { - return errors.New("user has not required permission") + return errors.New("user doesn't have required permission") } return nil diff --git a/src/internal/ui/access_action.go b/src/internal/ui/access_action.go index 1df3eac..5e19de2 100644 --- a/src/internal/ui/access_action.go +++ b/src/internal/ui/access_action.go @@ -3,22 +3,15 @@ package ui import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" "git.ego.freeddns.org/egommerce/identity-service/internal/service" - - "github.com/go-redis/redis/v8" - "github.com/jackc/pgx/v5/pgxpool" ) type AccessActionUI struct { guard *service.Guard - db *pgxpool.Pool - cache *redis.Client } -func NewAccessActionUI(guard *service.Guard, db *pgxpool.Pool, cache *redis.Client) *AccessActionUI { +func NewAccessActionUI(guard *service.Guard) *AccessActionUI { return &AccessActionUI{ guard: guard, - db: db, - cache: cache, } } diff --git a/src/internal/ui/login_action.go b/src/internal/ui/login_action.go index 2db3e96..29d9f2b 100644 --- a/src/internal/ui/login_action.go +++ b/src/internal/ui/login_action.go @@ -2,30 +2,21 @@ package ui import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" - domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" "git.ego.freeddns.org/egommerce/identity-service/internal/service" - - "github.com/go-redis/redis/v8" - "github.com/jackc/pgx/v5/pgxpool" ) type LoginActionUI struct { - db *pgxpool.Pool - cache *redis.Client + authSrv *service.AuthService } -func NewLoginActionUI(db *pgxpool.Pool, cache *redis.Client) *LoginActionUI { +func NewLoginActionUI(authSrv *service.AuthService) *LoginActionUI { return &LoginActionUI{ - db: db, - cache: cache, + authSrv: authSrv, } } func (ui *LoginActionUI) Execute(data *dto.AuthLoginRequestDTO) (string, error) { - repo := domain.NewUserRepository(ui.db) - authSrv := service.NewAuthService(repo, ui.cache) - - token, err := authSrv.Login(data.Username, data.Password) + token, err := ui.authSrv.Login(data.Username, data.Password) if err != nil { if err == service.ErrUnableToCacheToken { return "", err diff --git a/src/internal/ui/refresh_action.go b/src/internal/ui/refresh_action.go index d55e345..e60151b 100644 --- a/src/internal/ui/refresh_action.go +++ b/src/internal/ui/refresh_action.go @@ -15,8 +15,9 @@ func NewRefreshTokenActionUI(auth *service.AuthService) *RefreshTokenActionUI { } } -func (ui *RefreshTokenActionUI) Execute(data *dto.AuthRefreshTokenRequestDTO) (string, error) { - token, err := ui.auth.RefreshToken(data.AccessToken) +func (ui *RefreshTokenActionUI) Execute(header *dto.AuthorizationHeaderDTO) (string, error) { + token, _ := ui.auth.GetTokenFromAuthorizationHeader(header) + newToken, err := ui.auth.RefreshToken(token) if err != nil { if err == service.ErrUnableToCacheToken { // FIXME: Move to RefreshHandlerFn return "", err @@ -25,5 +26,5 @@ func (ui *RefreshTokenActionUI) Execute(data *dto.AuthRefreshTokenRequestDTO) (s return "", err } - return token, nil + return newToken, nil } diff --git a/src/internal/ui/register_action.go b/src/internal/ui/register_action.go new file mode 100644 index 0000000..18a23d4 --- /dev/null +++ b/src/internal/ui/register_action.go @@ -0,0 +1,28 @@ +package ui + +import ( + dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" + domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" + "git.ego.freeddns.org/egommerce/identity-service/internal/service" + + "github.com/go-redis/redis/v8" +) + +type RegisterActionUI struct { + authSrv *service.AuthService +} + +func NewRegisterActionUI(repo *domain.UserRepository, cache *redis.Client) *RegisterActionUI { + return &RegisterActionUI{ + authSrv: service.NewAuthService(repo, cache), + } +} + +func (ui *RegisterActionUI) Execute(data *dto.AuthRegisterRequestDTO) (string, error) { + id, err := ui.authSrv.Register(data.Email, data.Username, data.Password) + if err != nil { + return "", err + } + + return id, nil +}