You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2021/05/05 12:52:53 UTC
[sling-org-apache-sling-repoinit-parser] 01/01: SLING-10299 : Allow
for removal of access control policies (not just individual entries)
This is an automated email from the ASF dual-hosted git repository.
angela pushed a commit to branch SLING-10299
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-repoinit-parser.git
commit 859cd4386eb11f30422d223e122a144027d64243
Author: angela <an...@adobe.com>
AuthorDate: Wed May 5 14:52:36 2021 +0200
SLING-10299 : Allow for removal of access control policies (not just individual entries)
---
.../parser/operations/OperationVisitor.java | 4 ++
.../{package-info.java => RemoveAclPaths.java} | 43 ++++++++++++++++---
.../parser/operations/RemoveAclPrincipalBased.java | 50 ++++++++++++++++++++++
...{package-info.java => RemoveAclPrincipals.java} | 43 ++++++++++++++++---
.../repoinit/parser/operations/package-info.java | 2 +-
src/main/javacc/RepoInitGrammar.jjt | 39 +++++++++++++++++
.../parser/test/OperationToStringVisitor.java | 37 ++++++++++++++++
src/test/resources/testcases/test-70-output.txt | 7 +++
src/test/resources/testcases/test-70.txt | 13 ++++++
src/test/resources/testcases/test-99-output.txt | 9 +++-
src/test/resources/testcases/test-99.txt | 9 ++++
11 files changed, 240 insertions(+), 16 deletions(-)
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 7eb2006..9bd3775 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
@@ -38,4 +38,8 @@ public interface OperationVisitor {
void visitAddGroupMembers(AddGroupMembers am);
void visitRemoveGroupMembers(RemoveGroupMembers rm);
void visitSetProperties(SetProperties sp);
+ default void visitRemoveAclPrincipals(RemoveAclPrincipals s) { throw new UnsupportedOperationException(); }
+ default void visitRemoveAclPaths(RemoveAclPaths s) { throw new UnsupportedOperationException(); }
+ default void visitRemoveAclPrincipalBased(RemoveAclPrincipalBased s) { throw new UnsupportedOperationException(); }
+
}
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPaths.java
similarity index 52%
copy from src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
copy to src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPaths.java
index 14e9006..ef97188 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPaths.java
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*
* 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.
@@ -6,17 +6,46 @@
* (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
+ * 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.
- ******************************************************************************/
-
- // DO NOT use version 5.x here, once a major change is
- // needed skip directly to 6.x (SLING-10139)
-@org.osgi.annotation.versioning.Version("4.7.0")
+ */
package org.apache.sling.repoinit.parser.operations;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class RemoveAclPaths extends Operation {
+
+ private final List<String> paths;
+
+ public RemoveAclPaths(@NotNull List<String> paths) {
+ this.paths = paths;
+ }
+
+ @Override
+ public void accept(OperationVisitor v) {
+ v.visitRemoveAclPaths(this);
+ }
+
+ @Override
+ protected String getParametersDescription() {
+ return paths.toString();
+ }
+
+ @Override
+ public @NotNull String asRepoInitString() {
+ return String.format("remove ACL on %s%n", pathsToString(paths));
+ }
+
+ @NotNull
+ public List<String> getPaths() {
+ return paths;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipalBased.java b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipalBased.java
new file mode 100644
index 0000000..c16811a
--- /dev/null
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipalBased.java
@@ -0,0 +1,50 @@
+/*
+ * 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;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class RemoveAclPrincipalBased extends Operation {
+
+ private final List<String> principals;
+
+ public RemoveAclPrincipalBased(@NotNull List<String> principals) {
+ this.principals = principals;
+ }
+
+ @Override
+ public void accept(OperationVisitor v) {
+ v.visitRemoveAclPrincipalBased(this);
+ }
+
+ @Override
+ protected String getParametersDescription() {
+ return principals.toString();
+ }
+
+ @Override
+ public @NotNull String asRepoInitString() {
+ return String.format("remove principal ACL for %s%n", listToString(principals));
+ }
+
+ @NotNull
+ public List<String> getPrincipals() {
+ return principals;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipals.java
similarity index 50%
copy from src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
copy to src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipals.java
index 14e9006..815fbab 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveAclPrincipals.java
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*
* 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.
@@ -6,17 +6,46 @@
* (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
+ * 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.
- ******************************************************************************/
-
- // DO NOT use version 5.x here, once a major change is
- // needed skip directly to 6.x (SLING-10139)
-@org.osgi.annotation.versioning.Version("4.7.0")
+ */
package org.apache.sling.repoinit.parser.operations;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class RemoveAclPrincipals extends Operation {
+
+ private final List<String> principals;
+
+ public RemoveAclPrincipals(@NotNull List<String> principals) {
+ this.principals = principals;
+ }
+
+ @Override
+ public void accept(OperationVisitor v) {
+ v.visitRemoveAclPrincipals(this);
+ }
+
+ @Override
+ protected String getParametersDescription() {
+ return principals.toString();
+ }
+
+ @Override
+ public @NotNull String asRepoInitString() {
+ return String.format("remove ACL for %s%n", listToString(principals));
+ }
+
+ @NotNull
+ public List<String> getPrincipals() {
+ return principals;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java b/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
index 14e9006..737bebc 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
@@ -17,6 +17,6 @@
// DO NOT use version 5.x here, once a major change is
// needed skip directly to 6.x (SLING-10139)
-@org.osgi.annotation.versioning.Version("4.7.0")
+@org.osgi.annotation.versioning.Version("4.8.0")
package org.apache.sling.repoinit.parser.operations;
diff --git a/src/main/javacc/RepoInitGrammar.jjt b/src/main/javacc/RepoInitGrammar.jjt
index f255b47..960d45e 100644
--- a/src/main/javacc/RepoInitGrammar.jjt
+++ b/src/main/javacc/RepoInitGrammar.jjt
@@ -143,6 +143,9 @@ List<Operation> parse() :
| setAclPrincipals(result)
| setAclPrincipalBased(result)
| setAclRepository(result)
+ | removeAclPaths(result)
+ | removeAclPrincipals(result)
+ | removeAclPrincipalBased(result)
| createPathStatement(result)
| registerNamespaceStatement(result)
| registerNodetypesStatement(result)
@@ -541,6 +544,42 @@ void setAclPrincipalBased(List<Operation> result) :
}
}
+void removeAclPaths(List<Operation> result) :
+{
+ List<String> paths;
+}
+{
+ <REMOVE> <ACL> <ON> paths = pathsList()
+ ( <EOL> | <EOF> )
+ {
+ result.add(new RemoveAclPaths(paths));
+ }
+}
+
+void removeAclPrincipals(List<Operation> result) :
+{
+ List <String> principals;
+}
+{
+ <REMOVE> <ACL> <FOR> principals = principalsList()
+ ( <EOL> | <EOF> )
+ {
+ result.add(new RemoveAclPrincipals(principals));
+ }
+}
+
+void removeAclPrincipalBased(List<Operation> result) :
+{
+ List <String> principals;
+}
+{
+ <REMOVE> <PRINCIPAL> <ACL> <FOR> principals = principalsList()
+ ( <EOL> | <EOF> )
+ {
+ result.add(new RemoveAclPrincipalBased(principals));
+ }
+}
+
void registerNamespaceStatement(List<Operation> result) :
{
Token prefix = null;
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 88c9e62..711c9c9 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
@@ -34,6 +34,9 @@ import org.apache.sling.repoinit.parser.operations.RegisterNodetypes;
import org.apache.sling.repoinit.parser.operations.OperationVisitor;
import org.apache.sling.repoinit.parser.operations.RegisterNamespace;
import org.apache.sling.repoinit.parser.operations.RegisterPrivilege;
+import org.apache.sling.repoinit.parser.operations.RemoveAclPaths;
+import org.apache.sling.repoinit.parser.operations.RemoveAclPrincipalBased;
+import org.apache.sling.repoinit.parser.operations.RemoveAclPrincipals;
import org.apache.sling.repoinit.parser.operations.SetAclPaths;
import org.apache.sling.repoinit.parser.operations.SetAclPrincipalBased;
import org.apache.sling.repoinit.parser.operations.SetAclPrincipals;
@@ -127,6 +130,40 @@ class OperationToStringVisitor implements OperationVisitor {
}
@Override
+ public void visitRemoveAclPrincipals(RemoveAclPrincipals s) {
+ out.print(s.getClass().getSimpleName());
+ out.print(" for");
+ for (String p : s.getPrincipals()) {
+ out.print(' ');
+ out.print(p);
+ }
+ out.println();
+ }
+
+ @Override
+ public void visitRemoveAclPaths(RemoveAclPaths s) {
+ out.print(s.getClass().getSimpleName());
+ out.print(" on");
+ for (String p : s.getPaths()) {
+ out.print(' ');
+ out.print(p);
+ }
+ out.println();
+
+ }
+
+ @Override
+ public void visitRemoveAclPrincipalBased(RemoveAclPrincipalBased s) {
+ out.print(s.getClass().getSimpleName());
+ out.print(" for");
+ for (String p : s.getPrincipals()) {
+ out.print(' ');
+ out.print(p);
+ }
+ out.println();
+ }
+
+ @Override
public void visitCreatePath(CreatePath cp) {
out.println(cp.toString());
}
diff --git a/src/test/resources/testcases/test-70-output.txt b/src/test/resources/testcases/test-70-output.txt
new file mode 100644
index 0000000..81feb97
--- /dev/null
+++ b/src/test/resources/testcases/test-70-output.txt
@@ -0,0 +1,7 @@
+RemoveAclPrincipals for ana
+RemoveAclPrincipals for alice aida
+RemoveAclPaths on :repository :home:anni# :functionNamesAreFree:aendu#
+RemoveAclPaths on / /var /etc
+RemoveAclPaths on /content
+RemoveAclPrincipalBased for ada amy
+RemoveAclPrincipalBased for adi
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-70.txt b/src/test/resources/testcases/test-70.txt
new file mode 100644
index 0000000..ba886f5
--- /dev/null
+++ b/src/test/resources/testcases/test-70.txt
@@ -0,0 +1,13 @@
+remove ACL for ana
+
+remove ACL for alice, aida
+
+remove ACL on :repository, home(anni), functionNamesAreFree(aendu)
+
+remove ACL on /, /var, /etc
+
+remove ACL on /content
+
+remove principal ACL for ada, amy
+
+remove principal ACL for adi
\ 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 3d5039c..ca475c8 100644
--- a/src/test/resources/testcases/test-99-output.txt
+++ b/src/test/resources/testcases/test-99-output.txt
@@ -75,4 +75,11 @@ SetProperties on :authorizable:bob# :authorizable:grpB#/nested
PropertyLine default someInteger{Long}=[{Long}42]
PropertyLine someFlag{Boolean}=[{Boolean}true]
PropertyLine default someDate{Date}=[{GregorianCalendar}2020-03-19T11:39:33.437+05:30]
- PropertyLine quotedMix{String}=[{String}quoted, {String}non-quoted, {String}the last " one]
\ No newline at end of file
+ PropertyLine quotedMix{String}=[{String}quoted, {String}non-quoted, {String}the last " one]
+RemoveAclPrincipals for ana
+RemoveAclPrincipals for alice aida
+RemoveAclPaths on :repository :home:anni# :functionNamesAreFree:aendu#
+RemoveAclPaths on / /var /etc
+RemoveAclPaths on /content
+RemoveAclPrincipalBased for ada amy
+RemoveAclPrincipalBased for adi
\ 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 427c414..f97ac95 100644
--- a/src/test/resources/testcases/test-99.txt
+++ b/src/test/resources/testcases/test-99.txt
@@ -135,3 +135,12 @@ set properties on authorizable(bob), authorizable(grpB)/nested
default someDate{Date} to "2020-03-19T11:39:33.437+05:30"
set quotedMix to "quoted", non-quoted, "the last \" one"
end
+
+# Remove AC policies entirely (not just individual entries)
+remove ACL for ana
+remove ACL for alice, aida
+remove ACL on :repository, home(anni), functionNamesAreFree(aendu)
+remove ACL on /, /var, /etc
+remove ACL on /content
+remove principal ACL for ada, amy
+remove principal ACL for adi
\ No newline at end of file