def email_unsubscribe(request, *args, **kwargs): if time.time() > int(kwargs['expiration']): return email_unsubscribe_response( request, 'Your unsubscription link has expired.', error=True) try: email = base64.b64decode(kwargs['email_encoded']) except TypeError: return email_unsubscribe_response(request, 'Invalid unsubscribe link.', error=True) if not EmailBlacklist.verify_email_signature(**kwargs): return email_unsubscribe_response(request, 'Invalid unsubscribe link.', error=True) blacklist_instance = EmailBlacklist(email=email) try: blacklist_instance.save() except IntegrityError: pass return email_unsubscribe_response( request, "You will no longer receive email notifications for earned" " badges from this domain.")
def email_unsubscribe(request, *args, **kwargs): if time.time() > int(kwargs['expiration']): return email_unsubscribe_response( request, 'Your unsubscription link has expired.', error=True) try: email = base64.b64decode(kwargs['email_encoded']).decode("utf-8") except TypeError: logger.event(badgrlog.BlacklistUnsubscribeInvalidLinkEvent(kwargs['email_encoded'])) return email_unsubscribe_response(request, 'Invalid unsubscribe link.', error=True) if not EmailBlacklist.verify_email_signature(**kwargs): logger.event(badgrlog.BlacklistUnsubscribeInvalidLinkEvent(email)) return email_unsubscribe_response(request, 'Invalid unsubscribe link.', error=True) blacklist_instance = EmailBlacklist(email=email) try: blacklist_instance.save() logger.event(badgrlog.BlacklistUnsubscribeRequestSuccessEvent(email)) except IntegrityError: pass except: logger.event(badgrlog.BlacklistUnsubscribeRequestFailedEvent(email)) return email_unsubscribe_response( request, "Failed to unsubscribe email.", error=True) return email_unsubscribe_response( request, "You will no longer receive email notifications for earned" " badges from this domain.")
def send_mail(self, template_prefix, email, context): context['STATIC_URL'] = getattr(settings, 'STATIC_URL') context['HTTP_ORIGIN'] = getattr(settings, 'HTTP_ORIGIN') context['PRIVACY_POLICY_URL'] = getattr(settings, 'PRIVACY_POLICY_URL', None) context['TERMS_OF_SERVICE_URL'] = getattr(settings, 'TERMS_OF_SERVICE_URL', None) context['GDPR_INFO_URL'] = getattr(settings, 'GDPR_INFO_URL', None) context['OPERATOR_STREET_ADDRESS'] = getattr( settings, 'OPERATOR_STREET_ADDRESS', None) context['OPERATOR_NAME'] = getattr(settings, 'OPERATOR_NAME', None) context['OPERATOR_URL'] = getattr(settings, 'OPERATOR_URL', None) if context.get('unsubscribe_url', None) is None: try: badgrapp_pk = context['badgr_app'].pk except (KeyError, AttributeError): badgrapp_pk = None context['unsubscribe_url'] = getattr( settings, 'HTTP_ORIGIN') + EmailBlacklist.generate_email_signature( email, badgrapp_pk) self.EMAIL_FROM_STRING = self.set_email_string(context) msg = self.render_mail(template_prefix, email, context) logger.event(badgrlog.EmailRendered(msg)) msg.send()
def send_mail(self, template_prefix, email, context): context['STATIC_URL'] = getattr(settings, 'STATIC_URL') context['HTTP_ORIGIN'] = getattr(settings, 'HTTP_ORIGIN') context['unsubscribe_url'] = getattr(settings, 'HTTP_ORIGIN') + EmailBlacklist.generate_email_signature(email) msg = self.render_mail(template_prefix, email, context) msg.send()
def send_mail(self, template_prefix, email, context, attachment=None): context['STATIC_URL'] = getattr(settings, 'STATIC_URL') context['HTTP_ORIGIN'] = getattr(settings, 'HTTP_ORIGIN') context['unsubscribe_url'] = getattr(settings, 'HTTP_ORIGIN') + EmailBlacklist.generate_email_signature(email) msg = self.render_mail(template_prefix, email, context) if attachment: msg.attach(attachment.name, attachment.read()) msg.send()
def email_unsubscribe(request, *args, **kwargs): if time.time() > int(kwargs['expiration']): return HttpResponse('Your unsubscription link has expired.') try: email = base64.b64decode(kwargs['email_encoded']) except TypeError: return HttpResponse('Invalid unsubscribe link.') if not EmailBlacklist.verify_email_signature(**kwargs): return HttpResponse('Invalid unsubscribe link.') blacklist_instance = EmailBlacklist(email=email) try: blacklist_instance.save() except IntegrityError: pass return HttpResponse("You will no longer receive email notifications for \ earned badges from this domain.")
def notify_earner(self, badgr_app=None): """ Sends an email notification to the badge earner. This process involves creating a badgeanalysis.models.OpenBadge returns the EarnerNotification instance. TODO: consider making this an option on initial save and having a foreign key to the notification model instance (which would link through to the OpenBadge) """ if self.recipient_type != BadgeInstance.RECIPIENT_TYPE_EMAIL: return try: EmailBlacklist.objects.get(email=self.recipient_identifier) except EmailBlacklist.DoesNotExist: # Allow sending, as this email is not blacklisted. pass else: return # TODO: Report email non-delivery somewhere. if badgr_app is None: badgr_app = BadgrApp.objects.get_current(None) try: if self.issuer.image: issuer_image_url = self.issuer.public_url + '/image' else: issuer_image_url = None email_context = { 'badge_name': self.badgeclass.name, 'badge_id': self.entity_id, 'badge_description': self.badgeclass.description, 'help_email': getattr(settings, 'HELP_EMAIL', '*****@*****.**'), 'issuer_name': re.sub(r'[^\w\s]+', '', self.issuer.name, 0, re.I), 'issuer_url': self.issuer.url, 'issuer_email': self.issuer.email, 'issuer_detail': self.issuer.public_url, 'issuer_image_url': issuer_image_url, 'badge_instance_url': self.public_url, 'image_url': self.public_url + '/image', 'download_url': self.public_url + "?action=download", 'unsubscribe_url': getattr(settings, 'HTTP_ORIGIN') + EmailBlacklist.generate_email_signature( self.recipient_identifier), 'site_name': badgr_app.name, 'site_url': badgr_app.signup_redirect, 'badgr_app': badgr_app, } if badgr_app.cors == 'badgr.io': email_context['promote_mobile'] = True except KeyError as e: # A property isn't stored right in json raise e template_name = 'issuer/email/notify_earner' try: from badgeuser.models import CachedEmailAddress CachedEmailAddress.objects.get(email=self.recipient_identifier, verified=True) template_name = 'issuer/email/notify_account_holder' email_context['site_url'] = badgr_app.email_confirmation_redirect except CachedEmailAddress.DoesNotExist: pass adapter = get_adapter() adapter.send_mail(template_name, self.recipient_identifier, context=email_context)
def notify_earner(self, badgr_app=None): """ Sends an email notification to the badge earner. This process involves creating a badgeanalysis.models.OpenBadge returns the EarnerNotification instance. TODO: consider making this an option on initial save and having a foreign key to the notification model instance (which would link through to the OpenBadge) """ if self.recipient_type != BadgeInstance.RECIPIENT_TYPE_EMAIL: return try: EmailBlacklist.objects.get(email=self.recipient_identifier) except EmailBlacklist.DoesNotExist: # Allow sending, as this email is not blacklisted. pass else: return # TODO: Report email non-delivery somewhere. if badgr_app is None: badgr_app = BadgrApp.objects.get_current(None) try: if self.issuer.image: issuer_image_url = self.issuer.public_url + '/image' else: issuer_image_url = None email_context = { 'badge_name': self.badgeclass.name, 'badge_id': self.entity_id, 'badge_description': self.badgeclass.description, 'issuer_name': re.sub(r'[^\w\s]+', '', self.issuer.name, 0, re.I), 'issuer_url': self.issuer.url, 'issuer_detail': self.issuer.public_url, 'issuer_image_url': issuer_image_url, 'badge_instance_url': self.public_url, 'image_url': self.public_url + '/image', 'download_url': self.public_url + "?action=download", 'unsubscribe_url': getattr(settings, 'HTTP_ORIGIN') + EmailBlacklist.generate_email_signature( self.recipient_identifier), 'site_name': badgr_app.name, 'site_url': badgr_app.signup_redirect, } if badgr_app.cors == 'badgr.io': email_context['promote_mobile'] = True except KeyError as e: # A property isn't stored right in json raise e template_name = 'issuer/email/notify_earner' try: from badgeuser.models import CachedEmailAddress CachedEmailAddress.objects.get(email=self.recipient_identifier, verified=True) template_name = 'issuer/email/notify_account_holder' email_context['site_url'] = badgr_app.email_confirmation_redirect except CachedEmailAddress.DoesNotExist: pass adapter = get_adapter() adapter.send_mail(template_name, self.recipient_identifier, context=email_context)