CryptFactory.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.utils.crypt;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.utils.Utilities;
import org.openspcoop2.utils.UtilsException;
import org.slf4j.Logger;
/**
* CryptFactory
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class CryptFactory {
public static ICrypt getCrypt(Logger log, CryptConfig config) throws UtilsException {
if(config.getCryptType()!=null) {
return getCrypt(log, config.getCryptType(), config);
}
else {
String className = config.getCryptCustomType();
if(StringUtils.isEmpty(className)) {
throw new UtilsException("Property '"+CryptConfig.CRYPT_TYPE+"' or '"+CryptConfig.CRYPT_CUSTOM_TYPE+"' are required");
}
return getCrypt(log, className, config);
}
}
public static ICrypt getCrypt(Logger log, CryptType type, CryptConfig config) {
return _getCrypt(log, type, config);
}
public static ICrypt getCrypt(CryptType type, CryptConfig config) {
return _getCrypt(null, type, config);
}
public static ICrypt getCrypt(Logger log, CryptType type) {
return _getCrypt(log, type, null);
}
public static ICrypt getCrypt(CryptType type) {
return _getCrypt(null, type, null);
}
private static ICrypt _getCrypt(Logger log, CryptType type, CryptConfig config) {
switch (type) {
case LIBC_CRYPT_MD5:
return getCodecCrypt(log, CodecType.LIBC_CRYPT_MD5, config);
case LIBC_CRYPT_MD5_APACHE:
return getCodecCrypt(log, CodecType.LIBC_CRYPT_MD5_APACHE, config);
case SHA2_BASED_UNIX_CRYPT_SHA256:
return getCodecCrypt(log, CodecType.SHA2_BASED_UNIX_CRYPT_SHA256, config);
case SHA2_BASED_UNIX_CRYPT_SHA512:
return getCodecCrypt(log, CodecType.SHA2_BASED_UNIX_CRYPT_SHA512, config);
case DES_UNIX_CRYPT:
return getCodecCrypt(log, CodecType.DES_UNIX_CRYPT, config);
case RFC2307_MD5:
return getJasyptCrypt(log, JasyptType.RFC2307_MD5);
case RFC2307_SMD5:
return getJasyptCrypt(log, JasyptType.RFC2307_SMD5);
case RFC2307_SHA:
return getJasyptCrypt(log, JasyptType.RFC2307_SHA);
case RFC2307_SSHA:
return getJasyptCrypt(log, JasyptType.RFC2307_SSHA);
case JASYPT_BASIC_PASSWORD:
return getJasyptCrypt(log, JasyptType.JASYPT_BASIC_PASSWORD);
case JASYPT_STRONG_PASSWORD:
return getJasyptCrypt(log, JasyptType.JASYPT_STRONG_PASSWORD);
case JASYPT_CUSTOM_PASSWORD:
return getJasyptCrypt(log, config);
case PBE_KEY_SPEC:{
PBEKeySpecCrypt pbe = new PBEKeySpecCrypt();
pbe.init(log, config);
return pbe;
}
case B_CRYPT:
return getSpringCrypt(log, SpringType.B_CRYPT);
case S_CRYPT:
return getSpringCrypt(log, SpringType.S_CRYPT);
case PLAIN:{
PlainCrypt pbe = new PlainCrypt();
pbe.init(log, config);
return pbe;
}
}
return null;
}
public static ICrypt getCrypt(Logger log, String className, CryptConfig config) throws UtilsException {
return _getCrypt(log, className, config);
}
public static ICrypt getCrypt( String className, CryptConfig config) throws UtilsException {
return _getCrypt(null, className, config);
}
public static ICrypt getCrypt(Logger log, String className) throws UtilsException {
return _getCrypt(log, className, null);
}
public static ICrypt getCrypt(String className) throws UtilsException {
return _getCrypt(null, className, null);
}
@SuppressWarnings("unchecked")
private static ICrypt _getCrypt(Logger log, String className, CryptConfig config) throws UtilsException {
Class<ICrypt> c = null;
try {
c = (Class<ICrypt>) Class.forName(className);
}catch(Throwable e) {
throw new UtilsException(e.getMessage(), e);
}
return _getCrypt(log, c, config);
}
public static ICrypt getCrypt(Logger log, Class<ICrypt> c, CryptConfig config) throws UtilsException {
return _getCrypt(log, c, config);
}
public static ICrypt getCrypt( Class<ICrypt> c, CryptConfig config) throws UtilsException {
return _getCrypt(null, c, config);
}
public static ICrypt getCrypt(Logger log, Class<ICrypt> c) throws UtilsException {
return _getCrypt(log, c, null);
}
public static ICrypt getCrypt(Class<ICrypt> c) throws UtilsException {
return _getCrypt(null, c, null);
}
private static ICrypt _getCrypt(Logger log, Class<ICrypt> c, CryptConfig config) throws UtilsException {
try {
ICrypt crypt = Utilities.newInstance(c);
crypt.init(log, config);
return crypt;
}catch(Exception e) {
throw new UtilsException(e.getMessage(), e);
}
}
// Sottoclassi specifiche
@SuppressWarnings("deprecation")
public static OldMD5Crypt getOldMD5Crypt(Logger log) {
OldMD5Crypt old = new OldMD5Crypt();
old.init(log, null);
return old;
}
@SuppressWarnings("deprecation")
public static OldMD5Crypt getOldMD5Crypt() {
return getOldMD5Crypt(null);
}
public static CodecCrypt getCodecCrypt(Logger log, CodecType type, CryptConfig config) {
CodecCrypt c = new CodecCrypt(type);
c.init(log, config);
return c;
}
public static CodecCrypt getCodecCrypt(CodecType type, CryptConfig config) {
return getCodecCrypt(null, type, config);
}
public static CodecCrypt getCodecCrypt(Logger log, CodecType type) {
return getCodecCrypt(log, type, null);
}
public static CodecCrypt getCodecCrypt(CodecType type) {
return getCodecCrypt(null, type, null);
}
public static JasyptCrypt getJasyptCrypt(Logger log, CryptConfig config) {
JasyptCrypt j = new JasyptCrypt();
j.init(log, config);
return j;
}
public static JasyptCrypt getJasyptCrypt(CryptConfig config) {
return getJasyptCrypt(null, config);
}
public static JasyptCrypt getJasyptCrypt(Logger log, JasyptType type) {
JasyptCrypt j = new JasyptCrypt(type);
j.init(log, null);
return j;
}
public static JasyptCrypt getJasyptCrypt(JasyptType type) {
return getJasyptCrypt(null, type);
}
public static SpringCrypt getSpringCrypt(Logger log, SpringType type) {
SpringCrypt s = new SpringCrypt(type);
s.init(log, null);
return s;
}
public static SpringCrypt getSpringCrypt(SpringType type) {
return getSpringCrypt(null, type);
}
}