diff --git a/server/validation/tnc.go b/server/validation/tnc.go index bddbc0a..14352da 100644 --- a/server/validation/tnc.go +++ b/server/validation/tnc.go @@ -33,6 +33,20 @@ const ( time10Minutes = 10 ) +func isMixedIDValid(id string) bool { + hasUpperCase := false + hasLowerCase := false + hasNumber := false + + for _, character := range (id) { + hasUpperCase = hasUpperCase || ((character >= 65) && (character <= 90)) + hasLowerCase = hasLowerCase || ((character >= 97) && (character <= 122)) + hasNumber = hasNumber || ((character >= 48) && (character <= 57)) + } + + return (hasUpperCase || hasLowerCase) && hasNumber +} + func ValidateRide(requestRide *viewmodel.RideRequest, user *viewmodel.User) []errors.ValidationError { var result []errors.ValidationError var validUUIDregex = regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`) @@ -43,8 +57,13 @@ func ValidateRide(requestRide *viewmodel.RideRequest, user *viewmodel.User) []er result = append(result, errors.ValidationError{Field : "user_uuid", Message : "Step #1 - Choose a Member" }) } - if !validUUIDregex.MatchString(requestRide.Origin.ID) { - result = append (result, errors.ValidationError{Field : "origin.id", Message : "Step #1 - Choose a Pickup Address"}) + fmt.Println("\n\n", requestRide.Origin.ID, "\n\n") + if !isMixedIDValid(requestRide.Origin.ID) { + //it is not UUID or similar to UUID, let's try with just a number + if originID, err := strconv.Atoi(requestRide.Origin.ID) ; err!= nil || originID <= 0 { + //it is not a number + result = append (result, errors.ValidationError{Field : "origin.id", Message : "Step #1 - Choose a Pickup Address"}) + } } if !requestRide.UserConsent { @@ -52,9 +71,13 @@ func ValidateRide(requestRide *viewmodel.RideRequest, user *viewmodel.User) []er } //Step #2 validation - - if destinationID, err := strconv.Atoi(requestRide.Destination.ID) ; err!= nil || destinationID <= 0 { - result = append (result, errors.ValidationError{Field : "destination.id", Message : "Step #2 - Choose a Provider"}) + + fmt.Println("\n\n", requestRide.Destination.ID, "\n\n") + if !isMixedIDValid(requestRide.Destination.ID) { + //it is not UUID or similar to UUID, let's try with just a number + if destinationID, err := strconv.Atoi(requestRide.Destination.ID) ; err!= nil || destinationID <= 0 { + result = append (result, errors.ValidationError{Field : "destination.id", Message : "Step #2 - Choose a Provider"}) + } } //Step #3 validation @@ -91,8 +114,6 @@ func ValidateRide(requestRide *viewmodel.RideRequest, user *viewmodel.User) []er isTripTypeValid := true - fmt.Println("\n\n",requestRide.PickupTime,"\n\n") - switch requestRide.TripType.Key { case tripTypeToVisit: if requestRide.PickupTime == nil {