diff options
Diffstat (limited to 'pydis_site/utils')
| -rw-r--r-- | pydis_site/utils/account.py | 29 | 
1 files changed, 22 insertions, 7 deletions
| diff --git a/pydis_site/utils/account.py b/pydis_site/utils/account.py index 9faad986..e64919de 100644 --- a/pydis_site/utils/account.py +++ b/pydis_site/utils/account.py @@ -4,12 +4,19 @@ from allauth.account.adapter import DefaultAccountAdapter  from allauth.exceptions import ImmediateHttpResponse  from allauth.socialaccount.adapter import DefaultSocialAccountAdapter  from allauth.socialaccount.models import SocialLogin -from django.contrib.auth.models import User +from django.contrib.auth.models import User as DjangoUser  from django.contrib.messages import ERROR, add_message  from django.http import HttpRequest  from django.shortcuts import redirect  from django.urls import reverse +from pydis_site.apps.api.models import User as DiscordUser + +ERROR_CONNECT_DISCORD = ("You must login with Discord before connecting another account. " +                         "Your account details have not been saved.") +ERROR_JOIN_DISCORD = ("Please join the Discord server and verify that you accept the rules and " +                      "privacy policy.") +  class AccountAdapter(DefaultAccountAdapter):      """An Allauth account adapter that prevents signups via form submission.""" @@ -36,11 +43,19 @@ class SocialAccountAdapter(DefaultSocialAccountAdapter):          a non-Discord connection, as we require this connection for our users.          """          if social_login.account.provider != "discord": -            add_message( -                request, ERROR, -                "You must login with Discord before connecting another account. Your account " -                "details have not been saved." -            ) +            add_message(request, ERROR, ERROR_CONNECT_DISCORD) + +            raise ImmediateHttpResponse(redirect(reverse("home"))) + +        try: +            user = DiscordUser.objects.get(id=int(social_login.account.uid)) +        except DiscordUser.DoesNotExist: +            add_message(request, ERROR, ERROR_JOIN_DISCORD) + +            raise ImmediateHttpResponse(redirect(reverse("home"))) + +        if user.roles.count() <= 1: +            add_message(request, ERROR, ERROR_JOIN_DISCORD)              raise ImmediateHttpResponse(redirect(reverse("home"))) @@ -48,7 +63,7 @@ class SocialAccountAdapter(DefaultSocialAccountAdapter):      def populate_user(self, request: HttpRequest,                        social_login: SocialLogin, -                      data: Dict[str, Any]) -> User: +                      data: Dict[str, Any]) -> DjangoUser:          """          Method used to populate a Django User with data. | 
