/*
* 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 edu.harvard.iq.dataverse.worldmapauth;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
*
* @author raprasad
*/
@Stateless
@Named
public class TokenApplicationTypeServiceBean {
private static final Logger logger = Logger.getLogger(TokenApplicationTypeServiceBean.class.getCanonicalName());
@PersistenceContext(unitName = "VDCNet-ejbPU")
private EntityManager em;
public TokenApplicationType getGeoConnectApplication(){
logger.info("--getGeoConnectApplication--");
TokenApplicationType tat = this.findByName(TokenApplicationType.DEFAULT_GEOCONNECT_APPLICATION_NAME);
if (tat != null){
logger.info("-- Got it!!");
return tat;
}
// Make a default application for GeoConnect
tat = new TokenApplicationType();
tat.setName(TokenApplicationType.DEFAULT_GEOCONNECT_APPLICATION_NAME);
tat.setContactEmail("info@iq.harvard.edu");
tat.setHostname("geoconnect.datascience.iq.harvard.edu");
tat.setIpAddress("140.247.115.127");
tat.setTimeLimitMinutes(TokenApplicationType.DEFAULT_TOKEN_TIME_LIMIT_MINUTES);
//tat.setMapitLink(TokenApplicationType.LOCAL_DEV_MAPIT_LINK);
tat.setMapitLink(TokenApplicationType.DEV_MAPIT_LINK);
return this.save(tat);
//return null;
}
public TokenApplicationType find(Object pk) {
if (pk==null){
return null;
}
return (TokenApplicationType) em.find(TokenApplicationType.class, pk);
}
/**
*
* Convert string to md5 hash
*
import hashlib
m = hashlib.md5()
m.update("Give me python or give me...more time, more time -- c.mena")
m.hexdigest() #'266cf94160a22fe1ef118c907379cd60'
*/
public String getMD5Hash(String stringToHash){
if (stringToHash==null){
return null;
}
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException ex) {
logger.severe("Failed to set TokenApplicationType for 'Map It' request!!!");
return null;
}
md.update(stringToHash.getBytes());
byte[] mdbytes = md.digest();
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
public TokenApplicationType save( TokenApplicationType tokenApp ) {
if (tokenApp==null){
return null;
}
if (tokenApp.getName()==null){
tokenApp.setName(TokenApplicationType.DEFAULT_GEOCONNECT_APPLICATION_NAME);
}
if (tokenApp.getMapitLink()==null){
logger.warning("mapitLink is missing for tokenApp");
return null;
}
// Set time limit minutes
Integer time_limit_minutes = tokenApp.getTimeLimitMinutes();
if (time_limit_minutes == null){
tokenApp.setTimeLimitMinutes(TokenApplicationType.DEFAULT_TOKEN_TIME_LIMIT_MINUTES);
// (also sets the time limit seconds)
}
// set md5
tokenApp.setMd5(this.getMD5Hash(tokenApp.getName()));
if ( tokenApp.getId() == null ) {
tokenApp.setCreated();
em.persist(tokenApp);
logger.fine("New tokenApp saved");
return tokenApp;
} else {
tokenApp.setModified();
logger.fine("Existing tokenApp saved");
return em.merge( tokenApp );
}
}
public TokenApplicationType findByName(String name){
if (name == null){
return null;
}
try{
return em.createQuery("select m from TokenApplicationType m WHERE m.name=:name", TokenApplicationType.class)
.setParameter("name", name)
.getSingleResult();
} catch ( NoResultException nre ) {
return null;
}
}
public List<TokenApplicationType> getAllTokenApplicationTypes(){
Query query = em.createQuery("select object(o) from TokenApplicationType order by o.modified desc");
return query.getResultList();
}
}