Restructure ForgotPassword view
authorSebastian Spaeth <Sebastian@SSpaeth.de>
Mon, 7 Jan 2013 09:17:52 +0000 (10:17 +0100)
committerSebastian Spaeth <Sebastian@SSpaeth.de>
Mon, 21 Jan 2013 16:14:59 +0000 (17:14 +0100)
commita89df96132a897b1ac31da8719cd6dc0d621cc13
treeb8b4f36bd61a9ef2727d857084d44ff89073d79c
parent0f9cf6ef32d659a653654f8f07229b044b59e5b2
Restructure ForgotPassword view

1) Remove mongo limitations (no 'or' when querying for either username
or email).

2) Lost password function revealed if an user name or email address
   is registered, which can be considered a data leak.
   Leaking user names is OK, they are public anyway, but don't reveal
   lookup success in case the lookup happened by email address.
   Simply respond: "If you have an account here, we have send you
                    your email"?

3) username and email search was case sensitive. Made username search
   case insensitive (they are always stored lowercase in the db).
   Keep email-address search case sensitive for now. This might need
   further discussion

4) Remove a whole bunch of indention in the style of:
   if no error:
        ...
        if no error:
            ...
            if no error:
                actually do something in the regular case

   by restructuring the function.

5) Outsource the sanity checking for username and email fields into the
   validator function. This way, we get automatic case sanity checking
   and sanitizing for all required fields.

6) Require 5-char password and fix tests

   Originally, the Change password form required a password between 6-30
   chars while the registration and login form did not require anything
   special. This commit introduces a common minimum limit for all forms
   which breaks the test suite which uses a 5 char password by
   default. :-).  As 5 chars seem sensible enough to enforce (people
   should be picking much longer ones anyway), just reduce the limit to
   5 chars, thereby making all tests pass.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
mediagoblin/auth/forms.py
mediagoblin/auth/views.py
mediagoblin/tests/test_auth.py