fix: mongo uri lowercasing removed (#32375)

## Description
> This PR prevents the lowercasing of the URI for the plugins. The URI
is now preserved in the same form that the user has added.
Fixes #32145

## Automation

/ok-to-test tags="@tag.Datasource"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!IMPORTANT]  
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/8592797453>
> Commit: `f6dcdc85a4aafdd3329bf7b9de3fa04e583ec340`
> Cypress dashboard url: <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=8592797453&attempt=1"
target="_blank">Click here!</a>
> All cypress tests have passed 🎉🎉🎉

<!-- end of auto-generated comment: Cypress test results  -->







<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Bug Fixes**
- Fixed an issue with option processing by retaining the original case
of keys, ensuring accurate data handling.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Nilansh Bansal 2024-04-08 09:01:55 +05:30 committed by GitHub
parent 5968f87be0
commit b85cf08a51
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 6 deletions

View File

@ -9,6 +9,7 @@ import com.appsmith.external.models.Endpoint;
import com.appsmith.external.models.Property;
import com.appsmith.external.models.SSLDetails;
import com.external.plugins.exceptions.MongoPluginErrorMessages;
import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
@ -131,23 +132,23 @@ public class DatasourceUtils {
}
private static String buildURITail(String tailInfo) {
Map<String, String> optionsMap = new HashMap<>();
// case-insensitive match and preserves order of keys, hence the params ordering in the url remains unchanged
Map<String, String> optionsMap = new LinkedCaseInsensitiveMap<>();
for (final String part : tailInfo.split("[&;]")) {
if (part.isEmpty()) {
continue;
}
int idx = part.indexOf('=');
if (idx >= 0) {
String key = part.substring(0, idx).toLowerCase();
String key = part.substring(0, idx);
String value = part.substring(idx + 1);
optionsMap.put(key, value);
} else {
optionsMap.put(part.toLowerCase(), "");
optionsMap.put(part, "");
}
}
optionsMap.putIfAbsent("authsource", "admin");
optionsMap.put("minpoolsize", "0");
optionsMap.putIfAbsent("minpoolsize", "0");
return optionsMap.entrySet().stream()
.map(entry -> {
if (StringUtils.hasLength(entry.getValue())) {

View File

@ -45,7 +45,22 @@ public class DatasourceUtilsTest {
public void testBuildClientURI_withUserInfoAndAuthSource() {
final String testUri = "mongodb://user:pass@host:port/db?param&authSource=notAdmin";
final String resultUri = "mongodb://user:newPass@host:port/db?param&authsource=notAdmin&minpoolsize=0";
final String resultUri = "mongodb://user:newPass@host:port/db?param&authSource=notAdmin&minpoolsize=0";
DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration();
final DBAuth dbAuth = new DBAuth();
dbAuth.setPassword("newPass");
datasourceConfiguration.setAuthentication(dbAuth);
datasourceConfiguration.setProperties(List.of(new Property("0", "Yes"), new Property("1", testUri)));
final String clientURI = buildClientURI(datasourceConfiguration);
assertEquals(resultUri, clientURI);
}
@Test
public void testBuildClientURI_withUpperCaseCharacters_CaseRemainsUnchanged() {
final String testUri = "mongodb://user:pass@host:port/db?Param&authSource=notAdmin";
final String resultUri = "mongodb://user:newPass@host:port/db?Param&authSource=notAdmin&minpoolsize=0";
DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration();
final DBAuth dbAuth = new DBAuth();