diff options
Diffstat (limited to 'src/main')
6 files changed, 120 insertions, 188 deletions
diff --git a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java index 14421da5..372f8e81 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java +++ b/src/main/java/org/onap/clamp/clds/client/req/sdc/SdcCatalogServices.java @@ -93,13 +93,12 @@ public class SdcCatalogServices { private static final String RESOURCE_URL_PREFIX = "resources";
@Autowired
private RefProp refProp;
- private CryptoUtils cryptoUtils = new CryptoUtils();
// returns SDC id and password as a HTTP Basic Auth string (for example: Basic dGVzdDoxMjM0NTY=)
private String getSdcBasicAuth() throws GeneralSecurityException, DecoderException {
String sdcId = refProp.getStringValue("sdc.serviceUsername");
String sdcPw = refProp.getStringValue("sdc.servicePassword");
- String password = cryptoUtils.decrypt(sdcPw);
+ String password = CryptoUtils.decrypt(sdcPw);
String idPw = Base64.getEncoder().encodeToString((sdcId + ":" + password).getBytes(StandardCharsets.UTF_8));
return "Basic " + idPw;
}
diff --git a/src/main/java/org/onap/clamp/clds/config/EncodedPasswordBasicDataSource.java b/src/main/java/org/onap/clamp/clds/config/EncodedPasswordBasicDataSource.java index 453689be..9914ea73 100644 --- a/src/main/java/org/onap/clamp/clds/config/EncodedPasswordBasicDataSource.java +++ b/src/main/java/org/onap/clamp/clds/config/EncodedPasswordBasicDataSource.java @@ -41,14 +41,6 @@ public class EncodedPasswordBasicDataSource extends BasicDataSource { protected static final EELFLogger logger = EELFManager.getInstance() .getLogger(EncodedPasswordBasicDataSource.class); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - private CryptoUtils cryptoUtils = new CryptoUtils(); - - /** - * The default constructor calling the parent one. - */ - public EncodedPasswordBasicDataSource() { - super(); - } /** * This method is used automatically by Spring to decode the password. @@ -56,7 +48,7 @@ public class EncodedPasswordBasicDataSource extends BasicDataSource { @Override public synchronized void setPassword(String encodedPassword) { try { - this.password = cryptoUtils.decrypt(encodedPassword); + this.password = CryptoUtils.decrypt(encodedPassword); } catch (GeneralSecurityException e) { logger.error("Unable to decrypt the DB password", e); } catch (DecoderException e) { diff --git a/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java b/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java index 9ced0199..a0685228 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java @@ -26,7 +26,6 @@ package org.onap.clamp.clds.model.prop; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.JsonNode; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -37,29 +36,25 @@ import java.util.List; * ...) */ public abstract class AbstractModelElement { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractModelElement.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - private final String type; - private final ModelBpmn modelBpmn; - private final String id; - protected String topicPublishes; - protected final JsonNode modelElementJsonNode; - private boolean isFound; + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractModelElement.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + + private final String type; + private final ModelBpmn modelBpmn; + private final String id; + protected String topicPublishes; + protected final JsonNode modelElementJsonNode; + private boolean isFound; - private final ModelProperties modelProp; + private final ModelProperties modelProp; - private static final String LOG_ELEMENT = "Value '"; - private static final String LOG_NOT_FOUND = "' for key 'name' not found in JSON"; + private static final String LOG_ELEMENT_NOT_FOUND = "Value '{}' for key 'name' not found in JSON"; + private static final String LOG_ELEMENT_NOT_FOUND_IN_JSON = "Value '{}' for key 'name' not found in JSON {}"; /** * Perform base parsing of properties for a ModelElement (such as, * VesCollector, Policy and Tca) - * - * @param type - * @param modelProp - * @param modelBpmn - * @param modelJson */ protected AbstractModelElement(String type, ModelProperties modelProp, ModelBpmn modelBpmn, JsonNode modelJson) { this.type = type; @@ -97,10 +92,6 @@ public abstract class AbstractModelElement { /** * Return the value field of the json node element that has a name field * equals to the given name. - * - * @param nodeIn - * @param name - * @return */ public static String getValueByName(JsonNode nodeIn, String name) { String value = null; @@ -119,9 +110,9 @@ public abstract class AbstractModelElement { } } if (value == null || value.length() == 0) { - logger.warn(LOG_ELEMENT + name + LOG_NOT_FOUND); + logger.warn(LOG_ELEMENT_NOT_FOUND, name); } else { - logger.debug(LOG_ELEMENT + name + LOG_NOT_FOUND + nodeIn.toString()); + logger.debug(LOG_ELEMENT_NOT_FOUND_IN_JSON, name, nodeIn.toString()); } return value; } @@ -129,10 +120,6 @@ public abstract class AbstractModelElement { /** * Return the value field of the json node element that has a name field * that equals the given name. - * - * @param nodeIn - * @param name - * @return */ public static String getNodeValueByName(JsonNode nodeIn, String name) { String value = null; @@ -140,9 +127,9 @@ public abstract class AbstractModelElement { value = nodeIn.path(name).asText(); } if (value == null || value.length() == 0) { - logger.warn(LOG_ELEMENT + name + LOG_NOT_FOUND); + logger.warn(LOG_ELEMENT_NOT_FOUND, name); } else { - logger.debug(LOG_ELEMENT + name + LOG_NOT_FOUND + nodeIn.toString()); + logger.debug(LOG_ELEMENT_NOT_FOUND_IN_JSON, name, nodeIn.toString()); } return value; } @@ -150,17 +137,11 @@ public abstract class AbstractModelElement { /** * Return the value field of the json node element that has a name field * that equals the given name. - * - * @param nodeIn - * @param name - * @return */ public static List<String> getNodeValuesByName(JsonNode nodeIn, String name) { List<String> values = new ArrayList<>(); if (nodeIn != null) { - Iterator<JsonNode> i = nodeIn.iterator(); - while (i.hasNext()) { - JsonNode node = i.next(); + for (JsonNode node : nodeIn) { if (node.path("name").asText().equals(name)) { JsonNode vnode = node.path("value"); if (vnode.isArray()) { @@ -179,10 +160,6 @@ public abstract class AbstractModelElement { /** * Return the int value field of the json node element that has a name field * equals to the given name. - * - * @param nodeIn - * @param name - * @return */ public static Integer getIntValueByName(JsonNode nodeIn, String name) { String value = getValueByName(nodeIn, name); @@ -192,35 +169,26 @@ public abstract class AbstractModelElement { /** * Return an array of values for the field of the json node element that has * a name field equals to the given name. - * - * @param nodeIn - * @param name - * @return */ public static List<String> getValuesByName(JsonNode nodeIn, String name) { List<String> values = null; if (nodeIn != null) { - Iterator<JsonNode> i = nodeIn.iterator(); - while (i.hasNext()) { - JsonNode node = i.next(); + for (JsonNode node : nodeIn) { if (node.path("name").asText().equals(name)) { values = getValuesList(node); } } } if (values == null || values.isEmpty()) { - logger.warn(LOG_ELEMENT + name + LOG_NOT_FOUND); + logger.warn(LOG_ELEMENT_NOT_FOUND, name); } else { - logger.debug(LOG_ELEMENT + name + LOG_NOT_FOUND + nodeIn.toString()); + logger.debug(LOG_ELEMENT_NOT_FOUND_IN_JSON, name, nodeIn.toString()); } return values; } /** * Return an array of String values. - * - * @param nodeIn - * @return */ public static List<String> getValuesList(JsonNode nodeIn) { ArrayList<String> al = new ArrayList<>(); @@ -237,9 +205,6 @@ public abstract class AbstractModelElement { /** * Return the value field of the json node element that has a name field * equals to the given name. - * - * @param name - * @return */ public String getValueByName(String name) { return getValueByName(modelElementJsonNode, name); @@ -248,9 +213,6 @@ public abstract class AbstractModelElement { /** * Return the int value field of the json node element that has a name field * equals to the given name. - * - * @param name - * @return */ public Integer getIntValueByName(String name) { return getIntValueByName(modelElementJsonNode, name); @@ -259,9 +221,6 @@ public abstract class AbstractModelElement { /** * Return an array of values for the field of the json node element that has * a name field equals to the given name. - * - * @param name - * @return */ public List<String> getValuesByName(String name) { return getValuesByName(modelElementJsonNode, name); diff --git a/src/main/java/org/onap/clamp/clds/util/CryptoUtils.java b/src/main/java/org/onap/clamp/clds/util/CryptoUtils.java index 2c91f009..42439961 100644 --- a/src/main/java/org/onap/clamp/clds/util/CryptoUtils.java +++ b/src/main/java/org/onap/clamp/clds/util/CryptoUtils.java @@ -25,17 +25,15 @@ package org.onap.clamp.clds.util; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; - +import com.google.common.base.Charsets; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.security.SecureRandom; import java.util.Properties; - import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; - import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.ArrayUtils; @@ -46,9 +44,6 @@ import org.apache.commons.lang3.ArrayUtils; */ public final class CryptoUtils { - /** - * Used to log. - */ private static final EELFLogger logger = EELFManager.getInstance().getLogger(CryptoUtils.class); // Openssl commands: // Encrypt: echo -n "123456" | openssl aes-128-cbc -e -K <Private Hex key> @@ -66,85 +61,87 @@ public final class CryptoUtils { /** * Detailed definition of encryption algorithm. */ - private static final String ALGORYTHM_DETAILS = ALGORITHM + "/CBC/PKCS5PADDING"; - /** - * Block SIze in bits. - */ - private static final int BLOCK_SIZE = 128; + private static final String ALGORITHM_DETAILS = ALGORITHM + "/CBC/PKCS5PADDING"; + private static final int BLOCK_SIZE_IN_BITS = 128; + private static final int BLOCK_SIZE_IN_BYTES = BLOCK_SIZE_IN_BITS / 8; /** * Key to read in the key.properties file. */ private static final String KEY_PARAM = "org.onap.clamp.encryption.aes.key"; + private static final String PROPERTIES_FILE_NAME = "clds/key.properties"; /** * The SecretKeySpec created from the Base 64 String key. */ - private static SecretKeySpec secretKeySpec = null; + private static final SecretKeySpec SECRET_KEY_SPEC = readSecretKeySpec(PROPERTIES_FILE_NAME); - // Static init - static { - Properties props = new Properties(); - try { - props.load(ResourceFileUtil.getResourceAsStream("clds/key.properties")); - secretKeySpec = getSecretKeySpec(props.getProperty(KEY_PARAM)); - } catch (IOException | DecoderException e) { - logger.error("Exception occurred during the key reading", e); - } + /** + * Private constructor to avoid creating instances of util class. + */ + private CryptoUtils() { } /** * Encrypt a value based on the Clamp Encryption Key. - * - * @param value - * The value to encrypt + * + * @param value The value to encrypt * @return The encrypted string - * @throws GeneralSecurityException - * In case of issue with the encryption - * @throws UnsupportedEncodingException - * In case of issue with the charset conversion + * @throws GeneralSecurityException In case of issue with the encryption + * @throws UnsupportedEncodingException In case of issue with the charset conversion */ - public String encrypt(String value) throws GeneralSecurityException, UnsupportedEncodingException { - Cipher cipher = Cipher.getInstance(CryptoUtils.ALGORYTHM_DETAILS, "SunJCE"); + public static String encrypt(String value) throws GeneralSecurityException, UnsupportedEncodingException { + Cipher cipher = Cipher.getInstance(ALGORITHM_DETAILS, "SunJCE"); SecureRandom randomNumber = SecureRandom.getInstance("SHA1PRNG"); - byte[] iv = new byte[BLOCK_SIZE / 8]; + byte[] iv = new byte[BLOCK_SIZE_IN_BYTES]; randomNumber.nextBytes(iv); IvParameterSpec ivspec = new IvParameterSpec(iv); - cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivspec); - return Hex.encodeHexString(ArrayUtils.addAll(iv, cipher.doFinal(value.getBytes("UTF-8")))); + cipher.init(Cipher.ENCRYPT_MODE, SECRET_KEY_SPEC, ivspec); + return Hex.encodeHexString(ArrayUtils.addAll(iv, cipher.doFinal(value.getBytes(Charsets.UTF_8)))); } /** * Decrypt a value based on the Clamp Encryption Key. - * - * @param message - * The encrypted string that must be decrypted using the Clamp - * Encryption Key + * + * @param message The encrypted string that must be decrypted using the Clamp Encryption Key * @return The String decrypted - * @throws GeneralSecurityException - * In case of issue with the encryption - * @throws DecoderException - * In case of issue to decode the HexString + * @throws GeneralSecurityException In case of issue with the encryption + * @throws DecoderException In case of issue to decode the HexString */ - public String decrypt(String message) throws GeneralSecurityException, DecoderException { + public static String decrypt(String message) throws GeneralSecurityException, DecoderException { byte[] encryptedMessage = Hex.decodeHex(message.toCharArray()); - Cipher cipher = Cipher.getInstance(CryptoUtils.ALGORYTHM_DETAILS, "SunJCE"); - IvParameterSpec ivspec = new IvParameterSpec(ArrayUtils.subarray(encryptedMessage, 0, BLOCK_SIZE / 8)); - byte[] realData = ArrayUtils.subarray(encryptedMessage, BLOCK_SIZE / 8, encryptedMessage.length); - cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivspec); + Cipher cipher = Cipher.getInstance(ALGORITHM_DETAILS, "SunJCE"); + IvParameterSpec ivspec = new IvParameterSpec(ArrayUtils.subarray(encryptedMessage, 0, BLOCK_SIZE_IN_BYTES)); + byte[] realData = ArrayUtils.subarray(encryptedMessage, BLOCK_SIZE_IN_BYTES, encryptedMessage.length); + cipher.init(Cipher.DECRYPT_MODE, SECRET_KEY_SPEC, ivspec); byte[] decrypted = cipher.doFinal(realData); return new String(decrypted); } /** * Method used to generate the SecretKeySpec from a Base64 String. - * - * @param keyString - * The key as a string in Base 64 + * + * @param keyString The key as a string in Base 64 * @return The SecretKeySpec created - * @throws DecoderException - * In case of issues with the decoding of Base64 + * @throws DecoderException In case of issues with the decoding of Base64 */ private static SecretKeySpec getSecretKeySpec(String keyString) throws DecoderException { byte[] key = Hex.decodeHex(keyString.toCharArray()); - return new SecretKeySpec(key, CryptoUtils.ALGORITHM); + return new SecretKeySpec(key, ALGORITHM); + } + + /** + * Reads SecretKeySpec from file specified by propertiesFileName + * + * @param propertiesFileName File name with properties + * @return SecretKeySpec secret key spec read from propertiesFileName + */ + private static SecretKeySpec readSecretKeySpec(String propertiesFileName) { + Properties props = new Properties(); + try { + props.load(ResourceFileUtil.getResourceAsStream(propertiesFileName)); + return getSecretKeySpec(props.getProperty(KEY_PARAM)); + } catch (IOException | DecoderException e) { + logger.error("Exception occurred during the key reading", e); + return null; + } } } diff --git a/src/main/java/org/onap/clamp/clds/util/LoggingUtils.java b/src/main/java/org/onap/clamp/clds/util/LoggingUtils.java index b501b2df..bca41341 100644 --- a/src/main/java/org/onap/clamp/clds/util/LoggingUtils.java +++ b/src/main/java/org/onap/clamp/clds/util/LoggingUtils.java @@ -28,23 +28,28 @@ import java.text.SimpleDateFormat; import java.util.Date;
import java.util.TimeZone;
import java.util.UUID;
-
+import javax.validation.constraints.NotNull;
import org.apache.log4j.MDC;
/**
* This class handles the special info that appear in the log, like RequestID,
* time context, ...
- *
*/
-public class LoggingUtils {
+public final class LoggingUtils {
+
+ private static final DateFormat DATE_FORMAT = createDateFormat();
+
+ /**
+ * Private constructor to avoid creating instances of util class.
+ */
+ private LoggingUtils() {
+ }
/**
* Set request related logging variables in thread local data via MDC
- *
- * @param service
- * Service Name of API (ex. "PUT template")
- * @param partner
- * Partner name (client or user invoking API)
+ *
+ * @param service Service Name of API (ex. "PUT template")
+ * @param partner Partner name (client or user invoking API)
*/
public static void setRequestContext(String service, String partner) {
MDC.put("RequestId", UUID.randomUUID().toString());
@@ -54,37 +59,22 @@ public class LoggingUtils { /**
* Set time related logging variables in thread local data via MDC.
- *
- * @param beginTimeStamp
- * Start time
- * @param endTimeStamp
- * End time
+ *
+ * @param beginTimeStamp Start time
+ * @param endTimeStamp End time
*/
- public static void setTimeContext(Date beginTimeStamp, Date endTimeStamp) {
- String beginTime = "";
- String endTime = "";
- String elapsedTime = "";
-
- if (beginTimeStamp != null && endTimeStamp != null) {
- elapsedTime = String.valueOf(endTimeStamp.getTime() - beginTimeStamp.getTime());
- beginTime = generateTimestampStr(beginTimeStamp);
- endTime = generateTimestampStr(endTimeStamp);
- }
-
- MDC.put("BeginTimestamp", beginTime);
- MDC.put("EndTimestamp", endTime);
- MDC.put("ElapsedTime", elapsedTime);
+ public static void setTimeContext(@NotNull Date beginTimeStamp, @NotNull Date endTimeStamp) {
+ MDC.put("BeginTimestamp", generateTimestampStr(beginTimeStamp));
+ MDC.put("EndTimestamp", generateTimestampStr(endTimeStamp));
+ MDC.put("ElapsedTime", String.valueOf(endTimeStamp.getTime() - beginTimeStamp.getTime()));
}
/**
* Set response related logging variables in thread local data via MDC.
- *
- * @param code
- * Response code ("0" indicates success)
- * @param description
- * Response description
- * @param className
- * class name of invoking class
+ *
+ * @param code Response code ("0" indicates success)
+ * @param description Response description
+ * @param className class name of invoking class
*/
public static void setResponseContext(String code, String description, String className) {
MDC.put("ResponseCode", code);
@@ -95,11 +85,9 @@ public class LoggingUtils { /**
* Set target related logging variables in thread local data via MDC
- *
- * @param targetEntity
- * Target entity (an external/sub component, for ex. "sdc")
- * @param targetServiceName
- * Target service name (name of API invoked on target)
+ *
+ * @param targetEntity Target entity (an external/sub component, for ex. "sdc")
+ * @param targetServiceName Target service name (name of API invoked on target)
*/
public static void setTargetContext(String targetEntity, String targetServiceName) {
MDC.put("TargetEntity", targetEntity != null ? targetEntity : "");
@@ -108,11 +96,9 @@ public class LoggingUtils { /**
* Set error related logging variables in thread local data via MDC.
- *
- * @param code
- * Error code
- * @param description
- * Error description
+ *
+ * @param code Error code
+ * @param description Error description
*/
public static void setErrorContext(String code, String description) {
MDC.put("ErrorCode", code);
@@ -120,28 +106,31 @@ public class LoggingUtils { }
private static String generateTimestampStr(Date timeStamp) {
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
- TimeZone tz = TimeZone.getTimeZone("UTC");
- df.setTimeZone(tz);
- return df.format(timeStamp);
+ return DATE_FORMAT.format(timeStamp);
}
/**
* Get a previously stored RequestID for the thread local data via MDC. If
* one was not previously stored, generate one, store it, and return that
* one.
- *
+ *
* @return A string with the request ID
*/
public static String getRequestId() {
- String reqid;
+ String requestId;
- reqid = (String) MDC.get("RequestID");
- if (reqid == null || reqid.isEmpty()) {
- reqid = UUID.randomUUID().toString();
- MDC.put("RequestId", reqid);
+ requestId = (String) MDC.get("RequestID");
+ if (requestId == null || requestId.isEmpty()) {
+ requestId = UUID.randomUUID().toString();
+ MDC.put("RequestId", requestId);
}
- return reqid;
+ return requestId;
+ }
+
+ private static DateFormat createDateFormat() {
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ return dateFormat;
}
}
diff --git a/src/main/java/org/onap/clamp/clds/util/ResourceFileUtil.java b/src/main/java/org/onap/clamp/clds/util/ResourceFileUtil.java index 0aaa09ac..57705d8f 100644 --- a/src/main/java/org/onap/clamp/clds/util/ResourceFileUtil.java +++ b/src/main/java/org/onap/clamp/clds/util/ResourceFileUtil.java @@ -25,23 +25,22 @@ package org.onap.clamp.clds.util; import java.io.IOException; import java.io.InputStream; +import java.util.Scanner; /** * Utility methods supporting transforms. */ -public class ResourceFileUtil { +public final class ResourceFileUtil { /** - * Disable the ResourceFileUtil constructor. + * Private constructor to avoid creating instances of util class. */ private ResourceFileUtil() { - } /** * Return resource as a Stream. * - * @param name * @return resource - resource as stream */ public static InputStream getResourceAsStream(String name) { @@ -54,14 +53,11 @@ public class ResourceFileUtil { /** * Return resource as a Stream. - * - * @param name - * @throws IOException */ public static String getResourceAsString(String name) throws IOException { InputStream is = getResourceAsStream(name); - java.util.Scanner scanner = new java.util.Scanner(is); - java.util.Scanner delimitedScanner = scanner.useDelimiter("\\A"); + Scanner scanner = new Scanner(is); + Scanner delimitedScanner = scanner.useDelimiter("\\A"); String text = delimitedScanner.hasNext() ? delimitedScanner.next() : ""; delimitedScanner.close(); scanner.close(); |