diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
index 6dd7e5c3210..f04259b896d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
@@ -417,5 +417,11 @@
powermock-api-mockito
test
+
+ org.wso2.carbon.identity.framework
+ org.wso2.carbon.identity.claim.metadata.mgt
+ ${carbon.identity.framework.version}
+ provided
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java
index 5d5b0572964..81233092f34 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java
@@ -67,6 +67,11 @@ import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.RequestValidationUtil;
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
import org.wso2.carbon.device.mgt.jaxrs.util.CredentialManagementResponseBuilder;
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
+import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementAdminService;
+import org.wso2.carbon.identity.claim.metadata.mgt.dto.AttributeMappingDTO;
+import org.wso2.carbon.identity.claim.metadata.mgt.dto.ClaimPropertyDTO;
+import org.wso2.carbon.identity.claim.metadata.mgt.dto.LocalClaimDTO;
+import org.wso2.carbon.identity.claim.metadata.mgt.exception.ClaimMetadataException;
import org.wso2.carbon.identity.user.store.count.UserStoreCountRetriever;
import org.wso2.carbon.identity.user.store.count.exception.UserStoreCounterException;
import org.wso2.carbon.user.api.Permission;
@@ -934,6 +939,12 @@ public class UserManagementServiceImpl implements UserManagementService {
@PathParam("username") String username,
JsonArray deviceList) {
try {
+ UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
+ if (!userStoreManager.isExistingUser(username)) {
+ String msg = "User by username: " + username + " does not exist.";
+ log.error(msg);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ }
RealmConfiguration realmConfiguration = PrivilegedCarbonContext.getThreadLocalCarbonContext()
.getUserRealm()
.getRealmConfiguration();
@@ -942,14 +953,31 @@ public class UserManagementServiceImpl implements UserManagementService {
if (!StringUtils.isBlank(domain)) {
username = domain + Constants.FORWARD_SLASH + username;
}
- UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
- if (!userStoreManager.isExistingUser(username)) {
- if (log.isDebugEnabled()) {
- log.debug("User by username: " + username + " does not exist.");
- }
- return Response.status(Response.Status.NOT_FOUND).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(
- "User doesn't exist.").build()).build();
+ ClaimMetadataManagementAdminService
+ claimMetadataManagementAdminService = new ClaimMetadataManagementAdminService();
+ //Get all available claim URIs
+ String[] allUserClaims = userStoreManager.getClaimManager().getAllClaimUris();
+ //Check they contains a claim attribute for external devices
+ if (!Arrays.asList(allUserClaims).contains(Constants.USER_CLAIM_DEVICES)) {
+ List claimPropertyDTOList = new ArrayList<>();
+ claimPropertyDTOList
+ .add(DeviceMgtAPIUtils.buildClaimPropertyDTO
+ (Constants.ATTRIBUTE_DISPLAY_NAME, Constants.EXTERNAL_DEVICE_CLAIM_DISPLAY_NAME));
+ claimPropertyDTOList
+ .add(DeviceMgtAPIUtils.buildClaimPropertyDTO
+ (Constants.ATTRIBUTE_DESCRIPTION, Constants.EXTERNAL_DEVICE_CLAIM_DESCRIPTION));
+
+ LocalClaimDTO localClaimDTO = new LocalClaimDTO();
+ localClaimDTO.setLocalClaimURI(Constants.USER_CLAIM_DEVICES);
+ localClaimDTO.setClaimProperties(claimPropertyDTOList.toArray(
+ new ClaimPropertyDTO[claimPropertyDTOList.size()]));
+
+ AttributeMappingDTO attributeMappingDTO = new AttributeMappingDTO();
+ attributeMappingDTO.setAttributeName(Constants.DEVICES);
+ attributeMappingDTO.setUserStoreDomain(domain);
+ localClaimDTO.setAttributeMappings(new AttributeMappingDTO[]{attributeMappingDTO});
+
+ claimMetadataManagementAdminService.addLocalClaim(localClaimDTO);
}
Map userClaims =
this.buildExternalDevicesUserClaims(username, domain, deviceList, userStoreManager);
@@ -958,8 +986,11 @@ public class UserManagementServiceImpl implements UserManagementService {
} catch (UserStoreException e) {
String msg = "Error occurred while updating external device claims of the user '" + username + "'";
log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ } catch (ClaimMetadataException e) {
+ String msg = "Error occurred while adding claim attribute";
+ log.error(msg, e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
@@ -969,6 +1000,13 @@ public class UserManagementServiceImpl implements UserManagementService {
public Response getUserClaimsForDevices(
@PathParam("username") String username) {
try {
+ UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
+ Map claims = new HashMap<>();
+ if (!userStoreManager.isExistingUser(username)) {
+ String msg = "User by username: " + username + " does not exist.";
+ log.error(msg);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ }
RealmConfiguration realmConfiguration = PrivilegedCarbonContext.getThreadLocalCarbonContext()
.getUserRealm()
.getRealmConfiguration();
@@ -977,23 +1015,20 @@ public class UserManagementServiceImpl implements UserManagementService {
if (!StringUtils.isBlank(domain)) {
username = domain + Constants.FORWARD_SLASH + username;
}
- UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
- if (!userStoreManager.isExistingUser(username)) {
+ String[] allUserClaims = userStoreManager.getClaimManager().getAllClaimUris();
+ if (!Arrays.asList(allUserClaims).contains(Constants.USER_CLAIM_DEVICES)) {
if (log.isDebugEnabled()) {
- log.debug("User by username: " + username + " does not exist.");
+ log.debug("Claim attribute for external device doesn't exist.");
}
- return Response.status(Response.Status.NOT_FOUND).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(
- "User doesn't exist.").build()).build();
+ return Response.status(Response.Status.OK).entity(claims).build();
}
String[] claimArray = {Constants.USER_CLAIM_DEVICES};
- Map claims = userStoreManager.getUserClaimValues(username, claimArray, domain);
+ claims = userStoreManager.getUserClaimValues(username, claimArray, domain);
return Response.status(Response.Status.OK).entity(claims).build();
} catch (UserStoreException e) {
- String msg = "Error occurred while retrieving external device claims of the user '" + username + "'";
+ String msg = "Error occurred while retrieving external device claims of the user '" + username + "'";
log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
@@ -1003,6 +1038,13 @@ public class UserManagementServiceImpl implements UserManagementService {
public Response deleteUserClaimsForDevices(
@PathParam("username") String username) {
try {
+ String[] claimArray = new String[1];
+ UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
+ if (!userStoreManager.isExistingUser(username)) {
+ String msg = "User by username: " + username + " does not exist.";
+ log.error(msg);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ }
RealmConfiguration realmConfiguration = PrivilegedCarbonContext.getThreadLocalCarbonContext()
.getUserRealm()
.getRealmConfiguration();
@@ -1011,16 +1053,14 @@ public class UserManagementServiceImpl implements UserManagementService {
if (!StringUtils.isBlank(domain)) {
username = domain + Constants.FORWARD_SLASH + username;
}
- UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
- if (!userStoreManager.isExistingUser(username)) {
+ String[] allUserClaims = userStoreManager.getClaimManager().getAllClaimUris();
+ if (!Arrays.asList(allUserClaims).contains(Constants.USER_CLAIM_DEVICES)) {
if (log.isDebugEnabled()) {
- log.debug("User by username: " + username + " does not exist.");
+ log.debug("Claim attribute for external device doesn't exist.");
}
- return Response.status(Response.Status.NOT_FOUND).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(
- "User doesn't exist.").build()).build();
+ return Response.status(Response.Status.OK).entity(claimArray).build();
}
- String[] claimArray = {Constants.USER_CLAIM_DEVICES};
+ claimArray[0] = Constants.USER_CLAIM_DEVICES;
userStoreManager.deleteUserClaimValues(
username,
claimArray,
@@ -1029,8 +1069,7 @@ public class UserManagementServiceImpl implements UserManagementService {
} catch (UserStoreException e) {
String msg = "Error occurred while deleting external device claims of the user '" + username + "'";
log.error(msg, e);
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(
- new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java
index 36fd22cca49..7042bb86106 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java
@@ -69,6 +69,11 @@ public class Constants {
public static final String NOTNOW = "notnow";
public static final String REPEATED = "repeated";
}
+ public static final String DEVICES = "devices";
+ public static final String ATTRIBUTE_DISPLAY_NAME = "DisplayName";
+ public static final String ATTRIBUTE_DESCRIPTION = "Description";
+ public static final String EXTERNAL_DEVICE_CLAIM_DISPLAY_NAME = "Devices";
+ public static final String EXTERNAL_DEVICE_CLAIM_DESCRIPTION = "Device list";
public final class ErrorMessages {
private ErrorMessages () { throw new AssertionError(); }
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
index 9be33cd3977..ac20f838733 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
@@ -67,6 +67,7 @@ import org.wso2.carbon.event.processor.stub.EventProcessorAdminServiceStub;
import org.wso2.carbon.event.publisher.stub.EventPublisherAdminServiceStub;
import org.wso2.carbon.event.receiver.stub.EventReceiverAdminServiceStub;
import org.wso2.carbon.event.stream.stub.EventStreamAdminServiceStub;
+import org.wso2.carbon.identity.claim.metadata.mgt.dto.ClaimPropertyDTO;
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
@@ -863,4 +864,18 @@ public class DeviceMgtAPIUtils {
}
return operation;
}
+
+ /**
+ * This method is used to set property name and value to ClaimPropertyDTO
+ *
+ * @param propertyName Name of the property
+ * @param propertyValue Value of the property
+ * @return {@link ClaimPropertyDTO}
+ */
+ public static ClaimPropertyDTO buildClaimPropertyDTO(String propertyName, String propertyValue) {
+ ClaimPropertyDTO claimPropertyDTO = new ClaimPropertyDTO();
+ claimPropertyDTO.setPropertyName(propertyName);
+ claimPropertyDTO.setPropertyValue(propertyValue);
+ return claimPropertyDTO;
+ }
}