Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ejb;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.EJBContext;
import javax.ejb.Stateless;
import javax.mail.Session;
import javax.sql.DataSource;
import javax.validation.executable.ValidateOnExecution;
import org.apache.log4j.Logger;
import it.sapienza.common.dto.AutenticazioneDTO;
import it.sapienza.common.dto.DomandaSicurezzaDTO;
import it.sapienza.common.dto.PwdDTO;
import it.sapienza.common.dto.RecupwdDTO;
import it.sapienza.common.dto.SimpleElementDTO;
import it.sapienza.common.util.CryptoUtil;
import it.sapienza.common.util.EsitoEJB;
import it.sapienza.common.util.RisultatoLista;
import it.sapienza.common.util.TipoErrore;
import it.sapienza.comunicazione.ejb.ComunicazioneEJBRemote;
import it.sapienza.comunicazione.ejb.util.MailEnum;
import it.sapienza.pwd.ejb.dao.PwdServiceDao;
import it.sapienza.pwd.util.PasswordUtil;
@Stateless
@ValidateOnExecution
public class PwdEJB implements PwdEJBRemote, PwdEJBLocal {
@Resource
private EJBContext context;
@Resource(mappedName = "java:/oracleDBJTA")
private DataSource dataSource;
//@Resource(mappedName = "java:jboss/UserTransaction")
//private UserTransaction transaction;
@Resource(mappedName = "java:/Dev01")
private Session mailSession;
@EJB(lookup = "java:global/ComunicazioneEJB/ComunicazioneEJB!
it.sapienza.comunicazione.ejb.ComunicazioneEJBRemote")
private ComunicazioneEJBRemote comunicazioneEJB;
@Override
public EsitoEJB<RecupwdDTO> getDatiAccesso(String codiSogg) throws Exception
{
_logger.debug("[PwdEJB] - Inizio getDatiAccesso");
return esito;
}
@Override
public EsitoEJB<Boolean> checkResetPwd(String codiSogg, String email) throws
Exception {
_logger.debug("[PwdEJB] - Inizio checkResetPwd");
return esito;
}
@Override
public EsitoEJB<Boolean> aggiornaDatiAccesso(String codiSogg, String email,
String codiDomanda, String risposta)
throws Exception {
_logger.debug("[PwdEJB] - Inizio aggiornaDatiAccesso");
try {
rispostaHash = CryptoUtil.getBase64Sha1(risposta.toUpperCase());
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
}
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
}
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
}
oldMail = dDao.recuIndiMail(codiSogg);
if(!oldMail.equalsIgnoreCase(email))
mailHasChanged = true;
if (reset == false) {
context.setRollbackOnly();
} else {
if(mailHasChanged)
reset = dDao.aggiornaIndiMailRecapiti(codiSogg,
email);
}
if (reset == false)
context.setRollbackOnly();
else {
if(mailHasChanged) {
if(dDao.existMailForUser(codiSogg)) {
// se già esiste una mail, effettua
l'aggiornamento
reset =
dDao.updateMailPerRecuPswdAdeguamento(Long.parseLong(codiSogg), email, "");
//reset =
dDao.aggiornaIndiMailRecuPswd(codiSogg, email);
} else {
// se non esiste una mail, effettua
l'inserimento
reset =
dDao.insertMailPerRecuPswdAdeguamento(Long.parseLong(codiSogg), email,
"",emailSpidCie);
}
}
}
if (reset == false)
context.setRollbackOnly();
} catch (Exception e) {
context.setRollbackOnly();
throw e;
}
esito.setRisultato(reset);
return esito;
}
@Override
public EsitoEJB<Boolean> aggiornaEmailAccesso(String codiSogg, String email)
throws Exception {
_logger.debug("[PwdEJB] - Inizio aggiornaEmailAccesso");
try {
_logger.debug("Cerco email in sest_recu_pswd");
Long idSogg = dDao.recuCodiSogg(email);
_logger.debug("cerco email in sest_indi_sogg");
Long idSoggIndiSogg = dDao.recuCodiSoggIndiSogg(email);
if(!doppiaIscrizione) {
_logger.debug("Matricola unica");
if(idSogg.longValue()>0 && (!
codiSogg.equals(idSogg.toString()))) {
esito.setDescrizioneErrore("Email non valida");
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
_logger.debug("Esito: " + esito);
return esito;
}
if(idSoggIndiSogg.longValue()>0 && !
codiSogg.equals(idSogg.toString())) {
esito.setDescrizioneErrore("Email non valida");
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
_logger.debug("Esito: " + esito);
return esito;
}
oldMail = dDao.recuIndiMail(codiSogg);
_logger.debug("Old email: " + oldMail);
if(!oldMail.equalsIgnoreCase(email))
mailHasChanged = true;
_logger.debug("mailHasChanged = " + mailHasChanged);
reset = true;
if (reset == false) {
_logger.debug("mailHasChanged = " + mailHasChanged);
context.setRollbackOnly();
} else {
if(mailHasChanged)
_logger.debug("Aggiorna
aggiornaIndiMailRecapiti(codiSogg, email) ");
reset = dDao.aggiornaIndiMailRecapiti(codiSogg,
email);
}
if (reset == false)
context.setRollbackOnly();
else {
if(mailHasChanged) {
if(dDao.existMailForUser(codiSogg)) {
_logger.debug("se già esiste una mail,
effettua l'aggiornamento");
reset =
dDao.updateMailPerRecuPswdAdeguamento(Long.parseLong(codiSogg), email, "");
//reset =
dDao.aggiornaIndiMailRecuPswd(codiSogg, email);
} else {
_logger.debug("se non esiste una mail,
effettua l'inserimento");
reset =
dDao.insertMailPerRecuPswdAdeguamento(Long.parseLong(codiSogg), email, "",
emailSpidCie);
}
}
}
if (reset == false)
context.setRollbackOnly();
}
else {
_logger.debug("Matricola doppia");
String matricolaPadre = dDao.getMatricolaPadre(codiSogg);
_logger.debug("Matricola padre: " + matricolaPadre);
String matricolaFiglia = dDao.getMatricolaFiglia(codiSogg);
_logger.debug("Matricola figlia: "+ matricolaFiglia);
if(idSogg.longValue()>0 && (!
matricolaPadre.equals(idSogg.toString()) || !
matricolaFiglia.equals(idSogg.toString()))){
esito.setDescrizioneErrore("Email non valida");
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
_logger.debug("Esito: " + esito);
return esito;
}
}
} catch (Exception e) {
context.setRollbackOnly();
throw e;
}
esito.setRisultato(reset);
return esito;
}
@Override
public EsitoEJB<Boolean> resetPwd(String codiSogg, String oldPwd, String
newPwd) throws Exception {
_logger.debug("[PwdEJB] - Inizio resetPwd");
return esito;
}
//issue1780
/**
* recupera l'hash della password dell'utente
*/
@Override
public EsitoEJB<?> recuperaHashedPwd(Long matricola){
_logger.debug("[PwdEJB] - Inizio recuperaHashedPwd");
} catch (SQLException e) {
_logger.error(e);
return new
EsitoEJB<>(TipoErrore.ERRORE_ACCESSO_DATI.getLivelloErrore(),
TipoErrore.ERRORE_ACCESSO_DATI.getCodiceErrore(),
TipoErrore.ERRORE_ACCESSO_DATI.getDescrizioneErrore(), null);
}
_logger.debug("[PwdEJB] - Fine recuperaHashedPwd");
return esito;
}
@Override
public EsitoEJB<String> recuperaPwd(Long codiSogg, String email, String
risposta) throws Exception {
_logger.debug("[PwdEJB] - Inizio recuperaPwd");
try {
if (codiSogg != null) {
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
isDoneCheckAdeguamentoPswd = true;
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
// valorizza recuMail
recuMail = dDao.recuIndiMail("" + codiSogg);
if (recuMail != null && !recuMail.equalsIgnoreCase("")) {
warning = "E' stata inviata una mail all'indirizzo "
+ hiddenMail(recuMail);
} else {
warning = msg_mail_inesistente;
_logger.debug("[PwdEJB] - " + warning);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
recuMail = email;
}
if(!isMailConfermata) {
warning = "la mail " + hiddenMail(recuMail) + " non è stata
confermata. Contatta la " + msg_segreteria;
_logger.debug("[PwdEJB] - " + warning);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.WARNING_REQUISITI_NON_RISPETTATI.getLivelloErrore
());
esito.setRisultato(null);
return esito;
}
if(isUtenteBloccato) {
warning = "la matricola " + codiSogg + " è stata bloccata.
Rivolgersi alla " + msg_segreteria;
_logger.debug("[PwdEJB] - " + warning);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
if(!isDoneCheckAdeguamentoPswd) {
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
}
// verifica domanda/risposta
boolean isRispostaCorretta = dDao.isRispostaCorretta(""+codiSogg,
rispostaHash);
if(!isRispostaCorretta) {
warning = "la risposta alla domanda per il recupero
password non è corretta.";
_logger.debug("[PwdEJB] - " + warning);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
String initialPath =
System.getProperty("initial_path_for_email_link");
EsitoEJB<Boolean> esitoInvio =
comunicazioneEJB.inviaMailCompleta(null, new String[] { recuMail },
MailEnum.MailSubject.FORGOT_PWD.getCode(), msg);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
esito.setDescrizioneErrore(null);
esito.setCodiceErrore(null);
esito.setRisultato(warning);
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(ex.getMessage());
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
_logger.debug("[PwdEJB] - Fine recuperaPwd");
return esito;
}
@Override
public EsitoEJB<String> recuperaDomanda(Long codiSogg, String email) throws
Exception {
_logger.debug("[PwdEJB] - Inizio recuperaDomanda");
try {
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
isDoneCheckAdeguamentoPswd = true;
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
recuMail = email;
}
if(!isDoneCheckAdeguamentoPswd) {
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
esito.setDescrizioneErrore(warning);
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
}
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setRisultato(null);
return esito;
}
_logger.debug("[PwdEJB] - Fine recuperaDomanda");
return esito;
}
@Override
public EsitoEJB<SimpleElementDTO<String>> tentativiLoginSuperati(String
codiSogg) throws Exception {
_logger.debug("[PwdEJB] - Inizio getTentativiLogin");
esito.setDescrizioneErrore(msg);
esito.setRisultato(tentativiSuperati);
@Override
public EsitoEJB<AutenticazioneDTO> pwdSacduta(String codiSogg, String pwd)
throws Exception {
_logger.debug("[PwdEJB] - Inizio pwdSacduta");
return esito;
}
/**
* Effettua le singole operazioni di adeguamento password
*
* @param codiSogg la matricola dello studente richiedente
* @param oldPwd vecchia password
* @return un esito stringa che può assumere valore "0" (adeguamento
effettuato), "1" (adeguamento da effettuare), "2"
* (reset della password da effettuare)
* @throws SQLException
*/
@Override
public EsitoEJB<String> checkAdeguamentoPwd(String codiSogg, String oldPwd)
throws Exception {
_logger.debug("[PwdEJB] - Inizio checkAdeguamentoPwd");
if (codiPwdOld.equalsIgnoreCase("OK")) {
if(!userHasMail || testModiPwd == null ||
testModiPwd.equalsIgnoreCase("0")) {
flagAdeguamento = "1"; // adeguamento
} else {
flagAdeguamento = "0"; // accesso
}
} else if (codiPwdOld.equalsIgnoreCase("NON CONFERMATA") ||
codiPwdOld.equalsIgnoreCase("NON VALIDA")) {
flagAdeguamento = "1"; // adeguamento
} else if (codiPwdOld.equalsIgnoreCase("RESET") ||
codiPwdOld.equalsIgnoreCase("ASSEGNATA")) {
if (!userHasMail || testModiPwd == null ||
testModiPwd.equalsIgnoreCase("0")) {
flagAdeguamento = "1"; // adeguamento
} else
flagAdeguamento = "2"; // reset
}
return esito;
}
/* METODO ORIGINALE
@Override
public EsitoEJB<String> checkAdeguamentoPwd(String codiSogg, String oldPwd)
throws Exception {
_logger.debug("[PwdEJB] - Inizio checkAdeguamentoPwd");
return esito;
}*/
/**
* Recupera lo status della password
*
* @param codiSogg la matricola dello studente richiedente
* @return un esito stringa che può assumere valore "OK", "NON CONFERMATA",
"RESET"
* @throws SQLException
*/
@Override
public EsitoEJB<String> getStatusPwdOld(String codiSogg) throws Exception {
_logger.debug("[PwdEJB] - Inizio getStatusPwdOld");
esito.setRisultato(dto.getCodiPwdOld());
return esito;
}
/**
* Effettua le singole operazioni di adeguamento password
*
* @param codiSogg la matricola dello studente richiedente
* @param email la mail di recupero password
* @param codiDomanda codice della domanda
* @param risposta risposta
* @param oldPwd vecchia password
* @param newPwd nuova password
* @return un esito true se l'operazione di adeguamento è andata a buon fine,
false altrimenti
* @throws SQLException
*/
@Override
public EsitoEJB<Boolean> effettuaAdeguamentoPwd(Long codiSogg, String email,
String codiDomanda, String risposta,
String oldPwd, String newPwd, String token,Boolean emailSpidCie)
throws Exception {
_logger.debug("[PwdEJB] - Inizio effettuaAdeguamentoPwd");
_logger.info("[PwdEJB] - boolean emailSpidCie : "+ emailSpidCie);
try {
rispostaHash = CryptoUtil.getBase64Sha1(risposta.toUpperCase());
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
}
existMail = dDao.existMailForUser(""+codiSogg);
if (reset == false)
context.setRollbackOnly();
else {
// recupera i giorni di validità della password
PasswordUtil pwdUtil = new PasswordUtil();
int ggAllaScadenza = pwdUtil.getGiorniAllaScad("");
// AGGIORNA UTENTE
reset = dDao.updateUtenteAdeguamento(codiSogg, newPwd,
codiDomanda, rispostaHash, ggAllaScadenza);
}
if (reset == false)
context.setRollbackOnly();
else {
// AGGIORNA EMAIL RECAPITI
reset = dDao.aggiornaIndiMailRecapiti("" + codiSogg,
email);
}
if (reset == false) {
long codiIndi = dDao.getCodiIndi();
if (reset == false)
context.setRollbackOnly();
} catch (Exception e) {
context.setRollbackOnly();
throw e;
}
esito.setRisultato(reset);
return esito;
}
/**
* recupera tutte le domande di sicurezza da tabella
*
*
* @return un esito contenente la stringa relativa, una stringa vuota e
messaggio d'errore altrimenti
*/
@Override
public EsitoEJB<List<DomandaSicurezzaDTO>> recuperaDomande() {
try {
esito.setRisultato(result);
} catch (Exception e) {
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
} finally {
return esito;
}
/**
* recupera il testo di uno specifico codiDomanda (la domanda per il recupero
della password)
*
* @param codiDomanda il codice domanda da recuperare
* @return un esito contenente la stringa relativa, una stringa vuota e
messaggio d'errore altrimenti
*/
@Override
public EsitoEJB<String> getTestoDomanda(String codiDomanda) {
try {
codiDomandaInt = Integer.parseInt(codiDomanda);
} else {
esito.setDescrizioneErrore("Nessuna domanda correlata a
questo codice");
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
}
} catch (Exception e) {
esito.setLivelloErrore(TipoErrore.ERRORE_GENERICO.getLivelloErrore());
esito.setCodiceErrore(TipoErrore.ERRORE_GENERICO.getCodiceErrore());
return esito;
} finally {
return esito;
}
}
}
}
if(tokens.length==2){
indiHiddenMail=tokens[0]+'@'+tokens[1];
}
}
_logger.debug("[PwdEJB] - Fine hiddenMail " + indiHiddenMail);
return indiHiddenMail;
}
/*
* @Override public EsitoEJB<Boolean> forgotPwd(String codiSogg, String
newPwd) throws Exception{
* _logger.debug("[PwdEJB] - Inizio forgotPwd");
*
* PwdServiceDao dDao = new PwdServiceDao(dataSource); Boolean reset =
dDao.forgotPwd(codiSogg, newPwd); EsitoEJB<Boolean>
* esito = new EsitoEJB<Boolean>(); esito.setRisultato(reset);
*
* _logger.debug("[PwdEJB] - Fine forgotPwd");
*
* return esito; }
*
* @Override public EsitoEJB<Boolean> notificaScadenzaPwd(String codiSogg)
throws Exception{
* _logger.debug("[PwdEJB] - Inizio notificaScadenzaPwd");
*
* PwdServiceDao dDao = new PwdServiceDao(dataSource); Boolean reset =
dDao.resetPwd(codiSogg, email, newPwd);
* EsitoEJB<Boolean> esito = new EsitoEJB<Boolean>();
esito.setRisultato(reset);
*
* _logger.debug("[PwdEJB] - Fine notificaScadenzaPwd");
*
* return esito; }
*/
}