This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.repoinit.parser-1.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-repoinit-parser.git
commit 4380dd94eabf0d9df21682c663844ec3ea03eb0e Author: Bertrand Delacretaz <[email protected]> AuthorDate: Mon Nov 7 13:41:00 2016 +0000 SLING-6219 - reponit grammar support for create/delete user git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/repoinit/parser@1768509 13f79535-47bb-0310-9956-ffa450edef68 --- .../repoinit/parser/operations/CreateUser.java | 53 ++++++++++++++++++++++ .../{OperationVisitor.java => DeleteUser.java} | 27 +++++++---- .../parser/operations/OperationVisitor.java | 2 + src/main/javacc/RepoInitGrammar.jjt | 38 ++++++++++++++++ .../parser/test/OperationToStringVisitor.java | 12 +++++ src/test/resources/testcases/test-60-output.txt | 6 +++ src/test/resources/testcases/test-60.txt | 11 +++++ src/test/resources/testcases/test-99-output.txt | 2 + src/test/resources/testcases/test-99.txt | 2 + 9 files changed, 145 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/CreateUser.java b/src/main/java/org/apache/sling/repoinit/parser/operations/CreateUser.java new file mode 100644 index 0000000..48e9316 --- /dev/null +++ b/src/main/java/org/apache/sling/repoinit/parser/operations/CreateUser.java @@ -0,0 +1,53 @@ +/* + * 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.sling.repoinit.parser.operations; + +public class CreateUser extends Operation { + private final String username; + private final String passwordEncoding; + private final String password; + + /** Operation that creates a user. + * @param username the name of the user to create + * @param passwordEncoding optional encoding for the supplied password + * @param password optional password + */ + public CreateUser(String username, String passwordEncoding, String password) { + this.username = username; + this.passwordEncoding = passwordEncoding; + this.password = password; + } + + @Override + public void accept(OperationVisitor v) { + v.visitCreateUser(this); + } + + @Override + protected String getParametersDescription() { + final StringBuilder sb = new StringBuilder(username); + if(password != null) { + if(passwordEncoding == null) { + sb.append(" (with password)"); + } else { + sb.append(" (with encoded password)"); + } + } + return sb.toString(); + } +} diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java b/src/main/java/org/apache/sling/repoinit/parser/operations/DeleteUser.java similarity index 65% copy from src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java copy to src/main/java/org/apache/sling/repoinit/parser/operations/DeleteUser.java index 8693a99..a74bb8d 100644 --- a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java +++ b/src/main/java/org/apache/sling/repoinit/parser/operations/DeleteUser.java @@ -17,12 +17,23 @@ package org.apache.sling.repoinit.parser.operations; -public interface OperationVisitor { - void visitCreateServiceUser(CreateServiceUser s); - void visitDeleteServiceUser(DeleteServiceUser s); - void visitSetAclPrincipal(SetAclPrincipals s); - void visitSetAclPaths(SetAclPaths s); - void visitCreatePath(CreatePath cp); - void visitRegisterNamespace(RegisterNamespace rn); - void visitRegisterNodetypes(RegisterNodetypes b); +public class DeleteUser extends Operation { + private final String username; + + /** Operation that deletes a user. + * @param username the name of the user to delete + */ + public DeleteUser(String username) { + this.username = username; + } + + @Override + public void accept(OperationVisitor v) { + v.visitDeleteUser(this); + } + + @Override + protected String getParametersDescription() { + return username; + } } diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java b/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java index 8693a99..e38c4f0 100644 --- a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java +++ b/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java @@ -18,6 +18,8 @@ package org.apache.sling.repoinit.parser.operations; public interface OperationVisitor { + void visitCreateUser(CreateUser u); + void visitDeleteUser(DeleteUser u); void visitCreateServiceUser(CreateServiceUser s); void visitDeleteServiceUser(DeleteServiceUser s); void visitSetAclPrincipal(SetAclPrincipals s); diff --git a/src/main/javacc/RepoInitGrammar.jjt b/src/main/javacc/RepoInitGrammar.jjt index 288b6d5..930c4a7 100644 --- a/src/main/javacc/RepoInitGrammar.jjt +++ b/src/main/javacc/RepoInitGrammar.jjt @@ -69,9 +69,13 @@ TOKEN: | < NODETYPES: "nodetypes" > | < REGISTER: "register" > | < NAMESPACE: "namespace" > +| < WITH: "with" > +| < PASSWORD: "password" > | < START_TEXTBLOCK: "<<===" > : TEXTBLOCK | < LPAREN: "(" > | < RPAREN: ")" > +| < LCURLY: "{" > +| < RCURLY: "}" > | < COMMA: "," > | < STAR: "*" > @@ -105,6 +109,8 @@ List<Operation> parse() : | createPathStatement(result) | registerNamespaceStatement(result) | registerNodetypesStatement(result) + | createUserStatement(result) + | deleteUserStatement(result) | blankLine() ) * <EOF> @@ -333,4 +339,36 @@ void registerNodetypesStatement(List<Operation> result) : { result.add(new RegisterNodetypes(b.toString())); } +} + +void createUserStatement(List<Operation> result) : +{ + Token user = null; + Token encoding = null; + Token password = null; +} +{ + <CREATE> <USER> + ( user = <STRING> ) + ( <WITH> <PASSWORD> ( <LCURLY> encoding = <STRING> <RCURLY> )? password = <STRING> )? + + { + result.add(new CreateUser(user.image, + (encoding == null ? null : encoding.image), + (password == null ? null : password.image) + )); + } +} + +void deleteUserStatement(List<Operation> result) : +{ + Token user = null; +} +{ + <DELETE> <USER> + ( user = <STRING> ) + + { + result.add(new DeleteUser(user.image)); + } } \ No newline at end of file diff --git a/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java b/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java index ede1c58..0663e59 100644 --- a/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java +++ b/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java @@ -23,7 +23,9 @@ import java.util.Collection; import org.apache.sling.repoinit.parser.operations.AclLine; import org.apache.sling.repoinit.parser.operations.CreatePath; import org.apache.sling.repoinit.parser.operations.CreateServiceUser; +import org.apache.sling.repoinit.parser.operations.CreateUser; import org.apache.sling.repoinit.parser.operations.DeleteServiceUser; +import org.apache.sling.repoinit.parser.operations.DeleteUser; import org.apache.sling.repoinit.parser.operations.RegisterNodetypes; import org.apache.sling.repoinit.parser.operations.OperationVisitor; import org.apache.sling.repoinit.parser.operations.RegisterNamespace; @@ -52,6 +54,16 @@ class OperationToStringVisitor implements OperationVisitor { } @Override + public void visitCreateUser(CreateUser u) { + out.println(u.toString()); + } + + @Override + public void visitDeleteUser(DeleteUser u) { + out.println(u.toString()); + } + + @Override public void visitSetAclPrincipal(SetAclPrincipals s) { out.print(s.getClass().getSimpleName()); out.print(" for "); diff --git a/src/test/resources/testcases/test-60-output.txt b/src/test/resources/testcases/test-60-output.txt new file mode 100644 index 0000000..db94843 --- /dev/null +++ b/src/test/resources/testcases/test-60-output.txt @@ -0,0 +1,6 @@ +DeleteUser userB +CreateUser userB +CreateUser userC (with password) +CreateUser userD (with encoded password) +CreateUser userE (with encoded password) +CreateUser one_with-more-chars.ok:/123456 (with encoded password) \ No newline at end of file diff --git a/src/test/resources/testcases/test-60.txt b/src/test/resources/testcases/test-60.txt new file mode 100644 index 0000000..e39f331 --- /dev/null +++ b/src/test/resources/testcases/test-60.txt @@ -0,0 +1,11 @@ +# Test create/delete user statements + +delete user userB +create user userB + +create user userC with password some_password +create user userD with password {SHA-256}dc460da4ad72c482231e28e688e01f2778a88ce31a08826899d54ef7183998b5 + +create user userE with password {someEncoding} afdgwdsdf + +create user one_with-more-chars.ok:/123456 with password {encoding_with.ok-:/12345} pw-with.ok-:/13456 \ No newline at end of file diff --git a/src/test/resources/testcases/test-99-output.txt b/src/test/resources/testcases/test-99-output.txt index 0544b4a..b7927c7 100644 --- a/src/test/resources/testcases/test-99-output.txt +++ b/src/test/resources/testcases/test-99-output.txt @@ -23,4 +23,6 @@ RegisterNodetypes: [slingevent:Event] > nt:unstructured, nt:hierarchyNode - slingevent:topic (string) - slingevent:properties (binary) +CreateUser userE (with encoded password) +CreateUser one_with-more-chars.ok:/123456 (with encoded password) CreateServiceUser the-last-one \ No newline at end of file diff --git a/src/test/resources/testcases/test-99.txt b/src/test/resources/testcases/test-99.txt index c8b16a0..740c439 100644 --- a/src/test/resources/testcases/test-99.txt +++ b/src/test/resources/testcases/test-99.txt @@ -42,4 +42,6 @@ register nodetypes - slingevent:properties (binary) ===>> +create user userE with password {someEncoding} afdgwdsdf +create user one_with-more-chars.ok:/123456 with password {encoding_with.ok-:/12345} pw-with.ok-:/13456 create service user the-last-one \ No newline at end of file -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
