From f4b242e70743d67b41d560247418970119237ef3 Mon Sep 17 00:00:00 2001 From: Umair Khan Date: Fri, 20 Jan 2017 14:09:35 +0500 Subject: [PATCH] Add time validation for email confirmations. Adds a function which returns the number of days for which a confirmation link will remain valid. This function can be overridden by derived classes to provide a different value. --- confirmation/models.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/confirmation/models.py b/confirmation/models.py index 53ef51f8575a1..bccf7c383c12a 100644 --- a/confirmation/models.py +++ b/confirmation/models.py @@ -65,6 +65,12 @@ def confirm(self, confirmation_key): confirmation = self.get(confirmation_key=confirmation_key) except self.model.DoesNotExist: return False + + max_days = self.get_link_validity_in_days() + time_elapsed = now() - confirmation.date_sent + if time_elapsed.total_seconds() > max_days * 24 * 3600: + return False + obj = confirmation.content_object status_field = get_status_field(obj._meta.app_label, obj._meta.model_name) setattr(obj, status_field, getattr(settings, 'STATUS_ACTIVE', 1)) @@ -82,6 +88,10 @@ def get_activation_url(self, confirmation_key, host=None): # type: (Text, Optional[str]) -> Text return generate_activation_url(confirmation_key, host=host) + def get_link_validity_in_days(self): + # type: () -> int + return getattr(settings, 'EMAIL_CONFIRMATION_DAYS', 10) + def send_confirmation(self, obj, email_address, additional_context=None, subject_template_path=None, body_template_path=None, host=None):