diff --git a/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java b/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java index 4b08856157..d080cbc85a 100644 --- a/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java +++ b/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java @@ -168,14 +168,6 @@ public final class DAORealmHelper //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param principal - * - * @return - */ private GroupNames collectGroups(String principal) { Builder builder = ImmutableSet.builder(); diff --git a/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java b/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java new file mode 100644 index 0000000000..99d0195d5f --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2014, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ +package sonia.scm.security; + +import javax.inject.Inject; +import sonia.scm.group.GroupDAO; +import sonia.scm.user.UserDAO; + +/** + * Factory to create {@link DAORealmHelper} instances. + * + * @author Sebastian Sdorra + * @since 2.0.0 + */ +public final class DAORealmHelperFactory { + + private final UserDAO userDAO; + private final GroupDAO groupDAO; + + /** + * Constructs a new instance. + * + * @param userDAO user dao + * @param groupDAO group dao + */ + @Inject + public DAORealmHelperFactory(UserDAO userDAO, GroupDAO groupDAO) { + this.userDAO = userDAO; + this.groupDAO = groupDAO; + } + + /** + * Creates a new {@link DAORealmHelper} for the given realm with the injected dao instances. + * + * @param realm name of realm + * + * @return new {@link DAORealmHelper} instance. + */ + public DAORealmHelper create(String realm) { + return new DAORealmHelper(realm, userDAO, groupDAO); + } + +} diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java index 1130b8feea..a5b119acbc 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java @@ -48,10 +48,10 @@ import org.apache.shiro.realm.AuthenticatingRealm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.group.GroupDAO; import sonia.scm.plugin.Extension; + import sonia.scm.security.DAORealmHelper; -import sonia.scm.user.UserDAO; +import sonia.scm.security.DAORealmHelperFactory; //~--- JDK imports ------------------------------------------------------------ @@ -92,13 +92,12 @@ public class LegacyRealm extends AuthenticatingRealm * Constructs ... * * - * @param userDAO - * @param groupDAO + * @param helperFactory */ @Inject - public LegacyRealm(UserDAO userDAO, GroupDAO groupDAO) + public LegacyRealm(DAORealmHelperFactory helperFactory) { - this.helper = new DAORealmHelper(REALM, userDAO, groupDAO); + this.helper = helperFactory.create(REALM); setAuthenticationTokenClass(UsernamePasswordToken.class); HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); diff --git a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java index 04d544393f..fd6b482a93 100644 --- a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java +++ b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/LegacyRealmTest.java @@ -54,8 +54,10 @@ import sonia.scm.user.UserDAO; import sonia.scm.user.UserTestData; import static org.junit.Assert.*; +import org.junit.Before; import static org.mockito.Mockito.*; +import sonia.scm.security.DAORealmHelperFactory; /** * @@ -71,6 +73,14 @@ public class LegacyRealmTest //~--- methods -------------------------------------------------------------- + /** + * Prepare object under test. + */ + @Before + public void prepareObjectUnderTest() { + this.realm = new LegacyRealm(helperFactory); + } + /** * Method description * @@ -134,15 +144,15 @@ public class LegacyRealmTest //~--- fields --------------------------------------------------------------- - /** Field description */ + @Mock + private UserDAO userDAO; + @Mock private GroupDAO groupDAO; - /** Field description */ @InjectMocks + private DAORealmHelperFactory helperFactory; + private LegacyRealm realm; - /** Field description */ - @Mock - private UserDAO userDAO; } diff --git a/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java b/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java index d076a9d075..db4dc17950 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java @@ -77,15 +77,14 @@ public class DefaultRealm extends AuthorizingRealm * * @param service * @param collector - * @param userDAO - * @param groupDAO + * @param helperFactory */ @Inject public DefaultRealm(PasswordService service, - DefaultAuthorizationCollector collector, UserDAO userDAO, GroupDAO groupDAO) + DefaultAuthorizationCollector collector, DAORealmHelperFactory helperFactory) { this.collector = collector; - this.helper = new DAORealmHelper(REALM, userDAO, groupDAO); + this.helper = helperFactory.create(REALM); PasswordMatcher matcher = new PasswordMatcher(); diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java index 848796dd51..3ea6c55a5e 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultRealmTest.java @@ -71,6 +71,7 @@ import static org.mockito.Mockito.*; //~--- JDK imports ------------------------------------------------------------ import java.util.List; +import org.mockito.InjectMocks; /** * @@ -221,7 +222,7 @@ public class DefaultRealmTest // use a small number of iterations for faster test execution hashService.setHashIterations(512); service.setHashService(hashService); - realm = new DefaultRealm(service, collector, userDAO, groupDAO); + realm = new DefaultRealm(service, collector, helperFactory); } //~--- methods -------------------------------------------------------------- @@ -296,13 +297,15 @@ public class DefaultRealmTest @Mock private GroupDAO groupDAO; + @Mock + private UserDAO userDAO; + + @InjectMocks + private DAORealmHelperFactory helperFactory; + /** Field description */ private DefaultRealm realm; /** Field description */ private DefaultPasswordService service; - - /** Field description */ - @Mock - private UserDAO userDAO; }