2017-07-05 17:50:42 +02:00
package org.gcube.dataanalysis.dataminer.poolmanager.util ;
2017-07-06 14:54:04 +02:00
import static org.gcube.common.authorization.client.Constants.authorizationService ;
2017-07-05 17:50:42 +02:00
import java.net.URLEncoder ;
2017-07-06 14:54:04 +02:00
import java.util.LinkedList ;
import java.util.List ;
2017-07-05 17:50:42 +02:00
import org.apache.activemq.transport.stomp.Stomp.Headers.Send ;
2017-07-06 14:54:04 +02:00
import org.gcube.common.authorization.client.exceptions.ObjectNotFound ;
import org.gcube.common.authorization.library.AuthorizationEntry ;
2017-07-05 17:50:42 +02:00
import org.gcube.common.authorization.library.provider.SecurityTokenProvider ;
import org.gcube.common.scope.api.ScopeProvider ;
import org.gcube.contentmanagement.graphtools.utils.HttpRequest ;
import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger ;
import org.gcube.dataanalysis.ecoengine.interfaces.StandardLocalInfraAlgorithm ;
import org.gcube.dataanalysis.executor.util.InfraRetrieval ;
2017-07-06 14:54:04 +02:00
import org.json.JSONArray ;
import org.json.JSONObject ;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array ;
2017-07-05 17:50:42 +02:00
public class SendMail extends StandardLocalInfraAlgorithm {
public SendMail ( ) {
// TODO Auto-generated constructor stub
}
public void sendNotification ( String subject , String body ) throws Exception {
AnalysisLogger . getLogger ( ) . debug ( " Emailing System->Starting request of email in scope " + ScopeProvider . instance . get ( ) ) ;
String serviceAddress = InfraRetrieval . findEmailingSystemAddress ( ScopeProvider . instance . get ( ) ) ;
if ( ! serviceAddress . endsWith ( " / " ) )
serviceAddress = serviceAddress + " / " ;
String requestForMessage = serviceAddress + " messages/writeMessageToUsers " + " ?gcube-token= " + SecurityTokenProvider . instance . get ( ) ;
requestForMessage = requestForMessage . replace ( " http:// " , " https:// " ) . replace ( " :80 " , " " ) ; // remove the port (or set it to 443) otherwise you get an SSL error
AnalysisLogger . getLogger ( ) . debug ( " Emailing System->Request url is going to be " + requestForMessage ) ;
2017-07-06 14:54:04 +02:00
2017-07-05 17:50:42 +02:00
// put the sender, the recipients, subject and body of the mail here
subject = URLEncoder . encode ( subject , " UTF-8 " ) ;
body = URLEncoder . encode ( body , " UTF-8 " ) ;
2017-07-06 14:54:04 +02:00
String requestParameters = " &sender=dataminer&recipients= " + this . getAdmins ( ) + " &subject= " + subject + " &body= " + body ;
2017-07-05 17:50:42 +02:00
String response = HttpRequest . sendPostRequest ( requestForMessage , requestParameters ) ;
AnalysisLogger . getLogger ( ) . debug ( " Emailing System->Emailing response OK " ) ;
if ( response = = null ) {
Exception e = new Exception ( " Error in email sending response " ) ;
throw e ;
}
}
// public void notifySubmitter(String a, String b) throws Exception {
// NotificationHelper nh = new NotificationHelper();
// super.sendNotification(nh.getSubject(),
// nh.getBody());
// }
2017-07-06 14:54:04 +02:00
public String username ( String token ) throws ObjectNotFound , Exception {
AuthorizationEntry entry = authorizationService ( ) . get ( token ) ;
System . out . println ( entry . getClientInfo ( ) . getId ( ) ) ;
return entry . getClientInfo ( ) . getId ( ) ;
}
public String retrieveAdminRole ( ) throws Exception {
String serviceAddress = InfraRetrieval . findEmailingSystemAddress ( ScopeProvider . instance . get ( ) ) ;
if ( ! serviceAddress . endsWith ( " / " ) )
serviceAddress = serviceAddress + " / " ;
String requestForMessage = serviceAddress + " 2/users/get-usernames-by-global-role " ;
requestForMessage = requestForMessage . replace ( " https:// " , " http:// " ) . replace ( " :80 " , " " ) ; // remove the port (or set it to 443) otherwise you get an SSL error
String requestParameters = " role-name=Administrator " + " &gcube-token= " + SecurityTokenProvider . instance . get ( ) ;
String response = HttpRequest . sendGetRequest ( requestForMessage , requestParameters ) ;
System . out . println ( response . toString ( ) ) ;
if ( response = = null ) {
Exception e = new Exception ( " Error in querying the recipient " ) ;
throw e ;
}
return response ;
}
public String getAdmins ( ) throws Exception {
List < String > s = new LinkedList < String > ( ) ;
JSONObject obj = new JSONObject ( this . retrieveAdminRole ( ) ) ;
JSONArray data = obj . getJSONArray ( " result " ) ;
if ( data ! = null ) {
String [ ] names = new String [ data . length ( ) ] ;
for ( int i = 0 ; i < data . length ( ) ; i + + ) {
names [ i ] = data . getString ( i ) ;
s . add ( names [ i ] ) ;
}
s . add ( this . username ( SecurityTokenProvider . instance . get ( ) ) ) ;
}
System . out . println ( s ) ;
return s . toString ( ) ;
}
2017-07-05 17:50:42 +02:00
@Override
public String getDescription ( ) {
// TODO Auto-generated method stub
return null ;
}
@Override
public void init ( ) throws Exception {
// TODO Auto-generated method stub
}
@Override
protected void process ( ) throws Exception {
// TODO Auto-generated method stub
}
@Override
protected void setInputParameters ( ) {
// TODO Auto-generated method stub
}
@Override
public void shutdown ( ) {
// TODO Auto-generated method stub
}
public static void main ( String [ ] args ) throws Exception {
2017-07-06 14:54:04 +02:00
// ScopeProvider.instance.set("/d4science.research-infrastructures.eu/gCubeApps/RPrototypingLab");
// SecurityTokenProvider.instance.set("3a23bfa4-4dfe-44fc-988f-194b91071dd2-843339462");
2017-07-05 17:50:42 +02:00
2017-07-06 14:54:04 +02:00
ScopeProvider . instance . set ( " /gcube/devNext " ) ;
SecurityTokenProvider . instance . set ( " 708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548 " ) ;
2017-07-05 17:50:42 +02:00
NotificationHelper nh = new NotificationHelper ( ) ;
2017-07-06 14:54:04 +02:00
2017-07-05 17:50:42 +02:00
SendMail sm = new SendMail ( ) ;
2017-07-06 14:54:04 +02:00
//sm.username(SecurityTokenProvider.instance.get());
//sm.retrieveAdminRole();
sm . getAdmins ( ) ;
//sm.sendNotification("test", "test");
2017-07-05 17:50:42 +02:00
}
}