use of won.bot.framework.eventbot.action.impl.mail.model.ActionType in project webofneeds by researchstudio-sat.
the class MailCommandAction method processNonReferenceMailCommand.
private void processNonReferenceMailCommand(MimeMessage message) throws IOException, MessagingException {
EventBus bus = getEventListenerContext().getEventBus();
ActionType mailAction = mailContentExtractor.getMailAction(message);
switch(mailAction) {
case SUBSCRIBE:
bus.publish(new SubscribeUnsubscribeEvent(message, SubscribeStatus.SUBSCRIBED));
break;
case UNSUBSCRIBE:
bus.publish(new SubscribeUnsubscribeEvent(message, SubscribeStatus.UNSUBSCRIBED));
break;
case CLOSE_NEED:
/*A need can be closed with a mail that matches the takenCmdPattern in its subject and has the same title
as a previously created need by the user*/
URI needUri = retrieveCorrespondingNeedUriFromMailByTitle(message);
if (needUri != null) {
bus.publish(new DeactivateNeedCommandEvent(needUri));
}
break;
case NO_ACTION:
default:
// INVALID COMMAND
logger.error("No command was given or assumed");
break;
}
}
use of won.bot.framework.eventbot.action.impl.mail.model.ActionType in project webofneeds by researchstudio-sat.
the class MailCommandAction method processReferenceMailCommands.
private void processReferenceMailCommands(MimeMessage message, WonURI wonUri) {
MailBotContextWrapper botContextWrapper = ((MailBotContextWrapper) getEventListenerContext().getBotContextWrapper());
EventBus bus = getEventListenerContext().getEventBus();
try {
if (wonUri == null) {
throw new NullPointerException("No corresponding wonUri found");
}
URI needUri;
URI remoteNeedUri = null;
Dataset connectionRDF = null;
switch(wonUri.getType()) {
case CONNECTION:
connectionRDF = getEventListenerContext().getLinkedDataSource().getDataForResource(wonUri.getUri());
needUri = WonRdfUtils.ConnectionUtils.getLocalNeedURIFromConnection(connectionRDF, wonUri.getUri());
remoteNeedUri = WonRdfUtils.ConnectionUtils.getRemoteNeedURIFromConnection(connectionRDF, wonUri.getUri());
break;
case NEED:
default:
needUri = wonUri.getUri();
break;
}
MimeMessage originalMessage = botContextWrapper.getMimeMessageForURI(needUri);
if (originalMessage == null) {
throw new NullPointerException("no originalmessage found");
}
logger.debug("Validate mailorigin with originalmail:");
logger.debug("Command Message Sender: " + message.getFrom());
logger.debug("Original Message Sender: " + originalMessage.getFrom());
String senderNew = ((InternetAddress) message.getFrom()[0]).getAddress();
String senderOriginal = ((InternetAddress) originalMessage.getFrom()[0]).getAddress();
if (!senderNew.equals(senderOriginal)) {
throw new AccessControlException("Sender of original and command mail are not equal");
} else {
logger.debug("Sender of original and command mail are not equal, continue with command processing");
}
ActionType actionType = determineAction(getEventListenerContext(), message, wonUri);
logger.debug("Executing " + actionType + " on uri: " + wonUri.getUri() + " of type " + wonUri.getType());
Connection con;
switch(actionType) {
case CLOSE_CONNECTION:
con = RdfUtils.findFirst(connectionRDF, x -> new ConnectionModelMapper().fromModel(x));
bus.publish(new CloseCommandEvent(con));
break;
case OPEN_CONNECTION:
bus.publish(new ConnectCommandEvent(needUri, remoteNeedUri));
break;
case IMPLICIT_OPEN_CONNECTION:
bus.publish(new ConnectCommandEvent(needUri, remoteNeedUri, mailContentExtractor.getTextMessage(message)));
break;
case SENDMESSAGE:
con = RdfUtils.findFirst(connectionRDF, x -> new ConnectionModelMapper().fromModel(x));
Model messageModel = WonRdfUtils.MessageUtils.textMessage(mailContentExtractor.getTextMessage(message));
bus.publish(new ConnectionMessageCommandEvent(con, messageModel));
break;
case CLOSE_NEED:
bus.publish(new DeactivateNeedCommandEvent(needUri));
break;
case NO_ACTION:
default:
// INVALID COMMAND
logger.error("No command was given or assumed");
break;
}
} catch (AccessControlException ace) {
logger.error("ACCESS RESTRICTION: sender of original and command mail are not equal, command will be blocked");
} catch (Exception e) {
logger.error("no reply mail was set or found: " + e.getMessage());
}
}
Aggregations