package io.cattle.platform.framework.encryption.handler.impl;
import io.cattle.platform.framework.encryption.EncryptionConstants;
import io.github.ibuildthecloud.gdapi.model.Transformer;
import io.github.ibuildthecloud.gdapi.util.TransformationService;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
public class TransformationServiceImpl implements TransformationService {
Map<String, Transformer> transformers;
@Override
public String transform(String value, String method) {
String transformer;
if (StringUtils.isBlank(value)){
return "";
}
if (method.equalsIgnoreCase(EncryptionConstants.ENCRYPT)){
transformer = EncryptionConstants.ENCRYPTER_NAME.get();
} else if (method.equalsIgnoreCase(EncryptionConstants.HASH)) {
transformer = EncryptionConstants.HASHER_NAME.get();
} else {
throw new IllegalArgumentException(method);
}
transformerExists(transformer);
return transformer + EncryptionConstants.ENCRYPTER_NAME_DELM + getTransformers().get(transformer).transform(value);
}
protected String untransformInternal(String transformerName, String value) {
transformerExists(transformerName);
return getTransformers().get(transformerName).untransform(value);
}
protected boolean compareInternal(String plainText, String encrypted, String transformerName) {
transformerExists(transformerName);
return getTransformers().get(transformerName).compare(plainText, encrypted);
}
@Override
public String untransform(String value) {
if (StringUtils.isBlank(value)){
return "";
}
String[] valueSplit = value.split(EncryptionConstants.ENCRYPTER_NAME_DELM, 2);
if (valueSplit.length != 2){
return value;
}
return untransformInternal(valueSplit[0], valueSplit[1]);
}
@Override
public void setTransformers(Map<String, Transformer> transformers) {
this.transformers = transformers;
}
@Override
public Map<String, Transformer> getTransformers() {
return transformers;
}
@Override
public boolean compare(String plainText, String encrypted) {
String[] valueSplit = encrypted.split("\\" + EncryptionConstants.ENCRYPTER_NAME_DELM, 2);
if (valueSplit.length != 2){
return StringUtils.equals(plainText, encrypted);
}
return compareInternal(plainText, valueSplit[1], valueSplit[0]);
}
void transformerExists(String transformerName) {
if (!getTransformers().containsKey(transformerName)){
throw new IllegalArgumentException("Transformer: " + transformerName + " does not exist.");
}
}
}