Skip to content

Commit c9164d0

Browse files
authored
API / Improve parameter check for XSL conversion. (geonetwork#8201)
1 parent 6f4e79a commit c9164d0

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@
2727
import jeeves.server.sources.http.JeevesServlet;
2828
import org.fao.geonet.ApplicationContextHolder;
2929
import org.fao.geonet.constants.Geonet;
30+
import org.fao.geonet.exceptions.BadParameterEx;
31+
import org.fao.geonet.utils.FilePathChecker;
3032
import org.fao.geonet.utils.IO;
3133
import org.fao.geonet.utils.Log;
34+
import org.springframework.beans.factory.annotation.Autowired;
3235
import org.springframework.context.ApplicationContext;
3336
import org.springframework.context.ApplicationEvent;
3437
import org.springframework.context.ConfigurableApplicationContext;
@@ -63,6 +66,9 @@ public class GeonetworkDataDirectory {
6366
*/
6467
public static final String GEONETWORK_BEAN_KEY = "GeonetworkDataDirectory";
6568

69+
@Autowired
70+
SchemaManager schemaManager;
71+
6672
private Path webappDir;
6773
private Path systemDataDir;
6874
private Path indexConfigDir;
@@ -797,11 +803,18 @@ public Path getXsltConversion(String conversionId) {
797803
if (conversionId.startsWith(IMPORT_STYLESHEETS_SCHEMA_PREFIX)) {
798804
String[] pathToken = conversionId.split(":");
799805
if (pathToken.length == 3) {
806+
String schema = pathToken[1];
807+
if (!schemaManager.existsSchema(schema)) {
808+
throw new BadParameterEx(String.format(
809+
"Conversion not found. Schema '%s' is not registered in this catalog.", schema));
810+
}
811+
FilePathChecker.verify(pathToken[2]);
800812
return this.getSchemaPluginsDir()
801813
.resolve(pathToken[1])
802814
.resolve(pathToken[2] + ".xsl");
803815
}
804816
} else {
817+
FilePathChecker.verify(conversionId);
805818
return this.getWebappDir().resolve(Geonet.Path.IMPORT_STYLESHEETS).
806819
resolve(conversionId + ".xsl");
807820
}

core/src/test/java/org/fao/geonet/kernel/AbstractGeonetworkDataDirectoryTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import jeeves.server.ServiceConfig;
2727

2828
import org.fao.geonet.AbstractCoreIntegrationTest;
29+
import org.fao.geonet.constants.Geonet;
30+
import org.fao.geonet.exceptions.BadParameterEx;
2931
import org.jdom.Element;
3032
import org.junit.Test;
3133
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,7 +36,7 @@
3436
import java.nio.file.Path;
3537
import java.util.ArrayList;
3638

37-
import static org.junit.Assert.assertEquals;
39+
import static org.junit.Assert.*;
3840

3941
/**
4042
* Abstract class for GeonetworkDataDirectory tests where the data directory layout is a default
@@ -76,6 +78,29 @@ public void testInit() throws Exception {
7678
assertSystemDirSubFolders(expectedDataDir);
7779
}
7880

81+
@Test
82+
public void testGetXsltConversion() {
83+
Path xsltConversion = dataDirectory.getXsltConversion("conversion");
84+
assertEquals(dataDirectory.getWebappDir().resolve(Geonet.Path.IMPORT_STYLESHEETS).resolve("conversion.xsl"), xsltConversion);
85+
try {
86+
dataDirectory.getXsltConversion("../conversion");
87+
} catch (BadParameterEx e) {
88+
assertEquals("../conversion is not a valid value for: Invalid character found in path.", e.getMessage());
89+
}
90+
91+
xsltConversion = dataDirectory.getXsltConversion("schema:iso19115-3.2018:convert/fromISO19115-3.2014");
92+
assertNotNull(xsltConversion);
93+
try {
94+
dataDirectory.getXsltConversion("schema:notExistingSchema:convert/fromISO19115-3.2014");
95+
} catch (BadParameterEx e) {
96+
assertEquals("Conversion not found. Schema 'notExistingSchema' is not registered in this catalog.", e.getMessage());
97+
}
98+
try {
99+
dataDirectory.getXsltConversion("schema:iso19115-3.2018:../../custom/path");
100+
} catch (BadParameterEx e) {
101+
assertEquals("../../custom/path is not a valid value for: Invalid character found in path.", e.getMessage());
102+
}
103+
}
79104
private void assertSystemDirSubFolders(Path expectedDataDir) {
80105
final Path expectedConfigDir = expectedDataDir.resolve("config");
81106
assertEquals(expectedConfigDir, dataDirectory.getConfigDir());

0 commit comments

Comments
 (0)