[CST-7756] added validation logic of params

This commit is contained in:
Mykhaylo
2023-01-27 12:10:16 +01:00
parent d3c5e7debe
commit c59438b936

View File

@@ -178,26 +178,9 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList(); List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList();
if (CollectionUtils.isNotEmpty(subscriptionParameterList)) { if (CollectionUtils.isNotEmpty(subscriptionParameterList)) {
List<SubscriptionParameter> subscriptionParameters = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameters = new ArrayList<>();
for (SubscriptionParameterRest subscriptionParameterRest : subscriptionParameterList) { validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters);
SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters,
var name = subscriptionParameterRest.getName(); subscriptionRest.getSubscriptionType());
var value = subscriptionParameterRest.getValue();
if (!nameAndValueAreSupported(name, value)) {
throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name +
" or value: " + value + " is not supported!");
}
subscriptionParameter.setName(name);
subscriptionParameter.setValue(value);
subscriptionParameters.add(subscriptionParameter);
}
var type = subscriptionRest.getSubscriptionType();
if (!subscriptionEmailNotificationService.getSupportedSubscriptionTypes().contains(type)) {
throw new UnprocessableEntityException("Provided subscriptionType:" + type + " is not supported!" +
" Must be one of: " + subscriptionEmailNotificationService.getSupportedSubscriptionTypes());
}
subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters, type);
} }
context.commit(); context.commit();
return converter.toRest(subscription, utils.obtainProjection()); return converter.toRest(subscription, utils.obtainProjection());
@@ -208,6 +191,29 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
} }
} }
private void validateParameters(SubscriptionRest subscriptionRest,
List<SubscriptionParameterRest> subscriptionParameterList,
List<SubscriptionParameter> subscriptionParameters) {
for (SubscriptionParameterRest subscriptionParameterRest : subscriptionParameterList) {
SubscriptionParameter subscriptionParameter = new SubscriptionParameter();
var name = subscriptionParameterRest.getName();
var value = subscriptionParameterRest.getValue();
if (!nameAndValueAreSupported(name, value)) {
throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name +
" or value: " + value + " is not supported!");
}
subscriptionParameter.setName(name);
subscriptionParameter.setValue(value);
subscriptionParameters.add(subscriptionParameter);
}
var type = subscriptionRest.getSubscriptionType();
if (!subscriptionEmailNotificationService.getSupportedSubscriptionTypes().contains(type)) {
throw new UnprocessableEntityException("Provided subscriptionType:" + type + " is not supported!" +
" Must be one of: " + subscriptionEmailNotificationService.getSupportedSubscriptionTypes());
}
}
private boolean nameAndValueAreSupported(String name, String value) { private boolean nameAndValueAreSupported(String name, String value) {
return subscriptionEmailNotificationService.isSupportedSubscriptionParameterName(name) && return subscriptionEmailNotificationService.isSupportedSubscriptionParameterName(name) &&
subscriptionEmailNotificationService.getSubscriptionParameterValuesByName(name).contains(value); subscriptionEmailNotificationService.getSubscriptionParameterValuesByName(name).contains(value);
@@ -238,22 +244,18 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
if (Objects.isNull(ePerson)) { if (Objects.isNull(ePerson)) {
throw new ResourceNotFoundException("There is not ePerson with uuid:" + epersonId); throw new ResourceNotFoundException("There is not ePerson with uuid:" + epersonId);
} }
DSpaceObject dSpaceObject = dspaceObjectUtil.findDSpaceObject(context, UUID.fromString(dsoId)); DSpaceObject dSpaceObject = dspaceObjectUtil.findDSpaceObject(context, UUID.fromString(dsoId));
if (Objects.isNull(dSpaceObject)) { if (Objects.isNull(dSpaceObject)) {
throw new ResourceNotFoundException("There is not DSpaceObject with uuid:" + dsoId); throw new ResourceNotFoundException("There is not DSpaceObject with uuid:" + dsoId);
} }
if (id.equals(subscription.getID())) { if (id.equals(subscription.getID())) {
List<SubscriptionParameter> subscriptionParameterList = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameters = new ArrayList<>();
for (SubscriptionParameterRest subscriptionParamRest : subscriptionRest.getSubscriptionParameterList()) { List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList();
SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters);
subscriptionParameter.setSubscription(subscription);
subscriptionParameter.setValue(subscriptionParamRest.getValue());
subscriptionParameter.setName(subscriptionParamRest.getName());
subscriptionParameterList.add(subscriptionParameter);
}
subscription = subscribeService.updateSubscription(context, id, ePerson, dSpaceObject, subscription = subscribeService.updateSubscription(context, id, ePerson, dSpaceObject,
subscriptionParameterList, subscriptionRest.getSubscriptionType()); subscriptionParameters, subscriptionRest.getSubscriptionType());
context.commit(); context.commit();
return converter.toRest(subscription, utils.obtainProjection()); return converter.toRest(subscription, utils.obtainProjection());
} else { } else {