web/lib/django_extensions/management/commands/set_fake_passwords.py
changeset 3 526ebd3988b0
equal deleted inserted replaced
1:ebaad720f88b 3:526ebd3988b0
       
     1 """
       
     2 set_fake_passwords.py 
       
     3 
       
     4     Reset all user passwords to a common value. Useful for testing in a 
       
     5     development environment. As such, this command is only available when
       
     6     setting.DEBUG is True.
       
     7 
       
     8 """
       
     9 from optparse import make_option
       
    10 
       
    11 from django.conf import settings
       
    12 from django.core.management.base import NoArgsCommand, CommandError
       
    13 
       
    14 DEFAULT_FAKE_PASSWORD = 'password'
       
    15 
       
    16 class Command(NoArgsCommand):
       
    17     option_list = NoArgsCommand.option_list + (
       
    18         make_option('--prompt', dest='prompt_passwd', default=False, action='store_true',
       
    19             help='Prompts for the new password to apply to all users'),
       
    20         make_option('--password', dest='default_passwd', default=DEFAULT_FAKE_PASSWORD,
       
    21             help='Use this as default password.'),
       
    22     )
       
    23     help = 'DEBUG only: sets all user passwords to a common value ("%s" by default)' % (DEFAULT_FAKE_PASSWORD, )
       
    24     requires_model_validation = False
       
    25 
       
    26     def handle_noargs(self, **options):
       
    27         if not settings.DEBUG:
       
    28             raise CommandError('Only available in debug mode')
       
    29             
       
    30         from django.contrib.auth.models import User
       
    31         if options.get('prompt_passwd', False):
       
    32             from getpass import getpass
       
    33             passwd = getpass('Password: ')
       
    34             if not passwd:
       
    35                 raise CommandError('You must enter a valid password')
       
    36         else:
       
    37             passwd = options.get('default_passwd', DEFAULT_FAKE_PASSWORD)
       
    38         
       
    39         users = User.objects.all()
       
    40         for user in users:
       
    41             user.set_password(passwd)
       
    42             user.save()
       
    43             
       
    44         print 'Reset %d passwords' % users.count()