From b6fb38edff015c0b4620635df27af03ae0f0aa4c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 28 Apr 2014 18:25:50 +0200 Subject: [PATCH] avoid creation of .cipherkey during unit tests --- .../scm/security/DefaultCipherHandler.java | 25 ++++++-- .../scm/security/InMemoryCipherHandler.java | 58 +++++++++++++++++++ .../services/sonia.scm.security.CipherHandler | 1 + 3 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 scm-test/src/main/java/sonia/scm/security/InMemoryCipherHandler.java create mode 100644 scm-test/src/main/resources/META-INF/services/sonia.scm.security.CipherHandler diff --git a/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java b/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java index 64f81be6fd..4b82563687 100644 --- a/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java +++ b/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java @@ -35,6 +35,8 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.annotations.VisibleForTesting; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -106,6 +108,21 @@ public class DefaultCipherHandler implements CipherHandler //~--- constructors --------------------------------------------------------- + /** + * Constructs a new DefaultCipherHandler. Note this constructor is only for + * unit tests. + * + * + * @param key + * + * @since 1.38 + */ + @VisibleForTesting + protected DefaultCipherHandler(String key) + { + this.key = key.toCharArray(); + } + /** * Constructs ... * @@ -116,7 +133,7 @@ public class DefaultCipherHandler implements CipherHandler * */ public DefaultCipherHandler(SCMContextProvider context, - KeyGenerator keyGenerator) + KeyGenerator keyGenerator) { File configDirectory = new File(context.getBaseDirectory(), "config"); @@ -178,7 +195,7 @@ public class DefaultCipherHandler implements CipherHandler System.arraycopy(encodedInput, 0, salt, 0, SALT_LENGTH); System.arraycopy(encodedInput, SALT_LENGTH, encoded, 0, - encodedInput.length - SALT_LENGTH); + encodedInput.length - SALT_LENGTH); IvParameterSpec iv = new IvParameterSpec(salt); SecretKey secretKey = buildSecretKey(plainKey); @@ -245,7 +262,7 @@ public class DefaultCipherHandler implements CipherHandler System.arraycopy(salt, 0, result, 0, SALT_LENGTH); System.arraycopy(encodedInput, 0, result, SALT_LENGTH, - result.length - SALT_LENGTH); + result.length - SALT_LENGTH); res = new String(Base64.encode(result), ENCODING); } catch (Exception ex) @@ -270,7 +287,7 @@ public class DefaultCipherHandler implements CipherHandler * @throws UnsupportedEncodingException */ private SecretKey buildSecretKey(char[] plainKey) - throws UnsupportedEncodingException, NoSuchAlgorithmException + throws UnsupportedEncodingException, NoSuchAlgorithmException { byte[] raw = new String(plainKey).getBytes(ENCODING); MessageDigest digest = MessageDigest.getInstance(DIGEST_TYPE); diff --git a/scm-test/src/main/java/sonia/scm/security/InMemoryCipherHandler.java b/scm-test/src/main/java/sonia/scm/security/InMemoryCipherHandler.java new file mode 100644 index 0000000000..18c965fc50 --- /dev/null +++ b/scm-test/src/main/java/sonia/scm/security/InMemoryCipherHandler.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2010, 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; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.UUID; + +/** + * @author Sebastian Sdorra + * @since 1.38 + */ +public class InMemoryCipherHandler extends DefaultCipherHandler +{ + + /** Field description */ + private static final String KEY = UUID.randomUUID().toString(); + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public InMemoryCipherHandler() + { + super(KEY); + } +} diff --git a/scm-test/src/main/resources/META-INF/services/sonia.scm.security.CipherHandler b/scm-test/src/main/resources/META-INF/services/sonia.scm.security.CipherHandler new file mode 100644 index 0000000000..d480cb88a1 --- /dev/null +++ b/scm-test/src/main/resources/META-INF/services/sonia.scm.security.CipherHandler @@ -0,0 +1 @@ +sonia.scm.security.InMemoryCipherHandler \ No newline at end of file