diff options
Diffstat (limited to 'common/src/main/java/org/onap/so/utils')
5 files changed, 443 insertions, 0 deletions
diff --git a/common/src/main/java/org/onap/so/utils/CheckResults.java b/common/src/main/java/org/onap/so/utils/CheckResults.java new file mode 100644 index 0000000000..4f6089d0e3 --- /dev/null +++ b/common/src/main/java/org/onap/so/utils/CheckResults.java @@ -0,0 +1,118 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.utils; + + + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "checkresults") +public class CheckResults { + + @XmlElement(name = "checkresult") + private List <CheckResult> results; + + public CheckResults () { + results = new ArrayList<>(); + } + + public List <CheckResult> getResults () { + return results; + } + + public void addHostCheckResult (String hostname, int state, String output) { + CheckResult newResult = new CheckResult (); + newResult.setType ("host"); + newResult.setHostname (hostname); + newResult.setState (state); + newResult.setOutput (output); + results.add (newResult); + } + + public void addServiceCheckResult (String hostname, String servicename, int state, String output) { + CheckResult newResult = new CheckResult (); + newResult.setType ("service"); + newResult.setHostname (hostname); + newResult.setServicename (servicename); + newResult.setState (state); + newResult.setOutput (output); + results.add (newResult); + } + + public static class CheckResult { + + private String type; + private String hostname; + private String servicename; + private int state; + private String output; + + @XmlAttribute(required = true) + public String getType () { + return type; + } + + public void setType (String type) { + this.type = type; + } + + @XmlElement(required = true) + public String getHostname () { + return hostname; + } + + public void setHostname (String hostname) { + this.hostname = hostname; + } + + @XmlElement(required = false) + public String getServicename () { + return servicename; + } + + public void setServicename (String servicename) { + this.servicename = servicename; + } + + @XmlElement(required = true) + public int getState () { + return state; + } + + public void setState (int state) { + this.state = state; + } + + @XmlElement(required = true) + public String getOutput () { + return output; + } + + public void setOutput (String output) { + this.output = output; + } + } +} diff --git a/common/src/main/java/org/onap/so/utils/CryptoUtils.java b/common/src/main/java/org/onap/so/utils/CryptoUtils.java new file mode 100644 index 0000000000..11d464a85c --- /dev/null +++ b/common/src/main/java/org/onap/so/utils/CryptoUtils.java @@ -0,0 +1,129 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.utils; + + + +import java.security.GeneralSecurityException; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +import org.onap.so.logger.MessageEnum; +import org.onap.so.logger.MsoLogger; + + +/** + * CryptoUtils adapted from RTTP client. + * + */ +public final class CryptoUtils { + + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA, CryptoUtils.class); + + public static final String AES = "AES"; + private static final String CLOUD_KEY = "aa3871669d893c7fb8abbcda31b88b4f"; + /** + * encrypt a value and generate a keyfile + * if the keyfile is not found then a new one is created + * + * @throws GeneralSecurityException + */ + public static String encrypt (String value, String keyString) throws GeneralSecurityException { + SecretKeySpec sks = getSecretKeySpec (keyString); + Cipher cipher = Cipher.getInstance (CryptoUtils.AES); + cipher.init (Cipher.ENCRYPT_MODE, sks, cipher.getParameters ()); + byte[] encrypted = cipher.doFinal (value.getBytes ()); + return byteArrayToHexString (encrypted); + } + + /** + * decrypt a value + * + * @throws GeneralSecurityException + */ + public static String decrypt (String message, String keyString) throws GeneralSecurityException { + SecretKeySpec sks = getSecretKeySpec (keyString); + Cipher cipher = Cipher.getInstance (CryptoUtils.AES); + cipher.init (Cipher.DECRYPT_MODE, sks); + byte[] decrypted = cipher.doFinal (hexStringToByteArray (message)); + return new String (decrypted); + } + + /** + * decrypt a value or return defaultValue + * + */ + public static String decryptProperty (String prop, String defaultValue, String encryptionKey) { + try { + return CryptoUtils.decrypt(prop, encryptionKey); + } + catch (GeneralSecurityException e) { + LOGGER.debug("Security exception", e); + } + return defaultValue; + } + + public static String encryptCloudConfigPassword(String message) { + try { + return CryptoUtils.encrypt(message, CryptoUtils.CLOUD_KEY); + } catch (GeneralSecurityException e) { + LOGGER.error (MessageEnum.RA_GENERAL_EXCEPTION, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in encryptPassword", e); + return null; + } + } + public static String decryptCloudConfigPassword(String message) { + try { + return CryptoUtils.decrypt(message, CryptoUtils.CLOUD_KEY); + } catch (GeneralSecurityException e) { + LOGGER.error (MessageEnum.RA_GENERAL_EXCEPTION, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in encryptPassword", e); + return null; + } + } + private static SecretKeySpec getSecretKeySpec (String keyString) throws NoSuchAlgorithmException { + byte[] key = hexStringToByteArray (keyString); + SecretKeySpec sks = new SecretKeySpec (key, CryptoUtils.AES); + return sks; + } + + public static String byteArrayToHexString (byte[] b) { + StringBuilder sb = new StringBuilder(b.length * 2); + for (byte aB : b) { + int v = aB & 0xff; + if (v < 16) { + sb.append('0'); + } + sb.append(Integer.toHexString(v)); + } + return sb.toString ().toUpperCase (); + } + + private static byte[] hexStringToByteArray (String s) { + byte[] b = new byte[s.length () / 2]; + for (int i = 0; i < b.length; i++) { + int index = i * 2; + int v = Integer.parseInt (s.substring (index, index + 2), 16); + b[i] = (byte) v; + } + return b; + } +} diff --git a/common/src/main/java/org/onap/so/utils/TargetEntity.java b/common/src/main/java/org/onap/so/utils/TargetEntity.java new file mode 100644 index 0000000000..ad76e56a56 --- /dev/null +++ b/common/src/main/java/org/onap/so/utils/TargetEntity.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.utils; + + +public enum TargetEntity { + OPENSTACK_ADAPTER, BPMN, GRM ,AAI, DMAAP, POLICY, CATALOG_DB, REQUEST_DB, VNF_ADAPTER, SDNC_ADAPTER, NARAD; + + private static final String PREFIX = "MSO"; + @Override + public String toString(){ + return TargetEntity.PREFIX + "." + this.name(); + } +} diff --git a/common/src/main/java/org/onap/so/utils/UUIDChecker.java b/common/src/main/java/org/onap/so/utils/UUIDChecker.java new file mode 100644 index 0000000000..fac73e84f9 --- /dev/null +++ b/common/src/main/java/org/onap/so/utils/UUIDChecker.java @@ -0,0 +1,80 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.utils; + +import java.util.UUID; + +import org.onap.so.logger.MessageEnum; +import org.onap.so.logger.MsoLogger; + +/** + */ +public class UUIDChecker { + + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL, UUIDChecker.class); + + private UUIDChecker() { + + } + + public static boolean isValidUUID (String id) { + try { + if (null == id) { + return false; + } + UUID uuid = UUID.fromString(id); + return uuid.toString().equalsIgnoreCase(id); + } catch (IllegalArgumentException iae) { + LOGGER.debug("IllegalArgumentException", iae); + return false; + } + } + + public static String getUUID () { + return UUID.randomUUID().toString(); + } + + public static String verifyOldUUID (String oldId, MsoLogger msoLogger) { + if (!UUIDChecker.isValidUUID(oldId)) { + String newId = UUIDChecker.getUUID(); + MsoLogger.setLogContext(newId, null); + msoLogger.info(MessageEnum.APIH_REPLACE_REQUEST_ID, oldId, "", ""); + return newId; + } + MsoLogger.setLogContext(oldId, null); + return oldId; + } + + public static String generateUUID (MsoLogger msoLogger) { + String newId = UUIDChecker.getUUID(); + MsoLogger.setLogContext(newId, null); + msoLogger.info(MessageEnum.APIH_GENERATED_REQUEST_ID, newId, "", ""); + return newId; + } + + public static String generateServiceInstanceID (MsoLogger msoLogger) { + String newId = UUIDChecker.getUUID(); + MsoLogger.setLogContext(null, newId); + msoLogger.info(MessageEnum.APIH_GENERATED_SERVICE_INSTANCE_ID, newId, "", ""); + return newId; + } +} diff --git a/common/src/main/java/org/onap/so/utils/XmlMarshaller.java b/common/src/main/java/org/onap/so/utils/XmlMarshaller.java new file mode 100644 index 0000000000..903d055548 --- /dev/null +++ b/common/src/main/java/org/onap/so/utils/XmlMarshaller.java @@ -0,0 +1,84 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.utils; + + +import java.io.StringReader; +import java.io.StringWriter; + +import javax.xml.XMLConstants; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.sax.SAXSource; + +import org.onap.so.exceptions.MarshallerException; +import org.onap.so.logger.MessageEnum; +import org.onap.so.logger.MsoLogger; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +public class XmlMarshaller { + + private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, XmlMarshaller.class); + + public static String marshal(Object object) throws MarshallerException { + + StringWriter stringWriter = new StringWriter(); + try { + JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass()); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); + jaxbMarshaller.marshal(object, stringWriter); + } catch (JAXBException e) { + logger.error(MessageEnum.GENERAL_EXCEPTION, "", "", "", MsoLogger.ErrorCode.SchemaError, e.getMessage(), e); + throw new MarshallerException(e.getMessage(), MsoLogger.ErrorCode.SchemaError.getValue(), e); + } + + return stringWriter.toString(); + } + + public static Object unMarshal(String input, Object object) throws MarshallerException { + + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + spf.setFeature("http://xml.org/sax/features/external-general-entities", false); + spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + spf.setNamespaceAware(true); + XMLReader xmlReader = spf.newSAXParser().getXMLReader(); + + JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass()); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); + + InputSource inputSource = new InputSource(new StringReader(input)); + SAXSource source = new SAXSource(xmlReader, inputSource); + object = jaxbUnmarshaller.unmarshal(source, object.getClass()).getValue(); + } catch (Exception e) { + logger.error(MessageEnum.GENERAL_EXCEPTION, "", "", "", MsoLogger.ErrorCode.SchemaError, e.getMessage(), e); + throw new MarshallerException(e.getMessage(), MsoLogger.ErrorCode.SchemaError.getValue(), e); + } + + return object; + } + +} |