mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 23:59:17 +02:00
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
from django.core.management.base import BaseCommand, CommandError
|
|
from django.db import transaction
|
|
|
|
from dynamic_preferences.registries import global_preferences_registry
|
|
|
|
from funkwhale_api.federation import keys
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = (
|
|
'Generate a public/private key pair for your instance,'
|
|
' for federation purposes. If a key pair already exists, does nothing.'
|
|
)
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
'--replace',
|
|
action='store_true',
|
|
dest='replace',
|
|
default=False,
|
|
help='Replace existing key pair, if any',
|
|
)
|
|
parser.add_argument(
|
|
'--noinput', '--no-input', action='store_false', dest='interactive',
|
|
help="Do NOT prompt the user for input of any kind.",
|
|
)
|
|
|
|
@transaction.atomic
|
|
def handle(self, *args, **options):
|
|
preferences = global_preferences_registry.manager()
|
|
existing_public = preferences['federation__public_key']
|
|
existing_private = preferences['federation__public_key']
|
|
|
|
if existing_public or existing_private and not options['replace']:
|
|
raise CommandError(
|
|
'Keys are already present! '
|
|
'Replace them with --replace if you know what you are doing.')
|
|
|
|
if options['interactive']:
|
|
message = (
|
|
'Are you sure you want to do this?\n\n'
|
|
"Type 'yes' to continue, or 'no' to cancel: "
|
|
)
|
|
if input(''.join(message)) != 'yes':
|
|
raise CommandError("Operation cancelled.")
|
|
private, public = keys.get_key_pair()
|
|
preferences['federation__public_key'] = public.decode('utf-8')
|
|
preferences['federation__private_key'] = private.decode('utf-8')
|
|
|
|
self.stdout.write(
|
|
'Your new key pair was generated.'
|
|
'Your public key is now:\n\n{}'.format(public.decode('utf-8'))
|
|
)
|