From cba9240fe9e767122fb318f8bcfb10fd39d9bea6 Mon Sep 17 00:00:00 2001 From: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com> Date: Thu, 13 Oct 2022 18:24:32 +0530 Subject: [PATCH] [Email] Added explicit senderMail in configuration (#8126) * [Email] Added explicit senderMail in configuration * Fix failing tests Co-authored-by: Ayush Shah --- conf/openmetadata.yaml | 1 + .../service/OpenMetadataApplication.java | 4 +++- .../service/jdbi3/UserRepository.java | 6 +++--- .../service/security/DefaultAuthorizer.java | 17 ++++++++++++++--- .../openmetadata/service/util/EmailUtil.java | 6 +++--- .../resources/openmetadata-secure-test.yaml | 3 +++ .../json/schema/email/smtpSettings.json | 6 +++++- 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/conf/openmetadata.yaml b/conf/openmetadata.yaml index 13f13ad4b9e..8aac6aff3ee 100644 --- a/conf/openmetadata.yaml +++ b/conf/openmetadata.yaml @@ -243,6 +243,7 @@ email: supportUrl: ${OM_SUPPORT_URL:-"https://slack.open-metadata.org"} enableSmtpServer : ${AUTHORIZER_ENABLE_SMTP:-false} openMetadataUrl: ${OPENMETADATA_SERVER_URL:-""} + senderMail: ${OPENMETADATA_SMTP_SENDER_MAIL:-""} serverEndpoint: ${SMTP_SERVER_ENDPOINT:-""} serverPort: ${SMTP_SERVER_PORT:-""} username: ${SMTP_SERVER_USERNAME:-""} 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 3af4da96b06..308bc86887d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplication.java @@ -96,7 +96,9 @@ public class OpenMetadataApplication extends Application { } public final Fields getFieldsWithUserAuth(String fields) { + List tempFields = getAllowedFieldsCopy(); if (fields != null && fields.equals("*")) { - List tempFields = getAllowedFieldsCopy(); tempFields.add("authenticationMechanism"); - return new Fields(allowedFields, String.join(",", tempFields)); + return new Fields(tempFields, String.join(",", tempFields)); } - return new Fields(allowedFields, fields); + return new Fields(tempFields, fields); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java index f19304a4ece..b0d70652226 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/DefaultAuthorizer.java @@ -41,6 +41,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils; import org.jdbi.v3.core.Jdbi; import org.openmetadata.schema.api.configuration.airflow.AirflowConfiguration; import org.openmetadata.schema.api.security.AuthenticationConfiguration; +import org.openmetadata.schema.email.SmtpSettings; import org.openmetadata.schema.entity.Bot; import org.openmetadata.schema.entity.BotType; import org.openmetadata.schema.entity.teams.AuthenticationMechanism; @@ -71,6 +72,7 @@ import org.openmetadata.service.security.policyevaluator.SubjectCache; import org.openmetadata.service.security.policyevaluator.SubjectContext; import org.openmetadata.service.util.EmailUtil; import org.openmetadata.service.util.EntityUtil; +import org.openmetadata.service.util.PasswordUtil; import org.openmetadata.service.util.RestUtil; @Slf4j @@ -81,8 +83,8 @@ public class DefaultAuthorizer implements Authorizer { private Set botPrincipalUsers; private Set testUsers; private String principalDomain; - private String providerType; + private boolean isSmtpEnabled; @Override public void init(OpenMetadataApplicationConfig openMetadataApplicationConfig, Jdbi dbi) { @@ -94,6 +96,8 @@ public class DefaultAuthorizer implements Authorizer { this.testUsers = new HashSet<>(openMetadataApplicationConfig.getAuthorizerConfiguration().getTestPrincipals()); this.principalDomain = openMetadataApplicationConfig.getAuthorizerConfiguration().getPrincipalDomain(); this.providerType = openMetadataApplicationConfig.getAuthenticationConfiguration().getProvider(); + SmtpSettings smtpSettings = openMetadataApplicationConfig.getSmtpSettings(); + this.isSmtpEnabled = smtpSettings != null && smtpSettings.getEnableSmtpServer(); SubjectCache.initialize(); PolicyCache.initialize(); RoleCache.initialize(); @@ -149,7 +153,12 @@ public class DefaultAuthorizer implements Authorizer { String[] tokens = adminUser.split(COLON_DELIMITER); addUserForBasicAuth(tokens[0], tokens[1], domain); } else { - addUserForBasicAuth(adminUser, DEFAULT_ADMIN, domain); + boolean isDefaultAdmin = adminUser.equals(DEFAULT_ADMIN); + String token = PasswordUtil.generateRandomPassword(); + if (isDefaultAdmin || !isSmtpEnabled) { + token = DEFAULT_ADMIN; + } + addUserForBasicAuth(adminUser, token, domain); } } } @@ -170,7 +179,9 @@ public class DefaultAuthorizer implements Authorizer { User user = user(username, domain, username).withIsAdmin(true).withIsEmailVerified(true); updateUserWithHashedPwd(user, pwd); addOrUpdateUser(user); - sendInviteMailToAdmin(user, pwd); + if (isSmtpEnabled) { + sendInviteMailToAdmin(user, pwd); + } } } 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 6d16276d2b7..c9f97c17ab9 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 @@ -173,7 +173,7 @@ public class EmailUtil { && request.getSubject() != null && !request.getSubject().equals("")) { // Sender Details - emailBuilder.from(defaultSmtpSettings.getUsername()); + emailBuilder.from(defaultSmtpSettings.getSenderMail()); // Recipient request @@ -239,7 +239,7 @@ public class EmailUtil { EmailPopulatingBuilder emailBuilder = EmailBuilder.startingBlank(); emailBuilder.withSubject(subject); emailBuilder.to(to); - emailBuilder.from(defaultSmtpSettings.getUsername()); + emailBuilder.from(defaultSmtpSettings.getSenderMail()); templateConfiguration.setClassForTemplateLoading(getClass(), baseTemplatePackage); Template template = templateConfiguration.getTemplate(templatePath); @@ -253,7 +253,7 @@ public class EmailUtil { } public void sendMail(Email email) { - if (mailer != null) { + if (mailer != null && defaultSmtpSettings.getEnableSmtpServer()) { mailer.sendMail(email, true); } } diff --git a/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml b/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml index 7d9c5bc2436..838040f2603 100644 --- a/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml +++ b/openmetadata-service/src/test/resources/openmetadata-secure-test.yaml @@ -177,7 +177,10 @@ airflowConfiguration: email: enableSmtpServer : false + emailingEntity: "" + supportUrl: "" openMetadataUrl: "" + senderMail: "" serverEndpoint: "" serverPort: "" username: "" diff --git a/openmetadata-spec/src/main/resources/json/schema/email/smtpSettings.json b/openmetadata-spec/src/main/resources/json/schema/email/smtpSettings.json index 269093521f7..961adf24b65 100644 --- a/openmetadata-spec/src/main/resources/json/schema/email/smtpSettings.json +++ b/openmetadata-spec/src/main/resources/json/schema/email/smtpSettings.json @@ -25,6 +25,10 @@ "description": "Openmetadata Server Endpoint", "type": "string" }, + "senderMail": { + "description": "Mail of the sender", + "type": "string" + }, "serverEndpoint": { "description": "Smtp Server Endpoint", "type": "string" @@ -48,5 +52,5 @@ } }, "additionalProperties": false, - "required": ["serverEndpoint", "serverPort", "username", "password"] + "required": ["serverEndpoint", "serverPort", "username", "password", "senderMail"] } \ No newline at end of file