From 06ffcd67d134cdd9dbe1406757efe6debc6bef40 Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Wed, 6 Dec 2023 18:29:53 +0530 Subject: [PATCH] dev: user password reset management command (#3000) --- .../db/management/commands/reset_password.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 apiserver/plane/db/management/commands/reset_password.py diff --git a/apiserver/plane/db/management/commands/reset_password.py b/apiserver/plane/db/management/commands/reset_password.py new file mode 100644 index 000000000..a5b4c9cc8 --- /dev/null +++ b/apiserver/plane/db/management/commands/reset_password.py @@ -0,0 +1,54 @@ +# Python imports +import getpass + +# Django imports +from django.core.management import BaseCommand + +# Module imports +from plane.db.models import User + + +class Command(BaseCommand): + help = "Reset password of the user with the given email" + + def add_arguments(self, parser): + # Positional argument + parser.add_argument("email", type=str, help="user email") + + def handle(self, *args, **options): + # get the user email from console + email = options.get("email", False) + + # raise error if email is not present + if not email: + self.stderr.write("Error: Email is required") + return + + # filter the user + user = User.objects.filter(email=email).first() + + # Raise error if the user is not present + if not user: + self.stderr.write(f"Error: User with {email} does not exists") + return + + # get password for the user + password = getpass.getpass("Password: ") + confirm_password = getpass.getpass("Password (again): ") + + # If the passwords doesn't match raise error + if password != confirm_password: + self.stderr.write("Error: Your passwords didn't match.") + return + + # Blank passwords should not be allowed + if password.strip() == "": + self.stderr.write("Error: Blank passwords aren't allowed.") + return + + # Set user password + user.set_password(password) + user.is_password_autoset = False + user.save() + + self.stdout.write(self.style.SUCCESS(f"User password updated succesfully"))