码桶

发现社区成员的开源项目

main
domains/admin/api.php
api.php2.5 KB
<?php
session_start();
header('Content-Type: application/json; charset=utf-8');

$dataFile = __DIR__ . '/data/domains.json';

// 读取JSON数据
function readData($file) {
    if (!file_exists($file)) return [];
    $json = file_get_contents($file);
    return json_decode($json, true) ?: [];
}

// 写入JSON数据
function writeData($file, $data) {
    file_put_contents($file, json_encode(array_values($data), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), LOCK_EX);
}

// 登录校验
function checkAuth() {
    if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] !== true) {
        echo json_encode(['status' => false, 'error' => '未授权访问']);
        exit;
    }
}

$action = $_GET['action'] ?? '';

// 退出登录
if ($action === 'logout') {
    session_destroy();
    echo json_encode(['status' => true]);
    exit;
}

// 获取列表 (公开接口,访客也可读取)
if ($action === 'list') {
    $domains = readData($dataFile);
    echo json_encode(['status' => true, 'result' => $domains]);
    exit;
}

// 以下操作需要权限
checkAuth();

$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    $action = $input['action'] ?? '';
    $domains = readData($dataFile);

    if ($action === 'add') {
        $newDomain = [
            'name' => $input['name'],
            'registrar' => $input['registrar'],
            'registrarUrl' => $input['registrarUrl'],
            'meaning' => $input['meaning']
        ];
        $domains[] = $newDomain;
        writeData($dataFile, $domains);
        echo json_encode(['status' => true, 'result' => $domains]);
    } 
    elseif ($action === 'edit') {
        $originalName = $input['originalName'];
        foreach ($domains as $key => $domain) {
            if ($domain['name'] === $originalName) {
                $domains[$key] = [
                    'name' => $input['name'],
                    'registrar' => $input['registrar'],
                    'registrarUrl' => $input['registrarUrl'],
                    'meaning' => $input['meaning']
                ];
                break;
            }
        }
        writeData($dataFile, $domains);
        echo json_encode(['status' => true, 'result' => $domains]);
    } 
    elseif ($action === 'delete') {
        $name = $input['name'];
        $domains = array_filter($domains, function($d) use ($name) {
            return $d['name'] !== $name;
        });
        writeData($dataFile, $domains);
        echo json_encode(['status' => true, 'result' => $domains]);
    }
}