diff --git a/src/main/java/davidkhala/common/AbstractPropertiesLoader.java b/src/main/java/davidkhala/common/AbstractPropertiesLoader.java index 4c8316a..3f04dc8 100644 --- a/src/main/java/davidkhala/common/AbstractPropertiesLoader.java +++ b/src/main/java/davidkhala/common/AbstractPropertiesLoader.java @@ -4,10 +4,6 @@ import java.io.InputStream; import java.util.Properties; -/** - * Created by davidliu on 11/4/2016. - */ - public abstract class AbstractPropertiesLoader { protected abstract InputStream propertiesProvider() throws IOException; diff --git a/src/main/java/davidkhala/common/CountryTool.java b/src/main/java/davidkhala/common/CountryTool.java index 13b8db3..0b0a4e4 100644 --- a/src/main/java/davidkhala/common/CountryTool.java +++ b/src/main/java/davidkhala/common/CountryTool.java @@ -6,11 +6,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; - -/** - * Created by davidliu on 2/4/2017. - */ - public class CountryTool { public static ArrayList getNames() { @@ -18,7 +13,7 @@ public static ArrayList getNames() { ArrayList countries = new ArrayList(); for (Locale locale : locales) { String country = locale.getDisplayCountry(); - if (country.trim().length() > 0 && !countries.contains(country)) { + if (!country.trim().isEmpty() && !countries.contains(country)) { countries.add(country); } } @@ -54,28 +49,25 @@ public static String trimHKID(String hkid,boolean isStrict){ if (!m.find()) return null; String prefix = m.group(1); String serial = m.group(2); - String checkdigit = m.group(3); + String checkDigit = m.group(3); long value = 0; if (prefix.length() == 2) { value += (prefix.charAt(0) - 55) * 9 + (prefix.charAt(1) - 55) * 8; } else if (prefix.length() == 1) { value += 36 * 9 + (prefix.charAt(0) - 55) * 8; } - try { for (int i = 0; i < 6; i++) { - value += Integer.parseInt(serial.substring(i, i + 1)) * (7 - i); + value += (long) Integer.parseInt(serial.substring(i, i + 1)) * (7 - i); } long reminder = value % 11; - long valid_checkdigit = 11 - reminder; - if ("A".equalsIgnoreCase(checkdigit) && valid_checkdigit == 10) { + long valid_checkDigit = 11 - reminder; + if ("A".equalsIgnoreCase(checkDigit) && valid_checkDigit == 10) { return HKID; } - if (valid_checkdigit == Integer.parseInt(checkdigit)) { + if (valid_checkDigit == Integer.parseInt(checkDigit)) { return HKID; } - } catch (NumberFormatException e) { - e.printStackTrace(); - } + return null; } diff --git a/src/main/java/davidkhala/common/FileTool.java b/src/main/java/davidkhala/common/FileTool.java index f2ded3f..44b24ce 100644 --- a/src/main/java/davidkhala/common/FileTool.java +++ b/src/main/java/davidkhala/common/FileTool.java @@ -3,20 +3,11 @@ import java.io.*; import java.net.URI; -import java.nio.file.Files; - - -/** - * Created by davidliu on 9/29/2016. - */ +import java.util.Objects; public class FileTool { public static void write(File targetFile, String content) throws IOException { - targetFile.createNewFile(); FileOutputStream fop = new FileOutputStream(targetFile); - - - // get the content in bytes byte[] contentInBytes = content.getBytes(); fop.write(contentInBytes); @@ -24,43 +15,25 @@ public static void write(File targetFile, String content) throws IOException { fop.close(); } - public static String read(File targetFile) throws IOException { - FileInputStream is = new FileInputStream(targetFile); - return read(is); - } + public static boolean overwrite(File targetFile, String content) throws IOException { + boolean noExist = targetFile.createNewFile(); + if (noExist) { + return false; + } - public static String read(InputStream is) throws IOException { - int size = is.available(); - byte[] buffer = new byte[size]; - is.read(buffer); - is.close(); - return new String(buffer); + FileTool.write(targetFile, content); + return true; } - public static int copyDir(File from, File to) throws IOException { -// Preconditions.checkArgument(from.isDirectory(),"source file should be directory:"+from.getPath()); -// Preconditions.checkArgument(to.isDirectory(),"target file should be directory:"+to.getPath()); - File[] files = from.listFiles(); - if(files==null)return -1; - for(File file: files){ - File targetFile = new File(to,file.getName()); - if(file.isDirectory()){ - if(targetFile.mkdir()){ - copyDir(file,targetFile); - } - }else { - -// Files.copy(file.toPath(), targetFile.toPath()); - } - } - return files.length; + public static String read(File targetFile) throws IOException { + FileInputStream is = new FileInputStream(targetFile); + return Stream.read(is); } public static boolean deleteDir(File dir) { boolean result = true; - for (File file : dir.listFiles() - ) { + for (File file : Objects.requireNonNull(dir.listFiles())) { if (file.isDirectory()) { if (!deleteDir(file)) result = false; @@ -69,16 +42,14 @@ public static boolean deleteDir(File dir) { } return result; } + public static String getExtensionName(String filename) { - if ((filename != null) && (filename.length() > 0)) { + if (filename != null && !filename.isEmpty()) { int dot = filename.lastIndexOf('.'); - if ((dot >-1) && (dot < (filename.length() - 1))) { + if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } - public static File fromURI(URI uri){ - return new File(uri); - } } diff --git a/src/main/java/davidkhala/common/Reflection.java b/src/main/java/davidkhala/common/Reflection.java index cafa41e..98ab9a3 100644 --- a/src/main/java/davidkhala/common/Reflection.java +++ b/src/main/java/davidkhala/common/Reflection.java @@ -6,26 +6,22 @@ import java.util.HashMap; import java.util.Map; -/** - * Created by davidliu on 2018/1/10. - */ - public class Reflection { Object object; - Class clazz; + Class clazz; public Reflection(Object object) { this.object = object; this.clazz = object.getClass(); } - public Reflection asSuperClass(Class clazz){ + public Reflection asSuperClass(Class clazz){ if(clazz.isInstance(object)){ this.clazz = clazz; } return this; } - private static final Map WRAPPER_TYPES = new HashMap<>(); + private static final Map, Class> WRAPPER_TYPES = new HashMap<>(); static { WRAPPER_TYPES.put(Boolean.class, Boolean.TYPE); @@ -44,7 +40,7 @@ public static boolean isWrapperType(Class clazz) { } public Object method(String methodName, Object... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - Class[] argClasses = new Class[args.length]; + Class[] argClasses = new Class[args.length]; for (int i = 0; i < args.length; i++) { Class argClass = args[i].getClass(); if (isWrapperType(argClass)) { diff --git a/src/main/java/davidkhala/common/Stream.java b/src/main/java/davidkhala/common/Stream.java new file mode 100644 index 0000000..5460462 --- /dev/null +++ b/src/main/java/davidkhala/common/Stream.java @@ -0,0 +1,14 @@ +package davidkhala.common; + +import java.io.IOException; +import java.io.InputStream; + +public class Stream { + public static String read(InputStream is) throws IOException { + int size = is.available(); + byte[] buffer = new byte[size]; + is.read(buffer); + is.close(); + return new String(buffer); + } +} diff --git a/src/main/java/davidkhala/common/secure/AES.java b/src/main/java/davidkhala/common/secure/AES.java index 16c79ab..c9a5fb2 100644 --- a/src/main/java/davidkhala/common/secure/AES.java +++ b/src/main/java/davidkhala/common/secure/AES.java @@ -6,7 +6,6 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; - import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; @@ -15,9 +14,6 @@ import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; -/** - * Created by DavidLiu on 25/8/2016. - */ public class AES { public static byte[] hash(byte[] data) { try { diff --git a/src/main/java/davidkhala/common/secure/AbstractHTTPS.java b/src/main/java/davidkhala/common/secure/AbstractHTTPS.java index 67bc67b..d20d601 100644 --- a/src/main/java/davidkhala/common/secure/AbstractHTTPS.java +++ b/src/main/java/davidkhala/common/secure/AbstractHTTPS.java @@ -3,10 +3,6 @@ import javax.net.ssl.*; import java.security.*; -/** - * Created by davidliu on 11/9/2016. - */ - public abstract class AbstractHTTPS { public static SSLSocketFactory getSSLSocketFactory(KeyStore keyStore, String keyStorePwd, KeyStore trustKeyStore) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException { TrustManager[] trustManagers = new KeyStoreTool(trustKeyStore).genTrustedManagers(); diff --git a/src/main/java/davidkhala/common/secure/CSRTool.java b/src/main/java/davidkhala/common/secure/CSRTool.java index 4f4671f..8bd1aee 100644 --- a/src/main/java/davidkhala/common/secure/CSRTool.java +++ b/src/main/java/davidkhala/common/secure/CSRTool.java @@ -13,10 +13,6 @@ import javax.security.auth.x500.X500Principal; -/** - * Created by davidliu on 1/23/2017. - */ - public class CSRTool { public static String wrapPublicReq(PKCS10CertificationRequest csr) throws IOException { byte[] CSRder; diff --git a/src/main/java/davidkhala/common/secure/CertTool.java b/src/main/java/davidkhala/common/secure/CertTool.java index 78bfada..ca461c1 100644 --- a/src/main/java/davidkhala/common/secure/CertTool.java +++ b/src/main/java/davidkhala/common/secure/CertTool.java @@ -6,10 +6,6 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; -/** - * Created by davidliu on 1/23/2017. - */ - public class CertTool { static String defaultCertType = "X.509"; static String defaultProvider = "BC"; diff --git a/src/main/java/davidkhala/common/secure/KeyStoreTool.java b/src/main/java/davidkhala/common/secure/KeyStoreTool.java index fd1896e..b25a6c6 100644 --- a/src/main/java/davidkhala/common/secure/KeyStoreTool.java +++ b/src/main/java/davidkhala/common/secure/KeyStoreTool.java @@ -9,10 +9,6 @@ import java.util.HashMap; import java.util.Map; -/** - * Created by davidliu on 11/4/2016. - */ - public class KeyStoreTool { KeyStore keyStore; diff --git a/src/main/java/davidkhala/common/secure/RSAKeyPair.java b/src/main/java/davidkhala/common/secure/RSAKeyPair.java index 1081f80..e13cbf2 100644 --- a/src/main/java/davidkhala/common/secure/RSAKeyPair.java +++ b/src/main/java/davidkhala/common/secure/RSAKeyPair.java @@ -9,60 +9,55 @@ import java.security.spec.RSAPublicKeySpec; import java.security.spec.X509EncodedKeySpec; -/** - * Created by davidliu on 11/9/2016. - */ - public class RSAKeyPair { - public static KeyPair get() { - return get(null); - } + public static KeyPair get() { + + try { + return get(null); + } catch (NoSuchAlgorithmException |NoSuchProviderException e) { + return null; + } + + } + + public static RSAPublicKey recoverPubKey(byte[] pubBytes) throws NoSuchAlgorithmException, InvalidKeySpecException { + return (RSAPublicKey) + KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(pubBytes)); + } + + public static RSAPublicKey recoverPubKey(RSAPrivateCrtKey privateCrtKey) throws NoSuchAlgorithmException, InvalidKeySpecException { + return (RSAPublicKey) + KeyFactory.getInstance("RSA") + .generatePublic( + new RSAPublicKeySpec( + privateCrtKey.getModulus(), privateCrtKey.getPublicExponent())); + } + + public static KeyPair get(String provider) throws NoSuchAlgorithmException, NoSuchProviderException { + + KeyPairGenerator generator = + provider == null + ? KeyPairGenerator.getInstance("RSA") + : KeyPairGenerator.getInstance("RSA", provider); // "BC", "AndroidOpenSSL" + if (provider == null) + System.out.println("RSAKeypair generator default provider: " + generator.getProvider()); + generator.initialize(2048); + return generator.generateKeyPair(); - public static RSAPublicKey recoverPubKey(byte[] pubBytes) { - try { - return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(pubBytes)); - } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { - e.printStackTrace(); - return null; - } - } + } - public static RSAPublicKey recoverPubKey(RSAPrivateCrtKey privateCrtKey) { - try { - return (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new RSAPublicKeySpec(privateCrtKey.getModulus(), privateCrtKey.getPublicExponent())); - } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { - e.printStackTrace(); - return null; - } - } + public static RSAPrivateKey recoverPrivKey(byte[] privateBytes) throws NoSuchAlgorithmException, InvalidKeySpecException { - public static KeyPair get(String provider) { - try { - KeyPairGenerator generator = provider == null ? KeyPairGenerator.getInstance("RSA") : KeyPairGenerator.getInstance("RSA", provider);//"BC", "AndroidOpenSSL" - if (provider == null) - System.out.println("RSAKeypair generator default provider: " + generator.getProvider()); - generator.initialize(2048); - return generator.generateKeyPair(); - } catch (NoSuchAlgorithmException | NoSuchProviderException e) { - e.printStackTrace(); - return null; - } - } + return (RSAPrivateKey) + KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateBytes)); - public static RSAPrivateKey recoverPrivKey(byte[] privateBytes) { - try { - return (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateBytes)); - } catch (InvalidKeySpecException | NoSuchAlgorithmException e) { - e.printStackTrace(); - return null; - } - } + } - public static KeyPair recover(byte[] privateBytes, byte[] pubBytes) { + public static KeyPair recover(byte[] privateBytes, byte[] pubBytes) throws NoSuchAlgorithmException, InvalidKeySpecException { - RSAPrivateKey privateKey = recoverPrivKey(privateBytes); - RSAPublicKey publicKey = recoverPubKey(pubBytes); + RSAPrivateKey privateKey = recoverPrivKey(privateBytes); + RSAPublicKey publicKey = recoverPubKey(pubBytes); - return new KeyPair(publicKey, privateKey); - } + return new KeyPair(publicKey, privateKey); + } } diff --git a/src/main/java/davidkhala/common/secure/Utils.java b/src/main/java/davidkhala/common/secure/Utils.java index 7a7e48d..4f49896 100644 --- a/src/main/java/davidkhala/common/secure/Utils.java +++ b/src/main/java/davidkhala/common/secure/Utils.java @@ -5,10 +5,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; -/** - * Created by davidliu on 2/1/2017. - */ - public class Utils { /** * Hex encoding used throughout the framework. Use with HEX.encode(byte[]) or HEX.decode(CharSequence). diff --git a/src/main/java/davidkhala/common/secure/X509CertTool.java b/src/main/java/davidkhala/common/secure/X509CertTool.java index 6e2bf5e..f7dd9d0 100644 --- a/src/main/java/davidkhala/common/secure/X509CertTool.java +++ b/src/main/java/davidkhala/common/secure/X509CertTool.java @@ -15,10 +15,6 @@ import javax.security.auth.x500.X500Principal; -/** - * Created by davidliu on 11/4/2016. - */ - public class X509CertTool { public final static String CN_PATTERN = "CN=%s, OU=%s, O=%s, L=%s, ST=%s, C=%s"; @@ -55,10 +51,6 @@ public static String extractIssuerCN(X509Certificate certificate) { return identity; } - /** - * Created by davidliu on 11/8/2016. - */ - public static class CsrHelper { diff --git a/src/test/java/FileTest.java b/src/test/java/FileTest.java new file mode 100644 index 0000000..5835af1 --- /dev/null +++ b/src/test/java/FileTest.java @@ -0,0 +1,32 @@ +import davidkhala.common.FileTool; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import org.junit.Test; + +public class FileTest { + @Test + public void create_delete() throws IOException { + String fileName = "dummy.txt"; + File file = new File(fileName); + String extension = FileTool.getExtensionName(fileName); + assert extension.equals("txt"); + FileTool.write(file, "txt"); + file.deleteOnExit(); + } + + @Test + public void createDir() throws IOException { + File file = new File("temp"); + assert file.mkdirs(); + file.deleteOnExit(); + } + + @Test + public void fromURITest() throws IOException { + String uriStr = "file:/C:/Users/david/Downloads/"; + URI uri = URI.create(uriStr); + File file = new File(uri); + assert file.toURI().toString().equals(uriStr); + } +} diff --git a/src/test/java/jdbc/MySQL.java b/src/test/java/jdbc/MySQL.java index 8fbdd31..e787997 100644 --- a/src/test/java/jdbc/MySQL.java +++ b/src/test/java/jdbc/MySQL.java @@ -5,7 +5,7 @@ public class MySQL { - public static void main(String args[]) throws Exception { + public static void main(String[] args) throws Exception { Connection conn = DriverManager.getConnection("jdbc:mariadb://168.138.162.164:3306/mysql?" + "user=root&password=password&&serverTimezone=UTC"); diff --git a/src/test/java/secure/x509Cert.java b/src/test/java/secure/X509CertTest.java similarity index 62% rename from src/test/java/secure/x509Cert.java rename to src/test/java/secure/X509CertTest.java index 0dda270..e0fbad5 100644 --- a/src/test/java/secure/x509Cert.java +++ b/src/test/java/secure/X509CertTest.java @@ -1,18 +1,17 @@ package secure; import davidkhala.common.secure.X509CertTool; +import javax.security.auth.x500.X500Principal; import org.junit.Test; import org.spongycastle.asn1.x500.X500Name; -import javax.security.auth.x500.X500Principal; -import java.io.IOException; - -public class x509Cert { +public class X509CertTest { @Test - public void getX500Cert() throws IOException { + public void getX500Cert() { X500Name x500Name = X509CertTool.CsrHelper.getX500Name("david", "mediconcen"); - System.out.println(x500Name.toString()); + assert x500Name.toString().equals("CN=david,OU=mediconcen,O=,L=,ST=,C="); + X500Principal x500Principal = X509CertTool.CsrHelper.getX500Principal("david"); - System.out.println(x500Principal.toString()); + assert x500Principal.toString().equals("CN=david, OU=, O=, L=, ST=, C="); } }