0% acharam este documento útil (0 voto)
0 visualizações8 páginas

Admin Api

O script ADMIN-API.PHP gerencia um painel de administração para uma loja, permitindo a adição, edição e exclusão de produtos em um arquivo JSON, com acesso restrito por senha. A senha de administrador pode ser alterada diretamente no código, e o sistema utiliza sessões para autenticação. As operações suportadas incluem login, logout, verificação de autenticação, listagem, adição, atualização e exclusão de produtos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações8 páginas

Admin Api

O script ADMIN-API.PHP gerencia um painel de administração para uma loja, permitindo a adição, edição e exclusão de produtos em um arquivo JSON, com acesso restrito por senha. A senha de administrador pode ser alterada diretamente no código, e o sistema utiliza sessões para autenticação. As operações suportadas incluem login, logout, verificação de autenticação, listagem, adição, atualização e exclusão de produtos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

<?

php
/*
===========================================
=================
[Link] — motor do painel de
administração da loja TDF

===========================================
=================
O QUE FAZ:
- Guarda os produtos em "[Link]"
(na mesma pasta).
- Só permite adicionar/editar/eliminar
produtos a quem sabe
a password de administrador.

COMO MUDAR A PASSWORD:


Muda o texto "MudaEstaPassword123" na
linha abaixo.
Depois de mudares, todos os
administradores têm de usar a
password nova para entrar no painel
([Link]).

===========================================
================= */

define('ADMIN_PASSWORD',
'MudaEstaPassword123');
define('PRODUTOS_FILE', __DIR__ .
'/[Link]');

session_start();
header('Content-Type: application/json;
charset=utf-8');

function responder($dados, $codigo = 200) {


http_response_code($codigo);
echo json_encode($dados,
JSON_UNESCAPED_UNICODE);
exit;
}

function estaAutenticado() {
return isset($_SESSION['tdf_admin']) &&
$_SESSION['tdf_admin'] === true;
}

function lerProdutos() {
if (!file_exists(PRODUTOS_FILE)) {
return [];
}
$conteudo =
file_get_contents(PRODUTOS_FILE);
$dados = json_decode($conteudo, true);
return is_array($dados) ? $dados : [];
}

function guardarProdutos($produtos) {
$fp = fopen(PRODUTOS_FILE, 'c+');
if (!$fp) { return false; }
flock($fp, LOCK_EX);
ftruncate($fp, 0);
rewind($fp);
fwrite($fp, json_encode($produtos,
JSON_PRETTY_PRINT |
JSON_UNESCAPED_UNICODE));
fflush($fp);
flock($fp, LOCK_UN);
fclose($fp);
return true;
}

function gerarId($nome) {
$slug = strtolower($nome);
$slug = iconv('UTF-8',
'ASCII//TRANSLIT', $slug);
$slug = preg_replace('/[^a-z0-9]+/', '-
', $slug);
$slug = trim($slug, '-');
if ($slug === '') { $slug = 'produto';
}
return $slug . '-' . substr(uniqid(),
-5);
}

$input =
json_decode(file_get_contents('php://input'
), true);
if (!is_array($input)) { $input = $_POST; }
$action = isset($input['action']) ?
$input['action'] : '';

switch ($action) {

case 'login':
$password =
isset($input['password']) ? (string)
$input['password'] : '';
if (hash_equals(ADMIN_PASSWORD,
$password)) {
session_regenerate_id(true);
$_SESSION['tdf_admin'] = true;
responder(['ok' => true]);
}
responder(['ok' => false, 'erro' =>
'Password incorreta.'], 401);
break;

case 'logout':
$_SESSION = [];
session_destroy();
responder(['ok' => true]);
break;

case 'check':
responder(['ok' => true,
'autenticado' => estaAutenticado()]);
break;

case 'list':
responder(['ok' => true, 'produtos'
=> lerProdutos()]);
break;

case 'add':
if (!estaAutenticado()) {
responder(['ok' => false, 'erro' => 'Não
autenticado.'], 401); }

$nome = trim((string)
($input['nome'] ?? ''));
$categoria = trim((string)
($input['categoria'] ?? ''));
$preco = isset($input['preco']) ?
(int) $input['preco'] : 0;

if ($nome === '' || $categoria ===


'' || $preco <= 0) {
responder(['ok' => false,
'erro' => 'Nome, categoria e preço são
obrigatórios.'], 422);
}

$novo = [
'id' => gerarId($nome),
'seccao' =>
in_array($input['seccao'] ?? '',
['promocao', 'destaque']) ?
$input['seccao'] : 'destaque',
'categoria' => $categoria,
'nome' => $nome,
'preco' => $preco,
'precoAntigo' =>
!empty($input['precoAntigo']) ? (int)
$input['precoAntigo'] : null,
'sufixo' => trim((string)
($input['sufixo'] ?? '')),
'desde' =>
!empty($input['desde']),
'estrelas' => max(1, min(5,
(int) ($input['estrelas'] ?? 5))),
'badge' => trim((string)
($input['badge'] ?? '')),
'icone' => trim((string)
($input['icone'] ?? 'documento')),
];

$produtos = lerProdutos();
$produtos[] = $novo;
guardarProdutos($produtos);
responder(['ok' => true, 'produto'
=> $novo]);
break;

case 'update':
if (!estaAutenticado()) {
responder(['ok' => false, 'erro' => 'Não
autenticado.'], 401); }

$id = (string) ($input['id'] ??


'');
$produtos = lerProdutos();
$encontrado = false;

foreach ($produtos as &$p) {


if ($p['id'] === $id) {
$p['seccao'] =
in_array($input['seccao'] ?? '',
['promocao', 'destaque']) ?
$input['seccao'] : $p['seccao'];
$p['categoria'] =
trim((string) ($input['categoria'] ??
$p['categoria']));
$p['nome'] = trim((string)
($input['nome'] ?? $p['nome']));
$p['preco'] =
isset($input['preco']) ? (int)
$input['preco'] : $p['preco'];
$p['precoAntigo'] =
!empty($input['precoAntigo']) ? (int)
$input['precoAntigo'] : null;
$p['sufixo'] =
trim((string) ($input['sufixo'] ?? ''));
$p['desde'] =
!empty($input['desde']);
$p['estrelas'] = max(1,
min(5, (int) ($input['estrelas'] ??
$p['estrelas'])));
$p['badge'] = trim((string)
($input['badge'] ?? ''));
$p['icone'] = trim((string)
($input['icone'] ?? $p['icone']));
$encontrado = true;
break;
}
}
unset($p);

if (!$encontrado) { responder(['ok'
=> false, 'erro' => 'Produto não
encontrado.'], 404); }

guardarProdutos($produtos);
responder(['ok' => true]);
break;

case 'delete':
if (!estaAutenticado()) {
responder(['ok' => false, 'erro' => 'Não
autenticado.'], 401); }

$id = (string) ($input['id'] ??


'');
$produtos = lerProdutos();
$produtos =
array_values(array_filter($produtos,
function ($p) use ($id) {
return $p['id'] !== $id;
}));
guardarProdutos($produtos);
responder(['ok' => true]);
break;

default:
responder(['ok' => false, 'erro' =>
'Ação desconhecida.'], 400);
}

Você também pode gostar