/* * Copyright (C) 2015 Allsoft * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package br.com.allsoft.avros.dao; import br.com.allsoft.avros.exceptions.AuditoriaException; import br.com.allsoft.avros.factory.ConexaoMySQL; import br.com.allsoft.avros.modelo.ClsBD; import br.com.allsoft.avros.modelo.JDBCAuditoria; import br.com.allsoft.avros.modelo.Registro; import br.com.allsoft.avros.modelo.Usuario; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * * @author Luana Nascimento */ public class AuditoriaLogin extends JDBCAuditoria { //Variáveis public static Connection con = null; static String nomeTabela; static String view; static String campos; //Métodos /** * Abre uma conexão e fecha a antiga * @throws SQLException */ private static void abreCon() throws SQLException { if ((con == null) || (con.isClosed())) { con = ConexaoMySQL.getConexaoMySQL(); } } /** * Método que armazena o horário que o usuário fez login * * @param usuario usuário que fez o login * @param codSql codigo sql utilizado */ public static void login(Usuario usuario, String codSql) throws AuditoriaException { try { tabela = ClsBD.getTblLogin(); acao = "login"; descricao = usuario.getNick() + " logou no sistema"; sql = codSql; codDado = usuario.getId(); idLogin = usuario.getId(); con = ConexaoMySQL.getConexaoMySQL(); antes = "-"; //No caso de updates, como o campo era antes depois = "-"; //No caso de updates, como o campo ficou no fim campo = "-"; //Campo alterado String query = "call insere_registro(?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement stmt = con.prepareStatement(query); stmt.setString(1, tabela); stmt.setInt(2, codDado); stmt.setString(3, acao); stmt.setString(4, descricao); stmt.setInt(5, idLogin); stmt.setString(6, sql); stmt.setString(7, antes); stmt.setString(8, depois); stmt.setString(9, campo); stmt.execute(); stmt.close(); con.close(); } catch (SQLException ex) { throw new AuditoriaException(ex); } } /** * Método que armazena o horário que o usuário fez logout * * @param usuario usuário que fez o logout * @throws AuditoriaException */ public static void logout(Usuario usuario) throws AuditoriaException { try { tabela = ClsBD.getTblLogin(); acao = "login"; descricao = usuario.getNick() + " saiu do sistema"; codDado = usuario.getId(); idLogin = usuario.getId(); con = ConexaoMySQL.getConexaoMySQL(); antes = "-"; //No caso de updates, como o campo era antes depois = "-"; //No caso de updates, como o campo ficou no fim campo = "-"; //Campo alterado sql = "-"; String query = "call insere_registro(?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement stmt = con.prepareStatement(query); stmt.setString(1, tabela); stmt.setInt(2, codDado); stmt.setString(3, acao); stmt.setString(4, descricao); stmt.setInt(5, idLogin); stmt.setString(6, sql); stmt.setString(7, antes); stmt.setString(8, depois); stmt.setString(9, campo); stmt.execute(); stmt.close(); con.close(); } catch (SQLException ex) { throw new AuditoriaException(ex); } } /** * Grava o armazenamento de backup na auditoria * * @param usuario que armazenou * @throws AuditoriaException */ public static void salvaBackup(Usuario usuario) throws AuditoriaException { try { tabela = ClsBD.getTblLogin(); acao = "login"; descricao = usuario.getNick() + " atualizou o arquivo de backup"; codDado = usuario.getId(); idLogin = usuario.getId(); con = ConexaoMySQL.getConexaoMySQL(); antes = "-"; //No caso de updates, como o campo era antes depois = "-"; //No caso de updates, como o campo ficou no fim campo = "-"; //Campo alterado String query = "call insere_registro(?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement stmt = con.prepareStatement(query); stmt.setString(1, tabela); stmt.setInt(2, codDado); stmt.setString(3, acao); stmt.setString(4, descricao); stmt.setInt(5, idLogin); stmt.setString(6, sql); stmt.setString(7, antes); stmt.setString(8, depois); stmt.setString(9, campo); stmt.execute(); stmt.close(); con.close(); } catch (SQLException ex) { throw new AuditoriaException(ex); } } /** * Grava o armazenamento de backup na auditoria * * @param usuario que armazenou * @throws AuditoriaException */ public static void recuperaBackup(Usuario usuario) throws AuditoriaException { try { tabela = ClsBD.getTblLogin(); acao = "login"; descricao = usuario.getNick() + " recuperou as informações a partir do backup"; codDado = usuario.getId(); idLogin = usuario.getId(); con = ConexaoMySQL.getConexaoMySQL(); antes = "-"; //No caso de updates, como o campo era antes depois = "-"; //No caso de updates, como o campo ficou no fim campo = "-"; //Campo alterado String query = "call insere_registro(?, ?, ?, ?, ?, ?, ?, ?, ?)"; PreparedStatement stmt = con.prepareStatement(query); stmt.setString(1, tabela); stmt.setInt(2, codDado); stmt.setString(3, acao); stmt.setString(4, descricao); stmt.setInt(5, idLogin); stmt.setString(6, sql); stmt.setString(7, antes); stmt.setString(8, depois); stmt.setString(9, campo); stmt.execute(); stmt.close(); con.close(); } catch (SQLException ex) { throw new AuditoriaException(ex); } } /** * Retorna todos os registros de login da auditoria * * @return * @throws SQLException */ public static List cauditLogin(String nick) throws SQLException { List<Registro> registros = new ArrayList<>(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); abreCon(); nomeTabela = ClsBD.getTblAuditoria(); String campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + nomeTabela + " where " + ClsBD.getAudAcao() + " = 'login'" + "and " + ClsBD.getAudIdLogin() + " = " + usuario.getId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } return registros; } /** * Retorna todos os registros de login da auditoria * * @return * @throws SQLException */ public static List cauditLogin() throws SQLException { List<Registro> registros = new ArrayList<>(); abreCon(); nomeTabela = ClsBD.getTblAuditoria(); String campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + nomeTabela + " where " + ClsBD.getAudAcao() + " = 'login'"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } return registros; } /** * Consulta registros de logins feitos no sistema nas últimas 24h * * @param nick do usuário a ser visualizado * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin24h(String nick) throws SQLException { List<Registro> registros = new ArrayList<>(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit24h(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); String sql = "select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login' " + "and " + ClsBD.getAudIdLogin() + " = " + usuario.getId(); PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos no sistema nas últimas 24h * * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin24h() throws SQLException { List<Registro> registros = new ArrayList<>(); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit24h(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); String sql = "select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'"; PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos último mês * * @param nick do usuário a ser visualizado * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin1m(String nick) throws SQLException { List<Registro> registros = new ArrayList<>(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit1m(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'" + "and " + ClsBD.getAudIdLogin() + " = " + usuario.getId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos último mês * * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin1m() throws SQLException { List<Registro> registros = new ArrayList<>(); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit1m(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos últimos 7 dias * * @param nick do usuário a ser visualizado * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin7d(String nick) throws SQLException { List<Registro> registros = new ArrayList<>(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit7d(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'" + "and " + ClsBD.getAudIdLogin() + " = " + usuario.getId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos últimos 7 dias * * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin7d() throws SQLException { List<Registro> registros = new ArrayList<>(); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit7d(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos últimos 3 dias * * @param nick do usuário a ser visualizado * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin3d(String nick) throws SQLException { List<Registro> registros = new ArrayList<>(); Usuario usuario = UsuarioDAO.cusuarioNick(nick); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit3d(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'" + "and " + ClsBD.getAudIdLogin() + " = " + usuario.getId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } /** * Consulta registros de logins feitos nos últimos 3 dias * * @return List com os registros encontrados * @throws SQLException */ public static List vauditLogin3d() throws SQLException { List<Registro> registros = new ArrayList<>(); con = ConexaoMySQL.getConexaoMySQL(); view = ClsBD.getViewAudit3d(); campos = ClsBD.getAudId() + ", " + ClsBD.getAudIdLogin() + ", " + ClsBD.getAudAcao() + ", " + ClsBD.getAudDesc() + ", " + ClsBD.getAudData(); PreparedStatement stmt = con.prepareStatement("select " + campos + " from " + view + " where " + ClsBD.getAudAcao() + " = 'login'"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Registro registro = new Registro(); registro.setId(rs.getInt(ClsBD.getAudId())); registro.setIdLogin(rs.getInt(ClsBD.getAudIdLogin())); registro.setAcao(rs.getString(ClsBD.getAudAcao())); registro.setDescricao(rs.getString(ClsBD.getAudDesc())); registro.setData(rs.getTimestamp(ClsBD.getAudData())); registros.add(registro); } stmt.close(); con.close(); return registros; } }