mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 16:05:44 +01:00
resolve cipher api dependency problems
This commit is contained in:
@@ -33,15 +33,78 @@
|
||||
|
||||
package sonia.scm.security;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.SCMContext;
|
||||
import sonia.scm.util.ServiceUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
* @since 1.7
|
||||
*/
|
||||
public class CipherSingleton
|
||||
public class CipherUtil
|
||||
{
|
||||
|
||||
/** Field description */
|
||||
private static CipherHandler cipherHandler;
|
||||
private static volatile CipherUtil instance;
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
|
||||
private KeyGenerator keyGenerator;
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*/
|
||||
private CipherUtil()
|
||||
{
|
||||
keyGenerator = ServiceUtil.getService(KeyGenerator.class);
|
||||
|
||||
if (keyGenerator == null)
|
||||
{
|
||||
keyGenerator = new UUIDKeyGenerator();
|
||||
}
|
||||
|
||||
cipherHandler = ServiceUtil.getService(CipherHandler.class);
|
||||
|
||||
if (cipherHandler == null)
|
||||
{
|
||||
cipherHandler = new DefaultCipherHandler(SCMContext.getContext(),
|
||||
keyGenerator);
|
||||
}
|
||||
}
|
||||
|
||||
public KeyGenerator getKeyGenerator()
|
||||
{
|
||||
return keyGenerator;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static CipherUtil getInstance()
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
synchronized (CipherUtil.class)
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = new CipherUtil();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
@@ -53,13 +116,8 @@ public class CipherSingleton
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String decode(String value)
|
||||
public String decode(String value)
|
||||
{
|
||||
if (cipherHandler == null)
|
||||
{
|
||||
throw new CipherException("CipherSingleton is not initialized");
|
||||
}
|
||||
|
||||
return cipherHandler.decode(value);
|
||||
}
|
||||
|
||||
@@ -71,24 +129,26 @@ public class CipherSingleton
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String encode(String value)
|
||||
public String encode(String value)
|
||||
{
|
||||
if (cipherHandler == null)
|
||||
{
|
||||
throw new CipherException("CipherSingleton is not initialized");
|
||||
}
|
||||
|
||||
return cipherHandler.encode(value);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param handler
|
||||
* @return
|
||||
*/
|
||||
public static void init(CipherHandler handler)
|
||||
public CipherHandler getCipherHandler()
|
||||
{
|
||||
cipherHandler = handler;
|
||||
return cipherHandler;
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private CipherHandler cipherHandler;
|
||||
}
|
||||
@@ -35,9 +35,6 @@ package sonia.scm.security;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -69,8 +66,8 @@ import javax.crypto.spec.SecretKeySpec;
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
* @since 1.7
|
||||
*/
|
||||
@Singleton
|
||||
public class DefaultCipherHandler implements CipherHandler
|
||||
{
|
||||
|
||||
@@ -117,18 +114,17 @@ public class DefaultCipherHandler implements CipherHandler
|
||||
* @param keyGenerator
|
||||
*
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
@Inject
|
||||
public DefaultCipherHandler(SCMContextProvider context,
|
||||
KeyGenerator keyGenerator)
|
||||
throws IOException
|
||||
{
|
||||
File configDirectory = new File(context.getBaseDirectory(), "config");
|
||||
|
||||
IOUtil.mkdirs(configDirectory);
|
||||
cipherKeyFile = new File(configDirectory, CIPHERKEY_FILENAME);
|
||||
|
||||
try
|
||||
{
|
||||
if (cipherKeyFile.exists())
|
||||
{
|
||||
loadKey();
|
||||
@@ -139,6 +135,11 @@ public class DefaultCipherHandler implements CipherHandler
|
||||
storeKey();
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
throw new CipherException("could not create CipherHandler", ex);
|
||||
}
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
@@ -36,6 +36,7 @@ package sonia.scm.security;
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.util.UUID;
|
||||
import sonia.scm.security.KeyGenerator;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -35,7 +35,7 @@ package sonia.scm.xml;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.security.CipherSingleton;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
@@ -62,7 +62,7 @@ public class XmlCipherStringAdapter extends XmlAdapter<String, String>
|
||||
@Override
|
||||
public String marshal(String v) throws Exception
|
||||
{
|
||||
return CipherSingleton.encode(v);
|
||||
return CipherUtil.getInstance().encode(v);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,6 +78,6 @@ public class XmlCipherStringAdapter extends XmlAdapter<String, String>
|
||||
@Override
|
||||
public String unmarshal(String v) throws Exception
|
||||
{
|
||||
return CipherSingleton.decode(v);
|
||||
return CipherUtil.getInstance().decode(v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import sonia.scm.security.CipherHandler;
|
||||
import sonia.scm.security.CipherSingleton;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -146,10 +146,6 @@ public class ScmContextListener extends GuiceServletContextListener
|
||||
|
||||
SCMContextProvider context = SCMContext.getContext();
|
||||
|
||||
// init CipherSingleton
|
||||
CipherHandler ch = injector.getInstance(CipherHandler.class);
|
||||
CipherSingleton.init(ch);
|
||||
|
||||
// init StoreFactory
|
||||
injector.getInstance(StoreFactory.class).init(context);
|
||||
|
||||
|
||||
@@ -65,12 +65,11 @@ import sonia.scm.repository.RepositoryBrowserUtil;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
import sonia.scm.repository.xml.XmlRepositoryManager;
|
||||
import sonia.scm.security.CipherHandler;
|
||||
import sonia.scm.security.DefaultCipherHandler;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
import sonia.scm.security.EncryptionHandler;
|
||||
import sonia.scm.security.KeyGenerator;
|
||||
import sonia.scm.security.MessageDigestEncryptionHandler;
|
||||
import sonia.scm.security.SecurityContext;
|
||||
import sonia.scm.security.UUIDKeyGenerator;
|
||||
import sonia.scm.store.JAXBStoreFactory;
|
||||
import sonia.scm.store.StoreFactory;
|
||||
import sonia.scm.template.FreemarkerTemplateHandler;
|
||||
@@ -196,14 +195,15 @@ public class ScmServletModule extends ServletModule
|
||||
bind(SCMContextProvider.class).toInstance(context);
|
||||
|
||||
ScmConfiguration config = getScmConfiguration(context);
|
||||
CipherUtil cu = CipherUtil.getInstance();
|
||||
|
||||
bind(StoreFactory.class).to(JAXBStoreFactory.class);
|
||||
bind(ScmConfiguration.class).toInstance(config);
|
||||
bind(PluginLoader.class).toInstance(pluginLoader);
|
||||
bind(PluginManager.class).to(DefaultPluginManager.class);
|
||||
bind(KeyGenerator.class).to(UUIDKeyGenerator.class);
|
||||
bind(KeyGenerator.class).toInstance(cu.getKeyGenerator());
|
||||
bind(CipherHandler.class).toInstance(cu.getCipherHandler());
|
||||
bind(EncryptionHandler.class).to(MessageDigestEncryptionHandler.class);
|
||||
bind(CipherHandler.class).to(DefaultCipherHandler.class);
|
||||
bindExtProcessor.bindExtensions(binder());
|
||||
|
||||
Class<? extends FileSystem> fileSystem =
|
||||
|
||||
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
|
||||
import sonia.scm.ConfigurationException;
|
||||
import sonia.scm.SCMContext;
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
@@ -131,6 +132,13 @@ public class ScmConfigurationUtil
|
||||
Unmarshaller unmarshaller = context.createUnmarshaller();
|
||||
ScmConfiguration loadedConfig =
|
||||
(ScmConfiguration) unmarshaller.unmarshal(file);
|
||||
String password = loadedConfig.getProxyPassword();
|
||||
|
||||
if (Util.isNotEmpty(password))
|
||||
{
|
||||
password = CipherUtil.getInstance().decode(password);
|
||||
loadedConfig.setProxyPassword(password);
|
||||
}
|
||||
|
||||
if (loadedConfig != null)
|
||||
{
|
||||
@@ -168,10 +176,22 @@ public class ScmConfigurationUtil
|
||||
IOUtil.mkdirs(file.getParentFile());
|
||||
}
|
||||
|
||||
ScmConfiguration config = new ScmConfiguration();
|
||||
|
||||
config.load(configuration);
|
||||
|
||||
String password = config.getProxyPassword();
|
||||
|
||||
if (Util.isNotEmpty(password))
|
||||
{
|
||||
password = CipherUtil.getInstance().encode(password);
|
||||
config.setProxyPassword(password);
|
||||
}
|
||||
|
||||
Marshaller marshaller = context.createMarshaller();
|
||||
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||
marshaller.marshal(configuration, file);
|
||||
marshaller.marshal(config, file);
|
||||
configuration.fireChangeEvent();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
Reference in New Issue
Block a user