from .provider import DiscordGuildPermissionsProvider from django.core.exceptions import PermissionDenied from django.conf import settings import requests from allauth.socialaccount.providers.discord.views import DiscordOAuth2Adapter from allauth.socialaccount.providers.oauth2.views import ( OAuth2CallbackView, OAuth2LoginView, ) class DiscordGuildPermissionsOAuth2Adapter(DiscordOAuth2Adapter): provider_id = DiscordGuildPermissionsProvider.id def complete_login(self, request, app, token, **kwargs): login = super().complete_login(request, app, token, **kwargs) if settings.DISCORD_BOT_TOKEN is None and settings.DEBUG: return login guild_data = requests.get( f"https://discord.com/api/guilds/{settings.DISCORD_GUILD_ID}/members/{login.account.uid}", headers={ "Authorization": f"Bot {settings.DISCORD_BOT_TOKEN}", "Content-Type": "application/json", }, ) if guild_data.status_code == 404: raise PermissionDenied("You're not a BFOBer.") guild_data.raise_for_status() login.account.extra_data["guild_data"] = guild_data.json() return login oauth2_login = OAuth2LoginView.adapter_view(DiscordGuildPermissionsOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DiscordGuildPermissionsOAuth2Adapter)