34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
|
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)
|
||
|
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)
|