diff --git a/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettings.java b/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettings.java index 73ccff31f..e4949dee5 100644 --- a/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettings.java +++ b/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettings.java @@ -43,7 +43,6 @@ public class FileTransferSettings { /** * Returns a {@link List} of strings - one for each blocked file extension. Strings are in the form *.{extension}. - * @return a {@link List} of blocked file extensions */ public List getBlockedExtensions(){ return extensions; @@ -59,7 +58,6 @@ public class FileTransferSettings { /** * Returns a {@link List} of blocked JIDs. File transfers from users with those JIDs will be automaticlly rejected. - * @return a {@link List} of blocked JIDs. */ public List getBlockedJIDs() { return JIDs; @@ -76,7 +74,6 @@ public class FileTransferSettings { /** * Returns the maximum file size in kilobytes for file transfers. If {@link #getCheckFileSize} returns true, * files larger than this maximum will not be accepted. - * @return the maximum file size in kilobytes for file transfers. */ public int getMaxFileSize(){ return kb; @@ -92,7 +89,6 @@ public class FileTransferSettings { /** * Returns true if there is a maximum allowable file size for transfers. - * @return true if there is a maximum allowable file size for transfers. */ public boolean getCheckFileSize(){ return checkSize; @@ -110,7 +106,6 @@ public class FileTransferSettings { /** * Returns the text of a canned message sent to requestors whose file transfers were automatically rejected. If this * returns null or an empty string, no message will be sent. - * @return the text of a canned message sent to requestors whose file transfers were automatically rejected. */ public String getCannedRejectionMessage() { return cannedRejectionMessage; @@ -130,36 +125,36 @@ public class FileTransferSettings { */ public void load() { Properties props = new Properties(); - if (BACKING_STORE.exists()) { - try { - props.load(new FileInputStream(BACKING_STORE)); + if (!BACKING_STORE.exists()) { + return; + } + try { + props.load(new FileInputStream(BACKING_STORE)); - String types = props.getProperty("extensions"); - if (types != null) { - this.extensions = convertSettingsStringToList(types); - } - - String users = props.getProperty("jids"); - if (users != null) { - List jidStrings = convertSettingsStringToList(users); - Set jidSet = JidUtil.entityBareJidSetFrom(jidStrings); - this.JIDs = new ArrayList<>(jidSet); - } - - String ignore = props.getProperty("checkFileSize"); - if (ignore != null) { - this.checkSize = Boolean.parseBoolean(ignore); - } - - String maxSize = props.getProperty("maxSize"); - if (maxSize != null) { - this.kb = Integer.parseInt(maxSize); - } - this.cannedRejectionMessage = props.getProperty("cannedResponse"); - } catch (IOException ioe) { - System.out.println("Error Loading properties from Filesystem"+ioe); - //TODO handle error better. + String types = props.getProperty("extensions"); + if (types != null) { + this.extensions = convertSettingsStringToList(types); } + + String users = props.getProperty("jids"); + if (users != null) { + List jidStrings = convertSettingsStringToList(users); + Set jidSet = JidUtil.entityBareJidSetFrom(jidStrings); + this.JIDs = new ArrayList<>(jidSet); + } + + String ignore = props.getProperty("checkFileSize"); + if (ignore != null) { + this.checkSize = Boolean.parseBoolean(ignore); + } + + String maxSize = props.getProperty("maxSize"); + if (maxSize != null) { + this.kb = Integer.parseInt(maxSize); + } + this.cannedRejectionMessage = props.getProperty("cannedResponse"); + } catch (IOException ioe) { + Log.error("Error loading Transfer Guard settings", ioe); } } @@ -176,7 +171,7 @@ public class FileTransferSettings { if (cannedRejectionMessage != null) { props.setProperty("cannedResponse", cannedRejectionMessage); } - props.store(new FileOutputStream(BACKING_STORE), BACKING_STORE.getAbsolutePath()); + props.store(new FileOutputStream(BACKING_STORE), null); } catch (IOException ioe) { Log.error(ioe); } @@ -185,7 +180,6 @@ public class FileTransferSettings { /** * Converts a list of strings to a single comma separated string * @param settings the {@link List} of strings. - * @return a comma separated string. */ public static String convertSettingsListToString(List settings) { StringBuilder buffer = new StringBuilder(); @@ -205,7 +199,6 @@ public class FileTransferSettings { * Converts the supplied string to a {@link List} of strings. The input is split * with the tokensL: ',' ':' '\n' '\t' '\r' and ' '. * @param settings the string to convert. - * @return the resultant {@link List}. */ public static List convertSettingsStringToList(String settings) { List list = new ArrayList<>(); diff --git a/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettingsPlugin.java b/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettingsPlugin.java index 3df4b78b3..f83dba99f 100644 --- a/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettingsPlugin.java +++ b/plugins/transferguard/src/main/java/org/jivesoftware/spark/plugins/transfersettings/FileTransferSettingsPlugin.java @@ -28,43 +28,52 @@ import org.jivesoftware.spark.util.log.Log; /** * Spark plugin which allows configuration of allowed file sizes, types, and senders for file transfer. - * Transfer requests which don't meet the configured preferences are automatically rejecte. + * Transfer requests which don't meet the configured preferences are automatically rejected. */ public class FileTransferSettingsPlugin implements Plugin { - private PreferenceManager prefManager; + private FileTransferListener fileTransferListener; - /** - * Called after Spark is loaded to initialize the new plugin. - */ @Override public void initialize() { - addTransferListener(); prefManager = SparkManager.getPreferenceManager(); prefManager.addPreference(new TransferSettingsPreference()); + fileTransferListener = request -> { + FileTransferSettings settings = (FileTransferSettings) prefManager.getPreferenceData(TransferSettingsPreference.NAMESPACE); + try { + if (!requestContainsBannedFile(request, settings)) { + return false; + } + request.reject(); + + String responseMessage = settings.getCannedRejectionMessage(); + if (responseMessage != null && !responseMessage.isEmpty()) { + Message message = StanzaBuilder.buildMessage() + .to(request.getRequestor()) + .setBody(responseMessage) + .build(); + SparkManager.getConnection().sendStanza(message); + } + return true; + } catch (SmackException | InterruptedException ex) { + Log.warning("Unable to handle file transfer.", ex); + return false; + } + }; + SparkTransferManager transferManager = SparkManager.getTransferManager(); + transferManager.addTransferListener(fileTransferListener); } - /** - * Called when Spark is shutting down to allow for persistence of information - * or releasing of resources. - */ @Override public void shutdown() { - + SparkTransferManager transferManager = SparkManager.getTransferManager(); + transferManager.removeTransferListener(fileTransferListener); } - /** - * Called when the plugin is uninstalled with the Spark plugin manager. - */ @Override public void uninstall() { } - /** - * Return true if the Spark can shutdown on users request. - * - * @return true if Spark can shutdown on users request. - */ @Override public boolean canShutDown() { return true; @@ -82,7 +91,7 @@ public class FileTransferSettingsPlugin implements Plugin { if (settings.getCheckFileSize() && request.getFileSize() > settings.getMaxFileSize()) { return true; } - if (settings.getBlockedJIDs().contains(request.getRequestor().asBareJid())) { + if (settings.getBlockedJIDs().contains(request.getRequestor().asEntityBareJidIfPossible())) { return true; } return settings.getBlockedExtensions().contains(getFileExtensionFromName(request.getFileName())); @@ -100,47 +109,7 @@ public class FileTransferSettingsPlugin implements Plugin { if (dotIdx > 0 && dotIdx < (filename.length() - 1)) { return "*" + filename.substring( dotIdx ); } - return null; } - /** - * Adds a {@link FileTransferListener} to allow this plugin to intercept {@link FileTransferRequest}s. - */ - private void addTransferListener() { - - SparkTransferManager transferManager = SparkManager.getTransferManager(); - - transferManager.addTransferListener( request -> { - FileTransferSettings settings = (FileTransferSettings)prefManager.getPreferenceData("transferSettings"); - - try - { - if ( requestContainsBannedFile( request, settings ) ) - { - request.reject(); - - String responseMessage = settings.getCannedRejectionMessage(); - if ( responseMessage != null && !responseMessage.isEmpty()) - { - Message message = StanzaBuilder.buildMessage() - .setBody( responseMessage ) - .build(); - message.setTo( request.getRequestor() ); - SparkManager.getConnection().sendStanza( message ); - } - return true; - } - else - { - return false; - } - } - catch (SmackException | InterruptedException ex) - { - Log.warning( "Unable to handle file transfer.", ex ); - return false; - } - } ); - } }