summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/spam_filter/libraries/drivers/Akismet.php117
-rw-r--r--modules/spam_filter/libraries/drivers/Mollom.php21
2 files changed, 88 insertions, 50 deletions
diff --git a/modules/spam_filter/libraries/drivers/Akismet.php b/modules/spam_filter/libraries/drivers/Akismet.php
index 7d0eee78..67b4a88d 100644
--- a/modules/spam_filter/libraries/drivers/Akismet.php
+++ b/modules/spam_filter/libraries/drivers/Akismet.php
@@ -19,50 +19,40 @@
*/
class Akismet_Driver extends SpamFilter_Driver {
// Lets not send everything to Akismet
- // @todo change to a white list
- private $ignore = array("HTTP_COOKIE",
- "HTTP_USER_AGENT",
- "HTTP_X_FORWARDED_FOR",
- "HTTP_X_FORWARDED_HOST",
- "HTTP_MAX_FORWARDS",
- "HTTP_X_FORWARDED_SERVER",
- "REDIRECT_STATUS",
- "SERVER_PORT",
- "PATH",
- "DOCUMENT_ROOT",
- "REMOTE_ADDR",
- "SERVER_ADMIN",
- "QUERY_STRING",
- "PHP_SELF" );
-
-// public function verify_key($api_key) {
-//// $url = url::base();
-//// $response = $this->_http_post("rest.akismet.com", "key={$api_key}&blog=$url");
-//// if ("valid" != $response[1]) {
-//// throw new Exception("@todo INVALID AKISMET KEY");
-//// }
-// return true;
-// }
+ // @todo provide an admin option to send or not send this information
+ private static $white_list = array("HTTP_USER_AGENT",
+ "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
+ "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION", "HTTP_HOST",
+ "HTTP_KEEP_ALIVE", "HTTP_REFERER", "HTTP_USER_AGENT", "QUERY_STRING",
+ "REMOTE_ADDR", "REMOTE_HOST", "REMOTE_PORT" );
public function check_comment($comment) {
-// $request = $this->_build_request("comment-check", $comment);
-// $response = $this->_http_post($this->_get_host_url(), $request);
-// return $reponse[1] == "true";
- return true;
+ $request = $this->_build_request("comment-check", $comment);
+ $response = $this->_http_post($this->_get_host_url(), $request);
+
+ Kohana::log("debug", print_r($response, 1));
+ if ($response["body"][0] != "true" && $response["body"][0] != "false") {
+ Kohana::log("alert", $response["body"][0]);
+ }
+ return $response["body"][0] == "true";
}
public function submit_spam($comment) {
-// $request = $this->_build_request("submit-spam", $comment);
-// $response = $this->_http_post($this->_get_host_url(), $request);
-// return $response[1] == "true";
- return true;
+ $request = $this->_build_request("submit-spam", $comment);
+ $response = $this->_http_post($this->_get_host_url(), $request);
+ if ($response["body"][0] != "true" && $response["body"][0] != "false") {
+ Kohana::log("alert", $response["body"][0]);
+ }
+ return $response["body"][0] == "true";
}
public function submit_ham($comment) {
-// $request = $this->_build_request("submit-ham", $comment);
-// $response = $this->_http_post($this->_get_host_url(), $request);
-// return $reponse[1] == "true";
- return true;
+ $request = $this->_build_request("submit-ham", $comment);
+ $response = $this->_http_post($this->_get_host_url(), $request);
+ if ($response["body"][0] != "true" && $response["body"][0] != "false") {
+ Kohana::log("alert", $response["body"][0]);
+ }
+ return $response["body"][0] == "true";
}
public function get_statistics() {
@@ -70,7 +60,7 @@ class Akismet_Driver extends SpamFilter_Driver {
}
public function get_admin_fields($post) {
- $view = new View("spam_filter_admin_akismet.html");
+ $view = new View("admin_spam_filter_akismet.html");
$view->api_key = empty($post) ? module::get_var("spam_filter", "api_key") :
$post->api_key;
@@ -83,31 +73,62 @@ class Akismet_Driver extends SpamFilter_Driver {
$post->add_callbacks("api_key", array($this, "validate_key"));
}
- public function validate_key(Validation $array, $field) {
- // @todo verify key values
- Kohana::log("debug", "Akismet::validate_key");
- Kohana::log("debug", print_r($array, 1));
- Kohana::log("debug", "field: $field");
+ public function validate_key(Validation $post, $field) {
+ $request = $this->_build_verify_request($post->api_key);
+ $response = $this->_http_post("rest.akismet.com", $request);
+ Kohana::log("debug", print_r($response, 1));
+ if ("valid" != $response["body"][0]) {
+ $post->add_error("api_key", "invalid");
+ Kohana::log("alert", "Failed to verify Akismet Key:\n" . print_r($response["headers"], 1));
+ }
+ }
+
+ public function _build_verify_request($api_key) {
+ $base_url = url::base(true, true);
+ $query_string = "key={$api_key}&blog=$base_url";
+
+ $http_request = "POST /1.1/verify-key HTTP/1.0\r\n";
+ $http_request .= "Host: rest.akismet.com\r\n";
+ $http_request .= "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
+ $http_request .= "Content-Length: " . strlen($query_string) . "\r\n";
+ $http_request .= "User-Agent: Gallery 3.0 | Akismet/1.11 \r\n";
+ $http_request .= "\r\n";
+ $http_request .= $query_string;
+
+ return $http_request;
}
public function set_api_data($post) {
module::set_var("spam_filter", "api_key", $post->api_key);
}
- private function _build_request($function, $comment) {
+ public function _build_request($function, $comment) {
$comment_data = array();
+ $comment_data["user_ip"] = $comment->ip_addr;
+ $comment_data["permalink"] = url::site("comments/{$comment->id}");
+ $comment_data["blog"] = url::base(true, true);
+ $comment_data["user_agent"] = $comment->user_agent;
+ $comment_data["referrer"] = $_SERVER["HTTP_REFERER"];
+ $comment_data["comment_type"] = "comment";
+ $comment_data["comment_author"] = $comment->author;
+ $comment_data["comment_author_email"] = $comment->email;
+ $comment_data["comment_author_url"] = str_replace(array("http://", "https://"), "", $comment->url);
+ $comment_data["comment_content"] = $comment->text;
+
foreach($_SERVER as $key => $value) {
- if(!in_array($key, $this->ignore)) {
+ if(in_array($key, self::$white_list)) {
$comment_data[$key] = $value;
}
}
- $query_string = "";
+ $query_string = array();
foreach($comment_data as $key => $data) {
if(!is_array($data)) {
- $query_string .= $key . "=" . urlencode(stripslashes($data)) . "&";
+// $query_string .= $key . "=" . urlencode(stripslashes($data)) . "&";
+ $query_string[] = "$key=" . urlencode($data);
}
}
+ $query_string = join("&", $query_string);
$host = $this->_get_host_url();
$http_request = "POST /1.1/$function HTTP/1.0\r\n";
@@ -118,6 +139,8 @@ class Akismet_Driver extends SpamFilter_Driver {
$http_request .= "\r\n";
$http_request .= $query_string;
+ Kohana::log("debug", $http_request);
+
return $http_request;
}
@@ -125,4 +148,4 @@ class Akismet_Driver extends SpamFilter_Driver {
$api_key = module::get_var("spam_filter", "api_key");
return "$api_key.rest.akismet.com";
}
-} \ No newline at end of file
+}
diff --git a/modules/spam_filter/libraries/drivers/Mollom.php b/modules/spam_filter/libraries/drivers/Mollom.php
index 1b8c9aa5..6887a1be 100644
--- a/modules/spam_filter/libraries/drivers/Mollom.php
+++ b/modules/spam_filter/libraries/drivers/Mollom.php
@@ -34,7 +34,7 @@ class Mollom_Driver extends SpamFilter_Driver {
}
public function get_admin_fields($post) {
- $view = new View("spam_filter_admin_mollom.html");
+ $view = new View("admin_spam_filter_mollom.html");
$view->private_key = empty($post) ? module::get_var("spam_filter", "private_key") :
$post->private_key;
$view->public_key = empty($post) ? module::get_var("spam_filter", "public_key") :
@@ -62,7 +62,22 @@ class Mollom_Driver extends SpamFilter_Driver {
module::set_var("spam_filter", "public_key", $post->public_key);
}
- private function _build_request($function, $host,$comment_data) {
+ private function _build_request($function, $host, $comment_data) {
return "";
}
-} \ No newline at end of file
+
+ public function _retrieve_serverList() {
+ $server_list = module::get_var("spam_filter", "server_list");
+ if (empty($server_list)) {
+ $servers = array("http://xmlrpc1.mollom.com", "http://xmlrpc2.mollom.com", "http://xmlrpc1.mollom.com");
+ foreach (array("http://xmlrpc1.mollom.com", "http://xmlrpc2.mollom.com", "http://xmlrpc1.mollom.com") as $server) {
+ $result = xmlrpc($server . "/1.0");
+ if (!xmplrpc_errno()) {
+ module::set_var("spam_filter", "server_list", $result);
+ $server_list = $result;
+ }
+ }
+ }
+ return $server_list;
+ }
+}