Author: btellier
Date: Thu Dec 17 14:58:22 2015
New Revision: 1720581

URL: http://svn.apache.org/viewvc?rev=1720581&view=rev
Log:
JAMES-1618 PUTSCRIPT should be RFC-5804 compliant

Added:
    
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptTest.java
    
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
Modified:
    
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java

Added: 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptTest.java?rev=1720581&view=auto
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptTest.java
 (added)
+++ 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptTest.java
 Thu Dec 17 14:58:22 2015
@@ -0,0 +1,47 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mpt.testsuite;
+
+import com.google.inject.Inject;
+import org.apache.james.mpt.host.ManageSieveHostSystem;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Locale;
+
+public class PutScriptTest extends ManageSieveMPTTest {
+
+    @Inject
+    private static ManageSieveHostSystem hostSystem;
+
+    public PutScriptTest() throws Exception {
+        super(hostSystem);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+    }
+
+    @Test
+    public void putScriptShouldWork() throws Exception {
+        scriptTest("putscript", Locale.US);
+    }
+}

Added: 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test?rev=1720581&view=auto
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
 (added)
+++ 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
 Thu Dec 17 14:58:22 2015
@@ -0,0 +1,59 @@
+################################################################
+# Licensed to the Apache Software Foundation (ASF) under one   #
+# or more contributor license agreements.  See the NOTICE file #
+# distributed with this work for additional information        #
+# regarding copyright ownership.  The ASF licenses this file   #
+# to you under the Apache License, Version 2.0 (the            #
+# "License"); you may not use this file except in compliance   #
+# with the License.  You may obtain a copy of the License at   #
+#                                                              #
+#   http://www.apache.org/licenses/LICENSE-2.0                 #
+#                                                              #
+# Unless required by applicable law or agreed to in writing,   #
+# software distributed under the License is distributed on an  #
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       #
+# KIND, either express or implied.  See the License for the    #
+# specific language governing permissions and limitations      #
+# under the License.                                           #
+################################################################
+
+C: PUTSCRIPT
+S: NO "Missing argument: script name"
+
+C: PUTSCRIPT unquoted
+S: NO "Missing argument: script size"
+
+C: PUTSCRIPT "scriptname"
+S: NO "Missing argument: script size"
+
+C: PUTSCRIPT "scriptname" error
+S: NO "error is an invalid size literal : it should be at least 4 char looking 
like \{_\+\}"
+
+C: PUTSCRIPT "scriptname" {error+}
+S: NO "Size is not a long : For input string: "error""
+
+C: PUTSCRIPT "foo" {31+}
+C: #comment
+C: InvalidSieveCommand
+C:
+S: NO
+
+C: AUTHENTICATE "PLAIN"
+S: \+ ""
+C:  user password
+S: OK authentication successfull
+
+C: PUTSCRIPT "mysievescript" {110+}
+C: require ["fileinto"];
+C:
+C: if envelope :contains "to" "tmartin+sent" {
+C:   fileinto "INBOX.sent";
+C: }
+S: OK
+
+C: PUTSCRIPT "foo" {31+}
+C: #comment
+C: InvalidSieveCommand
+C:
+S: NO "Syntax Error: org.apache.jsieve.parser.generated.ParseException: 
Encountered "<EOF>" at line 2, column 19.
+

Modified: 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java?rev=1720581&r1=1720580&r2=1720581&view=diff
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
 (original)
+++ 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
 Thu Dec 17 14:58:22 2015
@@ -24,6 +24,7 @@ import org.apache.james.mpt.testsuite.Ca
 import org.apache.james.mpt.testsuite.HaveSpaceTest;
 import org.apache.james.mpt.testsuite.LogoutTest;
 import org.apache.james.mpt.testsuite.NoopTest;
+import org.apache.james.mpt.testsuite.PutScriptTest;
 import org.apache.james.mpt.testsuite.StartTlsTest;
 import org.apache.james.mpt.testsuite.UnauthenticatedTest;
 import org.apache.onami.test.OnamiSuite;
@@ -40,7 +41,8 @@ import org.junit.runners.Suite;
     AuthenticateTest.class,
     StartTlsTest.class,
     CapabilityTest.class,
-    HaveSpaceTest.class
+    HaveSpaceTest.class,
+    PutScriptTest.class
 })
 public class ManageSieveFileTest {
 }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java?rev=1720581&r1=1720580&r2=1720581&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
 Thu Dec 17 14:58:22 2015
@@ -20,6 +20,8 @@
 
 package org.apache.james.managesieve.transcode;
 
+import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import org.apache.james.managesieve.api.ArgumentException;
 import org.apache.james.managesieve.api.AuthenticationException;
