github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/validation/strings.go (about)

     1  package validation
     2  
     3  import (
     4  	"encoding/json"
     5  	"net"
     6  	"net/url"
     7  	"strconv"
     8  	"strings"
     9  	"time"
    10  
    11  	"github.com/google/uuid"
    12  )
    13  
    14  func validateString(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    15  	_, ok := value.(string)
    16  	return ok
    17  }
    18  
    19  func validateDigits(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    20  	str, ok := value.(string)
    21  	if ok {
    22  		return getRegex(patternDigits).FindAllString(str, 1) == nil
    23  	}
    24  	return false
    25  }
    26  
    27  func validateAlpha(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    28  	params := []string{patternAlpha}
    29  	return validateRegex(field, value, params, form)
    30  }
    31  
    32  func validateAlphaDash(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    33  	params := []string{patternAlphaDash}
    34  	return validateRegex(field, value, params, form)
    35  }
    36  
    37  func validateAlphaNumeric(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    38  	params := []string{patternAlphaNumeric}
    39  	return validateRegex(field, value, params, form)
    40  }
    41  
    42  func validateEmail(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    43  	params := []string{patternEmail}
    44  	return validateRegex(field, value, params, form)
    45  }
    46  
    47  func validateStartsWith(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    48  	str, ok := value.(string)
    49  	if ok {
    50  		for _, prefix := range parameters {
    51  			if strings.HasPrefix(str, prefix) {
    52  				return true
    53  			}
    54  		}
    55  	}
    56  	return false
    57  }
    58  
    59  func validateEndsWith(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    60  	str, ok := value.(string)
    61  	if ok {
    62  		for _, prefix := range parameters {
    63  			if strings.HasSuffix(str, prefix) {
    64  				return true
    65  			}
    66  		}
    67  	}
    68  	return false
    69  }
    70  
    71  func validateIP(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    72  	str, ok := value.(string)
    73  	if ok {
    74  		ip := net.ParseIP(str)
    75  		if ip != nil {
    76  			form[field] = ip
    77  			return true
    78  		}
    79  	}
    80  
    81  	return false
    82  }
    83  
    84  func validateIPv4(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    85  	if validateIP(field, value, parameters, form) {
    86  		return form[field].(net.IP).To4() != nil
    87  	}
    88  	return false
    89  }
    90  
    91  func validateIPv6(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    92  	if validateIP(field, value, parameters, form) {
    93  		return form[field].(net.IP).To4() == nil
    94  	}
    95  	return false
    96  }
    97  
    98  func validateJSON(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
    99  	str, ok := value.(string)
   100  	if ok {
   101  		var data interface{}
   102  		err := json.Unmarshal([]byte(str), &data)
   103  		if err == nil {
   104  			form[field] = data
   105  			return true
   106  		}
   107  	}
   108  	return false
   109  }
   110  
   111  func validateRegex(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
   112  	str, ok := value.(string)
   113  	if ok {
   114  		return getRegex(parameters[0]).MatchString(str)
   115  	}
   116  	return false
   117  }
   118  
   119  func validateTimezone(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
   120  	tz, ok := value.(string)
   121  	if ok && tz != "Local" {
   122  		loc, err := time.LoadLocation(tz)
   123  		if err == nil {
   124  			form[field] = loc
   125  			return true
   126  		}
   127  	}
   128  	return false
   129  }
   130  
   131  func validateURL(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
   132  	str, ok := value.(string)
   133  	if ok {
   134  		url, err := url.ParseRequestURI(str)
   135  		if err == nil {
   136  			form[field] = url
   137  			return true
   138  		}
   139  	}
   140  	return false
   141  }
   142  
   143  func validateUUID(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
   144  	str, ok := value.(string)
   145  	if ok {
   146  		id, err := uuid.Parse(str)
   147  		if err == nil {
   148  			if len(parameters) == 1 {
   149  				version, err := strconv.Atoi(parameters[0])
   150  				if err == nil && id.Version() != uuid.Version(version) {
   151  					return false
   152  				}
   153  			}
   154  			form[field] = id
   155  			return true
   156  		}
   157  	}
   158  	return false
   159  }