mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'master' into 'master'
Improve policy feature validating logic See merge request entgra/carbon-device-mgt!530
This commit is contained in:
commit
834a66b812
@ -81,7 +81,8 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
|
|||||||
public Response addPolicy(@Valid PolicyWrapper policyWrapper) {
|
public Response addPolicy(@Valid PolicyWrapper policyWrapper) {
|
||||||
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features = RequestValidationUtil
|
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features = RequestValidationUtil
|
||||||
.validatePolicyDetails(policyWrapper);
|
.validatePolicyDetails(policyWrapper);
|
||||||
if (features != null && features.size() > 0) { // validation failure results;
|
// validation failure results;
|
||||||
|
if (!features.isEmpty()) {
|
||||||
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
||||||
}
|
}
|
||||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||||
@ -220,7 +221,8 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
|
|||||||
public Response updatePolicy(@PathParam("id") int id, @Valid PolicyWrapper policyWrapper) {
|
public Response updatePolicy(@PathParam("id") int id, @Valid PolicyWrapper policyWrapper) {
|
||||||
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features = RequestValidationUtil
|
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features = RequestValidationUtil
|
||||||
.validatePolicyDetails(policyWrapper);
|
.validatePolicyDetails(policyWrapper);
|
||||||
if (features != null && features.size() > 0) { // validation failure results;
|
// validation failure results;
|
||||||
|
if (!features.isEmpty()) {
|
||||||
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
||||||
}
|
}
|
||||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||||
@ -476,7 +478,8 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
|
|||||||
public Response validatePolicy(List<ProfileFeature> profileFeaturesList) {
|
public Response validatePolicy(List<ProfileFeature> profileFeaturesList) {
|
||||||
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features
|
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features
|
||||||
= RequestValidationUtil.validateProfileFeatures(profileFeaturesList);
|
= RequestValidationUtil.validateProfileFeatures(profileFeaturesList);
|
||||||
if (features != null && features.size() > 0) { // validation failure results;
|
// validation failure results;
|
||||||
|
if (!features.isEmpty()) {
|
||||||
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
return Response.status(Response.Status.BAD_REQUEST).entity(features).build();
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK).entity("Valid request").build();
|
return Response.status(Response.Status.OK).entity("Valid request").build();
|
||||||
|
|||||||
@ -24,7 +24,9 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||||
|
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
|
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.OldPasswordResetWrapper;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.OldPasswordResetWrapper;
|
||||||
@ -33,8 +35,11 @@ import org.wso2.carbon.device.mgt.jaxrs.beans.ProfileFeature;
|
|||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.RoleInfo;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.RoleInfo;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.Scope;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.Scope;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
||||||
|
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
|
||||||
import org.wso2.carbon.policy.mgt.common.PolicyPayloadValidator;
|
import org.wso2.carbon.policy.mgt.common.PolicyPayloadValidator;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -279,65 +284,115 @@ public class RequestValidationUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<org.wso2.carbon.policy.mgt.common.ProfileFeature> validatePolicyDetails(PolicyWrapper policyWrapper) {
|
public static List<org.wso2.carbon.policy.mgt.common.ProfileFeature> validatePolicyDetails(
|
||||||
|
PolicyWrapper policyWrapper) {
|
||||||
if (policyWrapper == null) {
|
if (policyWrapper == null) {
|
||||||
|
String msg = "Found an empty policy";
|
||||||
|
log.error(msg);
|
||||||
throw new InputValidationException(
|
throw new InputValidationException(
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage("Policy is empty.").build());
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
return validateProfileFeatures(policyWrapper.getProfile().getProfileFeaturesList());
|
return validateProfileFeatures(policyWrapper.getProfile().getProfileFeaturesList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<org.wso2.carbon.policy.mgt.common.ProfileFeature> validateProfileFeatures
|
public static List<org.wso2.carbon.policy.mgt.common.ProfileFeature> validateProfileFeatures
|
||||||
(List<ProfileFeature> profileFeatures) {
|
(List<ProfileFeature> profileFeatures) {
|
||||||
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features
|
|
||||||
= new ArrayList<>();
|
|
||||||
String deviceType = null;
|
|
||||||
for (ProfileFeature profileFeature : profileFeatures) {
|
|
||||||
deviceType = profileFeature.getDeviceTypeId();
|
|
||||||
org.wso2.carbon.policy.mgt.common.ProfileFeature feature = new org
|
|
||||||
.wso2.carbon.policy.mgt.common.ProfileFeature();
|
|
||||||
feature.setContent(profileFeature.getContent());
|
|
||||||
feature.setDeviceType(profileFeature.getDeviceTypeId());
|
|
||||||
feature.setFeatureCode(profileFeature.getFeatureCode());
|
|
||||||
feature.setPayLoad(profileFeature.getPayLoad());
|
|
||||||
features.add(feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
if (profileFeatures.isEmpty()) {
|
||||||
Class<?> clz;
|
String msg = "Found Empty Policy Feature list to validate.";
|
||||||
switch (deviceType) {
|
log.error(msg);
|
||||||
|
throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder()
|
||||||
|
.setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg).build());
|
||||||
|
} else {
|
||||||
|
List<org.wso2.carbon.policy.mgt.common.ProfileFeature> features = new ArrayList<>();
|
||||||
|
String deviceType = null;
|
||||||
|
for (ProfileFeature profileFeature : profileFeatures) {
|
||||||
|
if (StringUtils.isBlank(profileFeature.getDeviceTypeId())) {
|
||||||
|
String msg = "Found an invalid policy feature with empty device type data.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder()
|
||||||
|
.setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg).build());
|
||||||
|
}
|
||||||
|
if (deviceType != null && !deviceType.equals(profileFeature.getDeviceTypeId())) {
|
||||||
|
String msg = "Found two different device types in profile feature list.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder()
|
||||||
|
.setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg).build());
|
||||||
|
}
|
||||||
|
deviceType = profileFeature.getDeviceTypeId();
|
||||||
|
org.wso2.carbon.policy.mgt.common.ProfileFeature feature = new org.wso2.carbon.policy.mgt.common.ProfileFeature();
|
||||||
|
feature.setContent(profileFeature.getContent());
|
||||||
|
feature.setDeviceType(profileFeature.getDeviceTypeId());
|
||||||
|
feature.setFeatureCode(profileFeature.getFeatureCode());
|
||||||
|
feature.setPayLoad(profileFeature.getPayLoad());
|
||||||
|
features.add(feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DeviceType deviceTypeObj = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceType(deviceType);
|
||||||
|
if (deviceTypeObj == null) {
|
||||||
|
String msg = "Found an unsupported device type to validate profile feature.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
Class<?> clz;
|
||||||
|
switch (deviceTypeObj.getName()) {
|
||||||
case Constants.ANDROID:
|
case Constants.ANDROID:
|
||||||
clz = Class.forName(Constants.ANDROID_POLICY_VALIDATOR);
|
clz = Class.forName(Constants.ANDROID_POLICY_VALIDATOR);
|
||||||
PolicyPayloadValidator enrollmentNotifier = (PolicyPayloadValidator) clz.newInstance();
|
PolicyPayloadValidator enrollmentNotifier = (PolicyPayloadValidator) clz.getDeclaredConstructor()
|
||||||
|
.newInstance();
|
||||||
return enrollmentNotifier.validate(features);
|
return enrollmentNotifier.validate(features);
|
||||||
|
case Constants.IOS:
|
||||||
|
//todo
|
||||||
|
case Constants.WINDOWS:
|
||||||
|
//todo
|
||||||
default:
|
default:
|
||||||
log.error("No policy validator found for device type " + deviceType);
|
log.error("No policy validator found for device type " + deviceType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
String msg = "Error occurred when validating whether device type is valid one or not " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
String msg = "Error when creating an instance of validator related to deviceType " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
String msg = "Error when accessing an instance of validator related to deviceType " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
String msg = "Error when loading an instance of validator related to deviceType " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
String msg = "Error occurred while constructing validator related to deviceType " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
String msg = "Error occurred while instantiating validator related to deviceType " + deviceType;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new InputValidationException(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR)
|
||||||
|
.setMessage(msg).build());
|
||||||
}
|
}
|
||||||
} catch (InstantiationException e) {
|
return features;
|
||||||
String msg = "Error when creating an instance of validator related to deviceType " +
|
|
||||||
deviceType;
|
|
||||||
log.error(msg);
|
|
||||||
throw new InputValidationException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build
|
|
||||||
());
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
String msg = "Error when accessing an instance of validator related to deviceType " +
|
|
||||||
deviceType;
|
|
||||||
log.error(msg);
|
|
||||||
throw new InputValidationException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build
|
|
||||||
());
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
String msg ="Error when loading an instance of validator related to deviceType " +
|
|
||||||
deviceType;
|
|
||||||
log.error(msg);
|
|
||||||
throw new InputValidationException(
|
|
||||||
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build
|
|
||||||
());
|
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user