zulip/zerver/management/commands/dump_passwords.py

36 lines
1.2 KiB
Python

from __future__ import absolute_import
from optparse import make_option
from django.core.management.base import BaseCommand
from zerver.models import UserProfile, get_user_profile_by_email
from zerver.lib.actions import do_change_password
import ujson
def dump():
passwords = []
for user_profile in UserProfile.objects.all():
passwords.append((user_profile.email, user_profile.password))
file("dumped-passwords", "w").write(ujson.dumps(passwords) + "\n")
def restore(change):
for (email, password) in ujson.loads(file("dumped-passwords").read()):
try:
user_profile = get_user_profile_by_email(email)
except UserProfile.DoesNotExist:
print "Skipping...", email
continue
if change:
do_change_password(user_profile, password, log=False,
hashed_password=True)
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--restore', default=False, action='store_true'),
make_option('--dry-run', '-n', default=False, action='store_true'),)
def handle(self, *args, **options):
if options["restore"]:
restore(change=not options['dry_run'])
else:
dump()