Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion pulpcore/app/management/commands/reset-admin-password.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ def add_arguments(self, parser):
)

def handle(self, *args, **options):
user = User.objects.get_or_create(username="admin", is_superuser=True, is_staff=True)[0]
user, _ = User.objects.update_or_create(
username="admin",
defaults={"is_superuser": True, "is_staff": True},
)
if options["random"]:
alphabet = string.ascii_letters + string.digits
password = "".join(secrets.choice(alphabet) for i in range(20))
Expand Down
54 changes: 54 additions & 0 deletions pulpcore/tests/unit/test_reset_admin_password_command.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from io import StringIO

import pytest
from django.contrib.auth import get_user_model
from django.core.management import call_command

User = get_user_model()


@pytest.mark.django_db
def test_creates_new_admin_with_password():
out = StringIO()
call_command("reset-admin-password", password="testpass123", stdout=out)
user = User.objects.get(username="admin")
assert user.is_superuser is True
assert user.is_staff is True
assert user.check_password("testpass123")
assert "Successfully set password" in out.getvalue()


@pytest.mark.django_db
def test_resets_password_on_existing_superuser():
User.objects.create_user(username="admin", password="old", is_superuser=True, is_staff=True)
out = StringIO()
call_command("reset-admin-password", password="newpass", stdout=out)
user = User.objects.get(username="admin")
assert user.is_superuser is True
assert user.is_staff is True
assert user.check_password("newpass")


@pytest.mark.django_db
def test_promotes_existing_non_superuser_admin():
User.objects.create_user(username="admin", password="old", is_superuser=False, is_staff=False)
out = StringIO()
call_command("reset-admin-password", password="newpass", stdout=out)
user = User.objects.get(username="admin")
assert user.is_superuser is True
assert user.is_staff is True
assert user.check_password("newpass")


@pytest.mark.django_db
def test_random_password():
out = StringIO()
call_command("reset-admin-password", random=True, stdout=out)
user = User.objects.get(username="admin")
assert user.is_superuser is True
assert user.is_staff is True
output = out.getvalue()
assert "Successfully set" in output
password = output.split('"')[-2]
assert len(password) == 20
assert user.check_password(password)
Loading