refactor(auth): Move check for verificated mail address to user class
This commit is contained in:
parent
b398d48533
commit
127a10f3d9
6 changed files with 21 additions and 24 deletions
|
|
@ -105,13 +105,7 @@ class UserQuerySet(models.QuerySet):
|
|||
def for_auth(self):
|
||||
"""Optimization to avoid additional queries during authentication"""
|
||||
qs = self.select_related("actor__domain")
|
||||
verified_emails = EmailAddress.objects.filter(
|
||||
user=models.OuterRef("id"), primary=True
|
||||
).values("verified")[:1]
|
||||
subquery = models.Subquery(verified_emails)
|
||||
return qs.annotate(has_verified_primary_email=subquery).prefetch_related(
|
||||
"plugins"
|
||||
)
|
||||
return qs.prefetch_related("plugins", "emailaddress_set")
|
||||
|
||||
|
||||
class UserManager(BaseUserManager):
|
||||
|
|
@ -315,6 +309,17 @@ class User(AbstractUser):
|
|||
return
|
||||
return self.actor.attachment_icon
|
||||
|
||||
@property
|
||||
def has_verified_primary_email(self) -> bool:
|
||||
return len(self.emailaddress_set.filter(primary=True, verified=True)) > 0
|
||||
|
||||
def should_verify_email(self):
|
||||
if self.is_superuser:
|
||||
return False
|
||||
has_unverified_email = not self.has_verified_primary_email
|
||||
mandatory_verification = settings.ACCOUNT_EMAIL_VERIFICATION != "optional"
|
||||
return has_unverified_email and mandatory_verification
|
||||
|
||||
|
||||
def generate_code(length=10):
|
||||
return "".join(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from funkwhale_api.common import authentication
|
|||
def check(request):
|
||||
user = request.user
|
||||
request.user = user.__class__.objects.all().for_auth().get(pk=user.pk)
|
||||
if authentication.should_verify_email(request.user):
|
||||
if request.user.should_verify_email():
|
||||
raise authentication.UnverifiedEmail(user)
|
||||
return True
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue