57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
import pprint
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from mastodon.api import create_app, detect_server_info
|
|
from mastodon.models import MastodonApplication
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Manage Mastodon sites"
|
|
|
|
def add_arguments(self, parser):
|
|
# parser.add_argument("domain", type=str, help="mastodon domain")
|
|
parser.add_argument(
|
|
"--refresh",
|
|
action="store_true",
|
|
help="refresh app registration on all sites",
|
|
)
|
|
|
|
def handle(self, *args, **options):
|
|
if options["refresh"]:
|
|
for site in MastodonApplication.objects.exclude(disabled=True):
|
|
try:
|
|
_, _, server_version = detect_server_info(site.api_domain)
|
|
except Exception:
|
|
continue
|
|
allow_multiple_redir = True
|
|
if "; Pixelfed" in server_version or server_version.startswith("0."):
|
|
allow_multiple_redir = False
|
|
if allow_multiple_redir:
|
|
continue
|
|
try:
|
|
response = create_app(site.api_domain, allow_multiple_redir)
|
|
except Exception as e:
|
|
self.stdout.write(f"Error creating app on {site.api_domain}: {e}")
|
|
continue
|
|
if response.status_code != 200:
|
|
self.stdout.write(
|
|
f"Error creating app on {site.api_domain}: {response.status_code}"
|
|
)
|
|
continue
|
|
try:
|
|
data = response.json()
|
|
except Exception:
|
|
self.stdout.write(
|
|
f"Error creating app on {site.api_domain}: unable to parse response"
|
|
)
|
|
continue
|
|
site.app_id = data["id"]
|
|
site.client_id = data["client_id"]
|
|
site.client_secret = data["client_secret"]
|
|
site.vapid_key = data.get("vapid_key")
|
|
site.save(
|
|
update_fields=["app_id", "client_id", "client_secret", "vapid_key"]
|
|
)
|
|
self.stdout.write(f"updated app on {site.api_domain}")
|
|
self.stdout.write(self.style.SUCCESS("Done."))
|