def partial_update(self, request, *args, **kwargs): """ We must detect if the user is trying to change his email so we can save that value and generate a token that allows him to validate it in the new email account """ user = self.get_object() self.check_permissions(request, "update", user) new_email = request.DATA.pop('email', None) if new_email is not None: valid_new_email = True duplicated_email = models.User.objects.filter( email=new_email).exists() try: validate_email(new_email) validate_user_email_allowed_domains(new_email) except ValidationError: valid_new_email = False valid_new_email = valid_new_email and new_email != request.user.email if duplicated_email: raise exc.WrongArguments(_("Duplicated email")) elif not valid_new_email: raise exc.WrongArguments(_("Invalid email")) # We need to generate a token for the email request.user.email_token = str(uuid.uuid4()) request.user.new_email = new_email request.user.save(update_fields=["email_token", "new_email"]) email = mail_builder.change_email(request.user.new_email, { "user": request.user, "lang": request.user.lang }) email.send() github_username = request.DATA.pop('github_username', None) threebot_name = request.DATA.pop('threebot_name', None) public_key = request.DATA.pop('public_key', None) if github_username: request.user.github_username = github_username request.user.save(update_fields=["github_username"]) if threebot_name: request.user.threebot_name = threebot_name request.user.save(update_fields=["threebot_name"]) if public_key: request.user.public_key = public_key request.user.save(update_fields=["public_key"]) return super().partial_update(request, *args, **kwargs)
def partial_update(self, request, *args, **kwargs): """ We must detect if the user is trying to change his email so we can save that value and generate a token that allows him to validate it in the new email account """ user = self.get_object() self.check_permissions(request, "update", user) new_email = request.DATA.get('email', None) if new_email is not None: valid_new_email = True duplicated_email = models.User.objects.filter(email=new_email).exists() try: validate_email(new_email) validate_user_email_allowed_domains(new_email) except ValidationError: valid_new_email = False valid_new_email = valid_new_email and new_email != request.user.email if duplicated_email: raise exc.WrongArguments(_("Duplicated email")) elif not valid_new_email: raise exc.WrongArguments(_("Not valid email")) # We need to generate a token for the email request.user.email_token = str(uuid.uuid1()) request.user.new_email = new_email request.user.save(update_fields=["email_token", "new_email"]) email = mail_builder.change_email( request.user.new_email, { "user": request.user, "lang": request.user.lang } ) email.send() ret = super().partial_update(request, *args, **kwargs) return ret
def partial_update(self, request, *args, **kwargs): """ We must detect if the user is trying to change his email so we can save that value and generate a token that allows him to validate it in the new email account """ user = self.get_object() self.check_permissions(request, "update", user) ret = super().partial_update(request, *args, **kwargs) new_email = request.DATA.get('email', None) if new_email is not None: valid_new_email = True duplicated_email = models.User.objects.filter( email=new_email).exists() try: validate_email(new_email) except ValidationError: valid_new_email = False valid_new_email = valid_new_email and new_email != request.user.email if duplicated_email: raise exc.WrongArguments(_("Duplicated email")) elif not valid_new_email: raise exc.WrongArguments(_("Not valid email")) #We need to generate a token for the email request.user.email_token = str(uuid.uuid1()) request.user.new_email = new_email request.user.save(update_fields=["email_token", "new_email"]) email = mail_builder.change_email(request.user.new_email, { "user": request.user, "lang": request.user.lang }) email.send() return ret
def handle(self, *args, **options): if len(args) != 1: print("Usage: ./manage.py test_emails <email-address>") return locale = options.get('locale') test_email = args[0] # Register email context = {"lang": locale, "user": User.objects.all().order_by("?").first(), "cancel_token": "cancel-token"} email = mail_builder.registered_user(test_email, context) email.send() # Membership invitation membership = Membership.objects.order_by("?").filter(user__isnull=True).first() membership.invited_by = User.objects.all().order_by("?").first() membership.invitation_extra_text = "Text example, Text example,\nText example,\n\nText example" context = {"lang": locale, "membership": membership} email = mail_builder.membership_invitation(test_email, context) email.send() # Membership notification context = {"lang": locale, "membership": Membership.objects.order_by("?").filter(user__isnull=False).first()} email = mail_builder.membership_notification(test_email, context) email.send() # Feedback context = { "lang": locale, "feedback_entry": { "full_name": "Test full name", "email": "*****@*****.**", "comment": "Test comment", }, "extra": { "key1": "value1", "key2": "value2", }, } email = mail_builder.feedback_notification(test_email, context) email.send() # Password recovery context = {"lang": locale, "user": User.objects.all().order_by("?").first()} email = mail_builder.password_recovery(test_email, context) email.send() # Change email context = {"lang": locale, "user": User.objects.all().order_by("?").first()} email = mail_builder.change_email(test_email, context) email.send() # Export/Import emails context = { "lang": locale, "user": User.objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "error_subject": "Error generating project dump", "error_message": "Error generating project dump", } email = mail_builder.export_error(test_email, context) email.send() context = { "lang": locale, "user": User.objects.all().order_by("?").first(), "error_subject": "Error importing project dump", "error_message": "Error importing project dump", } email = mail_builder.import_error(test_email, context) email.send() deletion_date = timezone.now() + datetime.timedelta(seconds=60*60*24) context = { "lang": locale, "url": "http://dummyurl.com", "user": User.objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "deletion_date": deletion_date, } email = mail_builder.dump_project(test_email, context) email.send() context = { "lang": locale, "user": User.objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), } email = mail_builder.load_dump(test_email, context) email.send() # Notification emails notification_emails = [ ("issues.Issue", "issues/issue-change"), ("issues.Issue", "issues/issue-create"), ("issues.Issue", "issues/issue-delete"), ("tasks.Task", "tasks/task-change"), ("tasks.Task", "tasks/task-create"), ("tasks.Task", "tasks/task-delete"), ("userstories.UserStory", "userstories/userstory-change"), ("userstories.UserStory", "userstories/userstory-create"), ("userstories.UserStory", "userstories/userstory-delete"), ("milestones.Milestone", "milestones/milestone-change"), ("milestones.Milestone", "milestones/milestone-create"), ("milestones.Milestone", "milestones/milestone-delete"), ("wiki.WikiPage", "wiki/wikipage-change"), ("wiki.WikiPage", "wiki/wikipage-create"), ("wiki.WikiPage", "wiki/wikipage-delete"), ] context = { "lang": locale, "project": Project.objects.all().order_by("?").first(), "changer": User.objects.all().order_by("?").first(), "history_entries": HistoryEntry.objects.all().order_by("?")[0:5], "user": User.objects.all().order_by("?").first(), } for notification_email in notification_emails: model = get_model(*notification_email[0].split(".")) snapshot = { "subject": "Tests subject", "ref": 123123, "name": "Tests name", "slug": "test-slug" } queryset = model.objects.all().order_by("?") for obj in queryset: end = False entries = get_history_queryset_by_model_instance(obj).filter(is_snapshot=True).order_by("?") for entry in entries: if entry.snapshot: snapshot = entry.snapshot end = True break if end: break context["snapshot"] = snapshot cls = type("InlineCSSTemplateMail", (InlineCSSTemplateMail,), {"name": notification_email[1]}) email = cls() email.send(test_email, context)
def handle(self, *args, **options): locale = options.get('locale') email_address = options.get('email') # Register email context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "cancel_token": "cancel-token" } email = mail_builder.registered_user(email_address, context) email.send() # Membership invitation membership = Membership.objects.order_by("?").filter( user__isnull=True).first() membership.invited_by = get_user_model().objects.all().order_by( "?").first() membership.invitation_extra_text = "Text example, Text example,\nText example,\n\nText example" context = {"lang": locale, "membership": membership} email = mail_builder.membership_invitation(email_address, context) email.send() # Membership notification context = { "lang": locale, "membership": Membership.objects.order_by("?").filter( user__isnull=False).first() } email = mail_builder.membership_notification(email_address, context) email.send() # Feedback context = { "lang": locale, "feedback_entry": { "full_name": "Test full name", "email": "*****@*****.**", "comment": "Test comment", }, "extra": { "key1": "value1", "key2": "value2", }, } email = mail_builder.feedback_notification(email_address, context) email.send() # Password recovery context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.password_recovery(email_address, context) email.send() # Change email context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.change_email(email_address, context) email.send() # Export/Import emails context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "error_subject": "Error generating project dump", "error_message": "Error generating project dump", } email = mail_builder.export_error(email_address, context) email.send() context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "error_subject": "Error importing project dump", "error_message": "Error importing project dump", } email = mail_builder.import_error(email_address, context) email.send() deletion_date = timezone.now() + datetime.timedelta(seconds=60 * 60 * 24) context = { "lang": locale, "url": "http://dummyurl.com", "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "deletion_date": deletion_date, } email = mail_builder.dump_project(email_address, context) email.send() context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), } email = mail_builder.load_dump(email_address, context) email.send() # Notification emails notification_emails = [ ("issues.Issue", "issues/issue-change"), ("issues.Issue", "issues/issue-create"), ("issues.Issue", "issues/issue-delete"), ("tasks.Task", "tasks/task-change"), ("tasks.Task", "tasks/task-create"), ("tasks.Task", "tasks/task-delete"), ("userstories.UserStory", "userstories/userstory-change"), ("userstories.UserStory", "userstories/userstory-create"), ("userstories.UserStory", "userstories/userstory-delete"), ("milestones.Milestone", "milestones/milestone-change"), ("milestones.Milestone", "milestones/milestone-create"), ("milestones.Milestone", "milestones/milestone-delete"), ("wiki.WikiPage", "wiki/wikipage-change"), ("wiki.WikiPage", "wiki/wikipage-create"), ("wiki.WikiPage", "wiki/wikipage-delete"), ] context = { "lang": locale, "project": Project.objects.all().order_by("?").first(), "changer": get_user_model().objects.all().order_by("?").first(), "history_entries": HistoryEntry.objects.all().order_by("?")[0:5], "user": get_user_model().objects.all().order_by("?").first(), } for notification_email in notification_emails: model = apps.get_model(*notification_email[0].split(".")) snapshot = { "subject": "Tests subject", "ref": 123123, "name": "Tests name", "slug": "test-slug" } queryset = model.objects.all().order_by("?") for obj in queryset: end = False entries = get_history_queryset_by_model_instance(obj).filter( is_snapshot=True).order_by("?") for entry in entries: if entry.snapshot: snapshot = entry.snapshot end = True break if end: break context["snapshot"] = snapshot cls = type("InlineCSSTemplateMail", (InlineCSSTemplateMail, ), {"name": notification_email[1]}) email = cls() email.send(email_address, context) # Transfer Emails context = { "project": Project.objects.all().order_by("?").first(), "requester": get_user_model().objects.all().order_by("?").first(), } email = mail_builder.transfer_request(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "receiver": get_user_model().objects.all().order_by("?").first(), "token": "test-token", "reason": "Test reason" } email = mail_builder.transfer_start(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "old_owner": get_user_model().objects.all().order_by("?").first(), "new_owner": get_user_model().objects.all().order_by("?").first(), "reason": "Test reason" } email = mail_builder.transfer_accept(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "rejecter": get_user_model().objects.all().order_by("?").first(), "reason": "Test reason" } email = mail_builder.transfer_reject(email_address, context) email.send() # Contact with project admins email project = Project.objects.all().order_by("?").first() user = get_user_model().objects.all().order_by("?").first() context = { "full_name": user.get_full_name(), "project_name": project.name, "photo_url": get_user_photo_url(user), "user_profile_url": resolve_front_url("user", user.username), "project_settings_url": resolve_front_url("project-admin", project.slug), "comment": "Test comment notification." } email = mail_builder.contact_notification(email_address, context) email.send() # GitHub importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.github_import_success(email_address, context) email.send() # Jira importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.jira_import_success(email_address, context) email.send() # Trello importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.trello_import_success(email_address, context) email.send() # Asana importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.asana_import_success(email_address, context) email.send() # Error importer email context = { "user": get_user_model().objects.all().order_by("?").first(), "error_subject": "Error importing GitHub project", "error_message": "Error importing GitHub project", "project": 1234, "exception": "Exception message" } email = mail_builder.importer_import_error(email_address, context) email.send()
def handle(self, *args, **options): locale = options.get('locale') email_address = options.get('email') # Register email context = {"lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "cancel_token": "cancel-token"} email = mail_builder.registered_user(email_address, context) email.send() # Membership invitation membership = Membership.objects.order_by("?").filter(user__isnull=True).first() membership.invited_by = get_user_model().objects.all().order_by("?").first() membership.invitation_extra_text = "Text example, Text example,\nText example,\n\nText example" context = {"lang": locale, "membership": membership} email = mail_builder.membership_invitation(email_address, context) email.send() # Membership notification context = {"lang": locale, "membership": Membership.objects.order_by("?").filter(user__isnull=False).first()} email = mail_builder.membership_notification(email_address, context) email.send() # Feedback context = { "lang": locale, "feedback_entry": { "full_name": "Test full name", "email": "*****@*****.**", "comment": "Test comment", }, "extra": { "key1": "value1", "key2": "value2", }, } email = mail_builder.feedback_notification(email_address, context) email.send() # Password recovery context = {"lang": locale, "user": get_user_model().objects.all().order_by("?").first()} email = mail_builder.password_recovery(email_address, context) email.send() # Change email context = {"lang": locale, "user": get_user_model().objects.all().order_by("?").first()} email = mail_builder.change_email(email_address, context) email.send() # Export/Import emails context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "error_subject": "Error generating project dump", "error_message": "Error generating project dump", } email = mail_builder.export_error(email_address, context) email.send() context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "error_subject": "Error importing project dump", "error_message": "Error importing project dump", } email = mail_builder.import_error(email_address, context) email.send() deletion_date = timezone.now() + datetime.timedelta(seconds=60*60*24) context = { "lang": locale, "url": "http://dummyurl.com", "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), "deletion_date": deletion_date, } email = mail_builder.dump_project(email_address, context) email.send() context = { "lang": locale, "user": get_user_model().objects.all().order_by("?").first(), "project": Project.objects.all().order_by("?").first(), } email = mail_builder.load_dump(email_address, context) email.send() # Notification emails notification_emails = [ ("issues.Issue", "issues/issue-change"), ("issues.Issue", "issues/issue-create"), ("issues.Issue", "issues/issue-delete"), ("tasks.Task", "tasks/task-change"), ("tasks.Task", "tasks/task-create"), ("tasks.Task", "tasks/task-delete"), ("userstories.UserStory", "userstories/userstory-change"), ("userstories.UserStory", "userstories/userstory-create"), ("userstories.UserStory", "userstories/userstory-delete"), ("milestones.Milestone", "milestones/milestone-change"), ("milestones.Milestone", "milestones/milestone-create"), ("milestones.Milestone", "milestones/milestone-delete"), ("wiki.WikiPage", "wiki/wikipage-change"), ("wiki.WikiPage", "wiki/wikipage-create"), ("wiki.WikiPage", "wiki/wikipage-delete"), ] context = { "lang": locale, "project": Project.objects.all().order_by("?").first(), "changer": get_user_model().objects.all().order_by("?").first(), "history_entries": HistoryEntry.objects.all().order_by("?")[0:5], "user": get_user_model().objects.all().order_by("?").first(), } for notification_email in notification_emails: model = apps.get_model(*notification_email[0].split(".")) snapshot = { "subject": "Tests subject", "ref": 123123, "name": "Tests name", "slug": "test-slug" } queryset = model.objects.all().order_by("?") for obj in queryset: end = False entries = get_history_queryset_by_model_instance(obj).filter(is_snapshot=True).order_by("?") for entry in entries: if entry.snapshot: snapshot = entry.snapshot end = True break if end: break context["snapshot"] = snapshot cls = type("InlineCSSTemplateMail", (InlineCSSTemplateMail,), {"name": notification_email[1]}) email = cls() email.send(email_address, context) # Transfer Emails context = { "project": Project.objects.all().order_by("?").first(), "requester": get_user_model().objects.all().order_by("?").first(), } email = mail_builder.transfer_request(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "receiver": get_user_model().objects.all().order_by("?").first(), "token": "test-token", "reason": "Test reason" } email = mail_builder.transfer_start(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "old_owner": get_user_model().objects.all().order_by("?").first(), "new_owner": get_user_model().objects.all().order_by("?").first(), "reason": "Test reason" } email = mail_builder.transfer_accept(email_address, context) email.send() context = { "project": Project.objects.all().order_by("?").first(), "rejecter": get_user_model().objects.all().order_by("?").first(), "reason": "Test reason" } email = mail_builder.transfer_reject(email_address, context) email.send() # Contact with project admins email project = Project.objects.all().order_by("?").first() user = get_user_model().objects.all().order_by("?").first() context = { "full_name": user.get_full_name(), "project_name": project.name, "photo_url": get_user_photo_url(user), "user_profile_url": resolve_front_url("user", user.username), "project_settings_url": resolve_front_url("project-admin", project.slug), "comment": "Test comment notification." } email = mail_builder.contact_notification(email_address, context) email.send() # GitHub importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.github_import_success(email_address, context) email.send() # Jira importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.jira_import_success(email_address, context) email.send() # Trello importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.trello_import_success(email_address, context) email.send() # Asana importer email context = { "project": Project.objects.all().order_by("?").first(), "user": get_user_model().objects.all().order_by("?").first() } email = mail_builder.asana_import_success(email_address, context) email.send() # Error importer email context = { "user": get_user_model().objects.all().order_by("?").first(), "error_subject": "Error importing GitHub project", "error_message": "Error importing GitHub project", "project": 1234, "exception": "Exception message" } email = mail_builder.importer_import_error(email_address, context) email.send()