|
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() |