From dcaaa4836b0e42a8ecb0638c75f2fefd51b0b9ab Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Thu, 20 Oct 2022 19:17:13 +0200 Subject: [PATCH] ready to release --- CHANGELOG.md | 2 +- pom.xml | 43 ++-- .../ws/inputs/MessageInputBean.java | 105 --------- .../networking/ws/inputs/Recipient.java | 49 ----- .../networking/ws/methods/v2/Messages.java | 53 ++++- .../java/org/gcube/portal/test/JTests.java | 201 ------------------ 6 files changed, 74 insertions(+), 379 deletions(-) delete mode 100644 src/main/java/org/gcube/portal/social/networking/ws/inputs/MessageInputBean.java delete mode 100644 src/main/java/org/gcube/portal/social/networking/ws/inputs/Recipient.java delete mode 100644 src/test/java/org/gcube/portal/test/JTests.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 642629a..20720d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [v2.8.0-SNAPSHOT] - 2022-10-20 +## [v2.8.0] - 2022-10-20 - Feature #23891 Refactored following updates social lib - Feature #23847 Social service: temporarily block of notifications for given username(s) diff --git a/pom.xml b/pom.xml index f9f9502..4da59fb 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portal social-networking-library-ws war - 2.8.0-SNAPSHOT + 2.8.0 social-networking-library-ws Rest interface for the social networking library. @@ -72,7 +72,7 @@ org.gcube.social-networking social-service-model - [1.1.7-SNAPSHOT, 2.0.0) + [1.2.0-SNAPSHOT, 2.0.0) net.sf.ehcache @@ -98,6 +98,7 @@ org.gcube.common storagehub-client-library + 2.0.0-SNAPSHOT com.sun.mail @@ -348,25 +349,25 @@ - - kr.motd.maven - sphinx-maven-plugin - 2.10.0 - - ${project.build.directory}/${project.artifactId}-${project.version}/docs - html - ${basedir}/docs - ${basedir}/docs - - - - process-resources - - generate - - - - + + + + + + + + + + + + + + + + + + + com.webcohesion.enunciate diff --git a/src/main/java/org/gcube/portal/social/networking/ws/inputs/MessageInputBean.java b/src/main/java/org/gcube/portal/social/networking/ws/inputs/MessageInputBean.java deleted file mode 100644 index 2863e64..0000000 --- a/src/main/java/org/gcube/portal/social/networking/ws/inputs/MessageInputBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.gcube.portal.social.networking.ws.inputs; - -import java.io.Serializable; -import java.util.ArrayList; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Generic input bean for methods that allow to write messages - */ -@JsonIgnoreProperties(ignoreUnknown = true) // ignore in serialization/deserialization - -public class MessageInputBean implements Serializable { - - private static final long serialVersionUID = -1317811686036127456L; - - @JsonProperty("body") - @NotNull(message="body cannot be missing") - @Size(min=1, message="body cannot be empty") - - private String body; - - @JsonProperty("subject") - @NotNull(message="subject cannot be missing") - @Size(min=1, message="subject cannot be empty") - /** - * subject - */ - private String subject; - - @JsonProperty("recipients") - @NotNull(message="recipients cannot be missing") - @Size(min=1, message="at least a recipient is needed") - @Valid // validate recursively - private ArrayList recipients; - - /** - * a list of workspace item id valid in the workspace of the sender - */ - @JsonProperty("attachmentIds") - @Valid // validate recursively - private ArrayList attachmentIds; - - public MessageInputBean() { - super(); - } - - public MessageInputBean(String sender, String body, String subject, - ArrayList recipients) { - super(); - //this.sender = sender; - this.body = body; - this.subject = subject; - this.recipients = recipients; - this.attachmentIds = new ArrayList<>(); - } - - public MessageInputBean(String sender, String body, String subject, - ArrayList recipients, ArrayList attachmentIds) { - super(); - //this.sender = sender; - this.body = body; - this.subject = subject; - this.recipients = recipients; - this.attachmentIds = attachmentIds; - } - - public String getBody() { - return body; - } - public void setBody(String body) { - this.body = body; - } - public String getSubject() { - return subject; - } - public void setSubject(String subject) { - this.subject = subject; - } - public ArrayList getRecipients() { - return recipients; - } - public void setRecipients(ArrayList recipients) { - this.recipients = recipients; - } - - public ArrayList getAttachmentIds() { - return attachmentIds; - } - - public void setAttachmentIds(ArrayList attachmentIds) { - this.attachmentIds = attachmentIds; - } - - @Override - public String toString() { - return "MessageInputBean [body=" + body + ", subject=" + subject + ", recipients=" + recipients - + ", attachmentIds=" + attachmentIds + "]"; - } -} diff --git a/src/main/java/org/gcube/portal/social/networking/ws/inputs/Recipient.java b/src/main/java/org/gcube/portal/social/networking/ws/inputs/Recipient.java deleted file mode 100644 index c3383fa..0000000 --- a/src/main/java/org/gcube/portal/social/networking/ws/inputs/Recipient.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.gcube.portal.social.networking.ws.inputs; - -import java.io.Serializable; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.webcohesion.enunciate.metadata.DocumentationExample; - -/** - * Recipient message bean - * @author Costantino Perciante at ISTI-CNR - * (costantino.perciante@isti.cnr.it) - * - */ -@JsonIgnoreProperties(ignoreUnknown = true) // ignore in serialization/deserialization -public class Recipient implements Serializable{ - - private static final long serialVersionUID = 1071412144446514138L; - - @JsonProperty("id") - @NotNull(message="recipient id must not be null") - @Size(min=1, message="recipient id must not be empty") - /* - * @param "The recipient of the message", - */ - @DocumentationExample("john.smith") - private String id; - - public Recipient() { - super(); - } - public Recipient(String id) { - super(); - this.id = id; - } - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - @Override - public String toString() { - return "Recipient [id=" + id + "]"; - } -} diff --git a/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Messages.java b/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Messages.java index db90815..629d477 100644 --- a/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Messages.java +++ b/src/main/java/org/gcube/portal/social/networking/ws/methods/v2/Messages.java @@ -9,6 +9,7 @@ import javax.validation.Valid; import javax.validation.ValidationException; import javax.validation.constraints.NotNull; import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -22,6 +23,7 @@ import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; +import org.gcube.common.authorization.control.annotations.AuthorizationControl; import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.utils.Caller; @@ -34,11 +36,13 @@ import org.gcube.portal.notifications.thread.MessageNotificationsThread; import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder; import org.gcube.portal.social.networking.liferay.ws.LiferayJSONWsCredentials; import org.gcube.portal.social.networking.liferay.ws.UserManagerWSBuilder; -import org.gcube.portal.social.networking.ws.inputs.MessageInputBean; -import org.gcube.portal.social.networking.ws.inputs.Recipient; +import org.gcube.portal.social.networking.ws.ex.AuthException; +import org.gcube.portal.social.networking.ws.inputs.UserSetNotificationBean; import org.gcube.portal.social.networking.ws.outputs.ResponseBean; import org.gcube.portal.social.networking.ws.utils.ErrorMessages; import org.gcube.portal.social.networking.ws.utils.TokensUtils; +import org.gcube.social_networking.socialnetworking.model.beans.MessageInputBean; +import org.gcube.social_networking.socialnetworking.model.beans.Recipient; import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException; import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault; @@ -241,6 +245,51 @@ public class Messages { status = Status.INTERNAL_SERVER_ERROR; } + return Response.status(status).entity(responseBean).build(); + } + + /** + * Set message read or unread + * @param messageId the message identifier + * @param read true to set read, false to set unread + * @return the result of the operation + * @throws ValidationException + */ + @POST + @Path("set-message-read/") + @Produces(MediaType.APPLICATION_JSON) + @StatusCodes ({ + @ResponseCode ( code = 200, condition = "Message set Read or Unread is correctly executed"), + @ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT) + }) + public Response setMessageRead( + @NotNull(message="input is missing") + @FormParam("messageId") String messageId, + @FormParam("read") Boolean read) throws ValidationException{ + + Caller caller = AuthorizationProvider.instance.get(); + ResponseBean responseBean = new ResponseBean(); + Status status = Status.OK; + + String opExecutor = ""; + try{ + opExecutor = caller.getClient().getId(); + MessageManagerClient client = AbstractPlugin.messages().build(); + client.setRead(messageId, read); + String toReturn = "set Message id:" + messageId + (read ? " read" : " unread"); + logger.info("set Message id:" + messageId + " read?" + read + " for " + opExecutor); + + responseBean.setSuccess(true); + responseBean.setResult(toReturn); + + } catch(Exception e){ + logger.error("Unable to set message read / unread property for user " + opExecutor, e); + responseBean.setSuccess(false); + responseBean.setMessage(e.getMessage()); + status = Status.INTERNAL_SERVER_ERROR; + } + + return Response.status(status).entity(responseBean).build(); } } diff --git a/src/test/java/org/gcube/portal/test/JTests.java b/src/test/java/org/gcube/portal/test/JTests.java deleted file mode 100644 index 3d3a2c1..0000000 --- a/src/test/java/org/gcube/portal/test/JTests.java +++ /dev/null @@ -1,201 +0,0 @@ -package org.gcube.portal.test; - - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import org.apache.http.HttpHost; -import org.apache.http.HttpResponse; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; -import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.portal.social.networking.liferay.ws.LiferayJSONWsCredentials; -import org.gcube.portal.social.networking.ws.inputs.MessageInputBean; -import org.gcube.portal.social.networking.ws.inputs.Recipient; -import org.json.simple.JSONObject; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JTests { - - private static final String YOUR_TOKEN_HERE = ""; - private static final String METHOD = "messages/writeMessageToUsers"; - private static final String SCOPE = "/gcube"; - - //@Test - public void readSocialServiceEndPoint() throws Exception { - - String findInContext = SCOPE; - ScopeProvider.instance.set(findInContext); - - ServiceEndPointReaderSocial readerSE = new ServiceEndPointReaderSocial(findInContext); - System.out.println("Found base path " + readerSE.getBasePath()); - - } - - - //@Test - public void testWithApacheClient() throws Exception { - - ServiceEndPointReaderSocial reader = new ServiceEndPointReaderSocial(SCOPE); - String requestForMessage = reader.getBasePath() + METHOD + "?gcube-token=" + YOUR_TOKEN_HERE; - requestForMessage = requestForMessage.replace("http", "https"); // remove the port (or set it to 443) otherwise you get an SSL error - - System.out.println("Request url is going to be " + requestForMessage); - - try(CloseableHttpClient client = HttpClientBuilder.create().build();){ - - HttpPost postRequest = new HttpPost(requestForMessage); - - // put the sender, the recipients, subject and body of the mail here - StringEntity input = new StringEntity("sender=andrea.rossi&recipients=gianpaolo.coro&subject=Sample mail&body=Sample mail object"); - input.setContentType("application/x-www-form-urlencoded"); - postRequest.setEntity(input); - - HttpResponse response = client.execute(postRequest); - - System.out.println("Error is " + response.getStatusLine().getReasonPhrase()); - - if (response.getStatusLine().getStatusCode() != 201) { - throw new RuntimeException("Failed : HTTP error code : " - + response.getStatusLine().getStatusCode()); - } - - BufferedReader br = new BufferedReader( - new InputStreamReader((response.getEntity().getContent()))); - - String output; - System.out.println("Output from Server .... \n"); - while ((output = br.readLine()) != null) { - System.out.println(output); - } - - System.out.println(response.toString()); - - }catch(Exception e){ - System.err.println("error while performing post method " + e.toString()); - } - } - - //@Test - public void parserJSON() throws IOException{ - - MessageInputBean message = new MessageInputBean(); - message.setBody("a caso"); - message.setSubject("subject"); - ArrayList recipients = new ArrayList(); - Recipient recipient = new Recipient("recipient1"); - recipients.add(recipient); - message.setRecipients(recipients); - - - //Object mapper instance - ObjectMapper mapper = new ObjectMapper(); - - //Convert POJO to JSON - String json = mapper.writeValueAsString(message); - - MessageInputBean obje = mapper.readValue(json, MessageInputBean.class); - System.out.println(json); - System.out.println(obje); - - } - - //@Test - public void callLiferayWS() throws Exception{ - - HttpHost target = new HttpHost("localhost", 8080, "http"); - - CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials( - new AuthScope(target.getHostName(), target.getPort()), - new UsernamePasswordCredentials("test@liferay.com", "random321")); - CloseableHttpClient httpclient = HttpClients.custom() - .setDefaultCredentialsProvider(credsProvider).build(); - try { - - // Create AuthCache instance - AuthCache authCache = new BasicAuthCache(); - // Generate BASIC scheme object and add it to the local - // auth cache - BasicScheme basicAuth = new BasicScheme(); - authCache.put(target, basicAuth); - - // Add AuthCache to the execution context - HttpClientContext localContext = HttpClientContext.create(); - localContext.setAuthCache(authCache); - - HttpGet httpget = new HttpGet("/api/jsonws" + "/user/get-user-by-screen-name/company-id/20155/screen-name/costantino.perciante"); - - System.out.println("Executing request " + httpget.getRequestLine() + " to target " + target); - CloseableHttpResponse response = httpclient.execute(target, httpget, localContext); - try { - System.out.println("----------------------------------------"); - System.out.println(response.getStatusLine()); - System.out.println(EntityUtils.toString(response.getEntity())); - } finally { - response.close(); - } - } finally { - httpclient.close(); - } - - } - - //@Test - public void retrieveCredentials(){ - - ScopeProvider.instance.set("/gcube"); - LiferayJSONWsCredentials cred = LiferayJSONWsCredentials.getSingleton(); - System.out.println("Password is " + cred.getPassword()); - System.out.println("Host is " + cred.getHost()); - - } - - //@Test - public void readGcoreEndPoint() throws Exception{ - - GcoreEndpointReader reader = new GcoreEndpointReader("/gcube"); - reader.getResourceEntyName(); - - } - - //@Test - public void sendNotification() throws ClientProtocolException, IOException{ - - String url ="https://socialnetworking-d-d4s.d4science.org/social-networking-library-ws/rest//2/notifications/notify-job-status?gcube-token=07f5f961-d0e0-4bc4-af90-a305e8b63ac7-98187548"; - CloseableHttpClient client = HttpClientBuilder.create().build(); - JSONObject obj = new JSONObject(); - obj.put("job_id", "bbbbb"); - obj.put("recipient", "costantino.perciante"); - obj.put("job_name", "aaaaaa"); - obj.put("service_name", "Test"); - obj.put("status", "SUCCEEDED"); - - HttpPost request = new HttpPost(url); - request.addHeader("Content-type", ContentType.APPLICATION_JSON.toString()); - StringEntity paramsEntity = new StringEntity(obj.toJSONString(), ContentType.APPLICATION_JSON); - request.setEntity(paramsEntity); - client.execute(request); - - } - -}