diff --git a/wordpress/simple-tracking.php b/wordpress/simple-tracking.php new file mode 100644 index 0000000..b5b74ca --- /dev/null +++ b/wordpress/simple-tracking.php @@ -0,0 +1,343 @@ +tracking_server_url)); + ?> + + + + + + + query_vars['tracking_endpoint'])) { + // Log that we received a tracking request + error_log('Simple Tracking Plugin: Tracking request received'); + // Log the query parameters + error_log('Simple Tracking Plugin: Query params: ' . print_r($_GET, true)); + + $this->forward_to_tracker(); + exit; + } + } + + /** + * Forward the request to the tracking server + */ + public function forward_to_tracker() { + // Get tracking server URL from settings + $tracking_server_url = get_option('simple_tracking_server_url', $this->tracking_server_url); + $forward_url = 'https://' . $tracking_server_url . '/spur'; + + + + // Log the request (for debugging) + error_log('Forwarding tracking request to: ' . $forward_url); + + + error_log('Simple Tracking Plugin: Request method: ' . $_SERVER['REQUEST_METHOD']); + + // Create a new cURL resource + $ch = curl_init(); + + // Set URL and other appropriate options + curl_setopt($ch, CURLOPT_URL, $forward_url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $_SERVER['REQUEST_METHOD']); + + // Get query parameters and add IP + $query = $_GET; + $query['ip'] = $this->get_real_ip(); + + // Build query string + $query_string = http_build_query($query); + curl_setopt($ch, CURLOPT_URL, $forward_url . '?' . $query_string); + + // Prepare headers + $headers = array(); + $all_headers = function_exists('getallheaders') ? getallheaders() : $this->get_all_headers(); + + // Forward all headers, checking for the final destination + foreach ($all_headers as $name => $value) { + if ($name == 'X-Final-Destination' && !empty($value)) { + // If a custom destination is provided in the header, use it + $forward_url = 'https://' . $value . '/spur'; + curl_setopt($ch, CURLOPT_URL, $forward_url . '?' . $query_string); + error_log('Overriding destination with: ' . $value); + } + $headers[] = "$name: $value"; + } + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + // Execute request + $response = curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if (curl_errno($ch)) { + error_log('cURL error: ' . curl_error($ch)); + $http_code = 500; + } + + // Close cURL resource + curl_close($ch); + + // Send response + http_response_code($http_code); + header('Content-Type: application/json'); + echo '{}'; + exit; + } + + /** + * Fallback implementation of getallheaders() for servers that don't have it + */ + private function get_all_headers() { + $headers = []; + foreach ($_SERVER as $name => $value) { + if (substr($name, 0, 5) == 'HTTP_') { + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + } + } + return $headers; + } + + /** + * Get the real IP address + */ + private function get_real_ip() { + if (!empty($_SERVER['HTTP_CLIENT_IP'])) { + $ip = $_SERVER['HTTP_CLIENT_IP']; + } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + } else { + $ip = $_SERVER['REMOTE_ADDR']; + } + return $ip; + } + + /** + * Add settings page + */ + public function add_settings_page() { + add_options_page( + 'Tracking Settings', + 'Tracking Settings', + 'manage_options', + 'simple-tracking-settings', + array($this, 'render_settings_page') + ); + } + + /** + * Register settings + */ + public function register_settings() { + register_setting('simple_tracking_settings', 'simple_tracking_server_url'); + + add_settings_section( + 'simple_tracking_section', + 'Tracking Settings', + array($this, 'settings_section_callback'), + 'simple-tracking-settings' + ); + + add_settings_field( + 'simple_tracking_server_url', + 'Tracking Server URL', + array($this, 'server_url_callback'), + 'simple-tracking-settings', + 'simple_tracking_section' + ); + } + + /** + * Settings section callback + */ + public function settings_section_callback() { + echo '
Configure your tracking server settings.
'; + } + + /** + * Server URL field callback + */ + public function server_url_callback() { + $value = get_option('simple_tracking_server_url', $this->tracking_server_url); + echo ''; + echo 'Enter the tracking server URL without https:// (e.g., karlbreuer.com)
'; + } + + /** + * Render settings page + */ + public function render_settings_page() { + ?> +