From 8c3882dd90a170047c608de560feecca7b34a15e Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Fri, 6 Nov 2015 20:42:18 +0000
Subject: [PATCH] refactored utilities; use classes from common area wherever
 possible

---
 .../portal/utilities/CollectionUtility.java   | 66 --------------
 .../aps/dm/portal/utilities/CryptUtility.java | 76 ----------------
 .../aps/dm/portal/utilities/DateUtility.java  | 12 ---
 .../aps/dm/portal/utilities/LdapUtility.java  | 67 --------------
 .../dm/portal/utilities/NoOpTrustManager.java | 32 -------
 .../NoServerVerificationSSLSocketFactory.java | 89 -------------------
 .../dm/portal/utilities/ObjectUtility.java    | 15 ----
 .../dm/portal/utilities/StringUtility.java    | 15 ----
 8 files changed, 372 deletions(-)
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CryptUtility.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java
 delete mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java

diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java
deleted file mode 100644
index 2031bf45..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-import java.util.List;
-import java.util.ListIterator;
-import javax.faces.model.SelectItem;
-
-public class CollectionUtility
-{
-
-    public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
-        int size = selectOne ? entities.size() + 1 : entities.size();
-        SelectItem[] items = new SelectItem[size];
-        int i = 0;
-        if (selectOne) {
-            items[0] = new SelectItem("", "Select");
-            i++;
-        }
-        for (Object x : entities) {
-            items[i++] = new SelectItem(x, x.toString());
-        }
-        return items;
-    }
-
-    public static String displayItemList(List<?> list, String beginDelimiter, String itemDelimiter, String endDelimiter) {
-        String result = beginDelimiter;
-        boolean addItemDelimiter = false;
-        if (list != null) {
-            for (Object item : list) {
-                if (!addItemDelimiter) {
-                    addItemDelimiter = true;
-                }
-                else {
-                    result += itemDelimiter;
-                }
-                result += item.toString();
-            }
-        }
-        result += endDelimiter;
-        return result;
-    }
-
-    public static String displayItemListWithoutOutsideDelimiters(List<?> list, String itemDelimiter) {
-        String beginDelimiter = "";
-        String endDelimiter = "";
-        return displayItemList(list, beginDelimiter, itemDelimiter, endDelimiter);
-    }
-    
-    public static String displayItemListWithoutDelimiters(List<?> list) {
-        String beginDelimiter = "";
-        String itemDelimiter = "";
-        String endDelimiter = "";
-        return displayItemList(list, beginDelimiter, itemDelimiter, endDelimiter);
-    }
-
-    public static void removeNullReferencesFromList(List<?> list) {
-        if (list == null) {
-            return;
-        }
-        ListIterator iterator = list.listIterator();
-        while (iterator.hasNext()) {
-            if (iterator.next() == null) {
-                iterator.remove();
-            }
-        }
-    }
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CryptUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CryptUtility.java
deleted file mode 100644
index a6600e8b..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CryptUtility.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.spec.InvalidKeySpecException;
-import java.util.Random;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-import org.apache.log4j.Logger;
-import org.primefaces.util.Base64;
-
-public class CryptUtility {
-
-    private static final Logger logger = Logger.getLogger(CryptUtility.class.getName());
-
-    private static final String SECRET_KEY_FACTORY_TYPE = "PBKDF2WithHmacSHA1";
-    private static final int PBDKF2_ITERATIONS = 1003;
-    private static final int PBDKF2_KEY_LENGTH_IN_BITS = 192;
-    private static final int SALT_LENGTH_IN_BYTES = 4;
-    private static final char[] SALT_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
-    private static final String SALT_DELIMITER = "$";
-    
-    public static String randomString(char[] characterSet, int length) {
-        Random random = new SecureRandom();
-        char[] result = new char[length];
-        for (int i = 0; i < result.length; i++) {
-            // picks a random index out of character set > random character
-            int randomCharIndex = random.nextInt(characterSet.length);
-            result[i] = characterSet[randomCharIndex];
-        }
-        return new String(result);
-    }
-
-    public static String cryptPasswordWithPbkdf2(String password) {
-        String salt = randomString(SALT_CHARSET, SALT_LENGTH_IN_BYTES);
-        return saltAndCryptPasswordWithPbkdf2(password, salt);
-    }
-
-    public static String saltAndCryptPasswordWithPbkdf2(String password, String salt) {
-        char[] passwordChars = password.toCharArray();
-        byte[] saltBytes = salt.getBytes();
-
-        PBEKeySpec spec = new PBEKeySpec(
-                passwordChars,
-                saltBytes,
-                PBDKF2_ITERATIONS,
-                PBDKF2_KEY_LENGTH_IN_BITS
-        );
-        SecretKeyFactory key;
-        try {
-            key = SecretKeyFactory.getInstance(SECRET_KEY_FACTORY_TYPE);
-            byte[] hashedPassword = key.generateSecret(spec).getEncoded();
-            String encodedPassword = Base64.encodeToString(hashedPassword, true);
-            return salt + SALT_DELIMITER + encodedPassword;
-        } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) {
-            // Should not happen
-            logger.error("Password cannot be crypted: " + ex);
-        }
-        return null;
-    }
-
-    public static boolean verifyPasswordWithPbkdf2(String password, String cryptedPassword) {
-        int saltEnd = cryptedPassword.indexOf(SALT_DELIMITER);
-        String salt = cryptedPassword.substring(0,saltEnd);
-        return cryptedPassword.equals(saltAndCryptPasswordWithPbkdf2(password, salt));
-    }
-    
-    
-    public static void main(String[] args) {
-        String password = "cdb";
-        System.out.println("Original password: " + password);
-        String cryptedPassword = cryptPasswordWithPbkdf2(password);
-        System.out.println("Crypted password: " + cryptedPassword);
-        System.out.println("Verified: " + verifyPasswordWithPbkdf2(password, cryptedPassword));
-    }
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java
deleted file mode 100644
index db70bd90..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public class DateUtility
-{
-    private static final SimpleDateFormat DateTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
-    public static String getCurrentDateTime() {
-        return DateTimeFormat.format(new Date());
-    }
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java
deleted file mode 100644
index dfc07180..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package gov.anl.aps.dm.portal.utilities;
-
-import java.util.Hashtable;
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author sveseli
- */
-public class LdapUtility
-{
-
-    private static final String LdapUrlPropertyName = "dm.portal.ldapUrl";
-    private static final String LdapDnStringPropertyName = "dm.portal.ldapDnString";
-    private static final String ldapUrl = ConfigurationUtility.getPortalProperty(LdapUrlPropertyName);
-    private static final String ldapDnString = ConfigurationUtility.getPortalProperty(LdapDnStringPropertyName);
-
-    private static final Logger logger = Logger.getLogger(LdapUtility.class.getName());
-
-    /**
-     * Use username and password to attempt initial connection and bind with APS
-     * LDAP server. Successful connection implies that credentials are accepted.
-     *
-     * @param username username
-     * @param password password
-     *
-     * @return true if valid, false otherwise
-     */
-    public final static boolean validateCredentials(String username, String password) {
-
-        // dump out immediately if not given password
-        if (password.isEmpty()) {
-            return false;
-        }
-
-        boolean validated = false;
-        Hashtable env = new Hashtable();
-        String dn = ldapDnString.replace("USERNAME", username);
-        logger.debug("Authenticating: " + dn);
-        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, ldapUrl);
-        env.put(Context.SECURITY_AUTHENTICATION, "simple");
-        env.put(Context.SECURITY_PRINCIPAL, dn);
-        env.put(Context.SECURITY_CREDENTIALS, password);
-        // the below property allows us to circumvent server certificate checks
-        env.put("java.naming.ldap.factory.socket", "gov.anl.aps.dm.portal.utilities.NoServerVerificationSSLSocketFactory");
-
-        try {
-            DirContext ctx = new InitialDirContext(env);
-            validated = true;
-        }
-        catch (NamingException ex) {
-            ex.printStackTrace();
-        }
-        return validated;
-    }
-
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java
deleted file mode 100644
index 972792fb..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-import java.security.cert.X509Certificate;
-import javax.net.ssl.X509TrustManager;
-
-/**
- * A trivial implementation of <code>X509TrustManager</code> that doesn't
- * actually check the validity of a certificate. This allows us to make
- * SSL connections to internal servers without requiring the installation
- * and maintenance of certificates in the client keystore.
- *
- * @see NoServerVerificationSSLSocketFactory
- */
-public class NoOpTrustManager implements X509TrustManager 
-{
-
-    @Override
-    public void checkClientTrusted(X509Certificate[] cert, String authType) 
-    {
-    }
-    
-    @Override
-    public void checkServerTrusted(X509Certificate[] cert, String authType) 
-    {
-    }
-    
-    @Override
-    public X509Certificate[] getAcceptedIssuers() 
-    {
-        return new X509Certificate[0];
-    }
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java
deleted file mode 100644
index d13f7f6c..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import javax.net.SocketFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-
-/**
- * A minor extension of <code>SSLSocketFactory</code> that installs
- * a dummy trust manager. This allows creation of SSL sockets that don't
- * verify the server certificates.
- *
- * @see NoOpTrustManager
- */
-public class NoServerVerificationSSLSocketFactory extends SSLSocketFactory 
-{
-    private SSLSocketFactory factory;
-    public NoServerVerificationSSLSocketFactory() 
-    {
-        try {
-            TrustManager tm = new NoOpTrustManager();
-            SSLContext sslcontext = SSLContext.getInstance("TLS");
-            sslcontext.init( null, // No KeyManager required
-                             new TrustManager[] {tm},
-                             new java.security.SecureRandom());
-            
-            factory = (SSLSocketFactory)sslcontext.getSocketFactory();
-            
-        } 
-        catch(KeyManagementException | NoSuchAlgorithmException ex) { 
-            ex.printStackTrace(); 
-        }
-    }
-    
-    public static SocketFactory getDefault() {
-        return new NoServerVerificationSSLSocketFactory();
-    }
-    
-    @Override
-    public Socket createSocket(Socket socket, String s, int i, boolean flag) 
-        throws IOException 
-    {
-        return factory.createSocket( socket, s, i, flag);
-    }
-    
-    @Override
-    public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) 
-        throws IOException 
-    {
-        return factory.createSocket(inaddr, i, inaddr1, j);
-    }
-    
-    @Override
-    public Socket createSocket(InetAddress inaddr, int i) throws IOException 
-    {
-        return factory.createSocket(inaddr, i);
-    }
-    
-    @Override
-    public Socket createSocket(String s, int i, InetAddress inaddr, int j) 
-        throws IOException 
-    {
-        return factory.createSocket(s, i, inaddr, j);
-    }
-    
-    @Override
-    public Socket createSocket(String s, int i) throws IOException 
-    {
-        return factory.createSocket(s, i);
-    }
-    
-    @Override
-    public String[] getDefaultCipherSuites() 
-    {
-        return factory.getSupportedCipherSuites();
-    }
-    
-    @Override
-    public String[] getSupportedCipherSuites() 
-    {
-        return factory.getSupportedCipherSuites();
-    }
-    
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java
deleted file mode 100644
index 6950b455..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-
-public class ObjectUtility
-{   
-    public static <Type> boolean equals(Type object1, Type object2) {
-        if (object1 == null && object2 == null) {
-            return true;
-        }
-        if (object1 == null || object2 == null) {
-            return false;
-        }
-        return object1.equals(object2);
-    }
-}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java
deleted file mode 100644
index aeedb7b5..00000000
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package gov.anl.aps.dm.portal.utilities;
-
-
-public class StringUtility
-{
-    public static boolean equals(CharSequence cs1, CharSequence cs2) {
-        if (cs1 == null && cs2 == null) {
-            return true;
-        }
-        if (cs1 == null || cs2 == null) {
-            return false;
-        }
-        return cs1.equals(cs2);
-    }
-}
-- 
GitLab