package com.tempstop; import org.jivesoftware.openfire.MessageRouter; import org.jivesoftware.openfire.session.Session; import org.jivesoftware.openfire.XMPPServer; import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.interceptor.InterceptorManager; import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.openfire.interceptor.PacketRejectedException; import org.jivesoftware.openfire.user.UserManager; import org.jivesoftware.openfire.user.UserNotFoundException; import org.jivesoftware.openfire.user.User; import org.jivesoftware.openfire.PresenceManager; import org.jivesoftware.openfire.vcard.VCardManager; import org.jivesoftware.util.JiveGlobals; import org.jivesoftware.util.EmailService; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; //import java.io.File; import java.io.*; public class emailOnAway implements Plugin, PacketInterceptor { private InterceptorManager interceptorManager; private UserManager userManager; private PresenceManager presenceManager; private EmailService emailService; private MessageRouter messageRouter; private VCardManager vcardManager; public emailOnAway() { interceptorManager = InterceptorManager.getInstance(); emailService = EmailService.getInstance(); messageRouter = XMPPServer.getInstance().getMessageRouter(); presenceManager = XMPPServer.getInstance().getPresenceManager(); userManager = XMPPServer.getInstance().getUserManager(); vcardManager = VCardManager.getInstance(); } public void initializePlugin(PluginManager pManager, File pluginDirectory) { // register with interceptor manager interceptorManager.addInterceptor(this); } public void destroyPlugin() { // unregister with interceptor manager interceptorManager.removeInterceptor(this); } private Message createServerMessage(String to, String from, String emailTo) { Message message = new Message(); message.setTo(to); message.setFrom(from); message.setSubject("I'm away"); if (JiveGlobals.getBooleanProperty("plugin.emailonaway.showemail", true)) { message.setBody("I'm currently away. Your message has been forwarded to my email address (" + emailTo + ")."); } else { message.setBody("I'm currently away. Your message has been forwarded to my email address."); } return message; } public void interceptPacket(Packet packet, Session session, boolean read, boolean processed) throws PacketRejectedException { String emailTo = null; String emailFrom = null; if((!processed) && (!read) && (packet instanceof Message) && (packet.getTo() != null)) { Message msg = (Message) packet; if(msg.getType() == Message.Type.chat) { try { User userTo = userManager.getUser(packet.getTo().getNode()); if(presenceManager.getPresence(userTo).toString().toLowerCase().indexOf("away") != -1) { // Status isn't away if(msg.getBody() != null) { // Build email/sms // The to email address emailTo = vcardManager.getVCardProperty(userTo.getUsername(), "EMAIL"); if(emailTo == null || emailTo.length() == 0) { emailTo = vcardManager.getVCardProperty(userTo.getUsername(), "EMAIL:USERID"); if(emailTo == null || emailTo.length() == 0) { emailTo = userTo.getEmail(); if(emailTo == null || emailTo.length() == 0) { emailTo = packet.getTo().getNode() + "@" + packet.getTo().getDomain(); } } } // The From email address User userFrom = userManager.getUser(packet.getFrom().getNode()); emailFrom = vcardManager.getVCardProperty(userFrom.getUsername(), "EMAIL"); if(emailFrom == null || emailFrom.length() == 0) { emailFrom = vcardManager.getVCardProperty(userFrom.getUsername(), "EMAIL:USERID"); if(emailFrom == null || emailFrom.length() == 0) { emailFrom = userFrom.getEmail(); if(emailFrom == null || emailFrom.length() == 0) { emailFrom = packet.getFrom().getNode() + "@" + packet.getFrom().getDomain(); } } } // System.err.println(vcardManager.getVCardProperty(userTo.getUsername(), "EMAIL:USERID")); // Send email/sms // if this is an sms... modify the recipient address emailService.sendMessage(userTo.getName(), emailTo, userFrom.getName(), emailFrom, "IM", msg.getBody(), null); // Notify the sender that this went to email/sms messageRouter.route(createServerMessage(packet.getFrom().getNode() + "@" + packet.getFrom().getDomain(), packet.getTo().getNode() + "@" + packet.getTo().getDomain(), emailTo)); } } } catch (UserNotFoundException e) { } } } } }