Removed coupling with useless services in actions
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
28
src/internal/ui/register_action.go
Normal file
28
src/internal/ui/register_action.go
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user