def send_email_alert(to_address: str, username: str, message_id: int,
                         subject: str, content: str):
        """Send an email to user to alert that they have a new message"""
        current_app.logger.debug(f"Test if email required {to_address}")
        org_code = current_app.config["ORG_CODE"]
        settings_url = "{}/settings#notifications".format(
            current_app.config["APP_BASE_URL"])

        if not to_address:
            return False  # Many users will not have supplied email address so return
        message_path = ""
        if message_id is not None:
            message_path = f"/message/{message_id}"

        # TODO these could be localised if needed, in the future
        html_template = get_template("message_alert_en.html")
        text_template = get_template("message_alert_en.txt")
        inbox_url = f"{current_app.config['APP_BASE_URL']}/inbox{message_path}"
        replace_list = [
            ["[ORG_CODE]", org_code],
            ["[PROFILE_LINK]", inbox_url],
            ["[SETTINGS_LINK]", settings_url],
        ]
        html_replace_list = replace_list + [[
            "[CONTENT]", format_username_link(content)
        ]]
        html_template = template_var_replacing(html_template,
                                               html_replace_list)
        replace_list += [["[CONTENT]", content]]
        text_template = template_var_replacing(text_template, replace_list)

        SMTPService._send_message(to_address, subject, html_template,
                                  text_template)

        return True
Exemple #2
0
    def send_welcome_message(user: User):
        """Sends welcome message to new user at Sign up"""
        org_code = current_app.config["ORG_CODE"]
        text_template = get_txt_template("welcome_message_en.txt")
        hot_welcome_section = get_txt_template("hot_welcome_section_en.txt")
        replace_list = [
            ["[USERNAME]", user.username],
            ["[ORG_CODE]", org_code],
            ["[ORG_NAME]", current_app.config["ORG_NAME"]],
            ["[SETTINGS_LINK]",
             MessageService.get_user_settings_link()],
            [
                "[HOT_WELCOME]",
                hot_welcome_section if org_code == "HOT" else ""
            ],
        ]
        text_template = template_var_replacing(text_template, replace_list)

        welcome_message = Message()
        welcome_message.message_type = MessageType.SYSTEM.value
        welcome_message.to_user_id = user.id
        welcome_message.subject = "Welcome to the {} Tasking Manager".format(
            org_code)
        welcome_message.message = text_template
        welcome_message.save()

        return welcome_message.id
    def notify_level_upgrade(user_id: int, username: str, level: str):
        text_template = get_txt_template("level_upgrade_message_en.txt")
        replace_list = [
            ["[USERNAME]", username],
            ["[LEVEL]", level],
            ["[ORG_CODE]", current_app.config["ORG_CODE"]],
        ]
        text_template = template_var_replacing(text_template, replace_list)

        level_upgrade_message = Message()
        level_upgrade_message.to_user_id = user_id
        level_upgrade_message.subject = "Mapper level upgrade"
        level_upgrade_message.message = text_template
        level_upgrade_message.save()
    def send_verification_email(to_address: str, username: str):
        """ Sends a verification email with a unique token so we can verify user owns this email address """
        org_code = current_app.config["ORG_CODE"]
        # TODO these could be localised if needed, in the future
        html_template = get_template("email_verification_en.html")
        text_template = get_template("email_verification_en.txt")

        verification_url = SMTPService._generate_email_verification_url(
            to_address, username)
        replace_list = [
            ["[USERNAME]", username],
            ["[VERIFICATION_LINK]", verification_url],
            ["[ORG_CODE]", org_code],
            ["[ORG_NAME]", current_app.config["ORG_NAME"]],
        ]
        html_template = template_var_replacing(html_template, replace_list)
        text_template = template_var_replacing(text_template, replace_list)

        subject = "{} Tasking Manager - Email Verification".format(org_code)
        SMTPService._send_message(to_address, subject, html_template,
                                  text_template)

        return True
    def send_message_after_validation(
        status: int, validated_by: int, mapped_by: int, task_id: int, project_id: int
    ):
        """ Sends mapper a notification after their task has been marked valid or invalid """
        if validated_by == mapped_by:
            return  # No need to send a notification if you've verified your own task

        user = UserService.get_user_by_id(mapped_by)
        text_template = get_txt_template(
            "invalidation_message_en.txt"
            if status == TaskStatus.INVALIDATED
            else "validation_message_en.txt"
        )
        status_text = (
            "marked invalid" if status == TaskStatus.INVALIDATED else "validated"
        )
        task_link = MessageService.get_task_link(project_id, task_id)
        replace_list = [
            ["[USERNAME]", user.username],
            ["[TASK_LINK]", task_link],
            ["[ORG_NAME]", current_app.config["ORG_NAME"]],
        ]
        text_template = template_var_replacing(text_template, replace_list)

        messages = []
        validation_message = Message()
        validation_message.message_type = (
            MessageType.INVALIDATION_NOTIFICATION.value
            if status == TaskStatus.INVALIDATED
            else MessageType.VALIDATION_NOTIFICATION.value
        )
        validation_message.project_id = project_id
        validation_message.task_id = task_id
        validation_message.from_user_id = validated_by
        validation_message.to_user_id = mapped_by
        validation_message.subject = (
            f"{task_link} mapped by you in Project {project_id} has been {status_text}"
        )
        validation_message.message = text_template
        messages.append(dict(message=validation_message, user=user))

        # For email alerts
        MessageService._push_messages(messages)
Exemple #6
0
    def test_variable_replacing(self):
        # Act
        content = get_template("email_verification_en.html")
        replace_list = [
            ["[USERNAME]", "test_user"],
            ["[VERIFICATION_LINK]", "http://localhost:30/verify.html#1234"],
            ["[ORG_CODE]", "HOT"],
            ["[ORG_NAME]", "Organization Test"],
        ]
        processed_content = template_var_replacing(content, replace_list)
        # Assert
        self.assertIn("test_user", processed_content)
        self.assertIn("http://localhost:30/verify.html#1234", processed_content)
        self.assertIn("HOT", processed_content)
        self.assertIn("Organization Test", processed_content)

        self.assertNotIn("[USERNAME]", processed_content)
        self.assertNotIn("[VERIFICATION_LINK]", processed_content)
        self.assertNotIn("[ORG_CODE]", processed_content)
        self.assertNotIn("[ORG_NAME]", processed_content)