diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java
index b9c0b001a..f7a297be1 100644
--- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java
+++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/target/MgmtTargetRequestBody.java
@@ -21,6 +21,17 @@ public class MgmtTargetRequestBody {
@JsonProperty
private String address;
+ @JsonProperty
+ private String securityToken;
+
+ public String getSecurityToken() {
+ return securityToken;
+ }
+
+ public void setSecurityToken(final String securityToken) {
+ this.securityToken = securityToken;
+ }
+
/**
* @return the name
*/
diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java
index f6cf9f54b..a889edc35 100644
--- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java
+++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetMapper.java
@@ -182,10 +182,11 @@ public final class MgmtTargetMapper {
}
static Target fromRequest(final EntityFactory entityFactory, final MgmtTargetRequestBody targetRest) {
- final Target target = entityFactory.generateTarget(targetRest.getControllerId());
+ final Target target = entityFactory.generateTarget(targetRest.getControllerId(), targetRest.getSecurityToken());
target.setDescription(targetRest.getDescription());
target.setName(targetRest.getName());
target.getTargetInfo().setAddress(targetRest.getAddress());
+
return target;
}
diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java
index c41dadd27..5ddb74314 100644
--- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java
+++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResource.java
@@ -125,6 +125,13 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
if (targetRest.getName() != null) {
existingTarget.setName(targetRest.getName());
}
+ if (targetRest.getAddress() != null) {
+ existingTarget.getTargetInfo().setAddress(targetRest.getAddress());
+ }
+ if (targetRest.getSecurityToken() != null) {
+ existingTarget.setSecurityToken(targetRest.getSecurityToken());
+ }
+
final Target updateTarget = this.targetManagement.updateTarget(existingTarget);
return new ResponseEntity<>(MgmtTargetMapper.toResponse(updateTarget), HttpStatus.OK);
diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java
index ed6ee4a93..a528438bb 100644
--- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java
+++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java
@@ -355,6 +355,54 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest {
assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy);
}
+ @Test
+ @Description("Ensures that target update request is reflected by repository.")
+ public void updateTargetSecurityToken() throws Exception {
+ final String knownControllerId = "123";
+ final String knownNewToken = "6567576565";
+ final String knownNameNotModiy = "nameNotModiy";
+ final String body = new JSONObject().put("securityToken", knownNewToken).toString();
+
+ // prepare
+ final Target t = entityFactory.generateTarget(knownControllerId);
+ t.setName(knownNameNotModiy);
+ targetManagement.createTarget(t);
+
+ mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body)
+ .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
+ .andExpect(jsonPath("$.controllerId", equalTo(knownControllerId)))
+ .andExpect(jsonPath("$.securityToken", equalTo(knownNewToken)))
+ .andExpect(jsonPath("$.name", equalTo(knownNameNotModiy)));
+
+ final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownControllerId);
+ assertThat(findTargetByControllerID.getSecurityToken()).isEqualTo(knownNewToken);
+ assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy);
+ }
+
+ @Test
+ @Description("Ensures that target update request is reflected by repository.")
+ public void updateTargetAddress() throws Exception {
+ final String knownControllerId = "123";
+ final String knownNewAddress = "amqp://test123/foobar";
+ final String knownNameNotModiy = "nameNotModiy";
+ final String body = new JSONObject().put("address", knownNewAddress).toString();
+
+ // prepare
+ final Target t = entityFactory.generateTarget(knownControllerId);
+ t.setName(knownNameNotModiy);
+ targetManagement.createTarget(t);
+
+ mvc.perform(put(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + knownControllerId).content(body)
+ .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
+ .andExpect(jsonPath("$.controllerId", equalTo(knownControllerId)))
+ .andExpect(jsonPath("$.address", equalTo(knownNewAddress)))
+ .andExpect(jsonPath("$.name", equalTo(knownNameNotModiy)));
+
+ final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownControllerId);
+ assertThat(findTargetByControllerID.getTargetInfo().getAddress().toString()).isEqualTo(knownNewAddress);
+ assertThat(findTargetByControllerID.getName()).isEqualTo(knownNameNotModiy);
+ }
+
@Test
@Description("Ensures that target query returns list of targets in defined format.")
public void getTargetWithoutAddtionalRequestParameters() throws Exception {
@@ -679,7 +727,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest {
@Test
public void createTargetsListReturnsSuccessful() throws Exception {
- final Target test1 = entityFactory.generateTarget("id1");
+ final Target test1 = entityFactory.generateTarget("id1", "token");
test1.setDescription("testid1");
test1.setName("testname1");
test1.getTargetInfo().setAddress("amqp://test123/foobar");
@@ -696,7 +744,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest {
targets.add(test3);
final MvcResult mvcResult = mvc
- .perform(post("/rest/v1/targets/").content(JsonBuilder.targets(targets))
+ .perform(post("/rest/v1/targets/").content(JsonBuilder.targets(targets, true))
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
@@ -705,6 +753,7 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest {
.andExpect(jsonPath("[0].description", equalTo("testid1")))
.andExpect(jsonPath("[0].createdAt", not(equalTo(0))))
.andExpect(jsonPath("[0].createdBy", equalTo("bumlux")))
+ .andExpect(jsonPath("[0].securityToken", equalTo("token")))
.andExpect(jsonPath("[0].address", equalTo("amqp://test123/foobar")))
.andExpect(jsonPath("[1].name", equalTo("testname2")))
.andExpect(jsonPath("[1].createdBy", equalTo("bumlux")))
@@ -731,6 +780,9 @@ public class MgmtTargetResourceTest extends AbstractRestIntegrationTest {
assertThat(targetManagement.findTargetByControllerID("id1")).isNotNull();
assertThat(targetManagement.findTargetByControllerID("id1").getName()).isEqualTo("testname1");
assertThat(targetManagement.findTargetByControllerID("id1").getDescription()).isEqualTo("testid1");
+ assertThat(targetManagement.findTargetByControllerID("id1").getSecurityToken()).isEqualTo("token");
+ assertThat(targetManagement.findTargetByControllerID("id1").getTargetInfo().getAddress().toString())
+ .isEqualTo("amqp://test123/foobar");
assertThat(targetManagement.findTargetByControllerID("id2")).isNotNull();
assertThat(targetManagement.findTargetByControllerID("id2").getName()).isEqualTo("testname2");
assertThat(targetManagement.findTargetByControllerID("id2").getDescription()).isEqualTo("testid2");
diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java
index 7542cd2ce..87919729e 100644
--- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java
+++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/EntityFactory.java
@@ -287,6 +287,7 @@ public interface EntityFactory {
/**
* Generates an empty {@link Target} without persisting it.
+ * {@link Target#getSecurityToken()} is generated.
*
* @param controllerID
* of the {@link Target}
@@ -295,6 +296,19 @@ public interface EntityFactory {
*/
Target generateTarget(@NotEmpty String controllerID);
+ /**
+ * Generates an empty {@link Target} without persisting it.
+ *
+ * @param controllerID
+ * of the {@link Target}
+ * @param securityToken
+ * of the {@link Target} for authentication if enabled on tenant.
+ * Generates one if empty or null.
+ *
+ * @return {@link Target} object
+ */
+ Target generateTarget(@NotEmpty String controllerID, @NotEmpty String securityToken);
+
/**
* Generates an empty {@link TargetFilterQuery} without persisting it.
*
diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java
index 56ab89ad3..c09b28a2f 100644
--- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java
+++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java
@@ -58,4 +58,10 @@ public interface Target extends NamedEntity {
*/
String getSecurityToken();
+ /**
+ * @param token
+ * new securityToken
+ */
+ void setSecurityToken(String token);
+
}
diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java
index a3792de54..51b59f08f 100644
--- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java
+++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaEntityFactory.java
@@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository.jpa;
import java.util.Collection;
+import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.jpa.model.JpaAction;
import org.eclipse.hawkbit.repository.jpa.model.JpaActionStatus;
@@ -87,6 +88,14 @@ public class JpaEntityFactory implements EntityFactory {
return new JpaTarget(controllerId);
}
+ @Override
+ public Target generateTarget(final String controllerId, final String securityToken) {
+ if (StringUtils.isEmpty(securityToken)) {
+ return new JpaTarget(controllerId);
+ }
+ return new JpaTarget(controllerId, securityToken);
+ }
+
@Override
public TargetTag generateTargetTag() {
return new JpaTargetTag();
diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java
index 94f50ff0d..183405470 100644
--- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java
+++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java
@@ -115,9 +115,21 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable targets) {
+ public static String targets(final List targets, final boolean withToken) {
final StringBuilder builder = new StringBuilder();
builder.append("[");
@@ -381,10 +377,12 @@ public abstract class JsonBuilder {
final String address = target.getTargetInfo().getAddress() != null
? target.getTargetInfo().getAddress().toString() : null;
+ final String token = withToken ? target.getSecurityToken() : null;
+
builder.append(new JSONObject().put("controllerId", target.getControllerId())
.put("description", target.getDescription()).put("name", target.getName()).put("createdAt", "0")
.put("updatedAt", "0").put("createdBy", "fghdfkjghdfkjh").put("updatedBy", "fghdfkjghdfkjh")
- .put("address", address).toString());
+ .put("address", address).put("securityToken", token).toString());
} catch (final Exception e) {
e.printStackTrace();
}