API_HOST. "/" . API_VERSION . "/" . $request, CURLOPT_HTTPAUTH => CURLAUTH_ANY, CURLOPT_USERPWD => API_USER . ":" . API_TOKEN, /* Return the response from curl_exec as a string instead or outputting it directly */ CURLOPT_RETURNTRANSFER => true )); /* Use HTTP POST method if requested, application/x-www-form-urlencoded */ if ($method == "POST") { curl_setopt($ch, CURLOPT_POST, true); /* Include any post data in the request, using http_build_query to post as application/x-www-form-urlencoded */ if ($post_data) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); } } /* Define a response array that contains the success state and a message that will be filled in the case of an error */ $response = array("success" => false, "message" => ""); $result = curl_exec($ch); if ($result !== false) { /* Make sure the appropriate response for GET or POST was received */ $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($method == "POST" && $http_status != 201 || $method == "GET" && $http_status != 200) { $response["message"] = "[" . curl_getinfo($ch, CURLINFO_HTTP_CODE) . "]"; if ($result != "") { $result = json_decode($result, true); if (array_key_exists("title", $result)) { $response["message"] .= " " . $result["title"]; } if (array_key_exists("description", $result)) { $response["message"] .= " " . $result["description"]; } } } else { /* Merge the response from Mailman3 into the existing response array */ $response["success"] = true; if ($result != "") { $response = array_merge($response, json_decode($result, true)); } } } else { $response["message"] = "cURL error: " . curl_error($ch); } curl_close($ch); return $response; } /* Start a response array that will be output as JSON and get the log directory */ // commented out while mailman is down: // $response = submit_request_to_mailman("system/configuration/paths.debian"); // if ($response["success"]) // { /* Use the mailman-web log since www-data has write permission and record the input */ // $log_directory = $response["log_dir"]; // $log_path = $log_directory . "/web/mailman-web.log"; $response = array("success" => false, "message" => ""); $log_path = "/home/frank/scrapeboard_mail_signups.txt"; // temporary while mailman is down file_put_contents( $log_path, "[" . date(DATE_RFC2822) . "] Processing subscription request with input " . json_encode($_POST) . "\n", FILE_APPEND); if (array_key_exists("email", $_POST)) { /* Use Data Filtering to validate that a valid email address was submitted * [https://www.php.net/manual/en/filter.examples.sanitization.php] * * If an invalid email was submitted, print an error message and exit */ $sanitized_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL); $response["email"] = $sanitized_email; if (!filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) { $response["success"] = false; $response["message"] = $_POST["email"] . " (sanitized to $sanitized_email) is not a valid email address"; } else { /* Skip the verification, confirmation, and approval emails, and subscribe the submitted address */ // commented out while mailman3 is down // $subscription_response = submit_request_to_mailman( // "members", "POST", array( // 'list_id' => MAILING_LIST_ID, // 'subscriber' => $sanitized_email, // 'pre_verified' => true, // 'pre_confirmed' => true, // 'pre_approved' => true)); // if ($subscription_response["success"]) // { $response["success"] = true; $response["message"] = "Added $sanitized_email to " . MAILING_LIST_ID; // } // else // { // /* Merge in the API request response, which will contain the error information */ // $response = array_merge($response, $subscription_response); // } } } else { $response["success"] = false; $response["message"] = "No email address to subscribe was provided"; } // } /* Log the response internally, set the JSON output header, and output JSON for the client */ file_put_contents($log_path, "[" . date(DATE_RFC2822) . "] Final response is " . json_encode($response) . "\n", FILE_APPEND); header("Content-Type: application/json"); echo json_encode($response); ?>