mirror of
https://github.com/hapifhir/hapi-fhir.git
synced 2025-02-10 15:05:05 +00:00
Serializing changes for sensitive data (#5655)
* Add new senstiive data serializer * Add new senstiive data serializer * Add new senstiive data serializer * Remove dead comments * Change up the test * review comments * wip * Tighten tests and push annotation down * Tighten tests and push annotation down * Changelog * Add test * 7.0.1-SNAPSHOT bump * Error code * Add method used by CDR * add version enum * Fix test
This commit is contained in:
parent
0f3c744f11
commit
14a489c2af
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -29,4 +29,6 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
getterVisibility = JsonAutoDetect.Visibility.NONE,
|
||||
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
|
||||
setterVisibility = JsonAutoDetect.Visibility.NONE)
|
||||
public interface IModelJson {}
|
||||
public interface IModelJson {
|
||||
String SENSITIVE_DATA_FILTER_NAME = "sensitiveDataFilter";
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
/*-
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2024 Smile CDR, Inc.
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
package ca.uhn.fhir.model.api.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Annotation to mark a field as sensitive, indicating that it should not
|
||||
* be displayed or serialized by jackson. The only way to serialize an object annotated with this annotation is to use
|
||||
* {@link ca.uhn.fhir.util.JsonUtil}, as it has a registered filter against this annotation.
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public @interface SensitiveNoDisplay {}
|
@ -21,15 +21,23 @@ package ca.uhn.fhir.util;
|
||||
|
||||
import ca.uhn.fhir.i18n.Msg;
|
||||
import ca.uhn.fhir.model.api.IModelJson;
|
||||
import ca.uhn.fhir.model.api.annotation.SensitiveNoDisplay;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.FilterProvider;
|
||||
import com.fasterxml.jackson.databind.ser.PropertyWriter;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
|
||||
import jakarta.annotation.Nonnull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.util.List;
|
||||
@ -38,15 +46,30 @@ public class JsonUtil {
|
||||
|
||||
private static final ObjectMapper ourMapperPrettyPrint;
|
||||
private static final ObjectMapper ourMapperNonPrettyPrint;
|
||||
private static final ObjectMapper ourMapperIncludeSensitive;
|
||||
|
||||
public static final SimpleBeanPropertyFilter SIMPLE_BEAN_PROPERTY_FILTER = new SensitiveDataFilter();
|
||||
|
||||
public static final SimpleFilterProvider SENSITIVE_DATA_FILTER_PROVIDER =
|
||||
new SimpleFilterProvider().addFilter(IModelJson.SENSITIVE_DATA_FILTER_NAME, SIMPLE_BEAN_PROPERTY_FILTER);
|
||||
public static final SimpleFilterProvider SHOW_ALL_DATA_FILTER_PROVIDER = new SimpleFilterProvider()
|
||||
.addFilter(IModelJson.SENSITIVE_DATA_FILTER_NAME, SimpleBeanPropertyFilter.serializeAll());
|
||||
|
||||
static {
|
||||
ourMapperPrettyPrint = new ObjectMapper();
|
||||
ourMapperPrettyPrint.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||
ourMapperPrettyPrint.setFilterProvider(SENSITIVE_DATA_FILTER_PROVIDER);
|
||||
ourMapperPrettyPrint.enable(SerializationFeature.INDENT_OUTPUT);
|
||||
|
||||
ourMapperNonPrettyPrint = new ObjectMapper();
|
||||
ourMapperNonPrettyPrint.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||
ourMapperNonPrettyPrint.setFilterProvider(SENSITIVE_DATA_FILTER_PROVIDER);
|
||||
ourMapperNonPrettyPrint.disable(SerializationFeature.INDENT_OUTPUT);
|
||||
|
||||
ourMapperIncludeSensitive = new ObjectMapper();
|
||||
ourMapperIncludeSensitive.setFilterProvider(SHOW_ALL_DATA_FILTER_PROVIDER);
|
||||
ourMapperIncludeSensitive.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||
ourMapperIncludeSensitive.disable(SerializationFeature.INDENT_OUTPUT);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -67,6 +90,24 @@ public class JsonUtil {
|
||||
public static <T> List<T> deserializeList(@Nonnull String theInput, @Nonnull Class<T> theType) throws IOException {
|
||||
return ourMapperPrettyPrint.readerForListOf(theType).readValue(theInput);
|
||||
}
|
||||
/**
|
||||
* Parse JSON
|
||||
*/
|
||||
public static <T> T deserialize(@Nonnull InputStream theInput, @Nonnull Class<T> theType) throws IOException {
|
||||
return ourMapperPrettyPrint.readerFor(theType).readValue(theInput);
|
||||
}
|
||||
|
||||
/**
|
||||
* Includes fields which are annotated with {@link SensitiveNoDisplay}. Currently only meant to be used for serialization
|
||||
* for batch job parameters.
|
||||
*/
|
||||
public static String serializeWithSensitiveData(@Nonnull IModelJson theInput) {
|
||||
try {
|
||||
return ourMapperIncludeSensitive.writeValueAsString(theInput);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new InvalidRequestException(Msg.code(2487) + "Failed to encode " + theInput.getClass(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode JSON
|
||||
@ -93,6 +134,10 @@ public class JsonUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public FilterProvider getSensitiveDataFilterProvider() {
|
||||
return SENSITIVE_DATA_FILTER_PROVIDER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode JSON
|
||||
*/
|
||||
@ -111,4 +156,26 @@ public class JsonUtil {
|
||||
throw new InvalidRequestException(Msg.code(1741) + "Failed to encode " + theJson.getClass(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private static class SensitiveDataFilter extends SimpleBeanPropertyFilter {
|
||||
|
||||
@Override
|
||||
protected boolean include(PropertyWriter writer) {
|
||||
return true; // Default include all except explicitly checked and excluded
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serializeAsField(Object pojo, JsonGenerator gen, SerializerProvider provider, PropertyWriter writer)
|
||||
throws Exception {
|
||||
if (include(writer)) {
|
||||
if (!isFieldSensitive(writer)) {
|
||||
super.serializeAsField(pojo, gen, provider, writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isFieldSensitive(PropertyWriter writer) {
|
||||
return writer.getAnnotation(SensitiveNoDisplay.class) != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -135,6 +135,7 @@ public enum VersionEnum {
|
||||
V6_11_0,
|
||||
|
||||
V7_0_0,
|
||||
V7_0_1,
|
||||
|
||||
V7_1_0,
|
||||
V7_2_0;
|
||||
|
@ -0,0 +1,54 @@
|
||||
package ca.uhn.fhir.util;
|
||||
|
||||
import ca.uhn.fhir.model.api.IModelJson;
|
||||
import ca.uhn.fhir.model.api.annotation.SensitiveNoDisplay;
|
||||
import com.fasterxml.jackson.annotation.JsonFilter;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
|
||||
class JsonUtilTest {
|
||||
|
||||
@JsonFilter(IModelJson.SENSITIVE_DATA_FILTER_NAME)
|
||||
class TestObject implements IModelJson {
|
||||
@JsonProperty("sensitiveField")
|
||||
@SensitiveNoDisplay
|
||||
private String mySensitiveField;
|
||||
|
||||
@JsonProperty(value = "publicField")
|
||||
private String myPublicField;
|
||||
|
||||
public String getPrivateField() {
|
||||
return mySensitiveField;
|
||||
}
|
||||
|
||||
public void setSensitiveField(String thePrivateField) {
|
||||
this.mySensitiveField = thePrivateField;
|
||||
}
|
||||
|
||||
public String getPublicField() {
|
||||
return myPublicField;
|
||||
}
|
||||
|
||||
public void setPublicField(String thePublicField) {
|
||||
this.myPublicField = thePublicField;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSensitiveNoDisplayAnnotationIsHiddenFromBasicSerialization() {
|
||||
TestObject object = new TestObject();
|
||||
object.setPublicField("Public Value!");
|
||||
object.setSensitiveField("Sensitive Value!");
|
||||
|
||||
String sensitiveExcluded = JsonUtil.serializeOrInvalidRequest(object);
|
||||
assertThat(sensitiveExcluded, is(not(containsString("Sensitive Value!"))));
|
||||
|
||||
String sensitiveIncluded = JsonUtil.serializeWithSensitiveData(object);
|
||||
assertThat(sensitiveIncluded, is(containsString("Sensitive Value!")));
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-bom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
<name>HAPI FHIR BOM</name>
|
||||
@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-cli</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
type: fix
|
||||
jira: SMILE-7216
|
||||
title: "Previously, the Bulk Import (`$import`) job was ignoring the `httpBasicCredentials` section of the incoming parameters
|
||||
object, causing the job to fail with a 403 error. This has been corrected."
|
@ -11,7 +11,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -33,11 +33,13 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.awaitility.Awaitility.await;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.blankOrNullString;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
@ -52,7 +54,9 @@ import static org.junit.jupiter.api.Assertions.fail;
|
||||
public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(BulkImportR4Test.class);
|
||||
private final BulkImportFileServlet myBulkImportFileServlet = new BulkImportFileServlet();
|
||||
private static final String USERNAME = "username";
|
||||
private static final String PASSWORD = "password";
|
||||
private final BulkImportFileServlet myBulkImportFileServlet = new BulkImportFileServlet(USERNAME, PASSWORD);
|
||||
@RegisterExtension
|
||||
private final HttpServletExtension myHttpServletExtension = new HttpServletExtension()
|
||||
.withServlet(myBulkImportFileServlet);
|
||||
@ -76,6 +80,45 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
await().until(() -> channel.getQueueSizeForUnitTest() == 0);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBulkImportFailsWith403OnBadCredentials() {
|
||||
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
String url = myHttpServletExtension.getBaseUrl() + "/download?index=test"; // Name doesnt matter, its going to fail with 403 anyhow
|
||||
parameters.addNdJsonUrl(url);
|
||||
JobInstanceStartRequest request = new JobInstanceStartRequest();
|
||||
request.setJobDefinitionId(BulkImportAppCtx.JOB_BULK_IMPORT_PULL);
|
||||
request.setParameters(parameters);
|
||||
|
||||
// Execute
|
||||
Batch2JobStartResponse startResponse = myJobCoordinator.startInstance(request);
|
||||
String instanceId = startResponse.getInstanceId();
|
||||
assertThat(instanceId, not(blankOrNullString()));
|
||||
ourLog.info("Execution got ID: {}", instanceId);
|
||||
|
||||
// Verify
|
||||
await().atMost(120, TimeUnit.SECONDS).until(() -> {
|
||||
myJobCleanerService.runMaintenancePass();
|
||||
JobInstance instance = myJobCoordinator.getInstance(instanceId);
|
||||
return instance.getStatus();
|
||||
}, equalTo(StatusEnum.FAILED));
|
||||
|
||||
//No resources stored
|
||||
runInTransaction(() -> {
|
||||
assertEquals(0, myResourceTableDao.count());
|
||||
});
|
||||
|
||||
|
||||
//Should have 403
|
||||
runInTransaction(() -> {
|
||||
JobInstance instance = myJobCoordinator.getInstance(instanceId);
|
||||
ourLog.info("Instance details:\n{}", JsonUtil.serialize(instance, true));
|
||||
assertEquals(1, instance.getErrorCount());
|
||||
assertThat(instance.getErrorMessage(), is(containsString("Received HTTP 403")));
|
||||
});
|
||||
|
||||
}
|
||||
@Test
|
||||
public void testRunBulkImport() {
|
||||
// Setup
|
||||
@ -84,6 +127,8 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
List<String> indexes = addFiles(fileCount);
|
||||
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
|
||||
parameters.setHttpBasicCredentials(USERNAME + ":" + PASSWORD);
|
||||
for (String next : indexes) {
|
||||
String url = myHttpServletExtension.getBaseUrl() + "/download?index=" + next;
|
||||
parameters.addNdJsonUrl(url);
|
||||
@ -132,6 +177,7 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
List<String> indexes = addFiles(fileCount);
|
||||
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
parameters.setHttpBasicCredentials(USERNAME + ":" + PASSWORD);
|
||||
for (String next : indexes) {
|
||||
String url = myHttpServletExtension.getBaseUrl() + "/download?index=" + next;
|
||||
parameters.addNdJsonUrl(url);
|
||||
@ -219,6 +265,7 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
indexes.add(myBulkImportFileServlet.registerFileByContents("{\"resourceType\":\"Foo\"}"));
|
||||
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
parameters.setHttpBasicCredentials(USERNAME + ":" + PASSWORD);
|
||||
for (String next : indexes) {
|
||||
String url = myHttpServletExtension.getBaseUrl() + "/download?index=" + next;
|
||||
parameters.addNdJsonUrl(url);
|
||||
@ -260,6 +307,7 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
String url = myHttpServletExtension.getBaseUrl() + "/download?index=FOO";
|
||||
parameters.addNdJsonUrl(url);
|
||||
parameters.setHttpBasicCredentials(USERNAME + ":" + PASSWORD);
|
||||
|
||||
JobInstanceStartRequest request = new JobInstanceStartRequest();
|
||||
request.setJobDefinitionId(BulkImportAppCtx.JOB_BULK_IMPORT_PULL);
|
||||
@ -328,7 +376,9 @@ public class BulkImportR4Test extends BaseJpaR4Test {
|
||||
|
||||
JobInstanceStartRequest request = new JobInstanceStartRequest();
|
||||
request.setJobDefinitionId(BulkImportAppCtx.JOB_BULK_IMPORT_PULL);
|
||||
request.setParameters(new BulkImportJobParameters());
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
parameters.setHttpBasicCredentials(USERNAME + ":" + PASSWORD);
|
||||
request.setParameters(parameters);
|
||||
|
||||
// Execute
|
||||
|
||||
|
@ -43,8 +43,6 @@ public class BulkExportProviderR4Test extends BaseResourceProviderR4Test {
|
||||
|
||||
assertThat(e.getStatusCode(), equalTo(404));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void testBulkExport_typePatientIdNotExists_throws404() {
|
||||
// given no data
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<artifactId>hapi-fhir-serviceloaders</artifactId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<artifactId>hapi-fhir-serviceloaders</artifactId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
@ -21,7 +21,7 @@
|
||||
<dependency>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-caching-api</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<artifactId>hapi-fhir-serviceloaders</artifactId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>hapi-fhir-spring-boot-sample-client-apache</artifactId>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
</parent>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
</parent>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir-spring-boot</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
</parent>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -38,6 +38,7 @@ import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
@ -56,8 +57,36 @@ public class BulkImportFileServlet extends HttpServlet {
|
||||
|
||||
public static final String DEFAULT_HEADER_CONTENT_TYPE = CT_FHIR_NDJSON + CHARSET_UTF8_CTSUFFIX;
|
||||
|
||||
private String myBasicAuth;
|
||||
|
||||
public BulkImportFileServlet() {}
|
||||
|
||||
public BulkImportFileServlet(String theBasicAuthUsername, String theBasicAuthPassword) {
|
||||
setBasicAuth(theBasicAuthUsername, theBasicAuthPassword);
|
||||
}
|
||||
|
||||
public void setBasicAuth(String username, String password) {
|
||||
String auth = username + ":" + password;
|
||||
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
|
||||
myBasicAuth = "Basic " + encodedAuth;
|
||||
}
|
||||
|
||||
public void checkBasicAuthAndMaybeThrow403(HttpServletRequest request, HttpServletResponse response)
|
||||
throws IOException {
|
||||
// Check if the myBasicAuth variable is set, ignore if not.
|
||||
if (myBasicAuth == null || myBasicAuth.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String authHeader = request.getHeader("Authorization");
|
||||
if (authHeader == null || !authHeader.equals(myBasicAuth)) {
|
||||
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid authentication credentials.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest theRequest, HttpServletResponse theResponse) throws IOException {
|
||||
checkBasicAuthAndMaybeThrow403(theRequest, theResponse);
|
||||
try {
|
||||
String servletPath = theRequest.getServletPath();
|
||||
String requestUri = theRequest.getRequestURI();
|
||||
|
@ -21,6 +21,8 @@ package ca.uhn.fhir.batch2.jobs.imprt;
|
||||
|
||||
import ca.uhn.fhir.interceptor.model.RequestPartitionId;
|
||||
import ca.uhn.fhir.model.api.IModelJson;
|
||||
import ca.uhn.fhir.model.api.annotation.SensitiveNoDisplay;
|
||||
import com.fasterxml.jackson.annotation.JsonFilter;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import jakarta.annotation.Nullable;
|
||||
import jakarta.validation.constraints.Min;
|
||||
@ -36,6 +38,8 @@ import java.util.List;
|
||||
* This class is the parameters model object for starting a
|
||||
* bulk import job.
|
||||
*/
|
||||
@JsonFilter(IModelJson.SENSITIVE_DATA_FILTER_NAME) // TODO GGG eventually consider pushing this up once we have more
|
||||
// experience using it.
|
||||
public class BulkImportJobParameters implements IModelJson {
|
||||
|
||||
@JsonProperty(value = "ndJsonUrls", required = true)
|
||||
@ -43,8 +47,9 @@ public class BulkImportJobParameters implements IModelJson {
|
||||
@NotNull(message = "At least one NDJSON URL must be provided")
|
||||
private List<@Pattern(regexp = "^http[s]?://.*", message = "Must be a valid URL") String> myNdJsonUrls;
|
||||
|
||||
@JsonProperty(value = "httpBasicCredentials", access = JsonProperty.Access.WRITE_ONLY, required = false)
|
||||
@JsonProperty(value = "httpBasicCredentials", required = false)
|
||||
@Nullable
|
||||
@SensitiveNoDisplay
|
||||
private String myHttpBasicCredentials;
|
||||
|
||||
@JsonProperty(value = "maxBatchResourceCount", required = false)
|
||||
|
@ -154,7 +154,7 @@ public class BulkDataImportProviderTest {
|
||||
|
||||
JobInstanceStartRequest startRequest = myStartRequestCaptor.getValue();
|
||||
ourLog.info("Parameters: {}", startRequest.getParameters());
|
||||
assertTrue(startRequest.getParameters().startsWith("{\"ndJsonUrls\":[\"http://example.com/Patient\",\"http://example.com/Observation\"],\"maxBatchResourceCount\":500"));
|
||||
assertTrue(startRequest.getParameters().startsWith("{\"ndJsonUrls\":[\"http://example.com/Patient\",\"http://example.com/Observation\"],\"httpBasicCredentials\":\"admin:password\",\"maxBatchResourceCount\":500,\"partitionId\":{\"allPartitions\":false"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -0,0 +1,24 @@
|
||||
package ca.uhn.fhir.batch2.jobs.imprt;
|
||||
|
||||
import ca.uhn.fhir.batch2.model.JobInstanceStartRequest;
|
||||
import ca.uhn.fhir.util.JsonUtil;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
public class ParameterSerializationTest {
|
||||
|
||||
@Test
|
||||
public void testBatchJobParametersSuccessfullySerializeAllFields() {
|
||||
JobInstanceStartRequest startRequest = new JobInstanceStartRequest();
|
||||
BulkImportJobParameters parameters = new BulkImportJobParameters();
|
||||
parameters.addNdJsonUrl("myurl");
|
||||
parameters.setHttpBasicCredentials("username:password");
|
||||
startRequest.setParameters(parameters);
|
||||
|
||||
BulkImportJobParameters readBackParameters = startRequest.getParameters(BulkImportJobParameters.class);
|
||||
|
||||
assertThat(readBackParameters.getHttpBasicCredentials(), is(equalTo("username:password")));
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -83,7 +83,7 @@ public class JobInstanceStartRequest implements IModelJson {
|
||||
}
|
||||
|
||||
public JobInstanceStartRequest setParameters(IModelJson theParameters) {
|
||||
myParameters = JsonUtil.serializeOrInvalidRequest(theParameters);
|
||||
myParameters = JsonUtil.serializeWithSensitiveData(theParameters);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-deployable-pom</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
2
pom.xml
2
pom.xml
@ -9,7 +9,7 @@
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<name>HAPI-FHIR</name>
|
||||
<description>An open-source implementation of the FHIR specification in Java.</description>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||
<artifactId>hapi-fhir</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
Loading…
x
Reference in New Issue
Block a user