Richer plugin validations
This commit is contained in:
parent
e957f0c677
commit
abd9235360
|
|
@ -3,8 +3,11 @@ package com.appsmith.external.plugins;
|
|||
import com.appsmith.external.models.ActionConfiguration;
|
||||
import com.appsmith.external.models.DatasourceConfiguration;
|
||||
import org.pf4j.ExtensionPoint;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface PluginExecutor extends ExtensionPoint {
|
||||
|
||||
/**
|
||||
|
|
@ -34,5 +37,9 @@ public interface PluginExecutor extends ExtensionPoint {
|
|||
*/
|
||||
void datasourceDestroy(Object connection);
|
||||
|
||||
Boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration);
|
||||
default boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration) {
|
||||
return CollectionUtils.isEmpty(validateDatasource(datasourceConfiguration));
|
||||
}
|
||||
|
||||
Set<String> validateDatasource(DatasourceConfiguration datasourceConfiguration);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ import org.pf4j.PluginWrapper;
|
|||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Slf4j
|
||||
public class MongoPlugin extends BasePlugin {
|
||||
|
|
@ -127,8 +129,9 @@ public class MongoPlugin extends BasePlugin {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration) {
|
||||
return true;
|
||||
public Set<String> validateDatasource(DatasourceConfiguration datasourceConfiguration) {
|
||||
// TODO: Apply validations for MongoDB datasource.
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,13 @@ import org.apache.commons.lang.ObjectUtils;
|
|||
import org.pf4j.Extension;
|
||||
import org.pf4j.PluginWrapper;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.appsmith.external.models.Connection.Mode.READ_ONLY;
|
||||
|
||||
|
|
@ -150,21 +152,38 @@ public class PostgresPlugin extends BasePlugin {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("RedundantIfStatement")
|
||||
@Override
|
||||
public Boolean isDatasourceValid(@NonNull DatasourceConfiguration datasourceConfiguration) {
|
||||
public Set<String> validateDatasource(@NonNull DatasourceConfiguration datasourceConfiguration) {
|
||||
Set<String> invalids = new HashSet<>();
|
||||
|
||||
if (CollectionUtils.isEmpty(datasourceConfiguration.getEndpoints())) {
|
||||
return false;
|
||||
invalids.add("Missing endpoint.");
|
||||
}
|
||||
|
||||
if (datasourceConfiguration.getAuthentication() == null
|
||||
|| datasourceConfiguration.getAuthentication().getUsername() == null
|
||||
|| datasourceConfiguration.getAuthentication().getPassword() == null) {
|
||||
return false;
|
||||
if (datasourceConfiguration.getConnection() != null
|
||||
&& datasourceConfiguration.getConnection().getMode() == null) {
|
||||
invalids.add("Missing Connection Mode.");
|
||||
}
|
||||
|
||||
return true;
|
||||
if (datasourceConfiguration.getAuthentication() == null) {
|
||||
invalids.add("Authentication details missing.");
|
||||
|
||||
} else {
|
||||
if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getUsername())) {
|
||||
invalids.add("Missing username for authentication.");
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getPassword())) {
|
||||
invalids.add("Missing password for authentication.");
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(datasourceConfiguration.getAuthentication().getDatabaseName())) {
|
||||
invalids.add("Missing database name.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return invalids;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,7 @@ import java.net.URI;
|
|||
import java.net.URISyntaxException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
|
@ -250,10 +248,10 @@ public class RapidApiPlugin extends BasePlugin {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration) {
|
||||
// Since the datasource is created by rapid api & not by the user and it can't be edited
|
||||
// Assume that everything is good. Return true.
|
||||
return true;
|
||||
public Set<String> validateDatasource(DatasourceConfiguration datasourceConfiguration) {
|
||||
// Since the datasource is created by rapid api & not by the user and it can't be edited.
|
||||
// Assume that everything is good. Return as valid.
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
private void addHeadersToRequest(WebClient.Builder webClientBuilder, List<Property> headers) {
|
||||
|
|
|
|||
|
|
@ -32,8 +32,10 @@ import java.net.URISyntaxException;
|
|||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class RestApiPlugin extends BasePlugin {
|
||||
private static int MAX_REDIRECTS = 5;
|
||||
|
|
@ -216,19 +218,21 @@ public class RestApiPlugin extends BasePlugin {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration) {
|
||||
public Set<String> validateDatasource(DatasourceConfiguration datasourceConfiguration) {
|
||||
Set<String> invalids = new HashSet<>();
|
||||
|
||||
if (datasourceConfiguration.getUrl() == null) {
|
||||
System.out.println("URL is null. Data validation failed");
|
||||
return false;
|
||||
invalids.add("Missing URL.");
|
||||
}
|
||||
// Check for URL validity
|
||||
|
||||
try {
|
||||
// Check for URL validity
|
||||
new URL(datasourceConfiguration.getUrl()).toURI();
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
System.out.println("URL is invalid. Data validation failed");
|
||||
return false;
|
||||
invalids.add("Invalid URL: '" + e.getMessage() + "'");
|
||||
}
|
||||
|
||||
return invalids;
|
||||
}
|
||||
|
||||
private boolean addHeadersToRequestAndAscertainContentType(WebClient.Builder webClientBuilder,
|
||||
|
|
|
|||
|
|
@ -139,11 +139,14 @@ public class DatasourceServiceImpl extends BaseService<DatasourceRepository, Dat
|
|||
|
||||
DatasourceConfiguration datasourceConfiguration = datasource1.getDatasourceConfiguration();
|
||||
if (datasourceConfiguration != null && !pluginExecutor.isDatasourceValid(datasourceConfiguration)) {
|
||||
datasource1.setIsValid(false);
|
||||
invalids.add(AppsmithError.INVALID_DATASOURCE_CONFIGURATION.getMessage());
|
||||
invalids.addAll(pluginExecutor.validateDatasource(datasourceConfiguration));
|
||||
}
|
||||
|
||||
datasource1.setInvalids(invalids);
|
||||
if (!invalids.isEmpty()) {
|
||||
datasource1.setIsValid(false);
|
||||
}
|
||||
|
||||
return Mono.just(datasource1);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ import org.springframework.test.context.junit4.SpringRunner;
|
|||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
|
|
@ -60,9 +63,9 @@ public class DatasourceServiceTest {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Boolean isDatasourceValid(DatasourceConfiguration datasourceConfiguration) {
|
||||
public Set<String> validateDatasource(DatasourceConfiguration datasourceConfiguration) {
|
||||
System.out.println("In the datasourceValidate");
|
||||
return true;
|
||||
return new HashSet<>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user