diff --git a/pom.xml b/pom.xml
index f81848f..cca71f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,12 +17,27 @@
Requesting Party Token Portlet
+
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git
scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git
https://code-repo.d4science.org/gCubeSystem/${project.artifactId}
+
+
+
+ Giancarlo Panichi
+ g.panichi@isti.cnr.it
+ CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"
+
+ architect
+ developer
+
+
+
+
+
1.8
1.8
@@ -147,38 +162,22 @@
org.gcube.resources.discovery
ic-client
- 1.0.4
-
+
org.gcube.core
common-scope-maps
- 1.1.0
-
+
org.gcube.resources
registry-publisher
- 1.3.1
-
-
+
+
@@ -232,7 +231,7 @@
-
+
com.liferay.maven.plugins
liferay-maven-plugin
@@ -254,7 +253,7 @@
portlet
-
+
maven-compiler-plugin
@@ -263,13 +262,16 @@
${maven.compiler.target}
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/SystemServiceDefinition.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/SystemServiceDefinition.java
index 20e2818..578f847 100644
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/SystemServiceDefinition.java
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/SystemServiceDefinition.java
@@ -20,7 +20,7 @@ import org.gcube.portlets.admin.systemservicedefinition.definition.DefClientIdCo
import org.gcube.portlets.admin.systemservicedefinition.definition.DefDescriptionComparator;
import org.gcube.portlets.admin.systemservicedefinition.definition.DefinitionItem;
import org.gcube.portlets.admin.systemservicedefinition.event.CreateSSDEvent;
-import org.gcube.portlets.admin.systemservicedefinition.event.CreateSSDEventPublisher;
+import org.gcube.portlets.admin.systemservicedefinition.event.DeleteSSDEvent;
import org.gcube.portlets.admin.systemservicedefinition.is.InformationSystemUtils;
import org.gcube.portlets.admin.systemservicedefinition.shared.Constants;
import org.gcube.portlets.admin.systemservicedefinition.util.UserCredentials;
@@ -209,7 +209,7 @@ public class SystemServiceDefinition extends MVCPortlet {
*/
try {
itemsList = InformationSystemUtils.retrieveSSD(Constants.SYSTEM_SERVICE_CATEGORY,
- userCredentials.getCurrentScope(), userCredentials.getAccessToken());
+ userCredentials.getCurrentScope());
} catch (Exception e) {
logger.error("Error retrieving System Services from IS. {}", e.getLocalizedMessage(), e);
throw new PortletException("Error retrieving System Services from IS. " + e.getLocalizedMessage(), e);
@@ -364,8 +364,8 @@ public class SystemServiceDefinition extends MVCPortlet {
String secret = UUID.randomUUID().toString();
DefinitionItem definitionItem = new DefinitionItem(clientId, description, username, secret);
InformationSystemUtils.publishSSD(definitionItem, Constants.SYSTEM_SERVICE_CATEGORY,
- userCredentials.getCurrentScope(), userCredentials.getAccessToken());
- // publishCreateSSDEvent(definitionItem);
+ userCredentials.getCurrentScope());
+ publishCreateSSDEvent(definitionItem);
SessionMessages.add(actionRequest, "success-definition-created");
actionResponse.setRenderParameter("jspPage", "/html/systemservicedefinition/view.jsp");
} catch (Exception e) {
@@ -393,17 +393,7 @@ public class SystemServiceDefinition extends MVCPortlet {
}
- private void publishCreateSSDEvent(DefinitionItem definitionItem) {
- logger.debug("Trying to send the event to create System Service");
- CreateSSDEvent toSend = new CreateSSDEvent(definitionItem);
- new CreateSSDEventPublisher().publish(toSend);
- logger.info("Done send event " + toSend.getName() + " for " + toSend.getUser());
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
-
- }
- }
+
public void editDefinition(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
@SuppressWarnings("unused")
@@ -465,33 +455,64 @@ public class SystemServiceDefinition extends MVCPortlet {
}
paramsInfo(actionRequest);
+
+
+ logger.debug("Delete Request");
+ String clientId = ParamUtil.getString(actionRequest, "clientId");
+ if (clientId == null || clientId.isEmpty()) {
+ logger.error("Invalid client id: " + clientId);
+ SessionErrors.add(actionRequest, "error-invalid-clientId");
+ SessionMessages.add(actionRequest,
+ PortalUtil.getPortletId(actionRequest) + SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
+ PortalUtil.copyRequestParameters(actionRequest, actionResponse);
+ actionResponse.setRenderParameter("jspPage", "/html/systemservicedefinition/view.jsp");
+ return;
+ }
+
+ try {
+ DefinitionItem definitionItem=new DefinitionItem(clientId);
+ InformationSystemUtils.deleteSSD(definitionItem, Constants.SYSTEM_SERVICE_CATEGORY,
+ userCredentials.getCurrentScope());
+ publishDeleteSSDEvent(definitionItem);
+ SessionMessages.add(actionRequest, "success-definition-deleted");
+ actionResponse.setRenderParameter("jspPage", "/html/systemservicedefinition/view.jsp");
- SessionMessages.add(actionRequest, "success-definition-deleted");
- actionResponse.setRenderParameter("jspPage", "/html/systemservicedefinition/view.jsp");
-
- /*
- * SessionErrors.add(actionRequest, "error-delete-definition");
- * SessionMessages.add(actionRequest, PortalUtil.getPortletId(actionRequest) +
- * SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
- * actionResponse.setRenderParameter("jspPage",
- * "/html/systemservicedefinition/view.jsp");
- */
+ } catch (Exception e) {
+ logger.error(e.getLocalizedMessage(),e);
+ SessionErrors.add(actionRequest, "error-delete-definition");
+ SessionMessages.add(actionRequest,
+ PortalUtil.getPortletId(actionRequest) + SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
+ actionResponse.setRenderParameter("jspPage", "/html/systemservicedefinition/view.jsp");
+ }
+
+ }
- /*
- * String portletName = (String)actionRequest.getAttribute(WebKeys.PORTLET_ID);
- * ThemeDisplay themeDisplay =
- * (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
- *
- * PortletURL redirectURL =
- * PortletURLFactoryUtil.create(PortalUtil.getHttpServletRequest(actionRequest),
- * portletName,themeDisplay.getLayout().getPlid(), PortletRequest.RENDER_PHASE);
- * redirectURL.setParameter("jspPage", "/registration.jsp");
- * SessionErrors.add(actionRequest, "WRONG_FIRST_NAME_ERROR");
- * actionResponse.sendRedirect(redirectURL.toString());
- */
+
+
+ private void publishCreateSSDEvent(DefinitionItem definitionItem) {
+ logger.debug("Trying to send the event to create System Service");
+ CreateSSDEvent toCreate = new CreateSSDEvent(definitionItem);
+ toCreate.publisher.publish(toCreate);
+ logger.info("Done send create event " + toCreate.getName() + " for " + toCreate.getUser());
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
}
+
+ private void publishDeleteSSDEvent(DefinitionItem definitionItem) {
+ logger.debug("Trying to send the event to delete System Service");
+ DeleteSSDEvent toDelete = new DeleteSSDEvent(definitionItem);
+ toDelete.publisher.publish(toDelete);
+ logger.info("Done send delete event " + toDelete.getName() + " for " + toDelete.getUser());
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
+ }
+
/*
* private void createDefinition(ResourceRequest resourceRequest,
* ResourceResponse resourceResponse, UserCredentials userCredentials) throws
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/definition/DefinitionItem.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/definition/DefinitionItem.java
index 0b484fc..613e638 100644
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/definition/DefinitionItem.java
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/definition/DefinitionItem.java
@@ -16,6 +16,10 @@ public class DefinitionItem implements Serializable {
private String username;
private String secret;
+ public DefinitionItem(String clientId) {
+ super();
+ this.clientId = clientId;
+ }
public DefinitionItem(String clientId, String description, String username, String secret) {
super();
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEvent.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEvent.java
index 303a318..e202874 100644
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEvent.java
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEvent.java
@@ -1,5 +1,6 @@
package org.gcube.portlets.admin.systemservicedefinition.event;
+import org.gcube.portal.event.publisher.lr62.AbstractLR62EventPublisher;
import org.gcube.portal.event.publisher.lr62.PortalEvent;
import org.gcube.portlets.admin.systemservicedefinition.definition.DefinitionItem;
@@ -12,6 +13,14 @@ public class CreateSSDEvent extends PortalEvent {
private static final long serialVersionUID = 1499288552188273747L;
+ public class CreateSSDEventPublisher extends AbstractLR62EventPublisher {
+ public CreateSSDEventPublisher() {
+ super();
+ }
+ }
+
+ public CreateSSDEventPublisher publisher;
+
public static final String NAME = "create_system_service";
public static final String CLIENT_ID_ENTRY = "client_id";
public static final String DESCRIPTION_ENTRY = "description";
@@ -19,6 +28,7 @@ public class CreateSSDEvent extends PortalEvent {
public CreateSSDEvent(DefinitionItem definitionItem) {
super(NAME);
+ publisher = new CreateSSDEventPublisher();
setClientId(definitionItem.getClientId());
setDescription(definitionItem.getDescription());
setClientSecret(definitionItem.getSecret());
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEventPublisher.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEventPublisher.java
deleted file mode 100644
index 6a17310..0000000
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/CreateSSDEventPublisher.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.gcube.portlets.admin.systemservicedefinition.event;
-
-import org.gcube.portal.event.publisher.lr62.AbstractLR62EventPublisher;
-
-public class CreateSSDEventPublisher extends AbstractLR62EventPublisher {
- public CreateSSDEventPublisher() {
- super();
- }
-}
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/DeleteSSDEvent.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/DeleteSSDEvent.java
new file mode 100644
index 0000000..1b93448
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/event/DeleteSSDEvent.java
@@ -0,0 +1,41 @@
+package org.gcube.portlets.admin.systemservicedefinition.event;
+
+import org.gcube.portal.event.publisher.lr62.AbstractLR62EventPublisher;
+import org.gcube.portal.event.publisher.lr62.PortalEvent;
+import org.gcube.portlets.admin.systemservicedefinition.definition.DefinitionItem;
+
+/**
+ *
+ * @author Giancarlo Panichi
+ *
+ */
+public class DeleteSSDEvent extends PortalEvent {
+
+ private static final long serialVersionUID = 1499288552188273747L;
+
+ public class DeleteSSDEventPublisher extends AbstractLR62EventPublisher {
+ public DeleteSSDEventPublisher() {
+ super();
+ }
+ }
+
+ public DeleteSSDEventPublisher publisher;
+
+ public static final String NAME = "delete_system_service";
+ public static final String CLIENT_ID_ENTRY = "client_id";
+
+ public DeleteSSDEvent(DefinitionItem definitionItem) {
+ super(NAME);
+ publisher = new DeleteSSDEventPublisher();
+ setClientId(definitionItem.getClientId());
+ }
+
+ public void setClientId(String clientId) {
+ set(CLIENT_ID_ENTRY, clientId);
+ }
+
+ public String getClientId() {
+ return (String) get(CLIENT_ID_ENTRY);
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/is/InformationSystemUtils.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/is/InformationSystemUtils.java
index f7ad5c3..19edd7d 100644
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/is/InformationSystemUtils.java
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/is/InformationSystemUtils.java
@@ -26,8 +26,7 @@ public class InformationSystemUtils {
private static Logger logger = LoggerFactory.getLogger(InformationSystemUtils.class);
-
- public static IAMService retrieveIAMService(String scope, String token) throws Exception {
+ public static IAMService retrieveIAMService(String scope) throws Exception {
try {
logger.debug("Retrieve IAM Service on IS");
@@ -35,8 +34,10 @@ public class InformationSystemUtils {
if (scope == null || scope.isEmpty())
throw new Exception("Invalid scope: " + scope);
- if (token == null || token.isEmpty())
- throw new Exception("Invalid token: " + scope);
+ /*
+ * if (token == null || token.isEmpty()) throw new Exception("Invalid token: " +
+ * scope);
+ */
ScopeProvider.instance.set(scope);
// AccessTokenProvider.instance.set(token);
@@ -45,19 +46,19 @@ public class InformationSystemUtils {
SimpleQuery query = ICFactory.queryFor(ServiceEndpoint.class);
query.addCondition("$resource/Profile/Category/text() eq '" + Constants.IAM_SERVICE_CATEGORY + "'")
.addCondition("$resource/Profile/Name/text() eq '" + Constants.IAM_SERVICE_NAME + "'");
-
+
DiscoveryClient client = ICFactory.clientFor(ServiceEndpoint.class);
List resources = client.submit(query);
- IAMService iamService=null;
-
- if(resources!=null&&!resources.isEmpty()) {
- ServiceEndpoint iams=resources.get(0);
- iamService=new IAMService(iams.profile().runtime().hostedOn());
+ IAMService iamService = null;
+
+ if (resources != null && !resources.isEmpty()) {
+ ServiceEndpoint iams = resources.get(0);
+ iamService = new IAMService(iams.profile().runtime().hostedOn());
}
-
- logger.debug("IAM Services retrieved: {}",iamService);
+
+ logger.debug("IAM Services retrieved: {}", iamService);
return iamService;
} catch (Throwable e) {
@@ -67,7 +68,7 @@ public class InformationSystemUtils {
}
}
- public static ArrayList retrieveSSD(String category, String scope, String token) throws Exception {
+ public static ArrayList retrieveSSD(String category, String scope) throws Exception {
try {
logger.debug("Retrieve System Services Definition on IS");
@@ -75,8 +76,10 @@ public class InformationSystemUtils {
if (scope == null || scope.isEmpty())
throw new Exception("Invalid scope: " + scope);
- if (token == null || token.isEmpty())
- throw new Exception("Invalid token: " + scope);
+ /*
+ * if (token == null || token.isEmpty()) throw new Exception("Invalid token: " +
+ * scope);
+ */
ScopeProvider.instance.set(scope);
// AccessTokenProvider.instance.set(token);
@@ -116,8 +119,7 @@ public class InformationSystemUtils {
}
}
- public static void publishSSD(DefinitionItem definitionItem, String category, String scope, String token)
- throws Exception {
+ public static void publishSSD(DefinitionItem definitionItem, String category, String scope) throws Exception {
if (definitionItem == null)
throw new Exception("Invalid definition: " + definitionItem);
@@ -127,56 +129,56 @@ public class InformationSystemUtils {
if (scope == null || scope.isEmpty())
throw new Exception("Invalid scope: " + scope);
- if (token == null || token.isEmpty())
- throw new Exception("Invalid token: " + token);
+ /*
+ * if (token == null || token.isEmpty()) throw new Exception("Invalid token: " +
+ * token);
+ */
+
+ IAMService iamService = retrieveIAMService(scope);
-
- IAMService iamService=retrieveIAMService(scope, token);
-
ServiceEndpoint toPublish = new ServiceEndpoint();
- logger.debug("Resource Type: {}",toPublish.type());
+ logger.debug("Resource Type: {}", toPublish.type());
/*
* List scopes = new ArrayList(); scopes.add(scope);
* Collection col = toPublish.scopes().asCollection();
* col.addAll(scopes);
*/
-
+
toPublish.newProfile();
toPublish.profile().name(definitionItem.getClientId());
toPublish.profile().description(definitionItem.getDescription());
toPublish.profile().category(category);
toPublish.profile().version("1.0.0");
-
+
toPublish.profile().newRuntime();
toPublish.profile().runtime().ghnId("");
toPublish.profile().runtime().status("READY");
toPublish.profile().runtime().hostedOn("d4science.org");
-
+
toPublish.profile().newPlatform();
toPublish.profile().platform().name("d4science");
toPublish.profile().platform().version((short) 0);
toPublish.profile().platform().minorVersion((short) 0);
toPublish.profile().platform().revisionVersion((short) 0);
toPublish.profile().platform().buildVersion((short) 0);
-
-
+
AccessPoint accessPoint = new AccessPoint();
- // String encryptedPassword =
- // StringEncrypter.getEncrypter().encrypt(definitionItem.getSecret());
+ String encryptedPassword = StringEncrypter.getEncrypter().encrypt(definitionItem.getSecret());
accessPoint.name(definitionItem.getClientId());
accessPoint.description("Keycloak client credentials");
accessPoint.address(iamService.getAddress());
- accessPoint.credentials(definitionItem.getSecret(), definitionItem.getUsername());
+ accessPoint.credentials(encryptedPassword, definitionItem.getUsername());
toPublish.profile().accessPoints().add(accessPoint);
-
+
logger.debug("Request publish: {}", toPublish);
+
try {
-
+
// AccessTokenProvider.instance.set(token);
- //SecurityTokenProvider.instance.set(token);
+ // SecurityTokenProvider.instance.set(token);
ScopeProvider.instance.set(scope);
-
+
RegistryPublisher publisher = RegistryPublisherFactory.create();
String id = publisher.create(toPublish).id();
@@ -191,6 +193,49 @@ public class InformationSystemUtils {
logger.debug("Published on IS");
}
-}
+ public static void deleteSSD(DefinitionItem definitionItem, String category, String scope) throws Exception {
+ if (definitionItem == null)
+ throw new Exception("Invalid definition: " + definitionItem);
+
+ if (category == null || category.isEmpty())
+ throw new Exception("Invalid category: " + category);
+
+ if (scope == null || scope.isEmpty())
+ throw new Exception("Invalid scope: " + scope);
+
+ ScopeProvider.instance.set(scope);
+ // AccessTokenProvider.instance.set(token);
+ // SecurityTokenProvider.instance.set(token);
+ SimpleQuery query = ICFactory.queryFor(ServiceEndpoint.class);
+ query.addCondition("$resource/Profile/Category/text() eq '" + category + "'")
+ .addCondition("$resource/Profile/Name/text() eq '" + definitionItem.getClientId() + "'");
+
+ DiscoveryClient client = ICFactory.clientFor(ServiceEndpoint.class);
+
+ List resources = client.submit(query);
+
+ if (resources != null && !resources.isEmpty()) {
+ ServiceEndpoint toDelete=resources.get(0);
+ logger.debug("Requested delete: {}", toDelete);
+
+ try {
+
+ RegistryPublisher publisher = RegistryPublisherFactory.create();
+ publisher.remove(toDelete);
+
+ } catch (Exception e) {
+ logger.error("Error publishing the ssd on IS: {}", e.getLocalizedMessage(), e);
+ throw e;
+ }
+
+ logger.debug("Deleted on IS");
+ } else {
+ String error="No resources found with name: "+definitionItem.getClientId();
+ logger.error(error);
+ throw new Exception(error);
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/shared/Constants.java b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/shared/Constants.java
index b1838d2..372955b 100644
--- a/src/main/java/org/gcube/portlets/admin/systemservicedefinition/shared/Constants.java
+++ b/src/main/java/org/gcube/portlets/admin/systemservicedefinition/shared/Constants.java
@@ -12,6 +12,7 @@ public class Constants {
public static final String DEFAULT_SCOPE = "/gcube";
public static final String DEFAULT_TOKEN = "";
+
public static final String DEFAULT_ROLE = "OrganizationMember";
// Session
diff --git a/src/test/java/org/gcube/portlets/admin/systemservicedefinition/ISTest.java b/src/test/java/org/gcube/portlets/admin/systemservicedefinition/ISTest.java
index 41c0faf..ae9763d 100644
--- a/src/test/java/org/gcube/portlets/admin/systemservicedefinition/ISTest.java
+++ b/src/test/java/org/gcube/portlets/admin/systemservicedefinition/ISTest.java
@@ -24,8 +24,7 @@ public class ISTest {
public void findSSD() {
try {
- InformationSystemUtils.retrieveSSD(Constants.SYSTEM_SERVICE_CATEGORY, Constants.DEFAULT_SCOPE,
- Constants.DEFAULT_TOKEN);
+ InformationSystemUtils.retrieveSSD(Constants.SYSTEM_SERVICE_CATEGORY, Constants.DEFAULT_SCOPE);
assertTrue(true);
} catch (Exception e) {
@@ -34,15 +33,15 @@ public class ISTest {
}
}
-
+
@Ignore
public void publishSSD() {
try {
- DefinitionItem definitionItem=new DefinitionItem("sample-client-name", "sample-client-description",
+ DefinitionItem definitionItem = new DefinitionItem("sample-client-name", "sample-client-description",
"sample-client-description", "xxxxx-xxxx-xxx-xxxx");
- InformationSystemUtils.publishSSD(definitionItem,Constants.SYSTEM_SERVICE_CATEGORY, Constants.DEFAULT_SCOPE,
- Constants.DEFAULT_TOKEN);
+ InformationSystemUtils.publishSSD(definitionItem, Constants.SYSTEM_SERVICE_CATEGORY,
+ Constants.DEFAULT_SCOPE);
assertTrue(true);
} catch (Exception e) {
@@ -52,4 +51,23 @@ public class ISTest {
}
+ @Ignore
+ public void deleteSSD() {
+
+ try {
+ DefinitionItem definitionItem = new DefinitionItem("sample-client-name", "sample-client-description",
+ "sample-client-description", "xxxxx-xxxx-xxx-xxxx");
+ InformationSystemUtils.deleteSSD(definitionItem, Constants.SYSTEM_SERVICE_CATEGORY,
+ Constants.DEFAULT_SCOPE);
+ assertTrue(true);
+
+ } catch (Exception e) {
+ logger.error(e.getLocalizedMessage(), e);
+ assertTrue("Error deleting the resource!", false);
+ }
+
+ }
+
+
+
}
\ No newline at end of file
diff --git a/src/test/resources/.gitignore b/src/test/resources/.gitignore
index a7e2273..adde24b 100644
--- a/src/test/resources/.gitignore
+++ b/src/test/resources/.gitignore
@@ -7,3 +7,4 @@
/howto.txt
/log4j.properties
/symm.key
+/.~lock.symm.key#