Skip to content

Commit 4db990c

Browse files
committed
Support for authentication in user-provided remote artifacts (OAuth2.0, HTTP basic, HTTP header)
1 parent 351909a commit 4db990c

4 files changed

Lines changed: 21 additions & 10 deletions

File tree

xmlvalidator-common/src/main/java/eu/europa/ec/itb/xml/InputHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public List<FileInfo> validateExternalArtifacts(DomainConfig domainConfig, Valid
5353
if (fileInfo.getFile() != null) {
5454
File rootFile = fileManager.unzipFile(parentFolder, fileInfo.getFile());
5555
if (rootFile == null) {
56-
artifactsToReturn.add(new FileInfo(fileManager.preprocessFileIfNeeded(domainConfig, validationType, artifactType, fileInfo.getFile(), true), fileInfo.getType(), fileInfo.getSource()));
56+
artifactsToReturn.add(new FileInfo(fileManager.preprocessFileIfNeeded(domainConfig, validationType, artifactType, fileInfo.getFile(), true), fileInfo.getType(), fileInfo.getSource(), fileInfo.getRequestDecorator()));
5757
} else {
5858
// ZIP File
5959
boolean proceed;

xmlvalidator-common/src/main/java/eu/europa/ec/itb/xml/validation/XMLValidator.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,13 @@
5252
import java.io.InputStream;
5353
import java.math.BigInteger;
5454
import java.net.URI;
55+
import java.net.http.HttpRequest;
5556
import java.nio.charset.StandardCharsets;
5657
import java.nio.file.Files;
5758
import java.util.ArrayList;
5859
import java.util.List;
5960
import java.util.UUID;
61+
import java.util.function.Consumer;
6062

6163
import static eu.europa.ec.itb.xml.util.Utils.secureSchemaValidation;
6264

@@ -96,10 +98,11 @@ public XMLValidator(ValidationSpecs specs) {
9698
* Create an XSD resolver.
9799
*
98100
* @param schemaSource The source from which the schema was initially loaded.
101+
* @param requestDecorator The request decorator to use.
99102
* @return The resolver.
100103
*/
101-
private LSResourceResolver getXSDResolver(URI schemaSource) {
102-
return ctx.getBean(XSDFileResolver.class, specs.getDomainConfig(), schemaSource);
104+
private LSResourceResolver getXSDResolver(URI schemaSource, Consumer<HttpRequest.Builder> requestDecorator) {
105+
return ctx.getBean(XSDFileResolver.class, specs.getDomainConfig(), schemaSource, requestDecorator);
103106
}
104107

105108
/**
@@ -169,7 +172,7 @@ private TAR validateSchema(InputStream inputStream, FileInfo schemaFile) throws
169172
// Validate XML content against given XSD schema.
170173
var errorHandler = new XSDReportHandler();
171174
try {
172-
secureSchemaValidation(inputStream, schemaFile.getFile().toPath(), errorHandler, getXSDResolver(schemaFile.getSource()), specs.getLocalisationHelper().getLocale(), specs.getDomainConfig().getSchemaVersionForValidationType(getValidationType()));
175+
secureSchemaValidation(inputStream, schemaFile.getFile().toPath(), errorHandler, getXSDResolver(schemaFile.getSource(), schemaFile.getRequestDecorator()), specs.getLocalisationHelper().getLocale(), specs.getDomainConfig().getSchemaVersionForValidationType(getValidationType()));
173176
} catch (Exception e) {
174177
throw new XMLInvalidException(e);
175178
}

xmlvalidator-common/src/main/java/eu/europa/ec/itb/xml/validation/XSDFileResolver.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@
3333
import java.io.Reader;
3434
import java.net.URI;
3535
import java.net.URISyntaxException;
36+
import java.net.http.HttpRequest;
3637
import java.nio.file.Files;
3738
import java.nio.file.Path;
3839
import java.util.Objects;
40+
import java.util.function.Consumer;
3941

4042
/**
4143
* URI resolver for XSDs looking up resources from the local file system.
@@ -51,6 +53,7 @@ public class XSDFileResolver implements LSResourceResolver {
5153

5254
private final DomainConfig domainConfig;
5355
private final URI schemaSource;
56+
private final Consumer<HttpRequest.Builder> requestDecorator;
5457

5558
@Autowired
5659
ApplicationConfig config;
@@ -60,10 +63,12 @@ public class XSDFileResolver implements LSResourceResolver {
6063
*
6164
* @param domainConfig The domain configuration.
6265
* @param schemaSource The source of the initial schema that triggered the validation.
66+
* @param requestDecorator The request decorator to use.
6367
*/
64-
public XSDFileResolver(DomainConfig domainConfig, URI schemaSource) {
68+
public XSDFileResolver(DomainConfig domainConfig, URI schemaSource, Consumer<HttpRequest.Builder> requestDecorator) {
6569
this.domainConfig = domainConfig;
6670
this.schemaSource = schemaSource;
71+
this.requestDecorator = requestDecorator;
6772
}
6873

6974
/**
@@ -189,7 +194,7 @@ private InputStream readRemoteSchema(URI schemaResource, DomainConfig domainConf
189194
} else if (domainConfig.isSkipRemoteSchemaImportCaching()) {
190195
// Read from the remote URI directly.
191196
LOG.debug("Retrieving resource [{}] remotely due to disabled caching", schemaResource);
192-
return fileManager.getInputStreamFromURL(uriAsString, null, domainConfig.getHttpVersion()).stream();
197+
return fileManager.getInputStreamFromURL(uriAsString, null, domainConfig.getHttpVersion(), requestDecorator).stream();
193198
} else {
194199
// Go through our caching layer.
195200
LOG.debug("Retrieving resource [{}] from cache", schemaResource);

xmlvalidator-web/src/main/java/eu/europa/ec/itb/xml/upload/UploadController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,11 @@
5151
import java.io.File;
5252
import java.io.IOException;
5353
import java.net.http.HttpClient;
54+
import java.net.http.HttpRequest;
5455
import java.nio.file.Path;
5556
import java.util.*;
5657
import java.util.function.BooleanSupplier;
58+
import java.util.function.Consumer;
5759

5860
import static eu.europa.ec.itb.validation.commons.web.Constants.*;
5961

@@ -519,28 +521,29 @@ private List<FileInfo> getExternalFiles(DomainConfig domainConfig, String[] exte
519521
String artifactType, File parentFolder) throws IOException {
520522
List<FileInfo> artifacts = new ArrayList<>();
521523
if (externalContentType != null) {
524+
Consumer<HttpRequest.Builder> requestDecorator = fileManager.createRemoteFileRequestDecorator(domainConfig, artifactInfo);
522525
for (int i=0; i<externalContentType.length; i++) {
523526
if (StringUtils.isNotBlank(externalContentType[i])) {
524527
FileInfo fileInfo = null;
525528
if (CONTENT_TYPE_FILE.equals(externalContentType[i])) {
526529
if (!externalFiles[i].isEmpty()) {
527530
try (var stream = externalFiles[i].getInputStream()) {
528-
fileInfo = new FileInfo(fileManager.getFileFromInputStream(parentFolder, stream, FileManager.EXTERNAL_FILE, externalFiles[i].getOriginalFilename()));
531+
fileInfo = new FileInfo(fileManager.getFileFromInputStream(parentFolder, stream, FileManager.EXTERNAL_FILE, externalFiles[i].getOriginalFilename()), null, null, requestDecorator);
529532
}
530533
}
531534
} else if (CONTENT_TYPE_STRING.equals(externalContentType[i])) {
532535
if (StringUtils.isNotBlank(externalStrings[i])) {
533-
fileInfo = new FileInfo(fileManager.getFileFromString(parentFolder, externalStrings[i], null, null, artifactType));
536+
fileInfo = new FileInfo(fileManager.getFileFromString(parentFolder, externalStrings[i], null, null, artifactType), null, null, requestDecorator);
534537
}
535538
} else {
536539
if (StringUtils.isNotBlank(externalUri[i])) {
537-
fileInfo = fileManager.getFileFromURL(parentFolder, externalUri[i], null, null, null, null, artifactType, null, domainConfig.getHttpVersion());
540+
fileInfo = fileManager.getFileFromURL(parentFolder, externalUri[i], null, null, null, null, artifactType, null, domainConfig.getHttpVersion(), requestDecorator);
538541
}
539542
}
540543
if (fileInfo != null) {
541544
File rootFile = this.fileManager.unzipFile(parentFolder, fileInfo.getFile());
542545
if (rootFile == null) {
543-
artifacts.add(new FileInfo(fileManager.preprocessFileIfNeeded(domainConfig, validationType, artifactType, fileInfo.getFile(), true), fileInfo.getType(), fileInfo.getSource()));
546+
artifacts.add(new FileInfo(fileManager.preprocessFileIfNeeded(domainConfig, validationType, artifactType, fileInfo.getFile(), true), fileInfo.getType(), fileInfo.getSource(), requestDecorator));
544547
} else {
545548
// ZIP File
546549
boolean proceed;

0 commit comments

Comments
 (0)