mirror of
https://lab.enough.community/fedeproxy/server
synced 2025-01-06 12:57:01 +01:00
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from fedeproxy import settings
|
|
from allauth.socialaccount.models import SocialApp
|
|
from django.contrib.sites.models import Site
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from fedeproxy.common.gitlab import GitLab
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Create an API user'
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('--config', default=f'{settings.CONFIG_DIR}')
|
|
parser.add_argument('domain')
|
|
parser.add_argument('username')
|
|
parser.add_argument('password')
|
|
|
|
def setup_gitlab_auth(self, *args, **kwargs):
|
|
provider = 'gitlab'
|
|
name = 'GitLab'
|
|
|
|
existing = SocialApp.objects.filter(provider=provider)
|
|
if existing:
|
|
return False
|
|
|
|
gitlab = GitLab(f'https://{kwargs["domain"]}')
|
|
gitlab.login('root', kwargs['password'])
|
|
gitlab.ensure_group_exists('fedeproxy', request_access_enabled=True, visibility='public')
|
|
(client_id, client_secret) = gitlab.create_api_application(kwargs['domain'])
|
|
|
|
a = SocialApp(provider=provider, name=name, secret=client_secret,
|
|
client_id=client_id, key='')
|
|
a.save()
|
|
|
|
# Now associate this provider with all site instances.
|
|
sites = [i for i in Site.objects.all()]
|
|
a.sites.add(*sites)
|
|
|
|
return True
|
|
|
|
def handle(self, *args, **kwargs):
|
|
changed = False
|
|
changed |= self.setup_gitlab_auth(*args, **kwargs)
|
|
|
|
if changed:
|
|
self.stdout.write('Changed')
|
|
else:
|
|
self.stdout.write('Up to date')
|