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">© <?php echo date('Y'); ?> <?php echo defined('NOME_EMPRESA') ? htmlspecialchars(NOME_EMPRESA) : ''; ?></p>
</form>
</main>
</body>
</html>