JAMES-2150 Added the ability to upload Sieve scripts via the CLI

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ef37d6b4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ef37d6b4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ef37d6b4

Branch: refs/heads/master
Commit: ef37d6b4bf4fdb5819d93a1af65dd4466703e43d
Parents: d630f65
Author: matzepan <[email protected]>
Authored: Sat Oct 20 20:08:46 2018 +0200
Committer: Benoit Tellier <[email protected]>
Committed: Mon Oct 29 19:14:40 2018 +0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/james/cli/ServerCmd.java |  3 +++
 .../main/java/org/apache/james/cli/type/CmdType.java  |  3 ++-
 .../test/java/org/apache/james/cli/ServerCmdTest.java | 14 ++++++++++++++
 .../java/org/apache/james/cli/type/CmdTypeTest.java   |  5 +++++
 .../api/SieveRepositoryManagementMBean.java           |  2 ++
 .../lib/SieveRepositoryManagement.java                |  9 +++++++++
 6 files changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
----------------------------------------------------------------------
diff --git 
a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java 
b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index cecb719..59c79b4 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -331,6 +331,9 @@ public class ServerCmd {
         case REMOVESIEVEUSERQUOTA:
             sieveProbe.removeSieveQuota(arguments[1]);
             break;
+            case ADDACTIVESIEVESCRIPT:
+            sieveProbe.addActiveSieveScript(arguments[1], arguments[2], 
arguments[3]);
+            break;
         default:
             throw new UnrecognizedCommandException(cmdType.getCommand());
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
----------------------------------------------------------------------
diff --git 
a/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java 
b/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
index 9e3dc3d..d3aa511 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
@@ -62,7 +62,8 @@ public enum CmdType {
     REMOVESIEVEQUOTA("RemoveSieveQuota"),
     GETSIEVEUSERQUOTA("GetSieveUserQuota", "username"),
     SETSIEVEUSERQUOTA("SetSieveUserQuota", "username", "quota"),
-    REMOVESIEVEUSERQUOTA("RemoveSieveUserQuota", "username");
+    REMOVESIEVEUSERQUOTA("RemoveSieveUserQuota", "username"),
+    ADDACTIVESIEVESCRIPT("AddActiveSieveScript", "username", "scriptname", 
"script");
 
     private final String command;
     private final String[] arguments;

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java 
b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index 0b3aacd..8613797 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -1063,6 +1063,20 @@ public class ServerCmdTest {
     }
 
     @Test
+    public void addActiveSieveScriptCommandShouldThrowOnAdditionalArguments() 
throws Exception {
+        String user = "user@domain";
+        String scriptName = "no_fast_money";
+        String script = "if header :contains :comparator \"i;octet\" 
\"Subject\"" +
+                "\"MAKE MONEY FAST\" {discard;}";
+
+        String[] arguments = { "-h", "127.0.0.1", "-p", "9999", 
CmdType.ADDACTIVESIEVESCRIPT.getCommand(), user, scriptName, script, 
ADDITIONAL_ARGUMENT };
+        CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
+
+        assertThatThrownBy(() -> testee.executeCommandLine(commandLine))
+                .isInstanceOf(InvalidArgumentNumberException.class);
+    }
+
+    @Test
     public void executeCommandLineShouldThrowOnUnrecognizedCommands() throws 
Exception {
         String[] arguments = { "-h", "127.0.0.1", "-p", "9999", 
"wrongCommand"};
         CommandLine commandLine = ServerCmd.parseCommandLine(arguments);

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java 
b/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
index 0b16133..8a32619 100644
--- 
a/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
+++ 
b/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
@@ -234,6 +234,11 @@ public class CmdTypeTest {
         
assertThat(CmdType.lookup("removesieveuserquota")).isEqualTo(CmdType.REMOVESIEVEUSERQUOTA);
     }
 
+    @Test
+    public void addSieveScriptShouldReturnEnumValue() {
+        
assertThat(CmdType.lookup("addactivesievescript")).isEqualTo(CmdType.ADDACTIVESIEVESCRIPT);
+    }
+
     @Test 
     public void lookupEmptyStringShouldReturnNull() {
         assertThat(CmdType.lookup("")).isNull();

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
 
b/server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
index cde69df..1347583 100644
--- 
a/server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
@@ -36,4 +36,6 @@ public interface SieveRepositoryManagementMBean {
 
     void removeQuota(String user) throws SieveRepositoryException;
 
+    void addActiveSieveScript(String userName, String scriptName, String 
script) throws SieveRepositoryException;
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef37d6b4/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
 
b/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
index 0fdd8e9..00ba200 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
@@ -26,6 +26,8 @@ import javax.management.StandardMBean;
 
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.SieveRepositoryManagementMBean;
 import org.apache.james.sieverepository.api.exception.SieveRepositoryException;
@@ -72,4 +74,11 @@ public class SieveRepositoryManagement extends StandardMBean 
implements SieveRep
     public void removeQuota(String user) throws SieveRepositoryException {
         sieveRepository.removeQuota(User.fromUsername(user));
     }
+
+    @Override
+    public void addActiveSieveScript(String userName, String scriptName, 
String script) throws SieveRepositoryException {
+        User user = User.fromUsername(userName);
+        sieveRepository.putScript(user, new ScriptName(scriptName), new 
ScriptContent(script));
+        sieveRepository.setActive(user, new ScriptName(scriptName));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to