diff --git a/libraries/datahandler/src/main/thrift/components.thrift b/libraries/datahandler/src/main/thrift/components.thrift index f6fc28c298..f4f5a59c74 100644 --- a/libraries/datahandler/src/main/thrift/components.thrift +++ b/libraries/datahandler/src/main/thrift/components.thrift @@ -405,6 +405,7 @@ struct ComponentDTO { 51: optional string mailinglist, 52: optional string wiki, 53: optional string blog, + 56: optional string vcs, } struct ReleaseLink{ diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/Sw360ComponentService.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/Sw360ComponentService.java index c32b7cbf63..7839841720 100644 --- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/Sw360ComponentService.java +++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/component/Sw360ComponentService.java @@ -46,6 +46,8 @@ import org.springframework.stereotype.Service; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static org.eclipse.sw360.datahandler.common.CommonUtils.getSortedMap; @@ -147,6 +149,14 @@ public Component createComponent(Component component, User sw360User) throws TEx public RequestStatus updateComponent(Component component, User sw360User) throws TException { ComponentService.Iface sw360ComponentClient = getThriftComponentClient(); RequestStatus requestStatus; + if (CommonUtils.isNotNullEmptyOrWhitespace(component.getVcs())) { + String urlRegex = "^(https?://)[a-zA-Z0-9+&@#/%?=~_|!:,.;-]*[a-zA-Z0-9+&@#/%=~_|]$"; + Pattern urlPattern = Pattern.compile(urlRegex); + Matcher matcher = urlPattern.matcher(component.getVcs()); + boolean isValidUrl=matcher.matches(); + if(!isValidUrl) + throw new RuntimeException("sw360 component with name '" + component.getName() + " cannot be updated as vcs url is invalid"); + } if (Sw360ResourceServer.IS_FORCE_UPDATE_ENABLED) { requestStatus = sw360ComponentClient.updateComponentWithForceFlag(component, sw360User, true); } else { diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java index 1b48bc2dc0..41dc3bb1e2 100644 --- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java +++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/RestControllerHelper.java @@ -120,6 +120,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -675,6 +676,9 @@ public Component convertToComponent(ComponentDTO componentDTO) { component.setMailinglist(componentDTO.getMailinglist()); component.setWiki(componentDTO.getWiki()); component.setBlog(componentDTO.getBlog()); + if(componentDTO.getVcs()!=null && Objects.nonNull(componentDTO.getVcs())) { + component.setVcs(componentDTO.getVcs().trim()); + } return component; }