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
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)
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)