Skip to content
Snippets Groups Projects
Commit 8c3882dd authored by sveseli's avatar sveseli
Browse files

refactored utilities; use classes from common area wherever possible

parent d65d4c83
No related branches found
No related tags found
No related merge requests found
Showing with 0 additions and 372 deletions
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();
}
}
}
}
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));
}
}
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());
}
}
/*
* 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;
}
}
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];
}
}
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();
}
}
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);
}
}
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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment