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