From c0604184b2aa8cff924ca783ec6b36f1f5988775 Mon Sep 17 00:00:00 2001 From: Zhaoxing Date: Tue, 8 Aug 2017 14:02:53 +0800 Subject: init code Change-Id: Icd0948118397b256da70dfbcbbec5520dc5eafd4 Signed-off-by: Zhaoxing --- .../openo/baseservice/bus/util/BusConstant.java | 48 ++++++ .../baseservice/bus/util/RegisterService.java | 177 +++++++++++++++++++++ .../bus/util/RegisterServiceListener.java | 70 ++++++++ .../baseservice/encrypt/cbb/CipherCreator.java | 95 +++++++++++ .../baseservice/encrypt/cbb/impl/AesCipher.java | 132 +++++++++++++++ .../encrypt/cbb/impl/AesCipherFactory.java | 54 +++++++ .../encrypt/cbb/inf/AbstractCipher.java | 50 ++++++ .../encrypt/cbb/inf/AbstractCipherFactory.java | 45 ++++++ .../openo/baseservice/encrypt/cbb/sha/Sha256.java | 110 +++++++++++++ .../java/org/openo/baseservice/util/RestUtils.java | 82 ++++++++++ .../util/impl/SystemEnvVariablesDefImpl.java | 68 ++++++++ .../util/impl/SystemEnvVariablesFactory.java | 55 +++++++ .../baseservice/util/inf/SystemEnvVariables.java | 35 ++++ 13 files changed, 1021 insertions(+) create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/bus/util/BusConstant.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterService.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterServiceListener.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java create mode 100644 wso2/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java (limited to 'wso2/common-util/src/main/java') diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/BusConstant.java b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/BusConstant.java new file mode 100644 index 0000000..ab2bcd1 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/BusConstant.java @@ -0,0 +1,48 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.bus.util; + +/** + *

+ * An class which holds the all the constant values for the Bus register CBB. + *

+ *
+ * + * @author + * @version + */ +public final class BusConstant { + + public static final String JSON = "json"; + + public static final String BUS_CONFIGURE_FILE = "/etc/microservice.ini"; + + public static final String BUS_SERVICE_URL = "/openoapi/microservices/v1/services"; + + public static final String BUS_ADDRESS_KEY = "msb.address"; + + public static final String APPLICATION_JSON_HEADER = "application/json"; + + public static final String CREATE_OR_UPDATE = "createOrUpdate"; + + public static final String MICROSERVICE_DEFAULT = "msb.openo.org:80"; + + public static final String MICROSERVICE_PATH = "/etc/microservice"; + + public static final String POST_METHOD = "POST"; + + public static final String HTTP_HEAD = "http://"; +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterService.java b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterService.java new file mode 100644 index 0000000..d1926c7 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterService.java @@ -0,0 +1,177 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ + +package org.openo.baseservice.bus.util; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import javax.ws.rs.core.Response; + +import org.apache.cxf.jaxrs.client.WebClient; +import org.codehaus.jackson.jaxrs.JacksonJsonProvider; +import org.openo.baseservice.util.impl.SystemEnvVariablesFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Provide the service register cbb for common use.
+ *

+ *

+ * + * @author + * @version + */ +public class RegisterService { + + private static final Logger LOGGER = LoggerFactory.getLogger(RegisterService.class); + + private static String busPath = null; + + /** + * Constructor
+ *

+ *

+ * + * @throws IOException + * + * @since + */ + private RegisterService() { + } + + /** + * register the micro service.
+ * + * @param jsonPath: + * the service json object to register to the bus. + * @param createOrUpdate: + * true, create and update the old ip port. false, create and + * delete the old one; + * @return + * @throws IOException + * @since + */ + public static Response registerService(String jsonPath, boolean createOrUpdate) throws IOException { + + String serviceInfo = getServiceModel(jsonPath); + + WebClient client = initializeClient(); + + client.type(BusConstant.APPLICATION_JSON_HEADER); + + client.accept(BusConstant.APPLICATION_JSON_HEADER); + + client.path(BusConstant.BUS_SERVICE_URL); + + client.query(BusConstant.CREATE_OR_UPDATE, createOrUpdate); + + LOGGER.info("Connecting bus address : " + busPath + BusConstant.BUS_SERVICE_URL); + + return client.invoke(BusConstant.POST_METHOD, serviceInfo); + + } + + /** + * get the service's model. and return it as a string ;
+ * + * @param jsonPath + * @return + * @since + */ + private static String getServiceModel(String jsonPath) { + + String serviceInfo = ""; + + try { + LOGGER.info("begin to read file micro service json " + jsonPath); + + FileInputStream busFile = new FileInputStream(jsonPath); + + int size = busFile.available(); + + byte[] buffer = new byte[size]; + + busFile.read(buffer); + + busFile.close(); + + serviceInfo = new String(buffer); + LOGGER.info("finished to read micro service json file. "); + } catch (Exception ex) { + LOGGER.error("Read the micro service json file error :", ex); + } + return serviceInfo; + } + + /** + * initialize the bus ip and port.
+ * + * @return + * @throws IOException + * @since + */ + private static String getBusAddress() throws IOException { + + LOGGER.info("begin to get the bus baseurl."); + FileInputStream busFile = null; + String url = BusConstant.MICROSERVICE_DEFAULT; + + String filePath = SystemEnvVariablesFactory.getInstance().getAppRoot() + BusConstant.BUS_CONFIGURE_FILE; + LOGGER.info("bus base url file:" + filePath); + + Properties properties = new Properties(); + + try { + busFile = new FileInputStream(filePath); + properties.load(busFile); + url = properties.getProperty(BusConstant.BUS_ADDRESS_KEY); + } catch (IOException e) { + if (busFile != null) { + busFile.close(); + } + LOGGER.error("Read the bus url failed: ", e); + } + + LOGGER.info("initialize the bus baseurl is: " + url); + return BusConstant.HTTP_HEAD + url; + } + + /** + * get the bus's client's address. and initialize the web client.
+ * + * @return + * @throws IOException + * @since + */ + private static WebClient initializeClient() throws IOException { + + final List providers = new ArrayList(); + + JacksonJsonProvider jacksonJsonProvider = new JacksonJsonProvider(); + + providers.add(jacksonJsonProvider); + + if (busPath == null) { + busPath = getBusAddress(); + } + + return WebClient.create(busPath, providers); + } +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterServiceListener.java b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterServiceListener.java new file mode 100644 index 0000000..c4e1417 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/bus/util/RegisterServiceListener.java @@ -0,0 +1,70 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ + +package org.openo.baseservice.bus.util; + +import java.io.File; +import java.io.IOException; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import org.openo.baseservice.util.impl.SystemEnvVariablesFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Initialize the service register listener.
+ *

+ *

+ * + * @author + * @version + */ +public class RegisterServiceListener implements ServletContextListener { + + private static final Logger LOGGER = LoggerFactory.getLogger(RegisterServiceListener.class); + + @Override + public void contextInitialized(ServletContextEvent sce) { + + String servicePath = SystemEnvVariablesFactory.getInstance().getAppRoot() + BusConstant.MICROSERVICE_PATH; + LOGGER.info("microservices json file path is" + servicePath); + + File file = new File(servicePath); + + File[] fileList = file.listFiles(); + + for (File tempFile : fileList) { + String fileName = tempFile.getName(); + if (fileName.substring(fileName.lastIndexOf('.') + 1).equalsIgnoreCase(BusConstant.JSON)) { + LOGGER.info("begin to initialize the service file" + tempFile.getAbsolutePath()); + + try { + RegisterService.registerService(tempFile.getAbsolutePath(), true); + } catch (IOException e) { + LOGGER.error("Faile to register the service file :" + tempFile.getPath() + ", exception:" + e); + } + } + } + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + // TODO Auto-generated method stub + + } +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java new file mode 100644 index 0000000..d964cbc --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java @@ -0,0 +1,95 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.encrypt.cbb; + +import org.openo.baseservice.encrypt.cbb.impl.AesCipherFactory; +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipher; +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipherFactory; + +/** + * Helps create cipher instances from factory.
+ *

+ * Creates the cipher instances using cipher factory. By default it uses AesCipherFactory. + * Can be changed through spring. + *

+ * + * @author + * @version 08-Jun-2016 + */ +public final class CipherCreator { + + private static CipherCreator instance = new CipherCreator(); + + private AbstractCipherFactory factory = new AesCipherFactory(); + + /** + * Constructor
+ *

+ * private + *

+ * + * @since + */ + private CipherCreator() { + + } + + /** + * Singleton instance. + *
+ * + * @return + * @since + */ + public static CipherCreator instance() { + return instance; + } + + /** + * Creates cipher with default key. + *
+ * + * @return cipher instance with default key. + * @since + */ + public AbstractCipher create() { + return factory.createCipherManager(); + } + + /** + * Creates cipher instance with a key. + *
+ * + * @param key the key to be used for encryption and decryption. + * @return cipher instance with specified key. + * @since + */ + public AbstractCipher create(final String key) { + return factory.createCipherManager(key); + } + + /** + * Sets the cipher factory instance. + *
+ * + * @param factory cipher factory. + * @since + */ + public void setFactory(final AbstractCipherFactory factory) { + this.factory = factory; + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java new file mode 100644 index 0000000..f117269 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java @@ -0,0 +1,132 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ + +package org.openo.baseservice.encrypt.cbb.impl; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.KeySpec; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.bind.DatatypeConverter; + +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * CipherManager implement
+ *

+ *

+ * + * @author + * @version 31-May-2016 + */ +public class AesCipher implements AbstractCipher { + + private static final Logger LOG = LoggerFactory.getLogger(AesCipher.class); + + private static final byte[] DEFAULT_IV = {2, 1, 4, 8, 0, 3, 2, 0, 7, 9, 2, 8, 5, 11, 6, 1}; + + private static final IvParameterSpec IV_PARAMETER_SPEC = new IvParameterSpec(DEFAULT_IV); + + protected final SecretKey secretKey; + + /** + * Constructor
+ *

+ * Creates default key. + *

+ * + * @since + */ + public AesCipher() { + super(); + secretKey = createSecretKey("default"); + } + + /** + * + * Constructor
+ *

+ *

+ * Creates key. + * @param key + * @since + */ + public AesCipher(final String key) { + super(); + secretKey = createSecretKey(key); + } + + private SecretKey createSecretKey(final String key) { + SecretKey secretKey = null; + try { + final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + final KeySpec keySpec = new PBEKeySpec(key.toCharArray(), DEFAULT_IV, 30000, 128); + + secretKey = keyFactory.generateSecret(keySpec); + return new SecretKeySpec(secretKey.getEncoded(), "AES"); + } catch(InvalidKeySpecException e) { + LOG.error("Invalid KeySpec ", e); + } catch(NoSuchAlgorithmException e) { + LOG.error("Algorithm do not support: ", e); + } + return null; + } + + @Override + public String encrypt(final String plain) { + try { + final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, IV_PARAMETER_SPEC); + final byte[] encryptToBytes = cipher.doFinal(plain.getBytes()); + return DatatypeConverter.printBase64Binary(encryptToBytes); + } catch(final Exception e) { + LOG.error("Encrypt the plain error:", e); + return null; + } + } + + @Override + public String decrypt(final String encrypted) { + + if(encrypted == null || encrypted.length() == 0) { + return null; + } + + if(secretKey == null) { + return null; + } + + try { + final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, secretKey, IV_PARAMETER_SPEC); + final byte[] tempBytes = DatatypeConverter.parseBase64Binary(encrypted); + final byte[] decrypTobytes = cipher.doFinal(tempBytes); + return new String(decrypTobytes); + } catch(final Exception e) { + LOG.error("decrypt the plain error:", e); + return null; + } + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java new file mode 100644 index 0000000..95e7336 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.encrypt.cbb.impl; + +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipher; +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipherFactory; + +/** + * Factory class to create CipherManager instances.
+ *

+ *

+ * + * @author + * @version 03-Jun-2016 + */ +public class AesCipherFactory implements AbstractCipherFactory { + + /** + * Creates new CipherManager instance.
+ * + * @return new cipher manager instance. + * @since + */ + @Override + public AbstractCipher createCipherManager() { + return new AesCipher(); + } + + /** + * Creates new CipherManager instance.
+ * + * @param key new cipher manager instance. + * @return + * @since + */ + @Override + public AbstractCipher createCipherManager(final String key) { + return new AesCipher(key); + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java new file mode 100644 index 0000000..608dd82 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java @@ -0,0 +1,50 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.encrypt.cbb.inf; + +/** + * Cipher Manager, provides the encrypt/decrypt interface + *
+ *

+ * It provides bi-directional encryption api. + *

+ * + * @author + * @version 31-May-2016 + */ +public interface AbstractCipher { + + /** + * Encrypt a string. + *
+ * + * @param plain string to be encrypted. + * @return encrypted string. + * @since + */ + String encrypt(String plain); + + /** + * Decrypt a string. + *
+ * + * @param encrypted String is encrypted by AES 128 + * @return plain after decrypt + * @since + */ + String decrypt(String encrypted); + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java new file mode 100644 index 0000000..e820250 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.encrypt.cbb.inf; + +/** + * Factory class to create CipherManager instances.
+ *

+ *

+ * + * @author + * @version 03-Jun-2016 + */ +public interface AbstractCipherFactory { + + /** + * Creates new CipherManager instance.
+ * + * @return new cipher manager instance. + * @since + */ + AbstractCipher createCipherManager(); + + /** + * Creates new CipherManager instance.
+ * + * @param key new cipher manager instance. + * @return + * @since + */ + AbstractCipher createCipherManager(final String key); + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java new file mode 100644 index 0000000..bbead3e --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java @@ -0,0 +1,110 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.encrypt.cbb.sha; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.bind.DatatypeConverter; + +/** + * Utility to generate SHA256 digest and HMAC.
+ *

+ *

+ * + * @author + * @version 03-Jun-2016 + */ +public final class Sha256 { + + private static final Logger LOGGER = LoggerFactory.getLogger(Sha256.class); + + private Sha256() { + + } + + /** + * Generates SHA256 digest.
+ * + * @param data: The data to be digested. + * @return Hex encoded digested data. + * @since + */ + public static String digest(final String data) { + final byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8); + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch(final NoSuchAlgorithmException e) { + LOGGER.error("No SHA-256 support ", e); + return ""; + } + final byte[] digest = md.digest(dataBytes); + return DatatypeConverter.printHexBinary(digest); + } + + /** + * Generates hmac signature using data and key.
+ * + * @param data: The data to be signed. + * @param key: The signing key. + * @return Hex encoded HMAC signature. + * @throws InvalidKeyException if the key is invalid. + * @since + */ + public static String mac(final String data, final Key key) throws InvalidKeyException { + final byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8); + Mac mac = null; + try { + mac = Mac.getInstance("HmacSHA256"); + mac.init(key); + } catch(final NoSuchAlgorithmException e) { + LOGGER.error("SHA mac not supported", e); + return ""; + } + final byte[] digest = mac.doFinal(dataBytes); + return DatatypeConverter.printHexBinary(digest); + + } + + /** + * Generates hmac with data and secret. + *
+ * + * @param data: The data to be signed. + * @param secret: The signing key. + * @return Hex encoded HMAC signature. + * @since + */ + public static String mac(final String data, final byte[] secret) { + final Key key = new SecretKeySpec(secret, "HmacSHA256"); + try { + return mac(data, key); + } catch(final InvalidKeyException e) { + LOGGER.error("Invalid key: ", e); + return ""; + } + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java b/wso2/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java new file mode 100644 index 0000000..2661d69 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import javax.servlet.http.HttpServletRequest; + +/** + * Utility functions for ROA.
+ *

+ *

+ * + * @author + * @version 31-May-2016 + */ +public final class RestUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class); + + private RestUtils() { + + } + + /** + * To get body from http request
+ * + * @param request : request object. + * @return Request body as string. + * @since + */ + public static String getRequestBody(final HttpServletRequest request) { + String body = null; + final StringBuilder stringBuilder = new StringBuilder(); + BufferedReader bufferedReader = null; + + try { + final InputStream inputStream = request.getInputStream(); + if(inputStream != null) { + bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + final char[] charBuffer = new char[128]; + int bytesRead = -1; + while((bytesRead = bufferedReader.read(charBuffer)) > 0) { + stringBuilder.append(charBuffer, 0, bytesRead); + } + } + } catch(final IOException ex) { + LOGGER.error("read inputStream buffer catch exception:", ex); + } finally { + if(bufferedReader != null) { + try { + bufferedReader.close(); + } catch(final IOException ex) { + LOGGER.error("close buffer catch exception:", ex); + } + } + } + + body = stringBuilder.toString(); + return body; + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java b/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java new file mode 100644 index 0000000..0ac707b --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.util.impl; + +import org.openo.baseservice.util.inf.SystemEnvVariables; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; + +/** + * System environment variable helper implementation.
+ *

+ *

+ * + * @author + * @version 24-Jun-2016 + */ +public class SystemEnvVariablesDefImpl implements SystemEnvVariables { + + private static final Logger LOG = LoggerFactory.getLogger(SystemEnvVariablesDefImpl.class); + + @Override + public String getAppRoot() { + String appRoot = null; + appRoot = System.getProperty("catalina.base"); + if(appRoot != null) { + appRoot = getCanonicalPath(appRoot); + } + return appRoot; + } + + /** + * Gets the canonical path
+ * + * @param inPath input path + * @return the canonical path. + * @since + */ + private String getCanonicalPath(final String inPath) { + String path = null; + try { + if(inPath != null) { + final File file = new File(inPath); + path = file.getCanonicalPath(); + } + } catch(final IOException e) { + LOG.error("file.getCanonicalPath() IOException:", e); + } + return path; + } + +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java b/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java new file mode 100644 index 0000000..e75c997 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ + +package org.openo.baseservice.util.impl; + +import org.openo.baseservice.util.inf.SystemEnvVariables; + +/** + * SystemEnvVariables factory class + *
+ *

+ *

+ * + * @author + * @version + */ +public class SystemEnvVariablesFactory { + + private static SystemEnvVariables systemEnvVariablesInstance = new SystemEnvVariablesDefImpl(); + + /** + * + * Constructor
+ *

+ *

+ * + * @since + */ + private SystemEnvVariablesFactory() { + + } + /** + * get the SystemEnvVariables instance + *
+ * + * @return SystemEnvVariables instance + * @since + */ + public static SystemEnvVariables getInstance() { + return systemEnvVariablesInstance; + } +} diff --git a/wso2/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java b/wso2/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java new file mode 100644 index 0000000..cf0c182 --- /dev/null +++ b/wso2/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java @@ -0,0 +1,35 @@ +/* + * Copyright 2016 Huawei Technologies Co., Ltd. + * + * 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. + */ +package org.openo.baseservice.util.inf; + +/** + * Dependency the system env
+ *

+ *

+ * + * @author + * @version 31-May-2016 + */ +public interface SystemEnvVariables { + + /** + * Get application root path
+ * + * @return application root path. + * @since + */ + String getAppRoot(); +} -- cgit 1.2.3-korg