diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/changeEvent/email/EmailPublisher.java b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/changeEvent/email/EmailPublisher.java index dc882e2963a..cc31a5c0ff3 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/changeEvent/email/EmailPublisher.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/changeEvent/email/EmailPublisher.java @@ -31,8 +31,8 @@ import org.openmetadata.service.exception.CatalogExceptionMessage; import org.openmetadata.service.formatter.decorators.EmailMessageDecorator; import org.openmetadata.service.formatter.decorators.MessageDecorator; import org.openmetadata.service.jdbi3.CollectionDAO; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.JsonUtils; +import org.openmetadata.service.util.email.EmailUtil; @Slf4j public class EmailPublisher implements Destination { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java index 6ca4ccbe0cd..998b1fae172 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java @@ -6,6 +6,7 @@ import static org.openmetadata.service.Entity.TEAM; import static org.openmetadata.service.apps.scheduler.AppScheduler.APP_NAME; import static org.openmetadata.service.util.SubscriptionUtil.getAdminsData; import static org.openmetadata.service.util.Utilities.getMonthAndDateFromEpoch; +import static org.openmetadata.service.util.email.TemplateConstants.DATA_INSIGHT_REPORT_TEMPLATE; import java.io.IOException; import java.util.HashMap; @@ -41,10 +42,10 @@ import org.openmetadata.service.jdbi3.KpiRepository; import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.search.SearchClient; import org.openmetadata.service.search.SearchRepository; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.ResultList; import org.openmetadata.service.util.Utilities; +import org.openmetadata.service.util.email.EmailUtil; import org.openmetadata.service.workflows.searchIndex.PaginatedEntitiesSource; import org.quartz.JobExecutionContext; @@ -142,7 +143,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication { ownershipTemplate, tierTemplate, EmailUtil.getDataInsightReportSubject(), - EmailUtil.DATA_INSIGHT_REPORT_TEMPLATE); + DATA_INSIGHT_REPORT_TEMPLATE); } catch (Exception ex) { LOG.error( "[DataInsightReport] Failed for Team: {}, Reason : {}", @@ -177,7 +178,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication { ownershipTemplate, tierTemplate, EmailUtil.getDataInsightReportSubject(), - EmailUtil.DATA_INSIGHT_REPORT_TEMPLATE); + DATA_INSIGHT_REPORT_TEMPLATE); } catch (Exception ex) { LOG.error("[DataInsightReport] Failed for Admin, Reason : {}", ex.getMessage(), ex); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/EmailMessageDecorator.java b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/EmailMessageDecorator.java index 1bda0605d4a..f9345f7d27d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/EmailMessageDecorator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/EmailMessageDecorator.java @@ -14,7 +14,7 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.Collections; 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 d3cad6e90d5..4fbf0c6ba39 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 @@ -14,7 +14,7 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; 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 a977e829a78..68e432a5ca4 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 @@ -14,7 +14,7 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; 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 42066979825..27607275cd0 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 @@ -14,7 +14,7 @@ package org.openmetadata.service.formatter.decorators; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import java.util.ArrayList; import java.util.List; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java index 323f97be73a..b49499d4ee1 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java @@ -30,10 +30,10 @@ import org.openmetadata.service.Entity; import org.openmetadata.service.exception.EntityNotFoundException; import org.openmetadata.service.resources.docstore.DocStoreResource; import org.openmetadata.service.resources.settings.SettingsCache; -import org.openmetadata.service.util.DefaultTemplateProvider; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.JsonUtils; -import org.openmetadata.service.util.TemplateProvider; +import org.openmetadata.service.util.email.DefaultTemplateProvider; +import org.openmetadata.service.util.email.TemplateProvider; @Slf4j public class DocumentRepository extends EntityRepository { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/SystemRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/SystemRepository.java index 598049453b2..6f268bebbc0 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/SystemRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/SystemRepository.java @@ -99,13 +99,8 @@ public class SystemRepository { if (fetchedSettings == null) { return null; } - if (fetchedSettings.getConfigType() == SettingsType.EMAIL_CONFIGURATION) { - SmtpSettings emailConfig = (SmtpSettings) fetchedSettings.getConfigValue(); - emailConfig.setPassword("***********"); - fetchedSettings.setConfigValue(emailConfig); - } - return fetchedSettings; + return fetchedSettings; } catch (Exception ex) { LOG.error("Error while trying fetch Settings ", ex); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/docstore/DocStoreResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/docstore/DocStoreResource.java index a5f0409ae1c..fb69f12fec2 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/docstore/DocStoreResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/docstore/DocStoreResource.java @@ -64,9 +64,9 @@ import org.openmetadata.service.limits.Limits; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.resources.EntityResource; import org.openmetadata.service.security.Authorizer; -import org.openmetadata.service.util.DefaultTemplateProvider; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.ResultList; +import org.openmetadata.service.util.email.DefaultTemplateProvider; @Slf4j @Path("/v1/docStore") 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 d327ebc568d..743632c8025 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 @@ -46,8 +46,8 @@ import org.openmetadata.service.jdbi3.SystemRepository; import org.openmetadata.service.resources.Collection; import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.security.JwtFilter; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.ResultList; +import org.openmetadata.service.util.email.EmailUtil; @Path("/v1/system") @Tag(name = "System", description = "APIs related to System configuration and settings.") diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java index 8a6e406c5fd..999cdd326af 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java @@ -27,12 +27,12 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.EMAIL_S import static org.openmetadata.service.jdbi3.UserRepository.AUTH_MECHANISM_FIELD; import static org.openmetadata.service.secrets.ExternalSecretsManager.NULL_SECRET_STRING; import static org.openmetadata.service.security.jwt.JWTTokenGenerator.getExpiryDate; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; import static org.openmetadata.service.util.UserUtil.getRoleListFromUser; import static org.openmetadata.service.util.UserUtil.getRolesFromAuthorizationToken; import static org.openmetadata.service.util.UserUtil.getUser; import static org.openmetadata.service.util.UserUtil.reSyncUserRolesFromToken; import static org.openmetadata.service.util.UserUtil.validateAndGetRolesRef; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import at.favre.lib.crypto.bcrypt.BCrypt; import freemarker.template.TemplateException; @@ -146,7 +146,6 @@ import org.openmetadata.service.security.mask.PIIMasker; import org.openmetadata.service.security.policyevaluator.OperationContext; import org.openmetadata.service.security.policyevaluator.ResourceContext; import org.openmetadata.service.security.saml.JwtTokenCacheManager; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.JsonUtils; @@ -154,6 +153,8 @@ import org.openmetadata.service.util.PasswordUtil; import org.openmetadata.service.util.RestUtil.PutResponse; import org.openmetadata.service.util.ResultList; import org.openmetadata.service.util.TokenUtil; +import org.openmetadata.service.util.email.EmailUtil; +import org.openmetadata.service.util.email.TemplateConstants; @Slf4j @Path("/v1/users") @@ -644,7 +645,7 @@ public class UserResource extends EntityResource { authHandler.sendInviteMailToUser( uriInfo, user, - String.format("Welcome to %s", EmailUtil.getEmailingEntity()), + String.format("Welcome to %s", EmailUtil.getSmtpSettings().getEmailingEntity()), create.getCreatePasswordType(), create.getPassword()); } catch (Exception ex) { @@ -1074,7 +1075,7 @@ public class UserResource extends EntityResource { uriInfo, registeredUser, EmailUtil.getPasswordResetSubject(), - EmailUtil.PASSWORD_RESET_TEMPLATE_FILE); + TemplateConstants.RESET_LINK_TEMPLATE); } catch (Exception ex) { LOG.error("Error in sending mail for reset password" + ex.getMessage()); return Response.status(424).entity(new ErrorMessage(424, EMAIL_SENDING_ISSUE)).build(); 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 11daa6041f9..e6c2041c5f6 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 @@ -37,9 +37,17 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.SELF_SI import static org.openmetadata.service.exception.CatalogExceptionMessage.TOKEN_EXPIRED; 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 static org.openmetadata.service.util.UserUtil.getRoleListFromUser; import static org.openmetadata.service.util.UserUtil.getUser; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.sendAccountStatus; +import static org.openmetadata.service.util.email.TemplateConstants.APPLICATION_LOGIN_LINK; +import static org.openmetadata.service.util.email.TemplateConstants.ENTITY; +import static org.openmetadata.service.util.email.TemplateConstants.INVITE_CREATE_PASSWORD_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.INVITE_RANDOM_PASSWORD_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.PASSWORD; +import static org.openmetadata.service.util.email.TemplateConstants.SUPPORT_URL; +import static org.openmetadata.service.util.email.TemplateConstants.USERNAME; import at.favre.lib.crypto.bcrypt.BCrypt; import freemarker.template.TemplateException; @@ -81,12 +89,12 @@ import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.security.AuthenticationException; import org.openmetadata.service.security.SecurityUtil; import org.openmetadata.service.security.jwt.JWTTokenGenerator; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.EntityUtil; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.PasswordUtil; import org.openmetadata.service.util.RestUtil.PutResponse; import org.openmetadata.service.util.TokenUtil; +import org.openmetadata.service.util.email.EmailUtil; @Slf4j public class BasicAuthenticator implements AuthenticatorHandler { @@ -253,7 +261,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { // Update user about Password Change try { - EmailUtil.sendAccountStatus(storedUser, "Update Password", "Change Successful"); + sendAccountStatus(storedUser, "Update Password", "Change Successful"); } catch (TemplateException ex) { LOG.error("Error in sending Password Change Mail to User. Reason : " + ex.getMessage(), ex); throw new CustomExceptionMessage(424, FAILED_SEND_EMAIL, EMAIL_SENDING_ISSUE); @@ -311,7 +319,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { sendInviteMailToUser( uriInfo, response.getEntity(), - String.format("%s: Password Update", EmailUtil.getEmailingEntity()), + String.format("%s: Password Update", getSmtpSettings().getEmailingEntity()), ADMIN_CREATE, request.getNewPassword()); } @@ -328,14 +336,14 @@ public class BasicAuthenticator implements AuthenticatorHandler { switch (requestType) { case ADMIN_CREATE -> { Map templatePopulator = new HashMap<>(); - templatePopulator.put(EmailUtil.ENTITY, EmailUtil.getEmailingEntity()); - templatePopulator.put(EmailUtil.SUPPORT_URL, EmailUtil.getSupportUrl()); - templatePopulator.put(EmailUtil.USERNAME, user.getName()); - templatePopulator.put(EmailUtil.PASSWORD, pwd); - templatePopulator.put(EmailUtil.APPLICATION_LOGIN_LINK, EmailUtil.getOMUrl()); + templatePopulator.put(ENTITY, getSmtpSettings().getEmailingEntity()); + templatePopulator.put(SUPPORT_URL, getSmtpSettings().getSupportUrl()); + templatePopulator.put(USERNAME, user.getName()); + templatePopulator.put(PASSWORD, pwd); + templatePopulator.put(APPLICATION_LOGIN_LINK, getSmtpSettings().getOpenMetadataUrl()); try { EmailUtil.sendMail( - subject, templatePopulator, user.getEmail(), EmailUtil.INVITE_RANDOM_PWD, true); + subject, templatePopulator, user.getEmail(), INVITE_RANDOM_PASSWORD_TEMPLATE, true); } catch (TemplateException ex) { LOG.error( "Failed in sending Mail to user [{}]. Reason : {}", @@ -345,7 +353,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { } } case USER_CREATE -> sendPasswordResetLink( - uriInfo, user, subject, EmailUtil.INVITE_CREATE_PWD); + uriInfo, user, subject, INVITE_CREATE_PASSWORD_TEMPLATE); default -> LOG.error("Invalid Password Create Type"); } } @@ -478,7 +486,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { loginAttemptCache.recordFailedLogin(providedIdentity); int failedLoginAttempt = loginAttemptCache.getUserFailedLoginCount(providedIdentity); if (failedLoginAttempt == SecurityUtil.getLoginConfiguration().getMaxLoginFailAttempts()) { - EmailUtil.sendAccountStatus( + sendAccountStatus( storedUser, "Multiple Failed Login Attempts.", String.format( diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/LdapAuthenticator.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/LdapAuthenticator.java index 62911784fe9..005910e0de4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/LdapAuthenticator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/LdapAuthenticator.java @@ -68,11 +68,11 @@ import org.openmetadata.service.jdbi3.UserRepository; import org.openmetadata.service.security.AuthenticationException; import org.openmetadata.service.security.SecurityUtil; import org.openmetadata.service.security.jwt.JWTTokenGenerator; -import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.JsonUtils; import org.openmetadata.service.util.LdapUtil; import org.openmetadata.service.util.TokenUtil; import org.openmetadata.service.util.UserUtil; +import org.openmetadata.service.util.email.EmailUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/UserUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/UserUtil.java index 07e7bab59a2..01fe23b3a6c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/UserUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/UserUtil.java @@ -51,6 +51,7 @@ import org.openmetadata.service.security.auth.CatalogSecurityContext; import org.openmetadata.service.security.jwt.JWTTokenGenerator; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.RestUtil.PutResponse; +import org.openmetadata.service.util.email.EmailUtil; @Slf4j public final class UserUtil { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/DefaultTemplateProvider.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/DefaultTemplateProvider.java similarity index 72% rename from openmetadata-service/src/main/java/org/openmetadata/service/util/DefaultTemplateProvider.java rename to openmetadata-service/src/main/java/org/openmetadata/service/util/email/DefaultTemplateProvider.java index 42c7ffe34d9..a288ca70194 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/DefaultTemplateProvider.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/DefaultTemplateProvider.java @@ -1,12 +1,12 @@ -package org.openmetadata.service.util; +package org.openmetadata.service.util.email; + +import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.IOException; import java.io.StringReader; import java.util.HashSet; -import java.util.List; -import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -15,7 +15,6 @@ import lombok.extern.slf4j.Slf4j; import org.openmetadata.schema.email.EmailTemplate; import org.openmetadata.schema.email.EmailTemplatePlaceholder; import org.openmetadata.schema.email.TemplateValidationResponse; -import org.openmetadata.schema.entities.docStore.Document; import org.openmetadata.service.Entity; import org.openmetadata.service.jdbi3.DocumentRepository; @@ -32,7 +31,7 @@ public class DefaultTemplateProvider implements TemplateProvider { public Template getTemplate(String templateName) throws IOException { EmailTemplate emailTemplate = documentRepository.fetchEmailTemplateByName(templateName); String template = emailTemplate.getTemplate(); - if (template == null || template.isEmpty()) { + if (nullOrEmpty(template)) { throw new IOException("Template content not found for template: " + templateName); } @@ -40,33 +39,6 @@ public class DefaultTemplateProvider implements TemplateProvider { templateName, new StringReader(template), new Configuration(Configuration.VERSION_2_3_31)); } - public Map> getDocumentPlaceHolders() { - List documents = documentRepository.fetchAllEmailTemplates(); - - return documents.stream() - .collect( - Collectors.toMap( - Document::getName, - document -> { - EmailTemplate emailTemplate = - JsonUtils.convertValue(document.getData(), EmailTemplate.class); - return emailTemplate.getPlaceHolders(); - })); - } - - public Map> getPlaceholdersFromTemplate() { - List listOfDocuments = documentRepository.fetchAllEmailTemplates(); - - return listOfDocuments.stream() - .collect( - Collectors.toMap( - Document::getName, - document -> - extractPlaceholders( - JsonUtils.convertValue(document.getData(), EmailTemplate.class) - .getTemplate()))); - } - @Override public TemplateValidationResponse validateEmailTemplate(String docName, String actualContent) { Set expectedPlaceholders = diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/EmailUtil.java similarity index 64% rename from openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java rename to openmetadata-service/src/main/java/org/openmetadata/service/util/email/EmailUtil.java index a6420a86cd2..a87018d7981 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/EmailUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/EmailUtil.java @@ -11,8 +11,32 @@ * limitations under the License. */ -package org.openmetadata.service.util; +package org.openmetadata.service.util.email; +import static org.openmetadata.service.util.email.TemplateConstants.ACCOUNT_ACTIVITY_CHANGE_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.ACCOUNT_STATUS_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.ACTION_KEY; +import static org.openmetadata.service.util.email.TemplateConstants.ACTION_STATUS_KEY; +import static org.openmetadata.service.util.email.TemplateConstants.APPLICATION_LOGIN_LINK; +import static org.openmetadata.service.util.email.TemplateConstants.CHANGE_EVENT_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.CHANGE_EVENT_UPDATE; +import static org.openmetadata.service.util.email.TemplateConstants.DEFAULT_EXPIRATION_TIME; +import static org.openmetadata.service.util.email.TemplateConstants.EMAIL_IGNORE_MSG; +import static org.openmetadata.service.util.email.TemplateConstants.EMAIL_VERIFICATION_LINKKEY; +import static org.openmetadata.service.util.email.TemplateConstants.EMAIL_VERIFICATION_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.EMAIL_VERIFICATION_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.ENTITY; +import static org.openmetadata.service.util.email.TemplateConstants.EXPIRATION_TIME_KEY; +import static org.openmetadata.service.util.email.TemplateConstants.INVITE_RANDOM_PASSWORD_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.INVITE_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.PASSWORD; +import static org.openmetadata.service.util.email.TemplateConstants.PASSWORD_RESET_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.REPORT_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.SUPPORT_URL; +import static org.openmetadata.service.util.email.TemplateConstants.TASK_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.TEST_EMAIL_SUBJECT; +import static org.openmetadata.service.util.email.TemplateConstants.TEST_MAIL_TEMPLATE; +import static org.openmetadata.service.util.email.TemplateConstants.USERNAME; import static org.simplejavamail.api.mailer.config.TransportStrategy.SMTP; import static org.simplejavamail.api.mailer.config.TransportStrategy.SMTPS; import static org.simplejavamail.api.mailer.config.TransportStrategy.SMTP_TLS; @@ -22,6 +46,7 @@ import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -46,46 +71,8 @@ import org.simplejavamail.mailer.MailerBuilder; @Slf4j public class EmailUtil { - public static final String USERNAME = "userName"; - public static final String ENTITY = "entity"; - public static final String SUPPORT_URL = "supportUrl"; - // Email Verification - private static final String EMAIL_VERIFICATION_SUBJECT = - "%s: Verify your Email Address (Action Required)"; - public static final String EMAIL_VERIFICATION_LINKKEY = "userEmailTokenVerificationLink"; - public static final String EMAIL_VERIFICATION_TEMPLATE = "email-verification"; - // Password Reset Link - private static final String PASSWORD_RESET_SUBJECT = "%s: Reset your Password"; - public static final String PASSWORD_RESET_LINKKEY = "userResetPasswordLink"; - public static final String EXPIRATION_TIME_KEY = "expirationTime"; - public static final String DEFAULT_EXPIRATION_TIME = "60"; - public static final String PASSWORD = "password"; - public static final String APPLICATION_LOGIN_LINK = "applicationLoginLink"; - public static final String PASSWORD_RESET_TEMPLATE_FILE = "reset-link"; - // Account Change Status - private static final String ACCOUNT_STATUS_SUBJECT = "%s: Change in Account Status"; - public static final String ACTION_KEY = "action"; - public static final String ACTION_STATUS_KEY = "actionStatus"; - public static final String ACCOUNT_STATUS_TEMPLATE_FILE = "account-activity-change"; - private static final String INVITE_SUBJECT = "Welcome to %s"; - private static final String CHANGE_EVENT_UPDATE = "[%s] - Change Event Update from %s"; - - private static final String TASK_SUBJECT = "%s : Task Assignment Notification"; - public static final String INVITE_RANDOM_PWD = "invite-randompwd"; - - public static final String CHANGE_EVENT_TEMPLATE = "changeEvent"; - public static final String INVITE_CREATE_PWD = "invite-createPassword"; - public static final String TASK_NOTIFICATION_TEMPLATE = "taskAssignment"; - private static final String REPORT_SUBJECT = "%s: Data Insights Weekly - %s"; - public static final String DATA_INSIGHT_REPORT_TEMPLATE = "dataInsightReport"; - public static final String TEST_EMAIL_TEMPLATE = "testMail"; - public static final String TEST_EMAIL_SUBJECT = "%s : Test Email"; - private static SmtpSettings storedSmtpSettings; private static Mailer mailer; - - private static final String EMAIL_IGNORE_MSG = - "Email was not sent to {} as SMTP setting is not enabled"; - + private static SmtpSettings storedSmtpSettings; private static TemplateProvider templateProvider; static { @@ -93,7 +80,6 @@ public class EmailUtil { initializeTemplateProvider(); } - // initialize template provider private static void initializeTemplateProvider() { templateProvider = new DefaultTemplateProvider(); } @@ -102,7 +88,7 @@ public class EmailUtil { try { getSmtpSettings(); initializeTemplateProvider(); - LOG.info("Email Util cache is initialized"); + LOG.info("Email Util Cache is initialized"); } catch (Exception ex) { LOG.warn("[MAILER] Smtp Configurations are missing : Reason {} ", ex.getMessage(), ex); } @@ -137,18 +123,22 @@ public class EmailUtil { public static void sendAccountStatus(User user, String action, String status) throws IOException, TemplateException { + if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put(ENTITY, getEmailingEntity()); - templatePopulator.put(SUPPORT_URL, getSupportUrl()); - templatePopulator.put(USERNAME, user.getName()); - templatePopulator.put(ACTION_KEY, action); - templatePopulator.put(ACTION_STATUS_KEY, status); + Map templatePopulator = + new TemplatePopulatorBuilder() + .add(ENTITY, getSmtpSettings().getEmailingEntity()) + .add(SUPPORT_URL, getSmtpSettings().getSupportUrl()) + .add(USERNAME, user.getName()) + .add(ACTION_KEY, action) + .add(ACTION_STATUS_KEY, status) + .build(); + sendMail( getAccountStatusChangeSubject(), templatePopulator, user.getEmail(), - ACCOUNT_STATUS_TEMPLATE_FILE, + ACCOUNT_ACTIVITY_CHANGE_TEMPLATE, true); } else { LOG.warn(EMAIL_IGNORE_MSG, user.getEmail()); @@ -158,12 +148,16 @@ public class EmailUtil { public static void sendEmailVerification(String emailVerificationLink, User user) throws IOException, TemplateException { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put(ENTITY, getEmailingEntity()); - templatePopulator.put(SUPPORT_URL, getSupportUrl()); - templatePopulator.put(USERNAME, user.getName()); - templatePopulator.put(EMAIL_VERIFICATION_LINKKEY, emailVerificationLink); - templatePopulator.put(EXPIRATION_TIME_KEY, "24"); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add(ENTITY, getSmtpSettings().getEmailingEntity()) + .add(SUPPORT_URL, getSmtpSettings().getSupportUrl()) + .add(USERNAME, user.getName()) + .add(EMAIL_VERIFICATION_LINKKEY, emailVerificationLink) + .add(EXPIRATION_TIME_KEY, "24") + .build(); + sendMail( getEmailVerificationSubject(), templatePopulator, @@ -179,12 +173,15 @@ public class EmailUtil { String passwordResetLink, User user, String subject, String templateFilePath) throws IOException, TemplateException { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put(ENTITY, getEmailingEntity()); - templatePopulator.put(SUPPORT_URL, getSupportUrl()); - templatePopulator.put(USERNAME, user.getName()); - templatePopulator.put(PASSWORD_RESET_LINKKEY, passwordResetLink); - templatePopulator.put(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add(ENTITY, getSmtpSettings().getEmailingEntity()) + .add(SUPPORT_URL, getSmtpSettings().getSupportUrl()) + .add(USERNAME, user.getName()) + .add(EMAIL_VERIFICATION_LINKKEY, passwordResetLink) + .add(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME) + .build(); sendMail(subject, templatePopulator, user.getEmail(), templateFilePath, true); } else { @@ -201,15 +198,18 @@ public class EmailUtil { String templateFilePath) throws IOException, TemplateException { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put("assignee", assigneeName); - templatePopulator.put("createdBy", thread.getCreatedBy()); - templatePopulator.put("taskName", thread.getMessage()); - templatePopulator.put("taskStatus", thread.getTask().getStatus().toString()); - templatePopulator.put("taskType", thread.getTask().getType().toString()); - templatePopulator.put("fieldOldValue", thread.getTask().getOldValue()); - templatePopulator.put("fieldNewValue", thread.getTask().getSuggestion()); - templatePopulator.put("taskLink", taskLink); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add("assignee", assigneeName) + .add("createdBy", thread.getCreatedBy()) + .add("taskName", thread.getMessage()) + .add("taskStatus", thread.getTask().getStatus().toString()) + .add("taskType", thread.getTask().getType().toString()) + .add("fieldOldValue", thread.getTask().getOldValue()) + .add("fieldNewValue", thread.getTask().getSuggestion()) + .add("taskLink", taskLink) + .build(); sendMail(subject, templatePopulator, email, templateFilePath, true); } else { @@ -267,20 +267,24 @@ public class EmailUtil { } } - public static void sendInviteMailToAdmin(User user, String pwd) { + public static void sendInviteMailToAdmin(User user, String password) { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put(EmailUtil.ENTITY, EmailUtil.getEmailingEntity()); - templatePopulator.put(EmailUtil.SUPPORT_URL, EmailUtil.getSupportUrl()); - templatePopulator.put(EmailUtil.USERNAME, user.getName()); - templatePopulator.put(EmailUtil.PASSWORD, pwd); - templatePopulator.put(EmailUtil.APPLICATION_LOGIN_LINK, EmailUtil.getOMUrl()); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add(ENTITY, getSmtpSettings().getEmailingEntity()) + .add(SUPPORT_URL, getSmtpSettings().getSupportUrl()) + .add(USERNAME, user.getName()) + .add(PASSWORD, password) + .add(APPLICATION_LOGIN_LINK, getSmtpSettings().getOpenMetadataUrl()) + .build(); + try { EmailUtil.sendMail( EmailUtil.getEmailInviteSubject(), templatePopulator, user.getEmail(), - EmailUtil.INVITE_RANDOM_PWD, + INVITE_RANDOM_PASSWORD_TEMPLATE, true); } catch (Exception ex) { LOG.error( @@ -294,22 +298,27 @@ public class EmailUtil { public static void sendChangeEventMail( String publisherName, String receiverMail, EmailMessage emailMessaged) { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put(EmailUtil.USERNAME, receiverMail.split("@")[0]); - templatePopulator.put("updatedBy", emailMessaged.getUpdatedBy()); - templatePopulator.put("entityUrl", emailMessaged.getEntityUrl()); + StringBuilder buff = new StringBuilder(); for (String cmessage : emailMessaged.getChangeMessage()) { buff.append(cmessage); buff.append("\n"); } - templatePopulator.put("changeMessage", buff.toString()); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add(USERNAME, receiverMail.split("@")[0]) + .add("updatedBy", emailMessaged.getUpdatedBy()) + .add("entityUrl", emailMessaged.getEntityUrl()) + .add("changeMessage", buff.toString()) + .build(); + try { EmailUtil.sendMail( EmailUtil.getChangeEventTemplate(publisherName), templatePopulator, receiverMail, - EmailUtil.CHANGE_EVENT_TEMPLATE, + CHANGE_EVENT_TEMPLATE, true); } catch (Exception ex) { LOG.error( @@ -332,16 +341,21 @@ public class EmailUtil { String templateFilePath) throws IOException, TemplateException { if (Boolean.TRUE.equals(getSmtpSettings().getEnableSmtpServer())) { - Map templatePopulator = new HashMap<>(); - templatePopulator.put("startDate", startDate); - templatePopulator.put("endDate", endDate); - templatePopulator.put("totalAssetObj", totalAssetObj); - templatePopulator.put("descriptionObj", descriptionObj); - templatePopulator.put("ownershipObj", ownerShipObj); - templatePopulator.put("tierObj", tierObj); - templatePopulator.put( - "viewReportUrl", - String.format("%s/data-insights/data-assets", getSmtpSettings().getOpenMetadataUrl())); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add("startDate", startDate) + .add("endDate", endDate) + .add("totalAssetObj", totalAssetObj) + .add("descriptionObj", descriptionObj) + .add("ownershipObj", ownerShipObj) + .add("tierObj", tierObj) + .add( + "viewReportUrl", + String.format( + "%s/data-insights/data-assets", getSmtpSettings().getOpenMetadataUrl())) + .build(); + sendMailToMultiple(subject, templatePopulator, emails, templateFilePath); } else { LOG.warn(EMAIL_IGNORE_MSG, emails.toString()); @@ -351,11 +365,15 @@ public class EmailUtil { public static void sendTestEmail(String email, boolean async) 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, TEST_EMAIL_TEMPLATE, async); + + Map templatePopulator = + new TemplatePopulatorBuilder() + .add("userName", email.split("@")[0]) + .add("entity", getSmtpSettings().getEmailingEntity()) + .add("supportUrl", getSmtpSettings().getSupportUrl()) + .build(); + + sendMail(getTestEmailSubject(), templatePopulator, email, TEST_MAIL_TEMPLATE, async); } else { LOG.warn(EMAIL_IGNORE_MSG, email); } @@ -404,18 +422,6 @@ public class EmailUtil { new SimpleDateFormat("dd-MM-yy").format(new Date())); } - public static String getEmailingEntity() { - return getSmtpSettings().getEmailingEntity(); - } - - public static String getSupportUrl() { - return getSmtpSettings().getSupportUrl(); - } - - public static String getOMUrl() { - return getSmtpSettings().getOpenMetadataUrl(); - } - public static SmtpSettings getSmtpSettings() { SmtpSettings emailConfig = SettingsCache.getSetting(SettingsType.EMAIL_CONFIGURATION, SmtpSettings.class); @@ -426,16 +432,27 @@ public class EmailUtil { return emailConfig; } - /** - * Check if given email address is valid - * - * @param email email address - * @return true if valid, false otherwise - */ public static Boolean isValidEmail(String email) { if (StringUtils.isBlank(email)) { return false; } return email.matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$"); } + + static class TemplatePopulatorBuilder { + private final Map templatePopulator; + + public TemplatePopulatorBuilder() { + this.templatePopulator = new HashMap<>(); + } + + public TemplatePopulatorBuilder add(String key, Object value) { + templatePopulator.put(key, value); + return this; + } + + public Map build() { + return Collections.unmodifiableMap(templatePopulator); + } + } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateConstants.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateConstants.java new file mode 100644 index 00000000000..495bcacd4e9 --- /dev/null +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateConstants.java @@ -0,0 +1,46 @@ +package org.openmetadata.service.util.email; + +public class TemplateConstants { + public static final String USERNAME = "userName"; + public static final String ENTITY = "entity"; + public static final String SUPPORT_URL = "supportUrl"; + + // templates + public static final String ACCOUNT_ACTIVITY_CHANGE_TEMPLATE = "account-activity-change"; + public static final String CHANGE_EVENT_TEMPLATE = "changeEvent"; + public static final String DATA_INSIGHT_REPORT_TEMPLATE = "dataInsightReport"; + public static final String EMAIL_VERIFICATION_TEMPLATE = "email-verification"; + public static final String INVITE_CREATE_PASSWORD_TEMPLATE = "invite-createPassword"; + public static final String INVITE_RANDOM_PASSWORD_TEMPLATE = "invite-randompwd"; + public static final String RESET_LINK_TEMPLATE = "reset-link"; + public static final String TASK_ASSIGNMENT_TEMPLATE = "taskAssignment"; + public static final String TEST_MAIL_TEMPLATE = "testMail"; + public static final String TEST_RESULT_STATUS_TEMPLATE = "testResultStatusTemplate"; + + // Email Verification + public static final String EMAIL_VERIFICATION_SUBJECT = + "%s: Verify your Email Address (Action Required)"; + public static final String EMAIL_VERIFICATION_LINKKEY = "userEmailTokenVerificationLink"; + + // Password Reset Link + public static final String PASSWORD_RESET_SUBJECT = "%s: Reset your Password"; + public static final String PASSWORD_RESET_LINKKEY = "userResetPasswordLink"; + public static final String EXPIRATION_TIME_KEY = "expirationTime"; + public static final String DEFAULT_EXPIRATION_TIME = "60"; + public static final String PASSWORD = "password"; + public static final String APPLICATION_LOGIN_LINK = "applicationLoginLink"; + + // Account Change Status + public static final String ACCOUNT_STATUS_SUBJECT = "%s: Change in Account Status"; + public static final String ACTION_KEY = "action"; + public static final String ACTION_STATUS_KEY = "actionStatus"; + public static final String INVITE_SUBJECT = "Welcome to %s"; + public static final String CHANGE_EVENT_UPDATE = "[%s] - Change Event Update from %s"; + + public static final String TASK_SUBJECT = "%s : Task Assignment Notification"; + + public static final String REPORT_SUBJECT = "%s: Data Insights Weekly - %s"; + public static final String TEST_EMAIL_SUBJECT = "%s : Test Email"; + public static final String EMAIL_IGNORE_MSG = + "Email was not sent to {} as SMTP setting is not enabled"; +} diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/TemplateProvider.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateProvider.java similarity index 65% rename from openmetadata-service/src/main/java/org/openmetadata/service/util/TemplateProvider.java rename to openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateProvider.java index e757659aa34..71fbd983b36 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/TemplateProvider.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/email/TemplateProvider.java @@ -1,10 +1,7 @@ -package org.openmetadata.service.util; +package org.openmetadata.service.util.email; import freemarker.template.Template; import java.io.IOException; -import java.util.Map; -import java.util.Set; -import org.openmetadata.schema.email.EmailTemplatePlaceholder; import org.openmetadata.schema.email.TemplateValidationResponse; public interface TemplateProvider { @@ -18,10 +15,4 @@ public interface TemplateProvider { * - "missingParameters" (List): If validation fails, lists the placeholders that are missing. */ TemplateValidationResponse validateEmailTemplate(String docName, String actualContent); - - /** - * Maps each template's name to a list of - * {@link EmailTemplatePlaceholder}s extracted from the template data. - */ - Map> getDocumentPlaceHolders(); } diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/docstore/DocStoreResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/docstore/DocStoreResourceTest.java index 76409827e88..6315fc6df75 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/docstore/DocStoreResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/docstore/DocStoreResourceTest.java @@ -8,7 +8,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.openmetadata.service.Entity.DOCUMENT; import static org.openmetadata.service.Entity.PERSONA; import static org.openmetadata.service.exception.CatalogExceptionMessage.permissionNotAllowed; -import static org.openmetadata.service.util.EmailUtil.EMAIL_VERIFICATION_TEMPLATE; import static org.openmetadata.service.util.EntityUtil.fieldUpdated; import static org.openmetadata.service.util.TestUtils.ADMIN_AUTH_HEADERS; import static org.openmetadata.service.util.TestUtils.TEST_AUTH_HEADERS; @@ -17,6 +16,7 @@ import static org.openmetadata.service.util.TestUtils.UpdateType.MINOR_UPDATE; import static org.openmetadata.service.util.TestUtils.assertListNotNull; import static org.openmetadata.service.util.TestUtils.assertResponse; import static org.openmetadata.service.util.TestUtils.put; +import static org.openmetadata.service.util.email.TemplateConstants.EMAIL_VERIFICATION_TEMPLATE; import java.io.IOException; import java.util.ArrayList; diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/MSTeamsCallbackResource.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/MSTeamsCallbackResource.java index e1a4ab98bed..3dcd4e11dae 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/MSTeamsCallbackResource.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/MSTeamsCallbackResource.java @@ -1,6 +1,6 @@ package org.openmetadata.service.resources.events; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import javax.ws.rs.Consumes; import javax.ws.rs.Path; diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/SlackCallbackResource.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/SlackCallbackResource.java index ae53f252df7..ecbc6e077f5 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/SlackCallbackResource.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/events/SlackCallbackResource.java @@ -1,7 +1,7 @@ package org.openmetadata.service.resources.events; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.util.EmailUtil.getSmtpSettings; +import static org.openmetadata.service.util.email.EmailUtil.getSmtpSettings; import javax.ws.rs.Consumes; import javax.ws.rs.Path; diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/system/SystemResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/system/SystemResourceTest.java index 97e781c09a5..7069a22491a 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/system/SystemResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/system/SystemResourceTest.java @@ -183,10 +183,10 @@ public class SystemResourceTest extends OpenMetadataApplicationTest { // Test Email Config Settings emailSettings = getSystemConfig(SettingsType.EMAIL_CONFIGURATION); SmtpSettings smtp = JsonUtils.convertValue(emailSettings.getConfigValue(), SmtpSettings.class); - // Password for Email is always sent in hidden + // Password for Email is encrypted using fernet SmtpSettings expected = config.getSmtpSettings(); - expected.setPassword("***********"); - assertEquals(expected, smtp); + expected.setPassword(smtp.getPassword()); + assertEquals(config.getSmtpSettings(), smtp); // Test Custom Ui Theme Preference Config Settings uiThemeConfigWrapped = getSystemConfig(SettingsType.CUSTOM_UI_THEME_PREFERENCE);