Painel de Gerenciamento de Chaves - PyIt Este é um painel de controle web seguro e completo, desenvolvido para gerenciar e validar chaves de acesso para aplicações externas, como o projeto PyIt. A plataforma é exclusiva para administradores, garantindo um ambiente controlado para a gestão das licenças de software.
O design é moderno, responsivo e construído com as melhores práticas de segurança em mente.
✨ Funcionalidades Autenticação Segura: Sistema de login exclusivo para administradores com senhas criptografadas.
Gerenciamento de Usuários: Administradores logados podem registrar novas contas de administrador.
Gerenciamento de Chaves:
Criação de chaves de acesso únicas e seguras.
Associação de cada chave a um nome de usuário específico.
Definição de uma data de validade para cada chave.
Dashboard central para visualizar, buscar e deletar chaves.
Validação via API:
Um endpoint api.php para que aplicações externas (como a aplicação Python) possam validar uma chave remotamente.
A API verifica se a chave existe, está ativa e se não expirou.
Segurança Robusta:
Proteção contra SQL Injection usando PDO com Prepared Statements.
Senhas armazenadas com o algoritmo de hash Argon2id, o mais recomendado atualmente.
Proteção contra ataques CSRF (Cross-Site Request Forgery) em todos os formulários.
Rate Limiting na API para prevenir ataques de força bruta.
Interface Moderna:
Design responsivo e elegante construído com Bootstrap 5.
Tema escuro para conforto visual.
Calendário amigável (flatpickr) para seleção de datas.
🚀 Tecnologias Utilizadas Backend: PHP 8+
Banco de Dados: MySQL / MariaDB
Frontend: HTML5, Bootstrap 5, flatpickr.js
🛠️ Instalação Siga os passos abaixo para configurar o painel em um servidor local ou de produção.
Requisitos:
Servidor web (Apache, Nginx, etc.)
PHP 8 ou superior (com extensão PDO MySQL)
Banco de dados MySQL ou MariaDB
Passo a passo:
Copie os Arquivos: Coloque todos os arquivos do projeto no diretório do seu servidor web (ex: htdocs no XAMPP ou /var/www/html no Linux).
Crie o Banco de Dados: Crie um novo banco de dados no seu servidor MySQL (ex: key_panel).
Importe as Tabelas: Execute o código SQL abaixo para criar as tabelas users, keys e api_logs.
SQL
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(255) NOT NULL,
password varchar(255) NOT NULL,
role varchar(50) NOT NULL DEFAULT 'admin',
created_at timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (id),
UNIQUE KEY username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE keys (
id int(11) NOT NULL AUTO_INCREMENT,
access_key varchar(255) NOT NULL,
assigned_user varchar(255) NULL,
status varchar(50) NOT NULL DEFAULT 'active',
expires_at DATE NULL,
created_at timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (id),
UNIQUE KEY access_key (access_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE api_logs (
id int(11) NOT NULL AUTO_INCREMENT,
ip_address varchar(45) NOT NULL,
request_time timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Configure a Conexão: Abra o arquivo db.php e insira as credenciais do seu banco de dados.
Crie o Primeiro Administrador: a. Crie um arquivo temporário chamado hash_password.php com o código abaixo e coloque-o no servidor.
PHP
'; ?>b. Acesse hash_password.php no navegador e copie o hash gerado. c. Execute o SQL abaixo, colando o seu hash no lugar de 'SEU_HASH_AQUI'.
SQL
INSERT INTO users (username, password, role) VALUES ('admin', 'SEU_HASH_AQUI', 'admin');
d. Delete o arquivo hash_password.php do servidor.
Pronto! Acesse o index.php do projeto no seu navegador para fazer o login.
📡 Endpoint da API A aplicação externa deve fazer uma requisição GET para validar uma chave.
URL: http://seu-dominio.com/api.php?key=PYIT-CHAVE-A-SER-VALIDADA
Respostas da API Sucesso (Chave Válida):
JSON
{ "status": "success", "message": "Chave valida" } Erro (Chave Inválida, Expirada ou Inativa):
JSON
{ "status": "error", "message": "Chave invalida" } JSON
{ "status": "error", "message": "Chave expirada" } Erro (Limite de Requisições Excedido):
JSON
{ "status": "error", "message": "Muitas requisicoes. Tente novamente mais tarde." }