privaterelay/management/commands/deactivate_user.py (49 lines of code) (raw):
from argparse import ArgumentParser
from typing import Any
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from allauth.socialaccount.models import SocialAccount
from privaterelay.models import Profile
class Command(BaseCommand):
help = "Deactivates a user to effectively block all usage of Relay."
def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument("--key", type=str, help="User API key")
parser.add_argument("--email", type=str, help="User email address")
parser.add_argument("--uid", type=str, help="User FXA UID")
def handle(self, *args: Any, **options: Any) -> str:
api_key: str | None = options.get("key")
email: str | None = options.get("email")
uid: str | None = options.get("uid")
user: User
if api_key:
try:
profile = Profile.objects.get(api_token=api_key)
user = profile.user
user.is_active = False
user.save()
msg = f"SUCCESS: deactivated user with api_token: {api_key}"
except Profile.DoesNotExist:
msg = "ERROR: Could not find user with that API key."
self.stderr.write(msg)
return msg
if email:
try:
user = User.objects.get(email=email)
user.is_active = False
user.save()
msg = f"SUCCESS: deactivated user with email: {email}"
except User.DoesNotExist:
msg = "ERROR: Could not find user with that email address."
self.stderr.write(msg)
return msg
if uid:
try:
user = SocialAccount.objects.get(uid=uid).user
user.is_active = False
user.save()
msg = f"SUCCESS: deactivated user with FXA UID: {uid}"
except SocialAccount.DoesNotExist:
msg = "ERROR: Could not find user with that FXA UID."
self.stderr.write(msg)
return msg
return msg