| <?php
|
|
|
|
|
|
|
|
|
| $config = [
|
| 'owner' => 'CaPaCaptain',
|
| 'repo' => 'VvvebJs_huggingface_db_01',
|
| 'branch' => 'main',
|
| 'path' => 'pages/',
|
| 'token' => $_ENV['GITHUB_TOKEN'] ?? getenv('GITHUB_TOKEN') ?: ''
|
| ];
|
|
|
| function testGitHubAPI($url, $token, $method = 'GET', $data = null) {
|
| $ch = curl_init();
|
| curl_setopt($ch, CURLOPT_URL, $url);
|
| curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
|
| curl_setopt($ch, CURLOPT_TIMEOUT, 15);
|
| curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
| 'Authorization: token ' . $token,
|
| 'User-Agent: VvvebJs-TokenTest/1.0',
|
| 'Accept: application/vnd.github.v3+json',
|
| 'Content-Type: application/json'
|
| ]);
|
|
|
| if ($data) {
|
| curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
| }
|
|
|
| $response = curl_exec($ch);
|
| $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
| $error = curl_error($ch);
|
| curl_close($ch);
|
|
|
| return [
|
| 'success' => $httpCode >= 200 && $httpCode < 300,
|
| 'code' => $httpCode,
|
| 'response' => $response,
|
| 'error' => $error
|
| ];
|
| }
|
|
|
| $results = [];
|
|
|
| if ($_POST['test'] ?? false) {
|
|
|
| $results['token'] = testGitHubAPI('https://api.github.com/user', $config['token']);
|
|
|
|
|
| $repoUrl = "https://api.github.com/repos/{$config['owner']}/{$config['repo']}";
|
| $results['repo'] = testGitHubAPI($repoUrl, $config['token']);
|
|
|
|
|
| $branchUrl = "https://api.github.com/repos/{$config['owner']}/{$config['repo']}/branches/{$config['branch']}";
|
| $results['branch'] = testGitHubAPI($branchUrl, $config['token']);
|
|
|
|
|
| $testFile = 'token-test-' . date('Y-m-d-H-i-s') . '.html';
|
| $testContent = '<!DOCTYPE html><html><head><title>Token Test</title></head><body><h1>GitHub Token 测试</h1><p>创建时间: ' . date('Y-m-d H:i:s') . '</p></body></html>';
|
| $createUrl = "https://api.github.com/repos/{$config['owner']}/{$config['repo']}/contents/{$config['path']}{$testFile}";
|
|
|
| $results['write'] = testGitHubAPI($createUrl, $config['token'], 'PUT', [
|
| 'message' => 'VvvebJs Token 测试文件',
|
| 'content' => base64_encode($testContent),
|
| 'branch' => $config['branch']
|
| ]);
|
| }
|
| ?>
|
|
|
| <!DOCTYPE html>
|
| <html lang="en">
|
| <head>
|
| <meta charset="utf-8">
|
| <meta name="viewport" content="width=device-width, initial-scale=1">
|
| <title>当前 GitHub Token 测试</title>
|
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
| </head>
|
| <body>
|
| <div class="container mt-5">
|
| <div class="row">
|
| <div class="col-md-8 mx-auto">
|
| <h1 class="mb-4">🔑 当前 GitHub Token 配置测试</h1>
|
|
|
| <!-- 配置信息 -->
|
| <div class="card mb-4">
|
| <div class="card-header bg-info text-white">
|
| <h3 class="mb-0">📋 从截图推断的配置</h3>
|
| </div>
|
| <div class="card-body">
|
| <div class="row">
|
| <div class="col-md-6">
|
| <p><strong>GitHub Owner:</strong> <code><?= htmlspecialchars($config['owner']) ?></code></p>
|
| <p><strong>Repository:</strong> <code><?= htmlspecialchars($config['repo']) ?></code></p>
|
| <p><strong>Token 状态:</strong> <?= !empty($config['token']) ? '✅ 已配置' : '❌ 未找到' ?></p>
|
| </div>
|
| <div class="col-md-6">
|
| <p><strong>Branch:</strong> <code><?= htmlspecialchars($config['branch']) ?></code></p>
|
| <p><strong>Path:</strong> <code><?= htmlspecialchars($config['path']) ?></code></p>
|
| <p><strong>完整 URL:</strong><br><small><code>https://github.com/<?= htmlspecialchars($config['owner']) ?>/<?= htmlspecialchars($config['repo']) ?></code></small></p>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
|
|
| <?php if (!empty($config['token'])): ?>
|
| <!-- 测试按钮 -->
|
| <div class="card mb-4">
|
| <div class="card-body text-center">
|
| <form method="POST">
|
| <button type="submit" name="test" value="1" class="btn btn-primary btn-lg">
|
| 🧪 测试 Token 权限
|
| </button>
|
| </form>
|
| </div>
|
| </div>
|
|
|
| <?php if (!empty($results)): ?>
|
| <!-- 测试结果 -->
|
| <div class="card mb-4">
|
| <div class="card-header">
|
| <h3>🔬 测试结果</h3>
|
| </div>
|
| <div class="card-body">
|
|
|
| <!-- Token 测试 -->
|
| <div class="mb-4">
|
| <h5>1. Token 验证</h5>
|
| <?php $test = $results['token']; ?>
|
| <div class="alert alert-<?= $test['success'] ? 'success' : 'danger' ?>">
|
| <strong>结果:</strong> <?= $test['success'] ? '✅ Token 有效' : '❌ Token 无效' ?> (HTTP <?= $test['code'] ?>)
|
|
|
| <?php if ($test['success'] && $test['response']): ?>
|
| <?php $user = json_decode($test['response'], true); ?>
|
| <br><strong>当前用户:</strong> <?= htmlspecialchars($user['login'] ?? 'Unknown') ?>
|
| <br><strong>用户名:</strong> <?= htmlspecialchars($user['name'] ?? 'N/A') ?>
|
| <br><strong>用户类型:</strong> <?= htmlspecialchars($user['type'] ?? 'N/A') ?>
|
| <?php endif; ?>
|
| </div>
|
| </div>
|
|
|
| <!-- 仓库测试 -->
|
| <div class="mb-4">
|
| <h5>2. 仓库访问测试</h5>
|
| <?php $test = $results['repo']; ?>
|
| <div class="alert alert-<?= $test['success'] ? 'success' : 'danger' ?>">
|
| <strong>结果:</strong> <?= $test['success'] ? '✅ 仓库可访问' : '❌ 仓库无法访问' ?> (HTTP <?= $test['code'] ?>)
|
|
|
| <?php if ($test['success'] && $test['response']): ?>
|
| <?php $repo = json_decode($test['response'], true); ?>
|
| <br><strong>仓库全名:</strong> <?= htmlspecialchars($repo['full_name'] ?? 'Unknown') ?>
|
| <br><strong>私有仓库:</strong> <?= ($repo['private'] ?? false) ? '是' : '否' ?>
|
| <br><strong>默认分支:</strong> <?= htmlspecialchars($repo['default_branch'] ?? 'Unknown') ?>
|
|
|
| <?php if (isset($repo['permissions'])): ?>
|
| <br><strong>权限:</strong>
|
| - Admin: <?= $repo['permissions']['admin'] ? '✅' : '❌' ?>
|
| - Push: <?= $repo['permissions']['push'] ? '✅' : '❌' ?>
|
| - Pull: <?= $repo['permissions']['pull'] ? '✅' : '❌' ?>
|
| <?php endif; ?>
|
| <?php endif; ?>
|
| </div>
|
| </div>
|
|
|
| <!-- 分支测试 -->
|
| <div class="mb-4">
|
| <h5>3. 分支检查</h5>
|
| <?php $test = $results['branch']; ?>
|
| <div class="alert alert-<?= $test['success'] ? 'success' : 'warning' ?>">
|
| <strong>结果:</strong> <?= $test['success'] ? '✅ 分支存在' : '⚠️ 分支问题' ?> (HTTP <?= $test['code'] ?>)
|
|
|
| <?php if ($test['success'] && $test['response']): ?>
|
| <?php $branch = json_decode($test['response'], true); ?>
|
| <br><strong>分支名:</strong> <?= htmlspecialchars($branch['name'] ?? 'Unknown') ?>
|
| <br><strong>最新提交:</strong> <?= htmlspecialchars(substr($branch['commit']['sha'] ?? '', 0, 8)) ?>
|
| <?php elseif ($test['code'] == 404): ?>
|
| <br><strong>提示:</strong> 分支 "<?= $config['branch'] ?>" 不存在。可能需要使用 "master" 分支。
|
| <?php endif; ?>
|
| </div>
|
| </div>
|
|
|
| <!-- 写入测试 -->
|
| <div class="mb-4">
|
| <h5>4. 文件写入权限测试</h5>
|
| <?php $test = $results['write']; ?>
|
| <div class="alert alert-<?= $test['success'] ? 'success' : 'danger' ?>">
|
| <strong>结果:</strong> <?= $test['success'] ? '✅ 写入成功' : '❌ 写入失败' ?> (HTTP <?= $test['code'] ?>)
|
|
|
| <?php if ($test['success']): ?>
|
| <br><strong>🎉 恭喜!Token 配置完全正确,可以正常保存文件到 GitHub。</strong>
|
| <br>您可以开始使用 VvvebJs 编辑器了!
|
| <?php else: ?>
|
| <br><strong>错误详情:</strong>
|
| <pre style="font-size: 12px; max-height: 200px; overflow-y: auto;"><?= htmlspecialchars($test['response']) ?></pre>
|
| <?php endif; ?>
|
| </div>
|
| </div>
|
|
|
| </div>
|
| </div>
|
|
|
| <!-- 建议配置 -->
|
| <div class="card">
|
| <div class="card-header">
|
| <h3>⚙️ 推荐的环境变量配置</h3>
|
| </div>
|
| <div class="card-body">
|
| <p>在您的 Hugging Face Space Settings 中设置以下环境变量:</p>
|
| <div class="bg-light p-3 rounded">
|
| <code>GITHUB_TOKEN=your_token_here</code><br>
|
| <code>GITHUB_OWNER=<?= htmlspecialchars($config['owner']) ?></code><br>
|
| <code>GITHUB_REPO=<?= htmlspecialchars($config['repo']) ?></code><br>
|
| <code>GITHUB_BRANCH=<?= $results['branch']['success'] ? $config['branch'] : 'master' ?></code><br>
|
| <code>GITHUB_PATH=<?= htmlspecialchars($config['path']) ?></code><br>
|
| <code>STORAGE_TYPE=github</code><br>
|
| </div>
|
|
|
| <?php if (!$results['branch']['success'] && $results['branch']['code'] == 404): ?>
|
| <div class="alert alert-warning mt-3">
|
| <strong>⚠️ 注意:</strong> 检测到分支 "main" 不存在,建议使用 "master" 分支。
|
| </div>
|
| <?php endif; ?>
|
| </div>
|
| </div>
|
|
|
| <?php endif; ?>
|
|
|
| <?php else: ?>
|
| <!-- Token 未配置 -->
|
| <div class="alert alert-danger">
|
| <h5>❌ GitHub Token 未配置</h5>
|
| <p>请在环境变量中设置 <code>GITHUB_TOKEN</code>。</p>
|
| <p>Token 应该是您在 GitHub 截图中创建的那个。</p>
|
| </div>
|
| <?php endif; ?>
|
|
|
| <!-- 导航 -->
|
| <div class="text-center mt-4">
|
| <a href="config.php" class="btn btn-secondary me-2">🔙 返回配置</a>
|
| <a href="github-token-helper.html" class="btn btn-info me-2">📖 Token 指南</a>
|
| <a href="editor.html" class="btn btn-primary">🎨 打开编辑器</a>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </body>
|
| </html> |