HEX
Server: LiteSpeed
System: Linux cp01.bhostbrasil.com.br 5.14.0-611.16.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Dec 22 03:40:39 EST 2025 x86_64
User: onlyfibr (1083)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/onlyfibr/public_html/assinar/admin/login.php
<?php
// admin/login.php
session_start();
require_once '../config.php'; // Acessa config um nível acima
require_once '../functions.php'; // Acessa functions um nível acima

$mensagem_erro_login = '';
$nome_usuario_tentativa = '';

// Se já estiver logado como admin, redireciona para o dashboard
if (isset($_SESSION['admin_user_id'])) {
    header('Location: index.php');
    exit;
}

// Processa tentativa de login
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login_admin'])) {
    $nome_usuario_tentativa = trim($_POST['nome_usuario'] ?? '');
    $senha_digitada = $_POST['senha'] ?? '';

    if (empty($nome_usuario_tentativa) || empty($senha_digitada)) {
        $mensagem_erro_login = 'Usuário e senha são obrigatórios.';
    } elseif (!$pdo) {
        $mensagem_erro_login = 'Erro crítico de conexão com o banco de dados.';
    } else {
        try {
            // Busca o usuário no banco
            $sql = "SELECT id, nome_usuario, senha_hash, nome_completo, nivel_acesso, ativo
                    FROM admin_usuarios
                    WHERE nome_usuario = :username LIMIT 1";
            $stmt = $pdo->prepare($sql);
            $stmt->bindParam(':username', $nome_usuario_tentativa);
            $stmt->execute();
            $admin = $stmt->fetch(PDO::FETCH_ASSOC);

            // Verifica se usuário existe, se está ativo e se a senha confere
            if ($admin && $admin['ativo'] && password_verify($senha_digitada, $admin['senha_hash'])) {
                // Login bem-sucedido!

                // Regenera ID da sessão para segurança
                session_regenerate_id(true);

                // Guarda dados do admin na sessão (NÃO guarde o hash da senha)
                $_SESSION['admin_user_id'] = $admin['id'];
                $_SESSION['admin_user_name'] = $admin['nome_usuario'];
                $_SESSION['admin_nome_completo'] = $admin['nome_completo'];
                $_SESSION['admin_nivel_acesso'] = $admin['nivel_acesso'];

                // Atualiza último login (opcional)
                try {
                    $sqlUpdateLogin = "UPDATE admin_usuarios SET ultimo_login = CURRENT_TIMESTAMP WHERE id = :id";
                    $stmtUpdate = $pdo->prepare($sqlUpdateLogin);
                    $stmtUpdate->bindParam(':id', $admin['id'], PDO::PARAM_INT);
                    $stmtUpdate->execute();
                } catch (\PDOException $e) {
                    error_log("Erro ao atualizar ultimo_login admin ID {$admin['id']}: " . $e->getMessage());
                }

                // Redireciona para o dashboard admin
                header('Location: index.php');
                exit;

            } else {
                // Usuário/senha inválidos ou usuário inativo
                $mensagem_erro_login = 'Usuário ou senha inválidos.';
                // Logar tentativa falha aqui seria bom (em outra tabela de log admin?)
            }

        } catch (\PDOException $e) {
            error_log("Erro DB no login admin: " . $e->getMessage());
            $mensagem_erro_login = 'Erro interno ao tentar fazer login. Tente mais tarde.';
        }
    }
}

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login - Admin Portal</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        body { display: flex; align-items: center; padding-top: 40px; padding-bottom: 40px; background-color: #f5f5f5; }
        .form-signin { width: 100%; max-width: 330px; padding: 15px; margin: auto; }
        .form-signin .checkbox { font-weight: 400; }
        .form-signin .form-floating:focus-within { z-index: 2; }
        .form-signin input[type="text"] { margin-bottom: -1px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; }
        .form-signin input[type="password"] { margin-bottom: 10px; border-top-left-radius: 0; border-top-right-radius: 0; }
    </style>
</head>
<body class="text-center">
    <main class="form-signin">
        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
            <?php // Adicionar logo aqui se desejar ?>
            <img class="mb-4" src="https://upload.wikimedia.org/wikipedia/commons/3/38/Google_Admin_icon.svg" alt="" width="72" height="57"> <?php // Exemplo Logo ?>
            <h1 class="h3 mb-3 fw-normal">Acesso Administrativo</h1>

            <?php if ($mensagem_erro_login): ?>
                <div class="alert alert-danger"><?php echo htmlspecialchars($mensagem_erro_login); ?></div>
            <?php endif; ?>

            <div class="form-floating">
                <input type="text" class="form-control" id="nome_usuario" name="nome_usuario" placeholder="Usuário" value="<?php echo htmlspecialchars($nome_usuario_tentativa); ?>" required autofocus>
                <label for="nome_usuario">Usuário</label>
            </div>
            <div class="form-floating">
                <input type="password" class="form-control" id="senha" name="senha" placeholder="Senha" required>
                <label for="senha">Senha</label>
            </div>

            <?php /* Checkbox "Lembrar-me" (requer lógica adicional com cookies)
            <div class="checkbox mb-3">
                <label><input type="checkbox" value="remember-me"> Lembrar-me</label>
            </div>
            */ ?>
            <button class="w-100 btn btn-lg btn-primary" type="submit" name="login_admin">Entrar</button>
            <p class="mt-5 mb-3 text-muted">&copy; <?php echo date('Y'); ?> <?php echo defined('NOME_EMPRESA') ? htmlspecialchars(NOME_EMPRESA) : ''; ?></p>
        </form>
    </main>
</body>
</html>