Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*********************************************************************************************************************************
- * AutoLoad Connection
- *********************************************************************************************************************************/
- require_once(@dirname(dirname(dirname(__FILE__))).'/autoload/AutoLoad.class.php');
- /*********************************************************************************************************************************
- * User Settings
- *********************************************************************************************************************************/
- class Usuario {
- /**
- * Nome da tabela de usuários
- */
- var $tabela_users = 'pystudio_users';
- /**
- * Nomes dos campos onde ficam o usuário e a senha de cada usuário
- * Formato: tipo => nome_do_campo
- */
- var $campos = array(
- 'id' => 'user_id',
- 'usuario' => 'user_login',
- 'senha' => 'user_password',
- 'email' => 'user_email',
- 'nome' => 'user_name',
- 'avatar' => 'user_avatar',
- 'descricao' => 'user_description',
- 'status' => 'user_status',
- 'rank' => 'user_rank',
- 'ip' => 'user_ip',
- 'data' => 'user_date',
- 'ultimo_acesso' => 'user_last_access'
- );
- /**
- * Nomes dos campos que serão pegos da tabela de usuarios e salvos na sessão,
- * caso o valor seja false nenhum dado será consultado
- * @var mixed
- */
- var $colunas_users = array(
- 'user_id',
- 'user_login',
- 'user_password',
- 'user_email',
- 'user_name',
- 'user_avatar',
- 'user_description',
- 'user_status',
- 'user_rank',
- 'user_ip',
- 'user_date',
- 'user_last_access'
- );
- /**
- * Prefixo das chaves usadas na sessão
- * @var string
- */
- var $prefixoChaves = 'usuario_';
- /**
- * Inicia a sessão se necessário?
- * @var boolean
- */
- var $iniciaSessao = true;
- /**
- * Usa um cookie para melhorar a segurança?
- * @var boolean
- */
- var $cookie = true;
- /**
- * Armazena as mensagens
- * @var string
- */
- var $msg = '';
- /**
- * Armazena as mensagens de erro
- * @var string
- */
- var $erro = '';
- /**
- * Quantidade (em dias) que o sistema lembrará os dados do usuário ("Lembrar minha senha")
- *
- * Usado apenas quando o terceiro parâmetro do método Usuario::logaUsuario() for true
- * Os dados salvos serão encriptados usando base64
- *
- * @var integer
- * @since v1.1
- */
- var $lembrarTempo = 5;
- /**
- * Construtor
- *
- * Inicializa a classe e permite a definição de onde os arquivos
- * serão salvos. Se o parâmetro $folder for ignorado o local dos
- * arquivos temporários do sistema operacional será usado
- *
- * @return void
- */
- public function __construct() {}
- /**
- * Usa algum tipo de encriptação para codificar uma senha
- *
- * Método protegido: Só pode ser acessado por dentro da classe
- *
- * @param string $senha - A senha que será codificada
- * @return string - A senha já codificada
- */
- protected function __codificarSenha($senha) {
- // Altere aqui caso você use, por exemplo, o MD5:
- // return md5($senha);
- return substr(hash('sha512', $senha), strlen(), 40);
- }
- /**
- * Usa algum tipo de encriptação para verificar a codificação de uma senha
- *
- * Método protegido: Só pode ser acessado por dentro da classe
- *
- * @param string $senha - A senha que será verificar
- * @param string $hash - A senha procurada no banco de dados
- * @return string - A senha já verificada
- */
- protected function __verificarSenha($senha, $senha_db) {
- // Altere aqui caso você use, por exemplo, o MD5:
- // return md5($senha);
- return in_array($senha, $senha_db);
- }
- /**
- * Verifica os usuários
- *
- * Método protegido: Só pode ser acessado por dentro da classe
- *
- * @param string $usuario - O usuário digitado que passará pelo processo de verificação
- * @param string $user_db - O usuário procurado no banco de dados
- * @return string - O usuário já verificado
- */
- protected function __verificarUsuario($usuario, $user_db) {
- // Altere aqui caso você use, por exemplo, o MD5:
- // return md5($senha);
- return in_array($usuario, $user_db);
- }
- /**
- * Loga um usuário no sistema salvando seus dados na sessão
- *
- * @param string $usuario - O usuário que será logado
- * @param string $senha - A senha do usuário
- * @return boolean - Se o usuário foi logado ou não
- */
- public function LogarUsuario($usuario = NULL, $senha = NULL, $redirecionamento = false) {
- // Banco de Dados
- $Conexao = new Conexao();
- $Conexao->Conector();
- $db = $Conexao->IniciarConexao();
- // Instâncias
- $Modulo = new Modulos();
- // Codificação da senha
- $senha = $this->__codificarSenha($senha);
- // Monta o formato SQL da lista de campos
- $dados = join(', ', array_unique($this->colunas_users));
- // Procura por usuários com a mesma senha digitada no formulário
- $stm = $db->prepare('SELECT '.$this->campos['usuario'].' FROM '.$this->tabela_users.' WHERE '.$this->campos['usuario'].' = ?');
- $stm->execute(array($usuario));
- $consulta = $stm->rowCount();
- // Resultado da Consulta
- if ($consulta != NULL) {
- // Consultar os dados no MYSQL
- $stm = $db->prepare('SELECT '.$dados.' FROM '.$this->tabela_users.' WHERE '.$this->campos['usuario'].' = ?');
- $stm->execute(array($usuario));
- $retorno = $stm->fetch();
- // Verificar o(a) usuário/senha do banco de dados com a digitada no formulário
- $LoginUsuario = Array();
- $LoginUsuario[] = $retorno->user_login;
- $SenhaUsuario = Array();
- $SenhaUsuario[] = $retorno->user_password;
- // Verificando se a conta já está logada no sistema
- if ($retorno->user_status == 0) {
- if ($this->__verificarUsuario($usuario, $LoginUsuario) && $this->__verificarSenha($senha, $SenhaUsuario)) {
- // Iniciar a sessão?
- if ($this->iniciaSessao AND !isset($_SESSION)) {
- session_start();
- }
- // Passa os dados para a sessão
- foreach ($retorno AS $chave => $valor) {
- $_SESSION[$this->prefixoChaves.$chave] = $valor;
- }
- // Atualizando o banco de dados - STATUS
- $Modulo->updateDB(
- $this->tabela_users,
- $this->campos['status'] .' = 1, '.
- $this->campos['ip'] .' = "'.$_SERVER['REMOTE_ADDR'].'", '.
- $this->campos['ultimo_acesso'] .' = "'.date('Y-m-d H:i:s').'"',
- $this->campos['usuario'] .' = "'.$usuario.'"'
- );
- // Usuário logado com sucesso
- $_SESSION[$this->prefixoChaves.'logado'] = true;
- // Define um cookie para maior segurança?
- if ($this->cookie) {
- // Monta uma cookie com informações gerais sobre o usuário: usuario, ip e navegador
- $valor = join('#', array($usuario, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
- // Encripta o valor do cookie
- $valor = md5($valor);
- setcookie($this->prefixoChaves.'token', $valor, 0, '/');
- }
- // Log
- $Modulo->saveLog('Login efetuado com sucesso. <b>('.$usuario.')</b>');
- // Redirecionamento
- echo '<script type="text/javascript">setTimeout(location.href = "'.$redirecionamento.'", 0000);</script>';
- } else if (!$this->__verificarSenha($senha, $SenhaUsuario)) {
- // Log
- $Modulo->saveLog('A senha que o usuário <b>('.$usuario.')</b> tentou digitar, não pertence ao nome de usuário.');
- // Mensagem de erro
- $this->msg = 'error';
- $this->erro = 'A senha não pertence ao usuário.';
- }
- } else {
- // Log
- $Modulo->saveLog('O usuário <b>('.$usuario.')</b> tentou fazer login com sua conta já conectada no sistema.');
- // Mensagem de erro
- $this->msg = 'warning';
- $this->erro = 'Sua conta já está online no sistema.';
- }
- } else {
- // Consultar os dados no MYSQL
- $stm = $db->prepare('SELECT '.$dados.' FROM '.$this->tabela_users.' WHERE '.$this->campos['senha'].' = ?');
- $stm->execute(array($senha));
- $consulta = $stm->rowCount();
- // Verifica se há registros
- if ($consulta != NULL) {
- // Retorna os dados do bando de dados
- $retorno = $stm->fetch();
- // Verificar o(a) usuário/senha do banco de dados com a digitada no formulário
- $LoginUsuario = Array();
- $LoginUsuario[] = $retorno->user_login;
- $SenhaUsuario = Array();
- $SenhaUsuario[] = $retorno->user_password;
- // Verifica se o usuário pertence a senha
- if (!$this->__verificarUsuario($usuario, $LoginUsuario) && $this->__verificarSenha($senha, $SenhaUsuario)) {
- // Log
- $Modulo->saveLog('O nome de usuário <b>('.$usuario.')</b> não pertence a senha.');
- // Mensagem de erro
- $this->msg = 'error';
- $this->erro = 'O usuário não pertence a senha.';
- }
- } else {
- // Log
- $Modulo->saveLog('A conta que tem por usuário <b>('.$usuario.')</b> não existe no banco de dados.');
- // Mensagem de erro
- $this->msg = 'info';
- $this->erro = 'A conta não existe. <a href="/?pagina=register">Faça seu cadastro!</a>';
- }
- }
- // Mensagem de erros
- if (isset($this->msg)) {
- if ($this->msg == 'error') {
- echo '<div class="callout callout-danger alert alert-dismissible">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- <b>Oh snap!</b> '.$this->erro.'
- </div>';
- } else if ($this->msg == 'warning') {
- echo '<div class="callout callout-warning alert alert-dismissible">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- <b>Warning!</b> '.$this->erro.'
- </div>';
- } else if ($this->msg == 'info') {
- echo '<div class="callout callout-info alert alert-dismissible">
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
- <b>Heads up!</b> '.$this->erro.'
- </div>';
- }
- }
- }
- /**
- * Salva os dados do usuário em cookies ("Lembrar minha senha")
- *
- * @access protected
- * @since v1.1
- *
- * @param string $usuario O usuário que será lembrado
- * @param string $senha A senha do usuário
- * @return void
- */
- protected function __lembrarDados($usuario, $senha) {
- // Calcula o timestamp final para os cookies expirarem
- $tempo = strtotime("+{$this->lembrarTempo} minutes", time());
- // Encripta os dados do usuário usando base64
- // O rand(1, 9) cria um digito no início da string que impede a descriptografia
- $usuario = rand(1, 9) . base64_encode($usuario);
- $senha = rand(1, 9) . base64_encode($senha);
- // Cria um cookie com o usuário
- setcookie($this->prefixoChaves.'lu', $usuario, $tempo, $this->cookiePath);
- // Cria um cookie com a senha
- setcookie($this->prefixoChaves.'ls', $senha, $tempo, $this->cookiePath);
- }
- /**
- * Verifica os dados do cookie (caso eles existam)
- *
- * @access protected
- * @since v1.1
- * @uses Usuario::logaUsuario()
- *
- * @return boolean Os dados são validos?
- */
- protected function __verificarDadosLembrados() {
- // Os cookies de "Lembrar minha senha" existem?
- if (isset($_COOKIE[$this->prefixoChaves.'lu']) AND isset($_COOKIE[$this->prefixoChaves.'ls'])) {
- // Pega os valores salvos nos cookies removendo o digito e desencriptando
- $usuario = base64_decode(substr($_COOKIE[$this->prefixoChaves.'lu'], 1));
- $senha = base64_decode(substr($_COOKIE[$this->prefixoChaves.'ls'], 1));
- // Tenta logar o usuário com os dados encontrados nos cookies
- return $this->LogarUsuario($_SESSION[$this->prefixoChaves.'user_login'], $_SESSION[$this->prefixoChaves.'user_password'], true);
- }
- // Não há nenhum cookie, dados inválidos
- return false;
- }
- /**
- * Limpa os dados lembrados dos cookies ("Lembrar minha senha")
- *
- * @access protected
- * @since v1.1
- *
- * @return void
- */
- protected function __limparDadosLembrados() {
- // Deleta o cookie com o usuário
- if (isset($_COOKIE[$this->prefixoChaves.'lu'])) {
- setcookie($this->prefixoChaves.'lu', false, (time() - 3600), $this->cookiePath);
- unset($_COOKIE[$this->prefixoChaves.'lu']);
- }
- // Deleta o cookie com a senha
- if (isset($_COOKIE[$this->prefixoChaves.'ls'])) {
- setcookie($this->prefixoChaves.'ls', false, (time() - 3600), $this->cookiePath);
- unset($_COOKIE[$this->prefixoChaves.'ls']);
- }
- }
- /**
- * Verifica se há um usuário logado no sistema
- *
- * @return boolean - Se há um usuário logado ou não
- */
- public function UsuarioLogado() {
- // Inicia a sessão?
- if ($this->iniciaSessao AND !isset($_SESSION)) {
- session_start();
- }
- // Verifica se não existe o valor na sessão
- if (!isset($_SESSION[$this->prefixoChaves.'logado']) OR !$_SESSION[$this->prefixoChaves.'logado']) {
- return false;
- }
- // Verifica cookies salvos
- $this->__verificarDadosLembrados();
- // Faz a verificação do cookie?
- if ($this->cookie) {
- // Verifica se o cookie não existe
- if (!isset($_COOKIE[$this->prefixoChaves.'token'])) {
- return false;
- } else {
- // Monta o valor do cookie
- $valor = join('#', array($_SESSION[$this->prefixoChaves.'user_login'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
- // Encripta o valor do cookie
- $valor = md5($valor);
- // Verifica o valor do cookie
- if ($_COOKIE[$this->prefixoChaves.'token'] !== $valor) {
- return false;
- }
- // Lembrar os Dados
- $this->__lembrarDados($_SESSION[$this->prefixoChaves.'user_login'], $_SESSION[$this->prefixoChaves.'user_password']);
- }
- }
- // A sessão e o cookie foram verificados, há um usuário logado
- return true;
- }
- /**
- * Desconecta a conta do sistema
- *
- * @param string $redirecionamento - Redireciona você a uma determinada página
- * @return boolean to usuarioLogado()
- */
- public function LogoutUsuario($redirecionamento = false) {
- // Inicia a sessão?
- if ($this->iniciaSessao AND !isset($_SESSION)) {
- session_start();
- }
- // Tamanho do prefixo
- $tamanho = strlen($this->prefixoChaves);
- // Destroi todos os valores da sessão relativos ao sistema de login
- foreach ($_SESSION AS $chave => $valor) {
- // Remove apenas valores cujas chaves comecem com o prefixo correto
- if (substr($chave, 0, $tamanho) == $this->prefixoChaves) {
- unset($_SESSION[$chave]);
- }
- }
- // Destrói asessão se ela estiver vazia
- if (count($_SESSION) == 0) {
- // Destruir a sessão
- session_destroy();
- // Remove o cookie da sessão se ele existir
- if (isset($_COOKIE['PHPSESSID'])) {
- setcookie('PHPSESSID', false, (time() - 3600));
- unset($_COOKIE['PHPSESSID']);
- }
- }
- // Remove o cookie com as informações do visitante
- if ($this->cookie AND isset($_COOKIE[$this->prefixoChaves.'token'])) {
- setcookie($this->prefixoChaves.'token', false, (time() - 3600), '/');
- unset($_COOKIE[$this->prefixoChaves.'token']);
- // Remove os Cookies Lembrados
- $this->__limparDadosLembrados();
- }
- // Retorna SE não há um usuário logado
- return !$this->UsuarioLogado();
- }
- }
- /*********************************************************************************************************************************
- * End of User Settings
- *********************************************************************************************************************************/
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement