All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.auth.utils.SecurityTokenUtils Maven / Gradle / Ivy

The newest version!
package prerna.auth.utils;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.UUID;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.engine.api.IRawSelectWrapper;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.selectors.QueryColumnSelector;
import prerna.rdf.engine.wrappers.WrapperManager;
import prerna.util.Constants;
import prerna.util.Utility;

public class SecurityTokenUtils extends AbstractSecurityUtils {

	private static final Logger logger = LogManager.getLogger(SecurityTokenUtils.class);

	/**
	 * Only used for static references
	 */
	private SecurityTokenUtils() {
		
	}
	
	/**
	 * Clear expired tokens
	 * @param expirationMinutes
	 */
	public static void clearExpiredTokens(long expirationMinutes) {
		ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(expirationMinutes);
		String query = "DELETE FROM TOKEN WHERE DATEADDED <= ?";
		PreparedStatement ps = null;
		try {
			ps = securityDb.getPreparedStatement(query);
			int parameterIndex = 1;
			ps.setTimestamp(parameterIndex++, Utility.getSqlTimestampUTC(zdt));
			ps.execute();
		} catch (SQLException e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					logger.error(Constants.STACKTRACE, e);
				}
				if(securityDb.isConnectionPooling()) {
					try {
						ps.getConnection().close();
					} catch (SQLException e) {
						logger.error(Constants.STACKTRACE, e);
					}
				}
			}
		}
	}
	
	/**
	 * Generate a new token for the IP address
	 * @param ipAddr
	 * @return
	 */
	public static Object[] generateToken(String ipAddr, String clientId) {
		String query = "INSERT INTO TOKEN (IPADDR, VAL, DATEADDED, CLIENTID) VALUES (?,?,?,?)";
		String tokenValue = UUID.randomUUID().toString();
		ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("UTC"));
		PreparedStatement ps = null;
		try {
			ps = securityDb.getPreparedStatement(query);
			int parameterIndex = 1;
			ps.setString(parameterIndex++, ipAddr);
			ps.setString(parameterIndex++, tokenValue);
			ps.setTimestamp(parameterIndex++, Utility.getSqlTimestampUTC(zdt));
			ps.setString(parameterIndex++, clientId);
			ps.execute();
			logger.debug("Adding new token=" + tokenValue + " for ip=" + ipAddr);
		} catch (SQLException e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					logger.error(Constants.STACKTRACE, e);
				}
				if(securityDb.isConnectionPooling()) {
					try {
						ps.getConnection().close();
					} catch (SQLException e) {
						logger.error(Constants.STACKTRACE, e);
					}
				}
			}
		}
		
		return new Object[] {tokenValue, ipAddr, clientId};
	}
	
	/**
	 * Get the token for the IP address
	 * @param ipAddr
	 * @return
	 */
	public static Object[] getToken(String ipAddr) {
		SelectQueryStruct qs = new SelectQueryStruct();
		qs.addSelector(new QueryColumnSelector("TOKEN__VAL"));
		qs.addSelector(new QueryColumnSelector("TOKEN__IPADDR"));
		qs.addSelector(new QueryColumnSelector("TOKEN__CLIENTID"));
		qs.addExplicitFilter(SimpleQueryFilter.makeColToValFilter("TOKEN__IPADDR", "==", ipAddr));
		IRawSelectWrapper wrapper = null;
		try {
			wrapper = WrapperManager.getInstance().getRawWrapper(securityDb, qs);
			if(wrapper.hasNext()) {
				return wrapper.next().getValues();
			}
		} catch (Exception e) {
			logger.error(Constants.STACKTRACE, e);
		} finally {
			if(wrapper != null) {
				try {
					wrapper.close();
				} catch (IOException e) {
					logger.error(Constants.STACKTRACE, e);
				}
			}
		}
		
		return null;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy