diff options
author | 2019-10-22 17:05:01 +0100 | |
---|---|---|
committer | 2019-10-22 17:05:01 +0100 | |
commit | 604e3c09f9d07268bc4424fd06b0a1dcfb1b8976 (patch) | |
tree | ebdf7c5ae243cf95ca369332d9073a356507b967 /pydis_site/utils | |
parent | Merge branch 'master' into allauth-user-settings (diff) |
Prevent user signup when they've never joined+verified
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. |