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 extends CharSequence> 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;
- }
- } );
- }
}