diff --git a/Makefile b/Makefile index ed3edf87a0f100a4896f3684f1042ff5149d52e4..7e571cc4c102c9a5fe643aba301db76a5b6f65cc 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,9 @@ create_oidc_client.dashboard: create_oidc_client.tank: $(POETRY_RUN_MANAGE) create_oidc_client tank confidential --client-id ${TANK_OIDC_CLIENT_ID} --client-secret ${TANK_OIDC_CLIENT_SECRET} -r "code" -u ${TANK_CALLBACK_BASE_URL}/tank/auth/oidc/callback +delete_oidc_clients: + $(POETRY_RUN_MANAGE) delete_oidc_clients dashboard tank + initialize: migrate collectstatic create_oidc_client.dashboard create_oidc_client.tank addpermissions $(POETRY_RUN_MANAGE) createsuperuser --no-input $(POETRY_RUN_MANAGE) creatersakey diff --git a/program/management/commands/delete_oidc_clients.py b/program/management/commands/delete_oidc_clients.py new file mode 100644 index 0000000000000000000000000000000000000000..22c46f2112486c6905f07fe696a16dcd347c71c7 --- /dev/null +++ b/program/management/commands/delete_oidc_clients.py @@ -0,0 +1,26 @@ +from oidc_provider.models import Client + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = "Deletes OIDC clients" + + def add_arguments(self, parser): + parser.add_argument( + "name", + help="The name(s) of the OIDC client(s) to delete", + nargs="*", + type=str, + ) + + def handle(self, *args, **options): + try: + count, _ = Client.objects.filter(name__in=options["name"]).delete() + except Exception: + self.stdout.write(self.style.ERROR("Failed to delete OIDC clients")) + else: + if count > 0: + self.stdout.write(self.style.SUCCESS(f"Deleted {str(count)} OIDC clients")) + else: + self.stdout.write(self.style.WARNING("No OIDC clients to delete"))