Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -212,15 +212,24 @@ public Mono<Session> datasourceCreate(DatasourceConfiguration datasourceConfigur
prop.put("mail.smtp.port", String.valueOf(port));
prop.put("mail.smtp.ssl.trust", endpoint.getHost());

String username = authentication.getUsername();
String password = authentication.getPassword();
Session session;

Session session = Session.getInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
if (authentication != null && StringUtils.hasText(authentication.getUsername())
&& StringUtils.hasText(authentication.getPassword())) {

String username = authentication.getUsername();
String password = authentication.getPassword();

session = Session.getInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
} else {
prop.put("mail.smtp.auth", "false");
session = Session.getInstance(prop);
}
return Mono.just(session);
}

Expand Down Expand Up @@ -248,14 +257,6 @@ public Set<String> validateDatasource(DatasourceConfiguration datasourceConfigur
invalids.add(SMTPErrorMessages.DS_MISSING_HOST_ADDRESS_ERROR_MSG);
}
}

DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication();
if (authentication == null
|| !StringUtils.hasText(authentication.getUsername())
|| !StringUtils.hasText(authentication.getPassword())) {
invalids.add(new AppsmithPluginException(AppsmithPluginError.PLUGIN_AUTHENTICATION_ERROR).getMessage());
}

return invalids;
}

Expand All @@ -264,6 +265,7 @@ public Mono<DatasourceTestResult> testDatasource(Session connection) {
log.debug(Thread.currentThread().getName() + ": testDatasource() called for SMTP plugin.");
return Mono.fromCallable(() -> {
Set<String> invalids = new HashSet<>();

try {
Transport transport = connection.getTransport();
if (transport != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.external.plugins;

import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginError;
import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginException;
import com.appsmith.external.helpers.PluginUtils;
import com.appsmith.external.models.ActionConfiguration;
Expand Down Expand Up @@ -28,17 +27,18 @@
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import java.util.List;
import java.util.Map;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;
import java.util.ArrayList;
import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
Expand All @@ -59,12 +59,22 @@ public class SmtpPluginTest {
.withCommand("bin/maildev --base-pathname /maildev --incoming-user " + username + " --incoming-pass "
+ password + " -s 25");

@Container
public static final GenericContainer smtpWithoutAuth = new GenericContainer(DockerImageName.parse("maildev/maildev"))
.withExposedPorts(1025)
.withCommand("bin/maildev --base-pathname /maildev --smtp-port 1025 --incoming-user '' --incoming-pass ''");

private final SmtpPlugin.SmtpPluginExecutor pluginExecutor = new SmtpPlugin.SmtpPluginExecutor();

@BeforeAll
public static void setup() {
host = smtp.getContainerIpAddress();
port = Long.valueOf(smtp.getFirstMappedPort());
//Initialize SMTP connection with default configuration (can be changed per test)
configureSmtpConnection(smtp); //Default
}

private static void configureSmtpConnection(GenericContainer container) {
host = container.getContainerIpAddress();
port = Long.valueOf(container.getFirstMappedPort());
}

private DatasourceConfiguration createDatasourceConfiguration() {
Expand Down Expand Up @@ -130,13 +140,21 @@ public void testInvalidPort() {
}

@Test
public void testNullAuthentication() {
DatasourceConfiguration invalidDatasourceConfiguration = createDatasourceConfiguration();
invalidDatasourceConfiguration.setAuthentication(null);
public void testConnectionWithoutAuth() {
configureSmtpConnection(smtpWithoutAuth);
DatasourceConfiguration noAuthDatasourceConfiguration = createDatasourceConfiguration();
noAuthDatasourceConfiguration.setAuthentication(null); // No authentication

assertEquals(
Set.of(new AppsmithPluginException(AppsmithPluginError.PLUGIN_AUTHENTICATION_ERROR).getMessage()),
pluginExecutor.validateDatasource(invalidDatasourceConfiguration));
Mono<DatasourceTestResult> testDatasourceMono = pluginExecutor.testDatasource(noAuthDatasourceConfiguration);

StepVerifier.create(testDatasourceMono)
.assertNext(datasourceTestResult -> {
assertNotNull(datasourceTestResult);
assertTrue(datasourceTestResult.isSuccess());
assertTrue(datasourceTestResult.getInvalids().isEmpty());
})
.verifyComplete();
configureSmtpConnection(smtp);
}

@Test
Expand Down