From 2ae0333551487929b40398f1acf94a91bc048b8d Mon Sep 17 00:00:00 2001 From: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:04:53 +0530 Subject: [PATCH] Fix Email Issues (#13962) * - Added Unauthenticated Server Emails - Removed redundant OM_URI - Add Test Email in SystemResources * remove default port * remove fernet --- conf/openmetadata.yaml | 8 +-- .../development/docker-compose-postgres.yml | 8 +-- docker/development/docker-compose.yml | 8 +-- .../docker-compose-openmetadata.yml | 6 -- docker/docker-compose-openmetadata/env-mysql | 4 +- .../docker-compose-openmetadata/env-postgres | 4 +- .../docker-compose-postgres.yml | 8 +-- .../docker-compose.yml | 6 -- .../service/ChangeEventConfig.java | 23 -------- .../service/OpenMetadataApplication.java | 1 - .../OpenMetadataApplicationConfig.java | 4 -- .../decorators/EmailMessageDecorator.java | 4 +- .../decorators/GChatMessageDecorator.java | 4 +- .../decorators/MSTeamsMessageDecorator.java | 4 +- .../decorators/SlackMessageDecorator.java | 4 +- .../resources/system/SystemResource.java | 22 +++++++ .../security/auth/BasicAuthenticator.java | 5 +- .../openmetadata/service/util/EmailUtil.java | 44 +++++++------- .../service/util/NotificationHandler.java | 3 +- .../searchIndex/PaginatedEntitiesSource.java | 5 -- .../resources/emailTemplates/testMail.ftl | 57 +++++++++++++++++++ .../resources/openmetadata-secure-test.yaml | 2 +- 22 files changed, 124 insertions(+), 110 deletions(-) delete mode 100644 openmetadata-service/src/main/java/org/openmetadata/service/ChangeEventConfig.java create mode 100644 openmetadata-service/src/main/resources/emailTemplates/testMail.ftl diff --git a/conf/openmetadata.yaml b/conf/openmetadata.yaml index 60687e8af9e..2fa33e0991d 100644 --- a/conf/openmetadata.yaml +++ b/conf/openmetadata.yaml @@ -299,7 +299,7 @@ email: emailingEntity: ${OM_EMAIL_ENTITY:-"OpenMetadata"} supportUrl: ${OM_SUPPORT_URL:-"https://slack.open-metadata.org"} enableSmtpServer : ${AUTHORIZER_ENABLE_SMTP:-false} - openMetadataUrl: ${OPENMETADATA_SERVER_URL:-""} + openMetadataUrl: ${OPENMETADATA_SERVER_URL:-"http://localhost:8585"} senderMail: ${OPENMETADATA_SMTP_SENDER_MAIL:-""} serverEndpoint: ${SMTP_SERVER_ENDPOINT:-""} serverPort: ${SMTP_SERVER_PORT:-""} @@ -334,8 +334,4 @@ web: permission-policy: enabled: ${WEB_CONF_PERMISSION_POLICY_ENABLED:-false} option: ${WEB_CONF_PERMISSION_POLICY_OPTION:-""} - - -changeEventConfig: - omUri: ${OM_URI:- "http://localhost:8585"} #openmetadata in om uri for eg http://localhost:8585 - + diff --git a/docker/development/docker-compose-postgres.yml b/docker/development/docker-compose-postgres.yml index 83f4c796c6f..10c96d79a3d 100644 --- a/docker/development/docker-compose-postgres.yml +++ b/docker/development/docker-compose-postgres.yml @@ -166,9 +166,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} @@ -313,10 +310,7 @@ services: SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""} SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - + #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} diff --git a/docker/development/docker-compose.yml b/docker/development/docker-compose.yml index 79eea689ced..18216a92ba9 100644 --- a/docker/development/docker-compose.yml +++ b/docker/development/docker-compose.yml @@ -164,10 +164,7 @@ services: SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""} SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - + #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} @@ -315,9 +312,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} diff --git a/docker/docker-compose-openmetadata/docker-compose-openmetadata.yml b/docker/docker-compose-openmetadata/docker-compose-openmetadata.yml index 0ce5397bcf2..9cfbd52553f 100644 --- a/docker/docker-compose-openmetadata/docker-compose-openmetadata.yml +++ b/docker/docker-compose-openmetadata/docker-compose-openmetadata.yml @@ -115,9 +115,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} @@ -259,9 +256,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - #extensionConfiguration OM_RESOURCE_PACKAGES: ${OM_RESOURCE_PACKAGES:-[]} OM_EXTENSIONS: ${OM_EXTENSIONS:-[]} diff --git a/docker/docker-compose-openmetadata/env-mysql b/docker/docker-compose-openmetadata/env-mysql index 24a53bea8ec..e7524f9bebb 100644 --- a/docker/docker-compose-openmetadata/env-mysql +++ b/docker/docker-compose-openmetadata/env-mysql @@ -82,15 +82,13 @@ OM_SM_ACCESS_KEY="" OM_EMAIL_ENTITY="OpenMetadata" OM_SUPPORT_URL="https://slack.open-metadata.org" AUTHORIZER_ENABLE_SMTP="false" -OPENMETADATA_SERVER_URL="" +OPENMETADATA_SERVER_URL="http://localhost:8585" OPENMETADATA_SMTP_SENDER_MAIL="" SMTP_SERVER_ENDPOINT="" SMTP_SERVER_PORT="" SMTP_SERVER_USERNAME="" SMTP_SERVER_PWD="" SMTP_SERVER_STRATEGY="SMTP_TLS" -#changeEventConfig -OM_URI= "http://localhost:8585" #extensionConfiguration OM_RESOURCE_PACKAGES="[]" OM_EXTENSIONS="[]" diff --git a/docker/docker-compose-openmetadata/env-postgres b/docker/docker-compose-openmetadata/env-postgres index 00f492d11af..1ca2d5c3d72 100644 --- a/docker/docker-compose-openmetadata/env-postgres +++ b/docker/docker-compose-openmetadata/env-postgres @@ -82,15 +82,13 @@ OM_SM_ACCESS_KEY="" OM_EMAIL_ENTITY="OpenMetadata" OM_SUPPORT_URL="https://slack.open-metadata.org" AUTHORIZER_ENABLE_SMTP="false" -OPENMETADATA_SERVER_URL="" +OPENMETADATA_SERVER_URL="http://localhost:8585" OPENMETADATA_SMTP_SENDER_MAIL="" SMTP_SERVER_ENDPOINT="" SMTP_SERVER_PORT="" SMTP_SERVER_USERNAME="" SMTP_SERVER_PWD="" SMTP_SERVER_STRATEGY="SMTP_TLS" -#changeEventConfig -OM_URI= "http://localhost:8585" #extensionConfiguration OM_RESOURCE_PACKAGES="[]" OM_EXTENSIONS="[]" diff --git a/docker/docker-compose-quickstart/docker-compose-postgres.yml b/docker/docker-compose-quickstart/docker-compose-postgres.yml index aa623797e94..de28b87f800 100644 --- a/docker/docker-compose-quickstart/docker-compose-postgres.yml +++ b/docker/docker-compose-quickstart/docker-compose-postgres.yml @@ -158,10 +158,7 @@ services: SMTP_SERVER_USERNAME: ${SMTP_SERVER_USERNAME:-""} SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - + # Heap OPTS Configurations OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G} # Mask passwords values in UI @@ -304,9 +301,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - # Heap OPTS Configurations OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G} # Mask passwords values in UI diff --git a/docker/docker-compose-quickstart/docker-compose.yml b/docker/docker-compose-quickstart/docker-compose.yml index 91be96da1ce..527c39305e8 100644 --- a/docker/docker-compose-quickstart/docker-compose.yml +++ b/docker/docker-compose-quickstart/docker-compose.yml @@ -157,9 +157,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - # Heap OPTS Configurations OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G} # Mask passwords values in UI @@ -302,9 +299,6 @@ services: SMTP_SERVER_PWD: ${SMTP_SERVER_PWD:-""} SMTP_SERVER_STRATEGY: ${SMTP_SERVER_STRATEGY:-"SMTP_TLS"} - #changeEventConfig - OM_URI: ${OM_URI:- "http://localhost:8585"} - # Heap OPTS Configurations OPENMETADATA_HEAP_OPTS: ${OPENMETADATA_HEAP_OPTS:--Xmx1G -Xms1G} # Mask passwords values in UI diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/ChangeEventConfig.java b/openmetadata-service/src/main/java/org/openmetadata/service/ChangeEventConfig.java deleted file mode 100644 index 614f1c063f0..00000000000 --- a/openmetadata-service/src/main/java/org/openmetadata/service/ChangeEventConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.openmetadata.service; - -import org.openmetadata.api.configuration.ChangeEventConfiguration; - -public class ChangeEventConfig { - private static ChangeEventConfiguration instance; - private static volatile boolean initialized = false; - - private ChangeEventConfig() { - /* Hide constructor for singleton */ - } - - public static void initialize(OpenMetadataApplicationConfig config) { - if (!initialized) { - instance = config.getChangeEventConfiguration(); - initialized = true; - } - } - - public static ChangeEventConfiguration getInstance() { - return instance; - } -} diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java b/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java index 260a3d7041c..e4bd4482070 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java @@ -132,7 +132,6 @@ public class OpenMetadataApplication extends Application { @Override public String getEntityUrl(String entityType, String fqn) { return String.format( - "%s", ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim(), fqn.trim()); + "%s", getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim(), fqn.trim()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/GChatMessageDecorator.java b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/GChatMessageDecorator.java index 40a5869e9ae..00a259e393f 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/GChatMessageDecorator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/GChatMessageDecorator.java @@ -15,12 +15,12 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity; import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages; +import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.openmetadata.schema.type.ChangeEvent; -import org.openmetadata.service.ChangeEventConfig; import org.openmetadata.service.events.subscription.gchat.GChatMessage; import org.openmetadata.service.resources.feeds.MessageParser; @@ -60,7 +60,7 @@ public class GChatMessageDecorator implements MessageDecorator { public String getEntityUrl(String entityType, String fqn) { return String.format( "<%s/%s/%s|%s>", - ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim().replace(" ", "%20"), fqn.trim()); + getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim().replace(" ", "%20"), fqn.trim()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java index 7ff99a3dbf8..4e82a502d4d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java @@ -15,12 +15,12 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity; import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages; +import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.openmetadata.schema.type.ChangeEvent; -import org.openmetadata.service.ChangeEventConfig; import org.openmetadata.service.events.subscription.msteams.TeamsMessage; import org.openmetadata.service.resources.feeds.MessageParser; @@ -58,7 +58,7 @@ public class MSTeamsMessageDecorator implements MessageDecorator { @Override public String getEntityUrl(String entityType, String fqn) { - return String.format("[%s](/%s/%s)", fqn.trim(), ChangeEventConfig.getInstance().getOmUri(), entityType); + return String.format("[%s](/%s/%s)", fqn.trim(), getSmtpSettings().getOpenMetadataUrl(), entityType); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/SlackMessageDecorator.java b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/SlackMessageDecorator.java index d4288feec24..9c9f3fe7e63 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/SlackMessageDecorator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/SlackMessageDecorator.java @@ -15,13 +15,13 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.service.events.subscription.AlertsRuleEvaluator.getEntity; import static org.openmetadata.service.formatter.util.FormatterUtil.getFormattedMessages; +import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.openmetadata.schema.tests.TestCase; import org.openmetadata.schema.type.ChangeEvent; -import org.openmetadata.service.ChangeEventConfig; import org.openmetadata.service.Entity; import org.openmetadata.service.events.subscription.slack.SlackAttachment; import org.openmetadata.service.events.subscription.slack.SlackMessage; @@ -62,7 +62,7 @@ public class SlackMessageDecorator implements MessageDecorator { public String getEntityUrl(String entityType, String fqn) { return String.format( "<%s/%s/%s|%s>", - ChangeEventConfig.getInstance().getOmUri(), entityType, fqn.trim().replaceAll(" ", "%20"), fqn.trim()); + getSmtpSettings().getOpenMetadataUrl(), entityType, fqn.trim().replaceAll(" ", "%20"), fqn.trim()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/system/SystemResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/system/SystemResource.java index ff90e6cc293..624b74fa634 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/system/SystemResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/system/SystemResource.java @@ -1,5 +1,6 @@ package org.openmetadata.service.resources.system; +import freemarker.template.TemplateException; import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; @@ -10,6 +11,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import java.io.IOException; import javax.json.JsonPatch; import javax.validation.Valid; import javax.ws.rs.Consumes; @@ -38,6 +40,7 @@ import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.SystemRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.security.Authorizer; +import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.ResultList; @Path("/v1/system") @@ -123,6 +126,25 @@ public class SystemResource { return systemRepository.createOrUpdate(settingName); } + @PUT + @Path("/email/test") + @Operation( + operationId = "sendTestEmail", + summary = "Sends a Test Email", + description = "Sends a Test Email with Provided Settings", + responses = { + @ApiResponse( + responseCode = "200", + description = "EmailTest", + content = @Content(mediaType = "application/json", schema = @Schema(implementation = String.class))) + }) + public Response sendTestEmail(@Context UriInfo uriInfo, @Context SecurityContext securityContext, String email) + throws TemplateException, IOException { + authorizer.authorizeAdmin(securityContext); + EmailUtil.sendTestEmail(email); + return Response.status(Response.Status.OK).entity("Test Email Sent Successfully.").build(); + } + @PATCH @Path("/settings/{settingName}") @Operation( diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java index 047b9ab4bd8..a2be8c0da5c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java @@ -29,6 +29,7 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.MAX_FAI import static org.openmetadata.service.exception.CatalogExceptionMessage.SELF_SIGNUP_ERROR; import static org.openmetadata.service.exception.CatalogExceptionMessage.TOKEN_EXPIRY_ERROR; import static org.openmetadata.service.resources.teams.UserResource.USER_PROTECTED_FIELDS; +import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import at.favre.lib.crypto.bcrypt.BCrypt; import freemarker.template.TemplateException; @@ -166,7 +167,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { String emailVerificationLink = String.format( "%s/users/registrationConfirmation?user=%s&token=%s", - EmailUtil.buildBaseUrl(uriInfo.getRequestUri()), user.getFullyQualifiedName(), mailVerificationToken); + getSmtpSettings().getOpenMetadataUrl(), user.getFullyQualifiedName(), mailVerificationToken); try { EmailUtil.sendEmailVerification(emailVerificationLink, user); } catch (TemplateException e) { @@ -187,7 +188,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { String passwordResetLink = String.format( "%s/users/password/reset?user=%s&token=%s", - EmailUtil.buildBaseUrl(uriInfo.getRequestUri()), user.getFullyQualifiedName(), mailVerificationToken); + getSmtpSettings().getOpenMetadataUrl(), user.getFullyQualifiedName(), mailVerificationToken); try { EmailUtil.sendPasswordResetLink(passwordResetLink, user, subject, templateFilePath); } catch (TemplateException e) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java index 5b00d8d76b8..e6e0404152c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java @@ -23,7 +23,6 @@ import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; -import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; @@ -78,9 +77,10 @@ public class EmailUtil { public static final String CHANGE_EVENT_TEMPLATE = "changeEvent.ftl"; public static final String INVITE_CREATE_PWD = "invite-createPassword.ftl"; public static final String TASK_NOTIFICATION_TEMPLATE = "taskAssignment.ftl"; - private static final String REPORT_SUBJECT = "%s: Data Insights Weekly - %s"; public static final String DATA_INSIGHT_REPORT_TEMPLATE = "dataInsightReport.ftl"; + public static final String TEST_EMAIL_TEMPLATE = "testMail.ftl"; + public static final String TEST_EMAIL_SUBJECT = "%s : Test Email"; private static SmtpSettings storedSmtpSettings; private static Mailer mailer; private static final Configuration templateConfiguration = new Configuration(VERSION_2_3_28); @@ -110,11 +110,12 @@ public class EmailUtil { strategy = SMTP; break; } + String username = + CommonUtil.nullOrEmpty(smtpServerSettings.getUsername()) ? null : smtpServerSettings.getUsername(); + String password = + CommonUtil.nullOrEmpty(smtpServerSettings.getPassword()) ? null : smtpServerSettings.getPassword(); return MailerBuilder.withSMTPServer( - smtpServerSettings.getServerEndpoint(), - smtpServerSettings.getServerPort(), - smtpServerSettings.getUsername(), - smtpServerSettings.getPassword()) + smtpServerSettings.getServerEndpoint(), smtpServerSettings.getServerPort(), username, password) .withTransportStrategy(strategy) .buildMailer(); } @@ -246,19 +247,6 @@ public class EmailUtil { } } - public static String buildBaseUrl(URI uri) { - try { - if (CommonUtil.nullOrEmpty(getSmtpSettings().getOpenMetadataUrl())) { - return String.format("%s://%s", uri.getScheme(), uri.getHost()); - } else { - URI serverUrl = new URI(getSmtpSettings().getOpenMetadataUrl()); - return String.format("%s://%s", serverUrl.getScheme(), serverUrl.getHost()); - } - } catch (Exception ex) { - throw new IllegalArgumentException("Missing URI info from URI and SMTP settings."); - } - } - public static void sendInviteMailToAdmin(User user, String pwd) { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { Map templatePopulator = new HashMap<>(); @@ -330,6 +318,18 @@ public class EmailUtil { } } + public static void sendTestEmail(String email) throws IOException, TemplateException { + if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { + Map templatePopulator = new HashMap<>(); + templatePopulator.put("userName", email.split("@")[0]); + templatePopulator.put("entity", getSmtpSettings().getEmailingEntity()); + templatePopulator.put("supportUrl", getSmtpSettings().getSupportUrl()); + sendMail(getTestEmailSubject(), templatePopulator, email, EMAIL_TEMPLATE_BASEPATH, TEST_EMAIL_TEMPLATE); + } else { + LOG.warn(EMAIL_IGNORE_MSG, email); + } + } + public static void testConnection() { mailer.testConnection(); } @@ -358,6 +358,10 @@ public class EmailUtil { return String.format(TASK_SUBJECT, getSmtpSettings().getEmailingEntity()); } + public static String getTestEmailSubject() { + return String.format(TEST_EMAIL_SUBJECT, getSmtpSettings().getEmailingEntity()); + } + public static String getDataInsightReportSubject() { return String.format( REPORT_SUBJECT, getSmtpSettings().getEmailingEntity(), new SimpleDateFormat("dd-MM-yy").format(new Date())); @@ -375,7 +379,7 @@ public class EmailUtil { return getSmtpSettings().getOpenMetadataUrl(); } - private static SmtpSettings getSmtpSettings() { + public static SmtpSettings getSmtpSettings() { SmtpSettings emailConfig = SettingsCache.getSetting(SettingsType.EMAIL_CONFIGURATION, SmtpSettings.class); if (!emailConfig.equals(storedSmtpSettings)) { storedSmtpSettings = emailConfig; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/NotificationHandler.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/NotificationHandler.java index de9b274946f..4b39bdfc240 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/NotificationHandler.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/NotificationHandler.java @@ -15,6 +15,7 @@ package org.openmetadata.service.util; import static org.openmetadata.service.Entity.TEAM; import static org.openmetadata.service.Entity.USER; +import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -162,7 +163,7 @@ public class NotificationHandler { EmailUtil.sendTaskAssignmentNotificationToUser( user.getName(), user.getEmail(), - String.format("%s/users/%s/tasks", EmailUtil.buildBaseUrl(urlInstance), user.getName()), + String.format("%s/users/%s/tasks", getSmtpSettings().getOpenMetadataUrl(), user.getName()), thread, EmailUtil.getTaskAssignmentSubject(), EmailUtil.TASK_NOTIFICATION_TEMPLATE); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/workflows/searchIndex/PaginatedEntitiesSource.java b/openmetadata-service/src/main/java/org/openmetadata/service/workflows/searchIndex/PaginatedEntitiesSource.java index 8e6907c4d90..5df6b13124b 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/workflows/searchIndex/PaginatedEntitiesSource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/workflows/searchIndex/PaginatedEntitiesSource.java @@ -126,11 +126,6 @@ public class PaginatedEntitiesSource implements Source + + + + +
 
+ + + +
+ + + +
+

+ + + + + + +
+ + + + + + +
+ Email Test +
+

+
+
+

+ + + + + + +
+

Hi ${userName},

+
+ This is a Test Email, receiving this Email Confirms that you have successfully configured OpenMetadata to send Mails. +

Feel free to reachout to us on  Slack for any questions you may have.

+

Thanks,
The ${entity} Team

+
+
\ No newline at end of file diff --git a/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml b/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml index c95a9ee50b6..f1ebff67803 100644 --- a/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml +++ b/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml @@ -216,7 +216,7 @@ email: enableSmtpServer : false emailingEntity: "" supportUrl: "" - openMetadataUrl: "" + openMetadataUrl: "http://localhost:8585" senderMail: "" serverEndpoint: "" serverPort: ""