| 1 | from django.core.management.base import BaseCommand, CommandError |
| 2 | from django.contrib.auth.models import User |
| 3 | import getpass |
| 4 | |
| 5 | class Command(BaseCommand): |
| 6 | help = "Clone of the UNIX program ``passwd'', for django.contrib.auth." |
| 7 | |
| 8 | requires_model_validation = False |
| 9 | |
| 10 | def handle(self, *args, **options): |
| 11 | if len(args) > 1: |
| 12 | raise CommandError("need exactly one or zero arguments for username") |
| 13 | |
| 14 | if args: |
| 15 | username, = args |
| 16 | else: |
| 17 | username = getpass.getuser() |
| 18 | |
| 19 | try: |
| 20 | u = User.objects.get(username=username) |
| 21 | except User.DoesNotExist: |
| 22 | raise CommandError("user %s does not exist" % username) |
| 23 | |
| 24 | print "Changing password for user", u.username |
| 25 | p1 = p2 = "" |
| 26 | while "" in (p1, p2) or p1 != p2: |
| 27 | p1 = getpass.getpass() |
| 28 | p2 = getpass.getpass("Password (again): ") |
| 29 | if p1 != p2: |
| 30 | print "Passwords do not match, try again" |
| 31 | elif "" in (p1, p2): |
| 32 | raise CommandError("aborted") |
| 33 | |
| 34 | u.set_password(p1) |
| 35 | u.save() |
| 36 | |
| 37 | return "Password changed successfully for user", u.username |