why? when would you one without the other? Massimo
On Jun 15, 7:43 pm, "mr.freeze" <nat...@freezable.com> wrote: > It just seems like validation and encryption should remain separate > but I will defer to your judgment. > > On Jun 15, 7:36 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > OK, I will include this in web2py but probably merge it with CRYPT. > > Any reason not to? > > > Massimo > > > On Jun 15, 7:31 pm, "mr.freeze" <nat...@freezable.com> wrote: > > > > I know you said not to make one but it felt wrong mixing with CRYPT. > > > I settled on IS_COMPLEX. With it you can do: > > > db.mytable.myfield.requires = [IS_COMPLEX(min=10, max=20, upper=2, > > > lower=2, number=1, special=2, specials="!...@#$%^"), CRYPT()] > > > > It will automatically generate the error message(s) based on the reason > > > (s) it failed > > > Use 0 to disallow upper, lower, number or special characters > > > Use 1 or greater for the minimum upper, lower, number or special > > > characters > > > Use None to bypass checking of upper, lower, number or special > > > characters. > > > > Let me know if you're interested in a patch. Otherwise, I'll just > > > post it here in case it helps someone. > > > > class IS_COMPLEX(object): > > > """ > > > example: > > > > INPUT(_type='password',_name='passwd',requires=IS_COMPLEX(min=10, > > > special=2, upper=2)) > > > > enforces complexity requirements on a field > > > """ > > > > def __init__(self, min=8, max=20, upper=1, lower=1, number=1, > > > special=1, specials=r'~...@#$%^&*()_+-=?<>,.:;{}[]|', > > > error_message='Does not meet complexity > > > requirements', generate_errors=True): > > > self.min = min > > > self.max = max > > > self.upper = upper > > > self.lower = lower > > > self.number = number > > > self.special = special > > > self.specials = specials > > > self.error_message = error_message > > > self.generate_errors = generate_errors > > > > def __call__(self, value): > > > failures = [] > > > if type(self.min) == int and self.min > 0: > > > if not len(value) >= self.min: > > > failures.append("Minimum length is " + str(self.min)) > > > if type(self.max) == int and self.max > 0: > > > if not len(value) <= self.max: > > > failures.append("Maximum length is " + str(self.max)) > > > if type(self.special) == int: > > > all_special = [ch in value for ch in self.specials] > > > if self.special > 0: > > > if not all_special.count(True) >= self.special: > > > failures.append("Must include " + str > > > (self.special) + " of the following : " + self.specials) > > > else: > > > if all_special.count(True) > 0: > > > failures.append("Cannot include any of the > > > following : " + self.specials) > > > if type(self.upper) == int: > > > all_upper = re.findall("[A-Z]", value) > > > if self.upper > 0: > > > if not len(all_upper) >= self.upper: > > > failures.append("Must include " + str(self.upper) > > > + " upper case") > > > else: > > > if len(all_upper) > 0: > > > failures.append("Cannot include upper case > > > letters") > > > if type(self.lower) == int: > > > all_lower = re.findall("[a-z]", value) > > > if self.lower > 0: > > > if not len(all_lower) >= self.lower: > > > failures.append("Must include " + str(self.lower) > > > + " lower case") > > > else: > > > if len(all_lower) > 0: > > > failures.append("Cannot include lower case > > > letters") > > > if type(self.number) == int: > > > all_number = re.findall("[0-9]", value) > > > if self.number > 0: > > > if not len(all_number) >= self.number: > > > failures.append("Must include " + str(self.number) > > > + " numbers") > > > else: > > > if len(all_number) > 0: > > > failures.append("Cannot include any > > > numbers") > > > if len(failures) == 0: > > > return (value, None) > > > if self.generate_errors: > > > from gluon.html import XML > > > return (value, XML('<br/>'.join(failures))) > > > else: > > > return (value, self.error_message) > > > > On Jun 11, 8:00 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > do not make one. add the feature to crypt. client side there are > > > > jquery libraries that do what you need. > > > > > On Jun 11, 6:29 pm, "mr.freeze" <nfre...@gmail.com> wrote: > > > > > > Does anyone already have a validator built that has options for > > > > > enforcing various password complexity requirements? Just wondering > > > > > before I make one.- Hide quoted text - > > > > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---