false, 'message' => 'Method Not Allowed']); exit(); } // === НАСТРОЙКИ === // Путь к файлу latest.json (на уровень выше) $json_file = __DIR__ . '/../latest.json'; // Пароль для доступа (ИЗМЕНИТЕ ЭТО!) $admin_password = 'umbrix2024'; // Проверка пароля (опционально, раскомментируйте если нужна защита) // $provided_password = $_SERVER['HTTP_X_ADMIN_PASSWORD'] ?? ''; // if ($provided_password !== $admin_password) { // http_response_code(403); // echo json_encode(['success' => false, 'message' => 'Неверный пароль']); // exit(); // } // === КОНЕЦ НАСТРОЕК === // Получение данных $input = file_get_contents('php://input'); $data = json_decode($input, true); if (!$data) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Неверный формат данных']); exit(); } // Валидация обязательных полей $required_fields = ['version', 'build_number', 'download_url', 'published_at']; foreach ($required_fields as $field) { if (!isset($data[$field]) || empty($data[$field])) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => "Отсутствует обязательное поле: $field" ]); exit(); } } // Валидация версии (формат X.Y.Z) if (!preg_match('/^\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$/', $data['version'])) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Неверный формат версии. Используйте X.Y.Z (например: 2.5.8)' ]); exit(); } // Валидация URL if (!filter_var($data['download_url'], FILTER_VALIDATE_URL)) { http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Неверный формат URL' ]); exit(); } // Подготовка данных для сохранения $update_data = [ 'version' => $data['version'], 'build_number' => $data['build_number'], 'is_prerelease' => $data['is_prerelease'] ?? false, 'download_url' => $data['download_url'], 'release_notes' => $data['release_notes'] ?? '', 'published_at' => $data['published_at'], 'min_required_version' => $data['min_required_version'] ?? '2.0.0', 'file_size_bytes' => 0, 'file_checksum_sha256' => '' ]; // Попытка получить размер файла (если APK доступен) $apk_path = __DIR__ . '/../downloads/' . basename(parse_url($data['download_url'], PHP_URL_PATH)); if (file_exists($apk_path)) { $update_data['file_size_bytes'] = filesize($apk_path); } // Создание бэкапа старой версии if (file_exists($json_file)) { $backup_file = __DIR__ . '/../latest.json.backup.' . date('Y-m-d_H-i-s'); copy($json_file, $backup_file); } // Сохранение в JSON $json_content = json_encode($update_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); if (file_put_contents($json_file, $json_content) === false) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Не удалось сохранить файл. Проверьте права доступа.' ]); exit(); } // Логирование $log_entry = sprintf( "[%s] Обновление сохранено: v%s (build %s) | IP: %s\n", date('Y-m-d H:i:s'), $data['version'], $data['build_number'], $_SERVER['REMOTE_ADDR'] ?? 'unknown' ); file_put_contents(__DIR__ . '/../logs/admin.log', $log_entry, FILE_APPEND); // Успешный ответ echo json_encode([ 'success' => true, 'message' => 'Обновление успешно сохранено', 'data' => $update_data ]); ?>