From 23abb63bb8ff6dfe9e0f314404f4b8bcd3b66b0e Mon Sep 17 00:00:00 2001 From: kobayashi90 Date: Thu, 6 Feb 2025 00:38:26 +0000 Subject: [PATCH] Update includes/functions.php --- includes/functions.php | 278 ++++++++++++++++++++++++++--------------- 1 file changed, 174 insertions(+), 104 deletions(-) diff --git a/includes/functions.php b/includes/functions.php index 804890f..4f54428 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1,105 +1,175 @@ -= 1) { - $_SESSION['request_count_second'] = 0; - } - if ($current_time - $_SESSION['last_request_time'] >= 60) { - $_SESSION['request_count_minute'] = 0; - } - - // Increment counters - $_SESSION['request_count_second']++; - $_SESSION['request_count_minute']++; - $_SESSION['last_request_time'] = $current_time; - - // Check if limits are exceeded - if ($_SESSION['request_count_second'] > REQUESTS_PER_SECOND_LIMIT) { - return ['status' => 'error', 'error' => 'Rate limit exceeded: Too many requests per second.']; - } - if ($_SESSION['request_count_minute'] > REQUESTS_PER_MINUTE_LIMIT) { - return ['status' => 'error', 'error' => 'Rate limit exceeded: Too many requests per minute.']; - } - - return ['status' => 'success']; -} - -// Function to send a request to AllDebrid API -function alldebrid_api_request($endpoint, $params = []) { - $params['agent'] = 'SquidDebridEU'; - $params['apikey'] = ALLDEBRID_API_KEY; - $url = ALLDEBRID_API_URL . $endpoint . '?' . http_build_query($params); - - // Use cURL for better error handling - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - $response = curl_exec($ch); - - if (curl_errno($ch)) { - return ['status' => 'error', 'error' => 'Failed to connect to AllDebrid API: ' . curl_error($ch)]; - } - curl_close($ch); - - // Log the API response for debugging - error_log("API Response for endpoint '$endpoint': " . print_r($response, true)); - - $data = json_decode($response, true); - if (json_last_error() !== JSON_ERROR_NONE) { - return ['status' => 'error', 'error' => 'Invalid API response: ' . json_last_error_msg()]; - } - - return $data; -} - -// Function to copy an torrent/magnet link -function upload_torrent_magnet($link) { - // Use the correct parameter name for magnets (e.g., "magnets[]") - $response = alldebrid_api_request('magnet/upload', ['magnets[]' => $link]); - if ($response['status'] === 'success') { - return $response['data']; - } - return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to upload torrent/magnet.']; -} - -// Function to upload a .torrent file -function upload_torrent_file($file) { - $response = alldebrid_api_request('magnet/upload/file', [], $file); - if ($response['status'] === 'success') { - return $response['data']; - } - return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to upload .torrent file.']; -} - -// Function to get torrent/magnet status and file list -function get_torrent_status($id) { - $response = alldebrid_api_request('magnet/status', ['id' => $id]); - if ($response['status'] === 'success') { - return $response['data']; - } - return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to get torrent status.']; -} - -// Function to get supported file hosters -function get_supported_filehosts() { - $response = alldebrid_api_request("hosts"); - $hosts = $response['data']['hosts']; - - // filter out alldebrid and example from the hosts - unset($hosts['alldebrid'], $hosts['example']); - - if ($response['status'] === 'success' && isset($response['data']['hosts'])) { - return $hosts; - } else { - return []; - } -} += 1) { + $_SESSION['request_count_second'] = 0; + } + if ($current_time - $_SESSION['last_request_time'] >= 60) { + $_SESSION['request_count_minute'] = 0; + } + + // Increment counters + $_SESSION['request_count_second']++; + $_SESSION['request_count_minute']++; + $_SESSION['last_request_time'] = $current_time; + + // Check if limits are exceeded + if ($_SESSION['request_count_second'] > REQUESTS_PER_SECOND_LIMIT) { + return ['status' => 'error', 'error' => 'Rate limit exceeded: Too many requests per second.']; + } + if ($_SESSION['request_count_minute'] > REQUESTS_PER_MINUTE_LIMIT) { + return ['status' => 'error', 'error' => 'Rate limit exceeded: Too many requests per minute.']; + } + + return ['status' => 'success']; +} + +// Function to send a GET request to AllDebrid API +function alldebrid_api_get_request($endpoint, $params = []) { + $params['agent'] = 'SquidDebridEU'; + $params['apikey'] = ALLDEBRID_API_KEY; + $url = ALLDEBRID_API_URL . $endpoint . '?' . http_build_query($params); + + // Use cURL for better error handling + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + + if (curl_errno($ch)) { + return ['status' => 'error', 'error' => 'Failed to connect to AllDebrid API: ' . curl_error($ch)]; + } + curl_close($ch); + + // Log the API response for debugging + error_log("API Response for endpoint '$endpoint': " . print_r($response, true)); + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return ['status' => 'error', 'error' => 'Invalid API response: ' . json_last_error_msg()]; + } + + return $data; +} + +// Function to send a POST request to AllDebrid API +function alldebrid_api_post_request($endpoint, $params = []) { + $params['agent'] = 'SquidDebridEU'; + $params['apikey'] = ALLDEBRID_API_KEY; + $url = ALLDEBRID_API_URL . $endpoint; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json' + ]); + + $response = curl_exec($ch); + + if (curl_errno($ch)) { + return ['status' => 'error', 'error' => 'Failed to connect to AllDebrid API: ' . curl_error($ch)]; + } + + curl_close($ch); + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return ['status' => 'error', 'error' => 'Invalid API response: ' . json_last_error_msg()]; + } + + return $data; +} + +// Function to send a POST request to AllDebrid API with correct Content Type for File Uploading +function alldebrid_api_upload_file($endpoint, $filePath) { + if (!file_exists($filePath)) { + return ['status' => 'error', 'error' => 'File not found.']; + } + + $file = new CURLFile($filePath, 'application/x-bittorrent', basename($filePath)); + $params = [ + 'agent' => 'SquidDebridEU', + 'apikey' => ALLDEBRID_API_KEY, + 'files[]' => $file + ]; + + $url = ALLDEBRID_API_URL . $endpoint; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']); + + $response = curl_exec($ch); + + if (curl_errno($ch)) { + return ['status' => 'error', 'error' => 'Failed to connect to AllDebrid API: ' . curl_error($ch)]; + } + + curl_close($ch); + + $data = json_decode($response, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return ['status' => 'error', 'error' => 'Invalid API response: ' . json_last_error_msg()]; + } + + return $data; +} + + +// Function to copy an torrent/magnet link +function upload_torrent_magnet($link) { + // Use the correct parameter name for magnets (e.g., "magnets[]") + $response = alldebrid_api_get_request('magnet/upload', ['magnets[]' => $link]); + if ($response['status'] === 'success') { + return $response['data']; + } + return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to upload torrent/magnet.']; +} + +// Function to upload a .torrent file +function upload_torrent_file($filePath) { + $response = alldebrid_api_upload_file('magnet/upload/file', $filePath); + if ($response['status'] === 'success') { + return $response['data']; + } + return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to upload .torrent file.']; +} + +// Function to get torrent/magnet status and file list +function get_torrent_status($id) { + $response = alldebrid_api_get_request('magnet/status', ['id' => $id]); + if ($response['status'] === 'success') { + return $response['data']; + } + return ['status' => 'error', 'error' => $response['error']['message'] ?? 'Failed to get torrent status.']; +} + +// Function to get supported file hosters +function get_supported_filehosts() { + $response = alldebrid_api_get_request("hosts"); + $hosts = $response['data']['hosts']; + + // filter out alldebrid and example from the hosts + unset($hosts['alldebrid'], $hosts['example']); + + if ($response['status'] === 'success' && isset($response['data']['hosts'])) { + return $hosts; + } else { + return []; + } +} ?> \ No newline at end of file