package user import ( "errors" "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/internal/model" "go.uber.org/zap" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) type LoginData struct { Email string Password string } func (s *service) Login(data *LoginData) (*model.User, e.Status) { user := &model.User{Email: data.Email} err := s.db.Get().Where(user).First(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { return nil, e.UserNotFound } if err != nil { s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user)) return nil, e.DatabaseError } if !user.IsEnabled { return nil, e.UserDisabled } if len(user.Password) == 0 { // created by oauth return nil, e.UserWithoutPassword } err = bcrypt.CompareHashAndPassword(user.Password, []byte(data.Password)) if err != nil { return nil, e.UserWrongPassword } return user, e.Success }