@@ -2,8 +2,10 @@ package services
22
33import (
44 "context"
5+ "time"
56
67 "github.com/IcaroSilvaFK/developer_academy_mvc/application/adapters"
8+ "github.com/IcaroSilvaFK/developer_academy_mvc/application/dtos"
79 "github.com/IcaroSilvaFK/developer_academy_mvc/application/utils"
810 "github.com/IcaroSilvaFK/developer_academy_mvc/infra/models"
911 "github.com/IcaroSilvaFK/developer_academy_mvc/infra/repositories"
@@ -18,6 +20,7 @@ type LoginService struct {
1820
1921type LoginServiceInterface interface {
2022 Login (ctx context.Context , code , provider string ) (* models.UserModel , * utils.RestErr )
23+ LoginWithPassword (ctx context.Context , dto * dtos.LoginInputDto ) (* models.UserModel , * utils.RestErr )
2124}
2225
2326func NewAuthService (
@@ -53,7 +56,7 @@ func (a *LoginService) Login(ctx context.Context, code, provider string) (*model
5356 }
5457 if err == gorm .ErrRecordNotFound {
5558 uExists = models .NewUserModel (
56- u .Email , u .Name , u .AvatarUrl , u .Url , u .Bio ,
59+ u .Email , u .Name , u .AvatarUrl , u .Url , u .Bio , nil ,
5760 )
5861 err = a .ur .Create (ctx , uExists )
5962
@@ -85,3 +88,21 @@ func (s *LoginService) getProvider(provider string) adapters.AdapterAuthInterfac
8588 }
8689 }
8790}
91+
92+ func (a * LoginService ) LoginWithPassword (ctx context.Context , dto * dtos.LoginInputDto ) (* models.UserModel , * utils.RestErr ) {
93+ user , err := a .ur .FindByEmail (ctx , dto .Email )
94+
95+ if err != nil {
96+ message := "Error on find user"
97+ return nil , utils .NewInternalServerError (& message )
98+ }
99+
100+ if ! user .VerifyPassword (dto .Password ) {
101+ return nil , utils .NewBadRequestException ("Email or password invalid" )
102+ }
103+
104+ // this is for brute force atack
105+ time .Sleep (2 * time .Second )
106+
107+ return user , nil
108+ }
0 commit comments