false, 'error' => 'Video ID required']); exit; } $url = $cdn->getCDNUrl($video_id, $quality); if ($url) { echo json_encode(['success' => true, 'url' => $url]); } else { http_response_code(404); echo json_encode(['success' => false, 'error' => 'Video not found']); } exit; } if ($action === 'qualities') { $video_id = $_GET['video_id'] ?? null; if (!$video_id) { http_response_code(400); echo json_encode(['success' => false, 'error' => 'Video ID required']); exit; } $qualities = $cdn->getAvailableQualities($video_id); echo json_encode(['success' => true, 'qualities' => $qualities]); exit; } // Authenticated endpoints if (!$current_user_id) { http_response_code(401); echo json_encode(['success' => false, 'error' => 'Authentication required']); exit; } switch ($action) { case 'bandwidth': $days = intval($_GET['days'] ?? 30); $provider_id = $_GET['provider_id'] ?? null; $data = $cdn->getBandwidthUsage($provider_id, $days); echo json_encode(['success' => true, 'data' => $data]); break; case 'upload': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); echo json_encode(['success' => false, 'error' => 'Method not allowed']); exit; } $input = json_decode(file_get_contents('php://input'), true) ?: $_POST; $video_id = $input['video_id'] ?? null; $local_path = $input['local_path'] ?? null; $quality = $input['quality'] ?? 'original'; if (!$video_id || !$local_path) { http_response_code(400); echo json_encode(['success' => false, 'error' => 'Video ID and local path required']); exit; } // Verify ownership global $class_database; $sql = "SELECT usr_id FROM db_videofiles WHERE video_id = ?"; $result = $class_database->execute($sql, [$video_id]); if (!$result || $class_database->rowCount($result) == 0) { http_response_code(404); echo json_encode(['success' => false, 'error' => 'Video not found']); exit; } $row = $class_database->fetch($result); if ($row['usr_id'] != $current_user_id) { http_response_code(403); echo json_encode(['success' => false, 'error' => 'Permission denied']); exit; } $success = $cdn->uploadVideo($video_id, $local_path, $quality); echo json_encode(['success' => $success]); break; case 'purge': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); echo json_encode(['success' => false, 'error' => 'Method not allowed']); exit; } $input = json_decode(file_get_contents('php://input'), true) ?: $_POST; $video_id = $input['video_id'] ?? null; if (!$video_id) { http_response_code(400); echo json_encode(['success' => false, 'error' => 'Video ID required']); exit; } // Verify ownership global $class_database; $sql = "SELECT usr_id FROM db_videofiles WHERE video_id = ?"; $result = $class_database->execute($sql, [$video_id]); if (!$result || $class_database->rowCount($result) == 0) { http_response_code(404); echo json_encode(['success' => false, 'error' => 'Video not found']); exit; } $row = $class_database->fetch($result); if ($row['usr_id'] != $current_user_id) { http_response_code(403); echo json_encode(['success' => false, 'error' => 'Permission denied']); exit; } $cdn->purgeCache($video_id); echo json_encode(['success' => true]); break; default: http_response_code(400); echo json_encode(['success' => false, 'error' => 'Invalid action']); }