@@ -40,6 +42,7 @@ import org.apache.james.sieverepository.
 import org.apache.james.sieverepository.api.exception.UserNotFoundException;
 
 import java.util.InputMismatchException;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
@@ -150,16 +153,30 @@ public class LineToCore{
     }
 
     public List<String> putScript(Session session, String args) throws 
AuthenticationRequiredException, SyntaxException, QuotaExceededException, 
ArgumentException {
-        String scriptName = ParserUtils.getScriptName(args);
-        if (null == scriptName || scriptName.isEmpty()) {
-            throw new ArgumentException("Missing argument: script name");
+        System.out.println("args" + args + "<-");
+        Iterator<String> firstLine = 
Splitter.on("\r\n").split(args.trim()).iterator();
+        Iterator<String> arguments = Splitter.on(' 
').split(firstLine.next().trim()).iterator();
+
+        String scriptName;
+        if (! arguments.hasNext()) {
+             throw new ArgumentException("Missing argument: script name");
+        } else {
+            scriptName = ParserUtils.unquote(arguments.next());
+            if (Strings.isNullOrEmpty(scriptName)) {
+                throw new ArgumentException("Missing argument: script name");
+            }
         }
-        Scanner scanner = new 
Scanner(args.substring(scriptName.length()).trim()).useDelimiter("\\A");
-        if (!scanner.hasNext()) {
-            throw new ArgumentException("Missing argument: script content");
+        if (! arguments.hasNext()) {
+            throw new ArgumentException("Missing argument: script size");
+        } else {
+            ParserUtils.getSize(arguments.next());
+        }
+        if (arguments.hasNext()) {
+            throw new ArgumentException("Extra arguments not supported");
+        } else {
+            String content = Joiner.on("\r\n").join(firstLine);
+            return core.putScript(session, ParserUtils.unquote(scriptName), 
content);
         }
-        String content = scanner.next();
-        return core.putScript(session, ParserUtils.unquote(scriptName), 
content);
     }
 
     public void renameScript(Session session, String args) throws 
AuthenticationRequiredException, ScriptNotFoundException, DuplicateException, 
ArgumentException {

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java?rev=1720581&r1=1720580&r2=1720581&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
 Thu Dec 17 14:58:22 2015
@@ -20,6 +20,8 @@
 
 package org.apache.james.managesieve.transcode;
 
+import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
 import org.apache.james.managesieve.api.ArgumentException;
 import org.apache.james.managesieve.api.AuthenticationException;
 import org.apache.james.managesieve.api.AuthenticationRequiredException;
@@ -226,7 +228,7 @@ public class LineToCoreToLine {
         } catch (AuthenticationRequiredException ex) {
             return "NO";
         } catch (SyntaxException ex) {
-            return "NO \"Syntax Error: " + ex.getMessage() + "\"";
+            return Joiner.on("\r\n").join(Splitter.on('\n').split("NO \"Syntax 
Error: " + ex.getMessage() + "\""));
         } catch (QuotaExceededException ex) {
             return "NO (QUOTA/MAXSIZE) \"Quota exceeded\"";
         } catch (ArgumentException ex) {

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java?rev=1720581&r1=1720580&r2=1720581&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
 Thu Dec 17 14:58:22 2015
@@ -20,16 +20,33 @@
 
 package org.apache.james.managesieve.util;
 
+import com.google.common.base.Splitter;
+import org.apache.james.managesieve.api.ArgumentException;
+
+import java.util.Iterator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-/**
- * <code>ParserUtils</code>
- */
 public class ParserUtils {
 
     private static final Pattern SCRIPT_NAME_REGEX = 
Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
 
+    public static long getSize(String args) throws ArgumentException {
+        System.out.println("<<<" + args + ">>>>");
+        if (args.length() > 3
+            && args.charAt(0) == '{'
+            && args.charAt(args.length() - 1) == '}'
+            && args.charAt(args.length() - 2) == '+' ) {
+            System.out.println("yolooo");
+            try {
+                return Long.parseLong(args.substring(1, args.length() - 2));
+            } catch (NumberFormatException e) {
+                throw new ArgumentException("Size is not a long : " + 
e.getMessage());
+            }
+        }
+        throw new ArgumentException(args + " is an invalid size literal : it 
should be at least 4 char looking like {_+}");
+    }
+
     public static String getScriptName(String args) {
         Matcher regexMatcher = SCRIPT_NAME_REGEX.matcher(args);
         regexMatcher.find();

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java?rev=1720581&r1=1720580&r2=1720581&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
 Thu Dec 17 14:58:22 2015
@@ -47,12 +47,10 @@ public class SettableSession implements
         this.user = user;
     }
 
-    @Override
     public State getState() {
         return state;
     }
 
-    @Override
     public void setState(State state) {
         this.state = state;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to