From c7184f1bb6080d39a2f6dd5fb53de1e7dde8878f Mon Sep 17 00:00:00 2001 From: Lyn Elisa Goltz <goltz@lat-lon.de> Date: Wed, 24 Apr 2024 13:23:38 +0200 Subject: [PATCH] XPLANBOX-2613 - fixed more security warnings --- .../db/domain/XPlanWithFeatureCollection.java | 2 ++ xplan-cli/xplan-transform-cli/pom.xml | 4 +++ .../cli/config/ApplicationContext.java | 2 ++ xplan-core/xplan-core-commons/pom.xml | 4 +++ .../xplan/commons/archive/XPlanArchive.java | 2 ++ .../xplan/commons/archive/XPlanGmlReader.java | 2 ++ .../xplan/commons/feature/XPlanGmlParser.java | 3 +++ .../latlon/xplan/commons/util/XmlUtils.java | 2 -- .../job/validator/memory/GmlImportJob.java | 1 + .../ServiceMetadataDocumentWriter.java | 2 ++ .../manager/transaction/XPlanEditManager.java | 2 ++ .../evaluation/GdalRasterEvaluation.java | 3 ++- .../raster/storage/GdalRasterStorage.java | 3 ++- .../raster/storage/s3/S3RasterStorage.java | 3 ++- .../report/html/HtmlReportGenerator.java | 2 +- .../config/ValidatorWmsWorkspaceContext.java | 2 ++ xplan-manager/xplan-manager-web/pom.xml | 4 +++ .../service/ManagerPlanArchiveManager.java | 5 ++-- .../service/rest/ManagerController.java | 27 +++++++++---------- 19 files changed, 52 insertions(+), 23 deletions(-) diff --git a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/validate/db/domain/XPlanWithFeatureCollection.java b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/validate/db/domain/XPlanWithFeatureCollection.java index 45c7c35684..5410cffb8c 100644 --- a/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/validate/db/domain/XPlanWithFeatureCollection.java +++ b/xplan-cli/xplan-cli-tools/src/main/java/de/latlon/xplanbox/cli/validate/db/domain/XPlanWithFeatureCollection.java @@ -23,6 +23,7 @@ package de.latlon.xplanbox.cli.validate.db.domain; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.archive.SemanticValidableXPlanArchive; import de.latlon.xplan.commons.util.XmlUtils; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -127,6 +128,7 @@ public class XPlanWithFeatureCollection implements SemanticValidableXPlanArchive } @Override + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") public XMLStreamReader getMainFileXmlReader() { try { GZIPInputStream is = new GZIPInputStream(new ByteArrayInputStream(data)); diff --git a/xplan-cli/xplan-transform-cli/pom.xml b/xplan-cli/xplan-transform-cli/pom.xml index 5d950c6a6b..c3fc33bd17 100644 --- a/xplan-cli/xplan-transform-cli/pom.xml +++ b/xplan-cli/xplan-transform-cli/pom.xml @@ -165,6 +165,10 @@ <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> </dependency> + <dependency> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs-annotations</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java index 8d2ef27e51..7a7dbb17ed 100644 --- a/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java +++ b/xplan-cli/xplan-transform-cli/src/main/java/de/latlon/xplan/transform/cli/config/ApplicationContext.java @@ -37,6 +37,7 @@ import de.latlon.xplan.manager.transformation.XPlanGmlTransformer; import de.latlon.xplan.manager.web.shared.ConfigurationException; import de.latlon.xplan.manager.workspace.WorkspaceException; import de.latlon.xplan.transform.cli.TransformingValidator; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.config.DeegreeWorkspace; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -134,6 +135,7 @@ public class ApplicationContext { return new ManagerWorkspaceWrapper(managerWorkspace); } + @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") private Path etcDirectory() { String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); File jarLocation = new File(path); diff --git a/xplan-core/xplan-core-commons/pom.xml b/xplan-core/xplan-core-commons/pom.xml index 4f7e6a0375..939f17f5b6 100644 --- a/xplan-core/xplan-core-commons/pom.xml +++ b/xplan-core/xplan-core-commons/pom.xml @@ -73,6 +73,10 @@ <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </dependency> + <dependency> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs-annotations</artifactId> + </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanArchive.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanArchive.java index d36995fb7b..fd326094ee 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanArchive.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanArchive.java @@ -23,6 +23,7 @@ package de.latlon.xplan.commons.archive; import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.util.XmlUtils; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.cs.coordinatesystems.ICRS; import javax.xml.stream.XMLStreamReader; @@ -162,6 +163,7 @@ public class XPlanArchive implements XPlanArchiveContentAccess, SemanticValidabl * @return reader, never <code>null</code> */ @Override + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") public XMLStreamReader getMainFileXmlReader() { try { XMLStreamReader xmlReader = XmlUtils.createXMLInputFactory() diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanGmlReader.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanGmlReader.java index 18fe54983b..ed9a4b5216 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanGmlReader.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/archive/XPlanGmlReader.java @@ -24,6 +24,7 @@ import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.util.XPlanVersionUtils; import de.latlon.xplan.commons.util.XmlUtils; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.utils.Pair; import org.deegree.cs.coordinatesystems.ICRS; import org.deegree.cs.persistence.CRSManager; @@ -123,6 +124,7 @@ public class XPlanGmlReader { } } + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") private XMLStreamReader createReader(InputStream stream) throws XMLStreamException, FactoryConfigurationError { XMLStreamReader xmlReader = XmlUtils.createXMLInputFactory().createXMLStreamReader(stream); skipStartDocument(xmlReader); diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/feature/XPlanGmlParser.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/feature/XPlanGmlParser.java index a5b229c880..43934d796b 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/feature/XPlanGmlParser.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/feature/XPlanGmlParser.java @@ -25,6 +25,7 @@ import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.util.XmlUtils; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.xml.stax.XMLStreamReaderWrapper; import org.deegree.cs.coordinatesystems.ICRS; import org.deegree.cs.exceptions.UnknownCRSException; @@ -132,6 +133,7 @@ public class XPlanGmlParser { * @throws XMLStreamException if the plan could not be read * @throws UnknownCRSException if the CRS of a geometry in the plan is not known */ + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") public XPlanFeatureCollection parseXPlanFeatureCollection(InputStream plan, XPlanVersion version, XPlanType type) throws XMLStreamException, UnknownCRSException { XMLStreamReader xmlStreamReader = XmlUtils.createXMLInputFactory().createXMLStreamReader(plan); @@ -160,6 +162,7 @@ public class XPlanGmlParser { * @throws XMLStreamException if the plan could not be read * @throws UnknownCRSException if the CRS of a geometry in the plan is not known */ + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") public FeatureCollection parseFeatureCollection(InputStream plan, XPlanVersion version) throws XMLStreamException, UnknownCRSException { XMLStreamReader xmlStreamReader = XmlUtils.createXMLInputFactory().createXMLStreamReader(plan); diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/XmlUtils.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/XmlUtils.java index 96e657487b..9efede17ef 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/XmlUtils.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/XmlUtils.java @@ -16,8 +16,6 @@ public final class XmlUtils { public static XMLInputFactory createXMLInputFactory() { XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); - xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); // This disables DTDs entirely for that factory xmlInputFactory.setProperty(SUPPORT_DTD, false); // This causes XMLStreamException to be thrown if external DTDs are accessed. diff --git a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/memory/GmlImportJob.java b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/memory/GmlImportJob.java index 639eeb9bb2..7e9cc6fc5c 100644 --- a/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/memory/GmlImportJob.java +++ b/xplan-core/xplan-core-job/src/main/java/de/latlon/xplan/job/validator/memory/GmlImportJob.java @@ -104,6 +104,7 @@ public class GmlImportJob implements Job { return insertedFids; } + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") private List<String> importGml(Path p, DeegreeWorkspace workspace) { LOG.info("Insert {}", p); XMLStreamReader xmlStreamReader = null; diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/metadata/ServiceMetadataDocumentWriter.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/metadata/ServiceMetadataDocumentWriter.java index ba8f6b3fba..618fe27b2b 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/metadata/ServiceMetadataDocumentWriter.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/metadata/ServiceMetadataDocumentWriter.java @@ -21,6 +21,7 @@ package de.latlon.xplan.manager.metadata; import de.latlon.xplan.commons.util.XmlUtils; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.xml.stax.XMLStreamUtils; import javax.xml.stream.XMLOutputFactory; @@ -44,6 +45,7 @@ public class ServiceMetadataDocumentWriter { this.template = template; } + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") public void writeServiceMetadataDocument(Properties properties, OutputStream out) throws XMLStreamException { XMLStreamWriter xmlStreamWriter = null; XMLStreamReader xmlStreamReader = null; diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java index 4aa16f7387..284fe44205 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/transaction/XPlanEditManager.java @@ -48,6 +48,7 @@ import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.manager.web.shared.edit.XPlanToEdit; import de.latlon.xplan.manager.wmsconfig.raster.XPlanRasterManager; import de.latlon.xplan.manager.workspace.WorkspaceReloader; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.cs.exceptions.UnknownCRSException; import org.deegree.feature.FeatureCollection; import org.deegree.feature.types.AppSchema; @@ -239,6 +240,7 @@ public class XPlanEditManager extends XPlanTransactionManager { return bos.toByteArray(); } + @SuppressFBWarnings(value = "XXE_XMLSTREAMREADER") private FeatureCollection renewFeatureCollection(XPlanVersion version, FeatureCollection modifiedFeatures) throws Exception { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GdalRasterEvaluation.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GdalRasterEvaluation.java index 64bd9fa2a3..72f17a4742 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GdalRasterEvaluation.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/evaluation/GdalRasterEvaluation.java @@ -24,6 +24,7 @@ import de.latlon.xplan.commons.archive.ArchiveEntry; import de.latlon.xplan.commons.archive.XPlanArchiveContentAccess; import de.latlon.xplan.manager.web.shared.RasterEvaluationResult; import de.latlon.xplan.manager.wmsconfig.raster.access.GdalRasterAdapter; +import org.apache.commons.io.FilenameUtils; import org.gdal.osr.SpatialReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +77,7 @@ public class GdalRasterEvaluation implements RasterEvaluation { private RasterEvaluationResult evaluateRaster(ArchiveEntry zipEntry, File archiveDirectory) { String entryName = zipEntry.getName(); LOG.info("Rasterdatei mit Namen {} gefunden.", entryName); - File mainRasterFile = new File(archiveDirectory, entryName); + File mainRasterFile = new File(archiveDirectory, FilenameUtils.getName(entryName)); LOG.trace("Raster was copied to {}.", mainRasterFile); String rasterCrs = rasterAdapter.getRasterCrs(mainRasterFile); if (rasterCrs != null) { diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/GdalRasterStorage.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/GdalRasterStorage.java index 48f993db25..cb38d42a7c 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/GdalRasterStorage.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/GdalRasterStorage.java @@ -25,6 +25,7 @@ import de.latlon.xplan.manager.storage.StorageEvent; import de.latlon.xplan.manager.storage.filesystem.DeegreeRasterCacheCleaner; import de.latlon.xplan.manager.wmsconfig.raster.access.GdalRasterAdapter; import de.latlon.xplan.manager.wmsconfig.raster.evaluation.RasterEvaluation; +import org.apache.commons.io.FilenameUtils; import java.io.IOException; import java.nio.file.Files; @@ -53,7 +54,7 @@ public class GdalRasterStorage extends FileSystemStorage { Vector<?> referencedFiles = rasterAdapter.getReferencedFiles(archive, entryName); if (referencedFiles != null) { for (Object referencedFile : referencedFiles) { - Path file = Paths.get(referencedFile.toString()); + Path file = Paths.get(FilenameUtils.getName(referencedFile.toString())); String newFileName = createFileName(planId, file.getFileName().toString()); if (!newFileName.equals(rasterFileName)) { Path target = createTargetFile(newFileName); diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorage.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorage.java index e78db7b562..ff14eff9f2 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorage.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/wmsconfig/raster/storage/s3/S3RasterStorage.java @@ -28,6 +28,7 @@ import de.latlon.xplan.manager.storage.s3.S3Storage; import de.latlon.xplan.manager.wmsconfig.raster.access.GdalRasterAdapter; import de.latlon.xplan.manager.wmsconfig.raster.storage.RasterStorage; import de.latlon.xplan.manager.wmsconfig.raster.storage.StorageException; +import org.apache.commons.io.FilenameUtils; import java.io.IOException; import java.nio.file.Path; @@ -58,7 +59,7 @@ public class S3RasterStorage extends S3Storage implements RasterStorage { Vector<?> referencedFiles = rasterAdapter.getReferencedFiles(archive, entryName); if (referencedFiles != null) { for (Object referencedFile : referencedFiles) { - Path file = Paths.get(referencedFile.toString()); + Path file = Paths.get(FilenameUtils.getName(referencedFile.toString())); String newObjectKey = createKey(planId, file.getFileName().toString()); if (!newObjectKey.equals(objectKey)) { insertObject(newObjectKey, file); diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/html/HtmlReportGenerator.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/html/HtmlReportGenerator.java index 62e9f0706b..0d9ccb7e39 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/html/HtmlReportGenerator.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/html/HtmlReportGenerator.java @@ -56,7 +56,7 @@ public class HtmlReportGenerator { * @throws ReportGenerationException if the generation of the XML report failed * @throws IllegalArgumentException if on of the parameters is <code>null</code> */ - @SuppressFBWarnings(value = { "XXE_DTD_TRANSFORM_FACTORY", "XXE_XSLT_TRANSFORM_FACTORY" }, + @SuppressFBWarnings(value = { "XXE_DTD_TRANSFORM_FACTORY", "XXE_XSLT_TRANSFORM_FACTORY", "MALICIOUS_XSLT" }, justification = "XML is generated, does not contain DTDs") public void generateHtmlReport(ValidatorReport report, OutputStream htmlOut) throws ReportGenerationException { checkParameters(report, htmlOut); diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java index e74279130e..bc3ef53ffc 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/config/ValidatorWmsWorkspaceContext.java @@ -22,6 +22,7 @@ package de.latlon.xplan.validator.wms.config; import de.latlon.xplan.validator.wms.storage.PlanStorage; import de.latlon.xplan.validator.wms.storage.WorkspacePlanStorage; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.deegree.commons.config.DeegreeWorkspace; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +45,7 @@ public class ValidatorWmsWorkspaceContext { private static final String XPLAN_GML_WMS_WORKSPACE = "xplan-webservices-validator-wms-memory-workspace"; @Bean + @SuppressFBWarnings(value = "PATH_TRAVERSAL_IN") public PlanStorage planStorage() { try { Path workspaceLocation = Paths.get(DeegreeWorkspace.getWorkspaceRoot()).resolve(XPLAN_GML_WMS_WORKSPACE); diff --git a/xplan-manager/xplan-manager-web/pom.xml b/xplan-manager/xplan-manager-web/pom.xml index bfa3faac35..e522384d0f 100644 --- a/xplan-manager/xplan-manager-web/pom.xml +++ b/xplan-manager/xplan-manager-web/pom.xml @@ -281,6 +281,10 @@ <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> </dependency> + <dependency> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs-annotations</artifactId> + </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/ManagerPlanArchiveManager.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/ManagerPlanArchiveManager.java index 310128b1b7..04985cd3d8 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/ManagerPlanArchiveManager.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/ManagerPlanArchiveManager.java @@ -23,6 +23,7 @@ package de.latlon.xplan.manager.web.server.service; import de.latlon.xplan.commons.util.UnsupportedContentTypeException; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.core.gwt.commons.shared.ValidationException; +import org.apache.commons.io.FilenameUtils; import javax.servlet.http.HttpSession; import java.io.File; @@ -63,7 +64,7 @@ public class ManagerPlanArchiveManager { public File readArchiveFromFilesystem(XPlan plan) throws IOException { String fileToBeValidated = determineFileNameAndFolder(plan); - return new File(getUploadFolder(), fileToBeValidated); + return new File(getUploadFolder(), FilenameUtils.getName(fileToBeValidated)); } public String determineFileNameAndFolder(XPlan plan) { @@ -94,7 +95,7 @@ public class ManagerPlanArchiveManager { throws IOException, UnsupportedContentTypeException { checkAndSetSessionAttributeIfRequired(session); File artefactFolder = (File) session.getAttribute(SESSION_ATTRIBUTE_ARTEFACTS_FOLDER); - File artefactFile = new File(artefactFolder, fileName); + File artefactFile = new File(artefactFolder, FilenameUtils.getName(fileName)); try (FileOutputStream localOutput = new FileOutputStream(artefactFile)) { write(artefact, localOutput); } diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/rest/ManagerController.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/rest/ManagerController.java index 1a1ff5b0dc..71d7351731 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/rest/ManagerController.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/server/service/rest/ManagerController.java @@ -35,6 +35,8 @@ import de.latlon.xplan.manager.web.shared.RechtsstandAndPlanStatus; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.manager.web.shared.edit.XPlanToEdit; import de.latlon.xplanbox.core.gwt.commons.shared.InvalidParameterException; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.commons.lang3.StringUtils; import org.deegree.commons.utils.Pair; import org.deegree.cs.coordinatesystems.ICRS; import org.deegree.cs.persistence.CRSManager; @@ -231,7 +233,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Evaluate uploaded raster of plan with id {}.", id); + LOG.info("Evaluate uploaded raster of plan with id {}.", StringUtils.normalizeSpace(id)); try { HttpSession session = request.getSession(); List<File> uploadedArtefacts = archiveManager.retrieveUploadedArtefacts(session); @@ -263,7 +265,7 @@ public class ManagerController { public boolean removePlanFromManager( @PathVariable String planId ) throws Exception { // @formatter:on - LOG.info("Try to remove plan with id {}.", planId); + LOG.info("Try to remove plan with id {}.", StringUtils.normalizeSpace(planId)); if (planId == null) return false; try { @@ -302,6 +304,7 @@ public class ManagerController { @RequestMapping(value = "/plan", method = POST, produces = TEXT_HTML_VALUE) @ResponseBody // @formatter:off + @SuppressFBWarnings(value = "PREDICTABLE_RANDOM") public void uploadPlan( @RequestParam("planZipFile" ) MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException, UnsupportedContentTypeException { // @formatter:on @@ -340,7 +343,7 @@ public class ManagerController { // @formatter:on checkInternalId(internalId); response.addHeader("Expires", "-1"); - LOG.info("Try to import plan with id {}", planId); + LOG.info("Try to import plan with id {}", StringUtils.normalizeSpace(planId)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); if (planId != null && plan != null) { @@ -374,7 +377,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Retrieve internal id of plan with id {}.", id); + LOG.info("Retrieve internal id of plan with id {}.", StringUtils.normalizeSpace(id)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); try { @@ -402,7 +405,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Retrieve crs of plan with id {}.", id); + LOG.info("Retrieve crs of plan with id {}.", StringUtils.normalizeSpace(id)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); try { @@ -423,7 +426,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Evaluate raster of with id {}.", id); + LOG.info("Evaluate raster of with id {}.", StringUtils.normalizeSpace(id)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); try { @@ -443,7 +446,7 @@ public class ManagerController { @PathVariable String status, @Context HttpServletRequest request, @Context HttpServletResponse response) throws Exception { response.addHeader("Expires", "-1"); - LOG.info("Evaluate name of plan with id {}.", id); + LOG.info("Evaluate name of plan with id {}.", StringUtils.normalizeSpace(id)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); try { @@ -467,7 +470,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Evaluate legislation status of plan with id {}.", id); + LOG.info("Evaluate legislation status of plan with id {}.", StringUtils.normalizeSpace(id)); HttpSession session = request.getSession(); XPlan plan = archiveManager.retrievePlanFromSession(session); try { @@ -490,7 +493,7 @@ public class ManagerController { throws Exception { // @formatter:on response.addHeader("Expires", "-1"); - LOG.info("Publish plan with id {} as INSPIRE dataset.", planId); + LOG.info("Publish plan with id {} as INSPIRE dataset.", StringUtils.normalizeSpace(planId)); if (planId == null) return false; try { @@ -583,12 +586,6 @@ public class ManagerController { return requestedPlan; } - private XPlan createAndSavePlan(HttpSession session, String contentType, String fileName) { - XPlan plan = new XPlan(fileName, toHexString(doubleToLongBits(random())), contentType); - archiveManager.savePlanInSession(session, plan); - return plan; - } - private void populateResponse(HttpServletResponse response, long fileSize, String fileName) throws IOException { String message = BUNDLE.getString("loadedPlan"); message = message.replace("{0}", fileName).replace("{1}", "" + fileSize); -- GitLab