diff --git a/src/main/java/org/codelibs/fess/helper/PermissionHelper.java b/src/main/java/org/codelibs/fess/helper/PermissionHelper.java index 5f49d3884..ed561c73e 100644 --- a/src/main/java/org/codelibs/fess/helper/PermissionHelper.java +++ b/src/main/java/org/codelibs/fess/helper/PermissionHelper.java @@ -17,6 +17,8 @@ package org.codelibs.fess.helper; import java.util.Locale; +import javax.annotation.Resource; + import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.mylasta.direction.FessConfig; import org.codelibs.fess.util.ComponentUtil; @@ -28,20 +30,34 @@ public class PermissionHelper { protected String userPrefix = "{user}"; + @Resource + protected SystemHelper systemHelper; + public String encode(final String value) { if (StringUtil.isBlank(value)) { return null; } - final SystemHelper systemHelper = ComponentUtil.getSystemHelper(); final String permission = value.trim(); final String lower = permission.toLowerCase(Locale.ROOT); - if (lower.startsWith(userPrefix) && permission.length() > userPrefix.length()) { - return systemHelper.getSearchRoleByUser(permission.substring(userPrefix.length())); - } else if (lower.startsWith(groupPrefix) && permission.length() > groupPrefix.length()) { - return systemHelper.getSearchRoleByGroup(permission.substring(groupPrefix.length())); - } else if (lower.startsWith(rolePrefix) && permission.length() > rolePrefix.length()) { - return systemHelper.getSearchRoleByRole(permission.substring(rolePrefix.length())); + if (lower.startsWith(userPrefix)) { + if (permission.length() > userPrefix.length()) { + return systemHelper.getSearchRoleByUser(permission.substring(userPrefix.length())); + } else { + return null; + } + } else if (lower.startsWith(groupPrefix)) { + if (permission.length() > groupPrefix.length()) { + return systemHelper.getSearchRoleByGroup(permission.substring(groupPrefix.length())); + } else { + return null; + } + } else if (lower.startsWith(rolePrefix)) { + if (permission.length() > rolePrefix.length()) { + return systemHelper.getSearchRoleByRole(permission.substring(rolePrefix.length())); + } else { + return null; + } } return permission; } @@ -52,12 +68,13 @@ public class PermissionHelper { } final FessConfig fessConfig = ComponentUtil.getFessConfig(); - if (value.startsWith(fessConfig.getRoleSearchUserPrefix()) && value.length() > 1) { - return userPrefix + value.substring(1); - } else if (value.startsWith(fessConfig.getRoleSearchGroupPrefix()) && value.length() > 1) { - return groupPrefix + value.substring(1); - } else if (value.startsWith(fessConfig.getRoleSearchRolePrefix()) && value.length() > 1) { - return rolePrefix + value.substring(1); + if (value.startsWith(fessConfig.getRoleSearchUserPrefix()) && value.length() > fessConfig.getRoleSearchUserPrefix().length()) { + return userPrefix + value.substring(fessConfig.getRoleSearchUserPrefix().length()); + } else if (value.startsWith(fessConfig.getRoleSearchGroupPrefix()) + && value.length() > fessConfig.getRoleSearchGroupPrefix().length()) { + return groupPrefix + value.substring(fessConfig.getRoleSearchGroupPrefix().length()); + } else if (value.startsWith(fessConfig.getRoleSearchRolePrefix()) && value.length() > fessConfig.getRoleSearchRolePrefix().length()) { + return rolePrefix + value.substring(fessConfig.getRoleSearchRolePrefix().length()); } return value; } diff --git a/src/main/java/org/codelibs/fess/util/ComponentUtil.java b/src/main/java/org/codelibs/fess/util/ComponentUtil.java index 1ea97a9d0..de89898d8 100644 --- a/src/main/java/org/codelibs/fess/util/ComponentUtil.java +++ b/src/main/java/org/codelibs/fess/util/ComponentUtil.java @@ -148,6 +148,8 @@ public final class ComponentUtil { private static SystemHelper systemHelper; + private static FessConfig fessConfig; + private ComponentUtil() { } @@ -293,6 +295,9 @@ public final class ComponentUtil { } public static FessConfig getFessConfig() { + if (fessConfig != null) { + return fessConfig; + } return getComponent(FessConfig.class); } @@ -365,4 +370,13 @@ public final class ComponentUtil { return false; } + /** + * For test purpose only. + * + * @param fessConfig + */ + public static void setFessConfig(FessConfig fessConfig) { + ComponentUtil.fessConfig = fessConfig; + } + } diff --git a/src/test/java/org/codelibs/fess/helper/PermissionHelperTest.java b/src/test/java/org/codelibs/fess/helper/PermissionHelperTest.java new file mode 100644 index 000000000..27d8db814 --- /dev/null +++ b/src/test/java/org/codelibs/fess/helper/PermissionHelperTest.java @@ -0,0 +1,114 @@ +/* + * Copyright 2012-2016 CodeLibs Project and the Others. + * + * Licensed 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.codelibs.fess.helper; + +import org.codelibs.fess.mylasta.direction.FessConfig; +import org.codelibs.fess.unit.UnitFessTestCase; +import org.codelibs.fess.util.ComponentUtil; + +public class PermissionHelperTest extends UnitFessTestCase { + + public PermissionHelper permissionHelper; + + @Override + public void setUp() throws Exception { + super.setUp(); + permissionHelper = new PermissionHelper(); + permissionHelper.systemHelper = new SystemHelper(); + } + + public void test_encode() { + assertNull(permissionHelper.encode(null)); + assertNull(permissionHelper.encode("")); + assertNull(permissionHelper.encode(" ")); + assertNull(permissionHelper.encode("{user}")); + assertNull(permissionHelper.encode("{role}")); + assertNull(permissionHelper.encode("{group}")); + + assertEquals("1guest", permissionHelper.encode("{user}guest")); + assertEquals("Rguest", permissionHelper.encode("{role}guest")); + assertEquals("2guest", permissionHelper.encode("{group}guest")); + assertEquals("1guest", permissionHelper.encode("{USER}guest")); + assertEquals("Rguest", permissionHelper.encode("{ROLE}guest")); + assertEquals("2guest", permissionHelper.encode("{GROUP}guest")); + + assertEquals("guest", permissionHelper.encode("guest")); + + final FessConfig fessConfig = ComponentUtil.getFessConfig(); + ComponentUtil.setFessConfig(new FessConfig.SimpleImpl() { + private static final long serialVersionUID = 1L; + + @Override + public String getRoleSearchUserPrefix() { + return fessConfig.getRoleSearchUserPrefix(); + } + + @Override + public String getRoleSearchGroupPrefix() { + return fessConfig.getRoleSearchGroupPrefix(); + } + + @Override + public String getRoleSearchRolePrefix() { + return ""; + } + }); + try { + assertEquals("guest", permissionHelper.encode("{role}guest")); + assertEquals("guest", permissionHelper.encode("guest")); + } finally { + ComponentUtil.setFessConfig(null); + } + } + + public void test_decode() { + assertNull(permissionHelper.decode(null)); + assertNull(permissionHelper.decode("")); + assertNull(permissionHelper.decode(" ")); + + assertEquals("{user}guest", permissionHelper.decode("1guest")); + assertEquals("{role}guest", permissionHelper.decode("Rguest")); + assertEquals("{group}guest", permissionHelper.decode("2guest")); + + assertEquals("guest", permissionHelper.decode("guest")); + + final FessConfig fessConfig = ComponentUtil.getFessConfig(); + ComponentUtil.setFessConfig(new FessConfig.SimpleImpl() { + private static final long serialVersionUID = 1L; + + @Override + public String getRoleSearchUserPrefix() { + return fessConfig.getRoleSearchUserPrefix(); + } + + @Override + public String getRoleSearchGroupPrefix() { + return fessConfig.getRoleSearchGroupPrefix(); + } + + @Override + public String getRoleSearchRolePrefix() { + return ""; + } + }); + try { + assertEquals("{role}guest", permissionHelper.decode("guest")); + } finally { + ComponentUtil.setFessConfig(null); + } + } + +}