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: [email protected]
For additional commands, e-mail: [email protected]