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" <[email protected]> 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 <[email protected]> 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" <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to