package br.usp.nds.remote.persistencia; import java.io.Serializable; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.Random; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; import com.sendgrid.SendGrid; import com.sendgrid.SendGrid.Email; @Entity public class Usuario extends Entidade implements Serializable { @Id private String email; private String nome; private String senha; @Transient private Perfil perfil; @Transient private String embarcacoes; @Transient private String grupos; @Transient private String nomesEmbarcacoes; @Transient private String nomesGrupos; @Transient private String novaSenha; public void esqueciSenha() throws Exception { SendGrid sg = new SendGrid("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"); Email e = new Email(); e.setTo(new String[] {email}); e.setFrom("fabioskomori@gmail.com"); e.setSubject("[remote] Senha"); String novaSenha = new Random().nextInt(1000000) + ""; e.setText("Sua nova senha é: " + novaSenha); Usuario u = em.find(Usuario.class, email); MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(novaSenha.getBytes("UTF-8")); novaSenha = new BigInteger(1, crypt.digest()).toString(16); u.setSenha(novaSenha); sg.send(e); } public Usuario usuarioLogado() { Usuario usuario = em.find(Usuario.class, request.getUserPrincipal().getName()); if (request.isUserInRole("ADMINISTRADOR")) { usuario.setPerfil(Perfil.ADMINISTRADOR); } else if (request.isUserInRole("OPERADOR")) { usuario.setPerfil(Perfil.OPERADOR); } return usuario; } public void trocarSenha() throws Exception { Usuario u = em.find(Usuario.class, request.getUserPrincipal().getName()); MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(senha.getBytes("UTF-8")); if (new BigInteger(1, crypt.digest()).toString(16).equals(u.getSenha())) { crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(novaSenha.getBytes("UTF-8")); u.setSenha(new BigInteger(1, crypt.digest()).toString(16)); } else { throw new Exception("Senha atual não confere!"); } } public List listar() { List usuarios = em.createQuery("SELECT u FROM Usuario u ORDER BY u.nome").getResultList(); for (Usuario usuario : usuarios) { usuario.setPerfil(em.find(UsuarioPerfil.class, usuario.getEmail()).getPerfil()); List embarcacoes = em.createQuery("SELECT e FROM UsuarioEmbarcacao e WHERE e.usuario.email = '" + usuario.getEmail() + "'").getResultList(); String es = ""; String esn = ""; for (UsuarioEmbarcacao embarcacao : embarcacoes) { es += "," + embarcacao.getEmbarcacao().getCodigo(); esn += " / " + embarcacao.getEmbarcacao().getNome(); } if (!es.isEmpty()) { es = es.substring(1); esn = esn.substring(3); } usuario.setEmbarcacoes(es); usuario.setNomesEmbarcacoes(esn); usuario.setGrupos(""); usuario.setNomesGrupos(""); List grupos = em.createQuery("SELECT r FROM UsuarioGrupoRelacao r WHERE r.usuario.email = '" + usuario.getEmail() + "'").getResultList(); for (UsuarioGrupoRelacao grupo : grupos) { usuario.setGrupos(usuario.getGrupos() + "," + grupo.getGrupo().getCodigo()); usuario.setNomesGrupos(usuario.getNomesGrupos() + " / " + grupo.getGrupo().getNome()); } if (!usuario.getGrupos().isEmpty()) { usuario.setGrupos(usuario.getGrupos().substring(1)); usuario.setNomesGrupos(usuario.getNomesGrupos().substring(3)); } } return usuarios; } public void incluir() throws Exception { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(senha.getBytes("UTF-8")); senha = new BigInteger(1, crypt.digest()).toString(16); em.persist(this); UsuarioPerfil up = new UsuarioPerfil(); up.setUsuario(email); up.setPerfil(perfil); em.persist(up); if (embarcacoes != null && !embarcacoes.isEmpty()) { for (String embarcacao : embarcacoes.split(",")) { em.persist(new UsuarioEmbarcacao(this, em.find(Embarcacao.class, Integer.parseInt(embarcacao)))); } } if (grupos != null && !grupos.isEmpty()) { for (String grupo : grupos.split(",")) { em.persist(new UsuarioGrupoRelacao(this, em.find(UsuarioGrupo.class, Integer.parseInt(grupo)))); } } } public void alterar() throws Exception { Usuario u = em.find(Usuario.class, email); if (!u.getSenha().equals(senha)) { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(senha.getBytes("UTF-8")); senha = new BigInteger(1, crypt.digest()).toString(16); } em.merge(this); UsuarioPerfil up = em.find(UsuarioPerfil.class, email); up.setPerfil(perfil); em.createQuery("DELETE FROM UsuarioEmbarcacao e WHERE e.usuario.email = '" + email + "'").executeUpdate(); if (embarcacoes != null && !embarcacoes.isEmpty()) { for (String embarcacao : embarcacoes.split(",")) { em.persist(new UsuarioEmbarcacao(this, em.find(Embarcacao.class, Integer.parseInt(embarcacao)))); } } em.createQuery("DELETE FROM UsuarioGrupoRelacao g WHERE g.usuario.email = '" + email + "'").executeUpdate(); if (grupos != null && !grupos.isEmpty()) { for (String grupo : grupos.split(",")) { em.persist(new UsuarioGrupoRelacao(this, em.find(UsuarioGrupo.class, Integer.parseInt(grupo)))); } } } public void excluir() { em.remove(em.find(UsuarioPerfil.class, email)); em.createQuery("DELETE FROM UsuarioEmbarcacao e WHERE e.usuario.email = '" + email + "'").executeUpdate(); em.createQuery("DELETE FROM UsuarioGrupoRelacao r WHERE r.usuario.email = '" + email + "'").executeUpdate(); em.remove(em.find(Usuario.class, email)); } public String getNovaSenha() { return novaSenha; } public void setNovaSenha(String novaSenha) { this.novaSenha = novaSenha; } public String getNomesEmbarcacoes() { return nomesEmbarcacoes; } public void setNomesEmbarcacoes(String nomesEmbarcacoes) { this.nomesEmbarcacoes = nomesEmbarcacoes; } public String getNomesGrupos() { return nomesGrupos; } public void setNomesGrupos(String nomesGrupos) { this.nomesGrupos = nomesGrupos; } public String getGrupos() { return grupos; } public void setGrupos(String grupos) { this.grupos = grupos; } public String getEmbarcacoes() { return embarcacoes; } public void setEmbarcacoes(String embarcacoes) { this.embarcacoes = embarcacoes; } public Perfil getPerfil() { return perfil; } public void setPerfil(Perfil perfil) { this.perfil = perfil; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } }