diff options
author | tian.ming@huawei.com <tian.ming@huawei.com> | 2016-08-25 21:13:33 +0800 |
---|---|---|
committer | tian.ming@huawei.com <tian.ming@huawei.com> | 2016-08-25 21:13:33 +0800 |
commit | 79d67955b160929ffacc6828014d3c5ce3110fb8 (patch) | |
tree | 011fb1952e2cfd8292d6ce247abdd745bfe1d700 /common-util | |
parent | 8b49886b96d5f7ebc91dbf1aa158b31ac4a72848 (diff) |
adjust the code
Change-Id: Id896bed917ba6730c6b5d96665ef9978cfb413de
Signed-off-by: tian.ming@huawei.com <tian.ming@huawei.com>
Diffstat (limited to 'common-util')
16 files changed, 1547 insertions, 0 deletions
diff --git a/common-util/.gitignore b/common-util/.gitignore new file mode 100644 index 0000000..be68b59 --- /dev/null +++ b/common-util/.gitignore @@ -0,0 +1,5 @@ +/target/ +# Eclipse +.settings/ +.classpath +.project diff --git a/common-util/pom.xml b/common-util/pom.xml new file mode 100644 index 0000000..b4245d0 --- /dev/null +++ b/common-util/pom.xml @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.openo.baseservice</groupId> + <artifactId>common-setting</artifactId> + <version>1.0.1-SNAPSHOT</version> + </parent> + <artifactId>commonlib-cbb</artifactId> + <packaging>jar</packaging> + <properties> + </properties> + <dependencies> + <dependency> + <groupId>com.googlecode.jmockit</groupId> + <artifactId>jmockit</artifactId> + <scope>test</scope> + <version>1.1</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + <version>4.8.2</version> + </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>com.springsource.slf4j.log4j</artifactId> + </dependency> + + <dependency> + <groupId>org.codehaus.jackson</groupId> + <artifactId>jackson-mapper-asl</artifactId> + </dependency> + <dependency> + <groupId>net.sf.json-lib</groupId> + <artifactId>json-lib</artifactId> + <classifier>jdk15</classifier> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + </dependency> + <dependency> + <groupId>com.github.stephenc.jcip</groupId> + <artifactId>jcip-annotations</artifactId> + <version>1.0-1</version> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-release-plugin</artifactId> + <version>2.5.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <argLine>-XX:-UseSplitVerifier</argLine> + <skip>${maven.test.skip}</skip> + <testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore> + <excludes> + <exclude>${excludesFile}</exclude> + </excludes> + </configuration> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>cobertura-maven-plugin</artifactId> + <version>2.6</version> + <configuration> + <formats> + <format>xml</format> + <format>html</format> + </formats> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>cobertura</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + + +</project> + diff --git a/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java new file mode 100644 index 0000000..c3e59b9 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/CipherCreator.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * Creates the cipher instances using cipher factory. By default it uses AesCipherFactory. + * Can be changed through spring. + * </p> + * + * @author + * @version SDNO 0.5 08-Jun-2016 + */ +public final class CipherCreator { + + private static CipherCreator instance = new CipherCreator(); + + private AbstractCipherFactory factory = new AesCipherFactory(); + + /** + * Constructor<br/> + * <p> + * private + * </p> + * + * @since SDNO 0.5 + */ + private CipherCreator() { + + } + + /** + * Singleton instance. + * <br/> + * + * @return + * @since SDNO 0.5 + */ + public static CipherCreator instance() { + return instance; + } + + /** + * Creates cipher with default key. + * <br/> + * + * @return cipher instance with default key. + * @since SDNO 0.5 + */ + public AbstractCipher create() { + return factory.createCipherManager(); + } + + /** + * Creates cipher instance with a key. + * <br/> + * + * @param key the key to be used for encryption and decryption. + * @return cipher instance with specified key. + * @since SDNO 0.5 + */ + public AbstractCipher create(final String key) { + return factory.createCipherManager(key); + } + + /** + * Sets the cipher factory instance. + * <br/> + * + * @param factory cipher factory. + * @since SDNO 0.5 + */ + public void setFactory(final AbstractCipherFactory factory) { + this.factory = factory; + } + +} diff --git a/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java new file mode 100644 index 0000000..c9d7123 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipher.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 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<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 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<br/> + * <p> + * Creates default key. + * </p> + * + * @since SDNO 0.5 + */ + public AesCipher() { + super(); + secretKey = createSecretKey("default"); + } + + /** + * Constructor<br/> + * <p> + * </p> + * + * @since SDNO 0.5 + * @param ckey: key. + */ + 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/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java new file mode 100644 index 0000000..39fe605 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 03-Jun-2016 + */ +public class AesCipherFactory implements AbstractCipherFactory { + + /** + * Creates new CipherManager instance.<br/> + * + * @return new cipher manager instance. + * @since SDNO 0.5 + */ + @Override + public AbstractCipher createCipherManager() { + return new AesCipher(); + } + + /** + * Creates new CipherManager instance.<br/> + * + * @param key new cipher manager instance. + * @return + * @since SDNO 0.5 + */ + @Override + public AbstractCipher createCipherManager(final String key) { + return new AesCipher(key); + } + +} diff --git a/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java new file mode 100644 index 0000000..4357d86 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipher.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 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 + * <br/> + * <p> + * It provides bi-directional encryption api. + * </p> + * + * @author + * @version SDNO 0.5 31-May-2016 + */ +public interface AbstractCipher { + + /** + * Encrypt a string. + * <br/> + * + * @param plain string to be encrypted. + * @return encrypted string. + * @since SDNO 0.5 + */ + String encrypt(String plain); + + /** + * Decrypt a string. + * <br/> + * + * @param encrypted String is encrypted by AES 128 + * @return plain after decrypt + * @since SDNO 0.5 + */ + String decrypt(String encrypted); + +} diff --git a/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java new file mode 100644 index 0000000..2d6f2ad --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/inf/AbstractCipherFactory.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 03-Jun-2016 + */ +public interface AbstractCipherFactory { + + /** + * Creates new CipherManager instance.<br/> + * + * @return new cipher manager instance. + * @since SDNO 0.5 + */ + AbstractCipher createCipherManager(); + + /** + * Creates new CipherManager instance.<br/> + * + * @param key new cipher manager instance. + * @return + * @since SDNO 0.5 + */ + AbstractCipher createCipherManager(final String key); + +} diff --git a/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java new file mode 100644 index 0000000..74cc2bb --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/encrypt/cbb/sha/Sha256.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 03-Jun-2016 + */ +public final class Sha256 { + + private static final Logger LOGGER = LoggerFactory.getLogger(Sha256.class); + + private Sha256() { + + } + + /** + * Generates SHA256 digest.<br/> + * + * @param data: The data to be digested. + * @return Hex encoded digested data. + * @since SDNO 0.5 + */ + 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.<br/> + * + * @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 SDNO 0.5 + */ + 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. + * <br/> + * + * @param data: The data to be signed. + * @param secret: The signing key. + * @return Hex encoded HMAC signature. + * @since SDNO 0.5 + */ + 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/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java b/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java new file mode 100644 index 0000000..ee250b1 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/util/RestUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 31-May-2016 + */ +public final class RestUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class); + + private RestUtils() { + + } + + /** + * To get body from http request<br/> + * + * @param request : request object. + * @return Request body as string. + * @since SDNO 0.5 + */ + 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/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java b/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java new file mode 100644 index 0000000..bd98fb9 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImpl.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 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.<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 24-Jun-2016 + */ +public class SystemEnvVariablesDefImpl extends 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<br/> + * + * @param inPath input path + * @return the canonical path. + * @since SDNO 0.5 + */ + 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/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java b/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java new file mode 100644 index 0000000..e40ab53 --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/util/impl/SystemEnvVariablesFactory.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 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 + * <br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 2016年8月13日 + */ +public class SystemEnvVariablesFactory { + + private static SystemEnvVariables systemEnvVariablesInstance = new SystemEnvVariablesDefImpl(); + + /** + * get the SystemEnvVariables instance + * <br/> + * + * @return SystemEnvVariables instance + * @since SDNO 0.5 + */ + public static SystemEnvVariables getInstance() { + return systemEnvVariablesInstance; + } +} diff --git a/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java b/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java new file mode 100644 index 0000000..014cdbd --- /dev/null +++ b/common-util/src/main/java/org/openo/baseservice/util/inf/SystemEnvVariables.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 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<br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 31-May-2016 + */ +public abstract class SystemEnvVariables { + + /** + * Get application root path <br/> + * + * @return application root path. + * @since SDNO 0.5 + */ + public abstract String getAppRoot(); +} diff --git a/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherTest.java b/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherTest.java new file mode 100644 index 0000000..3241b14 --- /dev/null +++ b/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/impl/AesCipherTest.java @@ -0,0 +1,210 @@ +/* + * Copyright (c) 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 javax.crypto.Cipher; +import javax.crypto.SecretKeyFactory; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.openo.baseservice.encrypt.cbb.CipherCreator; +import org.openo.baseservice.encrypt.cbb.inf.AbstractCipher; + +import junit.framework.Assert; +import mockit.Mocked; +import mockit.NonStrictExpectations; + +/** + * <br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 02-Jun-2016 + */ +public class AesCipherTest { + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + CipherCreator.instance().setFactory(new AesCipherFactory()); + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @Before + public void setUp() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @After + public void tearDown() throws Exception { + } + + /** + * Test method for + * {@link org.openo.baseservice.encrypt.cbb.impl.AesCipher#encrypt(java.lang.String)}. + */ + @Test + public void testEncrypt() { + final AbstractCipher cipherManager = CipherCreator.instance().create(); + final String encrypted = cipherManager.encrypt("test-encrypt"); + final String decrypted = cipherManager.decrypt(encrypted); + + Assert.assertEquals("test-encrypt", decrypted); + } + + @Test + public void testEncryptException() throws Exception { + new NonStrictExpectations() { + + @Mocked + Cipher cipher; + + { + cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + result = new InvalidKeySpecException(); + } + }; + final AbstractCipher cipherManager = CipherCreator.instance().create(); + final String encrypted = cipherManager.encrypt("test-encrypt"); + + Assert.assertEquals(null, encrypted); + } + + /** + * Test method for + * {@link org.openo.baseservice.encrypt.cbb.impl.AesCipher#decrypt(java.lang.String)}. + */ + @Test + public void testDecrypt() { + final AbstractCipher cipherManager = CipherCreator.instance().create(); + final String encrypted = cipherManager.encrypt("test-encrypt"); + final String decrypted = cipherManager.decrypt(encrypted); + + Assert.assertEquals("test-encrypt", decrypted); + } + + @Test + public void testDecryptNull() { + final AbstractCipher cipherManager = CipherCreator.instance().create(); + String decrypted = cipherManager.decrypt(null); + Assert.assertEquals(null, decrypted); + + decrypted = cipherManager.decrypt(""); + + Assert.assertEquals(null, decrypted); + } + + /** + * Test method for + * {@link + * org.openo.baseservice.encrypt.cbb.impl.AesCipher#CipherManagerImpl(java.lang.String)} + * . + */ + @Test + public void testCipherManagerImplString() { + final AbstractCipher cipherManager = CipherCreator.instance().create("secret-key"); + final String encrypted = cipherManager.encrypt("test-encrypt"); + final String decrypted = cipherManager.decrypt(encrypted); + + Assert.assertEquals("test-encrypt", decrypted); + } + + /** + * <br/> + * + * @since SDNO 0.5 + */ + @Test + public void testCipherManagerImplStringDiffKey() { + final String encrypted = CipherCreator.instance().create("secret-key").encrypt("test-encrypt"); + final String decrypted = CipherCreator.instance().create("wrong-key").decrypt(encrypted); + + Assert.assertNotSame("test-encrypt", decrypted); + + final String decrypt = CipherCreator.instance().create("secret-key").decrypt(encrypted); + Assert.assertEquals("test-encrypt", decrypt); + } + + @Test + public void testCreateSecretKeyNoSuchAlgorithmException() throws Exception { + new NonStrictExpectations() { + + @Mocked + SecretKeyFactory keyFactory; + + { + keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + result = new NoSuchAlgorithmException(); + } + }; + + final AbstractCipher cipherManager = CipherCreator.instance().create("secret-key"); + final String encrypted = cipherManager.encrypt("test-encrypt"); + Assert.assertEquals(encrypted, encrypted); + + } + + @Test + public void testCreateSecretKeyInvalidKeySpecException() throws Exception { + new NonStrictExpectations() { + + @Mocked + SecretKeyFactory keyFactory; + + { + keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + result = new InvalidKeySpecException(); + } + }; + + final AbstractCipher cipherManager = CipherCreator.instance().create("secret-key"); + final String decrypted = cipherManager.decrypt("test-encrypt"); + Assert.assertEquals(decrypted, null); + + } +} diff --git a/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/sha/Sha256Test.java b/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/sha/Sha256Test.java new file mode 100644 index 0000000..30a640e --- /dev/null +++ b/common-util/src/test/java/org/openo/baseservice/encrypt/cbb/sha/Sha256Test.java @@ -0,0 +1,193 @@ +/* + * Copyright (c) 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 static org.junit.Assert.fail; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import mockit.Mocked; +import mockit.NonStrictExpectations; +import mockit.integration.junit4.JMockit; + +/** + * <br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 03-Jun-2016 + */ +@RunWith(JMockit.class) +public class Sha256Test { + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @Before + public void setUp() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @After + public void tearDown() throws Exception { + } + + /** + * Test method for {@link org.openo.baseservice.encrypt.cbb.sha.Sha256#digest(java.lang.String)} + * . + */ + @Test + public void testDigest() { + String plain = ""; + String expected = "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"; + Assert.assertEquals(expected, Sha256.digest(plain)); + + expected = "D7A8FBB307D7809469CA9ABCB0082E4F8D5651E46D3CDB762D02D0BF37C9E592"; + plain = "The quick brown fox jumps over the lazy dog"; + Assert.assertEquals(expected, Sha256.digest(plain)); + } + + @Test + public void testDigestException() throws Exception { + new NonStrictExpectations() { + + @Mocked + MessageDigest md; + + { + md = MessageDigest.getInstance("SHA-256"); + result = new NoSuchAlgorithmException(); + } + }; + final String plain = ""; + final String expected = ""; + Assert.assertEquals(expected, Sha256.digest(plain)); + + } + + /** + * Test method for + * {@link org.openo.baseservice.encrypt.cbb.sha.Sha256#mac(java.lang.String, java.security.Key)} + * . + * + * @throws InvalidKeyException + */ + @Test + public void testMacStringKey() { + final String expected = "F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8"; + final String plain = "The quick brown fox jumps over the lazy dog"; + try { + Assert.assertEquals(expected, Sha256.mac(plain, new SecretKeySpec("key".getBytes(), "HmacSHA256"))); + } catch(final InvalidKeyException e) { + e.printStackTrace(); + fail("testMacStringKey failed" + e.getMessage()); + } + try { + Assert.assertEquals(expected, Sha256.mac(plain, new SecretKeySpec("key".getBytes(), "AES"))); + } catch(final InvalidKeyException e) { + e.printStackTrace(); + fail("testMacStringKey failed" + e.getMessage()); + } + + } + + @Test + public void testMacStringKeyException() throws Exception { + new NonStrictExpectations() { + + @Mocked + Mac mac; + + { + mac = Mac.getInstance("HmacSHA256"); + result = new NoSuchAlgorithmException(); + } + }; + Sha256.mac("dummy", new SecretKeySpec("key".getBytes(), "AES")); + } + + /** + * Test method for + * {@link org.openo.baseservice.encrypt.cbb.sha.Sha256#mac(java.lang.String, byte[])}. + */ + @Test + public void testMacStringByteArray() { + final String expected = "F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8"; + final String plain = "The quick brown fox jumps over the lazy dog"; + Assert.assertEquals(expected, Sha256.mac(plain, "key".getBytes())); + } + + @Test + public void testMacStringByteArrayInvalidKeyException() throws Exception { + final String key = "key"; + new NonStrictExpectations() { + + @Mocked + Mac mac; + + { + mac = Mac.getInstance("HmacSHA256"); + result = new InvalidKeyException(); + } + }; + final String expected = ""; + final String plain = "The quick brown fox jumps over the lazy dog"; + Assert.assertEquals(expected, Sha256.mac(plain, key.getBytes())); + } + +} diff --git a/common-util/src/test/java/org/openo/baseservice/util/RestUtilsTest.java b/common-util/src/test/java/org/openo/baseservice/util/RestUtilsTest.java new file mode 100644 index 0000000..2cf0589 --- /dev/null +++ b/common-util/src/test/java/org/openo/baseservice/util/RestUtilsTest.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 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.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; + +import junit.framework.Assert; +import mockit.Expectations; +import mockit.Mocked; +import mockit.integration.junit4.JMockit; + +/** + * <br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 08-Jun-2016 + */ +@RunWith(JMockit.class) +public class RestUtilsTest { + + @Mocked + HttpServletRequest mockHttpServletRequest; + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @Before + public void setUp() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @After + public void tearDown() throws Exception { + } + + /** + * Test method for + * {@link org.openo.baseservice.util.RestUtils#getRequestBody(javax.servlet.http.HttpServletRequest)} + * . + * + * @throws IOException + */ + @Test + public void testGetRequestBody() throws IOException { + final String dummy = "this is a dummy data to test request body"; + final ServletInputStream inputStream = new ServletInputStream() { + + final ByteArrayInputStream stream = new ByteArrayInputStream(dummy.getBytes()); + + @Override + public int read() throws IOException { + return stream.read(); + } + + }; + + new Expectations() { + + { + mockHttpServletRequest.getInputStream(); + returns(inputStream); + } + }; + final String body = RestUtils.getRequestBody(mockHttpServletRequest); + + Assert.assertEquals(dummy, body); + } + + @Test + public void testGetRequestBodyNull() throws IOException { + final ServletInputStream inputStream = null; + new Expectations() { + + { + mockHttpServletRequest.getInputStream(); + returns(inputStream); + } + }; + final String body = RestUtils.getRequestBody(mockHttpServletRequest); + + Assert.assertEquals("", body); + } + + @Test + public void testGetRequestBodyIOException() throws IOException { + final ServletInputStream inputStream = new ServletInputStream() { + + @Override + public int read() throws IOException { + throw new IOException(); + } + + }; + + new Expectations() { + + { + mockHttpServletRequest.getInputStream(); + returns(inputStream); + } + }; + final String body = RestUtils.getRequestBody(mockHttpServletRequest); + + Assert.assertEquals("", body); + } + + @Test + public void testGetRequestBodyCloseIOException() throws IOException { + final ServletInputStream inputStream = new ServletInputStream() { + + final ByteArrayInputStream stream = new ByteArrayInputStream("dummy".getBytes()); + + @Override + public int read() throws IOException { + return stream.read(); + } + + @Override + public void close() throws IOException { + throw new IOException(); + } + }; + + new Expectations() { + + { + mockHttpServletRequest.getInputStream(); + returns(inputStream); + } + }; + final String body = RestUtils.getRequestBody(mockHttpServletRequest); + + Assert.assertEquals("dummy", body); + } + +} diff --git a/common-util/src/test/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImplTest.java b/common-util/src/test/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImplTest.java new file mode 100644 index 0000000..97a8d11 --- /dev/null +++ b/common-util/src/test/java/org/openo/baseservice/util/impl/SystemEnvVariablesDefImplTest.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 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 java.io.File; +import java.io.IOException; + +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openo.baseservice.util.inf.SystemEnvVariables; + +import junit.framework.Assert; +import mockit.Mocked; +import mockit.NonStrictExpectations; +import mockit.integration.junit4.JMockit; +import net.jcip.annotations.NotThreadSafe; + +/** + * <br/> + * <p> + * </p> + * + * @author + * @version SDNO 0.5 08-Jun-2016 + */ +@RunWith(JMockit.class) +@NotThreadSafe +public class SystemEnvVariablesDefImplTest { + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + /** + * <br/> + * + * @throws java.lang.Exception + * @since SDNO 0.5 + */ + @Before + public void setUp() throws Exception { + } + + @Test + public void testGetAppRootException() throws Exception { + new NonStrictExpectations() { + + @Mocked + File file; + + { + file = new File("."); + file.getCanonicalPath(); + result = new IOException(); + } + + }; + final SystemEnvVariables envVars =new SystemEnvVariablesDefImpl(); + System.setProperty("catalina.base", "."); + final String actual = envVars.getAppRoot(); + Assert.assertEquals(null, actual); + } + + + /** + * Test method for + * {@link org.openo.baseservice.util.impl.SystemEnvVariablesDefImpl#getAppRoot()}. + * + * @throws Exception + */ + @Test + public void testGetAppRoot() throws Exception { + final SystemEnvVariables envVars = new SystemEnvVariablesDefImpl(); + final File file = new File("."); + final String expected = file.getCanonicalPath(); + System.setProperty("catalina.base", "."); + final String actual = envVars.getAppRoot(); + Assert.assertEquals(expected, actual); + } + +} |