From b33c4eb6614f62d244210ac2f7df09d1cb993fc6 Mon Sep 17 00:00:00 2001 From: Diwash Date: Fri, 3 Jun 2022 16:22:10 +0545 Subject: [PATCH 01/11] restrict multiple reglinks on account creation --- gsoc/views.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gsoc/views.py b/gsoc/views.py index c56b7025..e0623caa 100644 --- a/gsoc/views.py +++ b/gsoc/views.py @@ -1,4 +1,6 @@ +from datetime import datetime from gsoc import settings +from gsoc.common.utils.tools import build_send_mail_json from .common.utils.memcached_stats import MemcachedStats from .forms import ChangeInfoForm, ProposalUploadForm @@ -9,6 +11,7 @@ ArticleReview, GsocYear, ReaddUser, + Scheduler, ) import io @@ -17,6 +20,7 @@ import json import uuid +from django.utils import timezone from django.contrib import messages from django.contrib.auth import decorators, password_validation, validators, logout from django.contrib.auth.models import User @@ -177,7 +181,30 @@ def new_account_view(request): email = request.POST.get("email", None) gsoc_year = GsocYear.objects.first() if email: - RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) + if RegLink.objects.filter(email=email).exists(): + reglink = RegLink.objects.get(email=email) + template_data = { + "register_link": settings.INETLOCATION + "/accounts/register?reglink_id=" + reglink.reglink_id, + "role": 0, + "gsoc_year": datetime.now().year, + } + subject = ( + f"You have been invited to join for GSoC " + f"{datetime.now().year} with PSF" + ) + scheduler_data = build_send_mail_json( + email, + template="invite.html", + subject=subject, + template_data=template_data, + ) + Scheduler.objects.create( + command="send_email", + activation_date=timezone.now(), + data=scheduler_data + ) + else: + RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) messages.success( request, "You will get the registration link sent to your email soon" ) From 754f3b8fb1eeabd471e053863f954dda62f6fb21 Mon Sep 17 00:00:00 2001 From: Diwash Date: Fri, 3 Jun 2022 21:07:02 +0545 Subject: [PATCH 02/11] handle email constraint on reglink create --- gsoc/views.py | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/gsoc/views.py b/gsoc/views.py index e0623caa..bbec8334 100644 --- a/gsoc/views.py +++ b/gsoc/views.py @@ -181,30 +181,30 @@ def new_account_view(request): email = request.POST.get("email", None) gsoc_year = GsocYear.objects.first() if email: - if RegLink.objects.filter(email=email).exists(): - reglink = RegLink.objects.get(email=email) - template_data = { - "register_link": settings.INETLOCATION + "/accounts/register?reglink_id=" + reglink.reglink_id, - "role": 0, - "gsoc_year": datetime.now().year, - } - subject = ( - f"You have been invited to join for GSoC " - f"{datetime.now().year} with PSF" - ) - scheduler_data = build_send_mail_json( - email, - template="invite.html", - subject=subject, - template_data=template_data, - ) - Scheduler.objects.create( - command="send_email", - activation_date=timezone.now(), - data=scheduler_data - ) - else: + try: RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) + except IntegrityError: + reglink = RegLink.objects.get(email=email) + template_data = { + "register_link": settings.INETLOCATION + "/accounts/register?reglink_id=" + reglink.reglink_id, + "role": 0, + "gsoc_year": datetime.now().year, + } + subject = ( + f"You have been invited to join for GSoC " + f"{datetime.now().year} with PSF" + ) + scheduler_data = build_send_mail_json( + email, + template="invite.html", + subject=subject, + template_data=template_data, + ) + Scheduler.objects.create( + command="send_email", + activation_date=timezone.now(), + data=scheduler_data + ) messages.success( request, "You will get the registration link sent to your email soon" ) From 542ea319f836ab307513792d27eee00a1a77b83e Mon Sep 17 00:00:00 2001 From: Diwash Date: Fri, 3 Jun 2022 21:13:25 +0545 Subject: [PATCH 03/11] fix over indentation --- gsoc/views.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/gsoc/views.py b/gsoc/views.py index bbec8334..aa0f766b 100644 --- a/gsoc/views.py +++ b/gsoc/views.py @@ -184,27 +184,28 @@ def new_account_view(request): try: RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) except IntegrityError: - reglink = RegLink.objects.get(email=email) - template_data = { - "register_link": settings.INETLOCATION + "/accounts/register?reglink_id=" + reglink.reglink_id, - "role": 0, - "gsoc_year": datetime.now().year, - } - subject = ( - f"You have been invited to join for GSoC " - f"{datetime.now().year} with PSF" - ) - scheduler_data = build_send_mail_json( - email, - template="invite.html", - subject=subject, - template_data=template_data, - ) - Scheduler.objects.create( - command="send_email", - activation_date=timezone.now(), - data=scheduler_data - ) + reglink = RegLink.objects.get(email=email) + template_data = { + "register_link": settings.INETLOCATION + + "/accounts/register?reglink_id=" + reglink.reglink_id, + "role": 0, + "gsoc_year": datetime.now().year, + } + subject = ( + f"You have been invited to join for GSoC " + f"{datetime.now().year} with PSF" + ) + scheduler_data = build_send_mail_json( + email, + template="invite.html", + subject=subject, + template_data=template_data, + ) + Scheduler.objects.create( + command="send_email", + activation_date=timezone.now(), + data=scheduler_data + ) messages.success( request, "You will get the registration link sent to your email soon" ) From b0eb7f24716315663457cc6ddb9b0610682118a7 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 09:19:19 +0545 Subject: [PATCH 04/11] handle duplicate email when inviting through adduserlog --- gsoc/forms.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gsoc/forms.py b/gsoc/forms.py index e01d1032..8c084adb 100644 --- a/gsoc/forms.py +++ b/gsoc/forms.py @@ -46,6 +46,17 @@ class RegLinkForm(forms.ModelForm): class Meta: model = RegLink fields = ("email", "user_role", "user_suborg", "gsoc_year") + + def save(self, commit=True): + data = super(RegLinkForm, self).save(commit=False) + email = self.cleaned_data['email'] + try: + RegLink.objects.get(email=email).delete() + except: + pass + if commit: + data.save() + return data class BlogPostDueDateForm(forms.ModelForm): From 0553ebd378276d4f6cfb615acdbc317870cc302a Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 12:21:12 +0545 Subject: [PATCH 05/11] fix bare except --- gsoc/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gsoc/forms.py b/gsoc/forms.py index 8c084adb..23a48a10 100644 --- a/gsoc/forms.py +++ b/gsoc/forms.py @@ -46,13 +46,13 @@ class RegLinkForm(forms.ModelForm): class Meta: model = RegLink fields = ("email", "user_role", "user_suborg", "gsoc_year") - + def save(self, commit=True): data = super(RegLinkForm, self).save(commit=False) email = self.cleaned_data['email'] try: RegLink.objects.get(email=email).delete() - except: + except RegLink.DoesNotExist: pass if commit: data.save() From f41b81182015ec22a3cd7f4efc958fb296fd63e4 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 12:32:48 +0545 Subject: [PATCH 06/11] remove direct addition of reglink --- gsoc/admin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gsoc/admin.py b/gsoc/admin.py index 6b0be9e5..2bd4592d 100644 --- a/gsoc/admin.py +++ b/gsoc/admin.py @@ -317,6 +317,9 @@ def get_readonly_fields(self, request, obj=None): readonly_fields += ("user_role", "user_suborg", "gsoc_year", "email") return readonly_fields + + def has_add_permission(self, request, obj=None): + return False admin.site.register(RegLink, RegLinkAdmin) From 2d550108fdeee1548b7059f4a6b9dfb83929fae9 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 16:43:42 +0545 Subject: [PATCH 07/11] override save method of reglink --- gsoc/forms.py | 11 ----------- gsoc/models.py | 13 +++++++++++++ gsoc/views.py | 33 +-------------------------------- 3 files changed, 14 insertions(+), 43 deletions(-) diff --git a/gsoc/forms.py b/gsoc/forms.py index 23a48a10..e01d1032 100644 --- a/gsoc/forms.py +++ b/gsoc/forms.py @@ -47,17 +47,6 @@ class Meta: model = RegLink fields = ("email", "user_role", "user_suborg", "gsoc_year") - def save(self, commit=True): - data = super(RegLinkForm, self).save(commit=False) - email = self.cleaned_data['email'] - try: - RegLink.objects.get(email=email).delete() - except RegLink.DoesNotExist: - pass - if commit: - data.save() - return data - class BlogPostDueDateForm(forms.ModelForm): class Meta: diff --git a/gsoc/models.py b/gsoc/models.py index 9fa5e8f3..d8a53a56 100644 --- a/gsoc/models.py +++ b/gsoc/models.py @@ -1070,6 +1070,19 @@ def create_reminder(self, trigger_time=None): else: self.create_scheduler() + def save(self, *args, **kwargs): + try: + RegLink.objects.get( + user_role=self.user_role, + gsoc_year=self.gsoc_year, + email=self.email, + user_suborg=self.user_suborg + ).delete() + print('hi') + except: + pass + super(RegLink, self).save(*args, **kwargs) + class Comment(models.Model): username = models.CharField(max_length=50) diff --git a/gsoc/views.py b/gsoc/views.py index aa0f766b..1bb62265 100644 --- a/gsoc/views.py +++ b/gsoc/views.py @@ -1,6 +1,4 @@ -from datetime import datetime from gsoc import settings -from gsoc.common.utils.tools import build_send_mail_json from .common.utils.memcached_stats import MemcachedStats from .forms import ChangeInfoForm, ProposalUploadForm @@ -11,7 +9,6 @@ ArticleReview, GsocYear, ReaddUser, - Scheduler, ) import io @@ -20,7 +17,6 @@ import json import uuid -from django.utils import timezone from django.contrib import messages from django.contrib.auth import decorators, password_validation, validators, logout from django.contrib.auth.models import User @@ -181,34 +177,7 @@ def new_account_view(request): email = request.POST.get("email", None) gsoc_year = GsocYear.objects.first() if email: - try: - RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) - except IntegrityError: - reglink = RegLink.objects.get(email=email) - template_data = { - "register_link": settings.INETLOCATION + - "/accounts/register?reglink_id=" + reglink.reglink_id, - "role": 0, - "gsoc_year": datetime.now().year, - } - subject = ( - f"You have been invited to join for GSoC " - f"{datetime.now().year} with PSF" - ) - scheduler_data = build_send_mail_json( - email, - template="invite.html", - subject=subject, - template_data=template_data, - ) - Scheduler.objects.create( - command="send_email", - activation_date=timezone.now(), - data=scheduler_data - ) - messages.success( - request, "You will get the registration link sent to your email soon" - ) + RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) else: messages.error(request, "An error occured, try again!") return shortcuts.redirect("/") From 94ab5383212dfff65ebe7e9f3d9188411fa4e620 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 16:54:39 +0545 Subject: [PATCH 08/11] small fixes --- gsoc/admin.py | 3 --- gsoc/models.py | 4 ++-- gsoc/views.py | 3 +++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gsoc/admin.py b/gsoc/admin.py index 2bd4592d..6b0be9e5 100644 --- a/gsoc/admin.py +++ b/gsoc/admin.py @@ -317,9 +317,6 @@ def get_readonly_fields(self, request, obj=None): readonly_fields += ("user_role", "user_suborg", "gsoc_year", "email") return readonly_fields - - def has_add_permission(self, request, obj=None): - return False admin.site.register(RegLink, RegLinkAdmin) diff --git a/gsoc/models.py b/gsoc/models.py index d8a53a56..1ee21a7d 100644 --- a/gsoc/models.py +++ b/gsoc/models.py @@ -4,6 +4,7 @@ import uuid import json import pickle +from MySQLdb import IntegrityError import bleach from urllib.parse import urljoin @@ -1078,8 +1079,7 @@ def save(self, *args, **kwargs): email=self.email, user_suborg=self.user_suborg ).delete() - print('hi') - except: + except RegLink.DoesNotExist: pass super(RegLink, self).save(*args, **kwargs) diff --git a/gsoc/views.py b/gsoc/views.py index 1bb62265..c56b7025 100644 --- a/gsoc/views.py +++ b/gsoc/views.py @@ -178,6 +178,9 @@ def new_account_view(request): gsoc_year = GsocYear.objects.first() if email: RegLink.objects.create(user_role=0, gsoc_year=gsoc_year, email=email) + messages.success( + request, "You will get the registration link sent to your email soon" + ) else: messages.error(request, "An error occured, try again!") return shortcuts.redirect("/") From 5dbb4762f5ce5abcfd2d3635938b73d0532a9ae1 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 16:58:01 +0545 Subject: [PATCH 09/11] remove redundant import --- gsoc/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gsoc/models.py b/gsoc/models.py index 1ee21a7d..2210c69c 100644 --- a/gsoc/models.py +++ b/gsoc/models.py @@ -4,7 +4,6 @@ import uuid import json import pickle -from MySQLdb import IntegrityError import bleach from urllib.parse import urljoin @@ -14,7 +13,7 @@ from googleapiclient.discovery import build from django.contrib.auth.models import Permission -from django.contrib import auth, messages +from django.contrib import auth from django.db import models from django.contrib.auth.models import User from django.dispatch import receiver From 40dd3939b9284e0b3244b8e750a79fea8e3f5854 Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 20:48:47 +0545 Subject: [PATCH 10/11] delete schedulers on deletion of reglink --- gsoc/models.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gsoc/models.py b/gsoc/models.py index 2210c69c..ba7ff7df 100644 --- a/gsoc/models.py +++ b/gsoc/models.py @@ -1072,13 +1072,17 @@ def create_reminder(self, trigger_time=None): def save(self, *args, **kwargs): try: - RegLink.objects.get( + reglink = RegLink.objects.get( user_role=self.user_role, gsoc_year=self.gsoc_year, email=self.email, user_suborg=self.user_suborg - ).delete() - except RegLink.DoesNotExist: + ) + if reglink.scheduler_id is not None and reglink.reminder_id is not None: + Scheduler.objects.get(id=reglink.scheduler_id).delete() + Scheduler.objects.get(id=reglink.reminder_id).delete() + reglink.delete() + except: pass super(RegLink, self).save(*args, **kwargs) From 959eeb4e2959d5a13592c448f0538f7f05b38e0b Mon Sep 17 00:00:00 2001 From: Diwash Date: Sat, 4 Jun 2022 20:51:02 +0545 Subject: [PATCH 11/11] fix bare except --- gsoc/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gsoc/models.py b/gsoc/models.py index ba7ff7df..3a25aef0 100644 --- a/gsoc/models.py +++ b/gsoc/models.py @@ -1081,8 +1081,8 @@ def save(self, *args, **kwargs): if reglink.scheduler_id is not None and reglink.reminder_id is not None: Scheduler.objects.get(id=reglink.scheduler_id).delete() Scheduler.objects.get(id=reglink.reminder_id).delete() - reglink.delete() - except: + reglink.delete() + except RegLink.DoesNotExist: pass super(RegLink, self).save(*args, **kwargs)