| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. The ASF licenses this file to You |
| * under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. For additional information regarding |
| * copyright in this work, please see the NOTICE file in the top level |
| * directory of this distribution. |
| */ |
| |
| package org.apache.roller.weblogger.ui.rendering.plugins.comments; |
| |
| import java.io.BufferedReader; |
| import java.io.InputStreamReader; |
| import java.io.OutputStreamWriter; |
| import java.net.URL; |
| import java.net.URLConnection; |
| import java.util.ResourceBundle; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.roller.util.RollerConstants; |
| import org.apache.roller.weblogger.business.WebloggerFactory; |
| import org.apache.roller.weblogger.config.WebloggerConfig; |
| import org.apache.roller.weblogger.pojos.WeblogEntryComment; |
| import org.apache.roller.weblogger.util.RollerMessages; |
| |
| |
| /** |
| * Check against Akismet service. Expects to a valid Akismet API key in the |
| * Roller startup config property comment.validator.akismet.apikey. |
| * You can get a free personal use key by registering as a user at wordpress.com. |
| * See Akismet site for API details (http://akismet.com/development/api/) |
| */ |
| public class AkismetCommentValidator implements CommentValidator { |
| private static Log log = LogFactory.getLog(AkismetCommentValidator.class); |
| private ResourceBundle bundle = ResourceBundle.getBundle("ApplicationResources"); |
| private String apikey; |
| |
| /** Creates a new instance of AkismetCommentValidator */ |
| public AkismetCommentValidator() { |
| apikey = WebloggerConfig.getProperty("comment.validator.akismet.apikey"); |
| } |
| |
| public String getName() { |
| return bundle.getString("comment.validator.akismetName"); |
| } |
| |
| public int validate(WeblogEntryComment comment, RollerMessages messages) { |
| StringBuilder sb = new StringBuilder(); |
| sb.append("blog=").append( |
| WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogURL(comment.getWeblogEntry().getWebsite(), null, true)).append("&"); |
| sb.append("user_ip=" ).append(comment.getRemoteHost()).append("&"); |
| sb.append("user_agent=" ).append(comment.getUserAgent()).append("&"); |
| sb.append("referrer=" ).append(comment.getReferrer()).append("&"); |
| sb.append("permalink=" ).append(comment.getWeblogEntry().getPermalink()).append("&"); |
| sb.append("comment_type=" ).append("comment").append("&"); |
| sb.append("comment_author=" ).append(comment.getName()).append("&"); |
| sb.append("comment_author_email=").append(comment.getEmail()).append("&"); |
| sb.append("comment_author_url=" ).append(comment.getUrl()).append("&"); |
| sb.append("comment_content=" ).append(comment.getContent()); |
| |
| try { |
| URL url = new URL("http://" + apikey + ".rest.akismet.com/1.1/comment-check"); |
| URLConnection conn = url.openConnection(); |
| conn.setDoOutput(true); |
| |
| conn.setRequestProperty("User_Agent", "Roller " + WebloggerFactory.getWeblogger().getVersion()); |
| conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded;charset=utf8"); |
| conn.setRequestProperty("Content-length", Integer.toString(sb.length())); |
| |
| OutputStreamWriter osr = new OutputStreamWriter(conn.getOutputStream()); |
| osr.write(sb.toString(), 0, sb.length()); |
| osr.flush(); |
| osr.close(); |
| |
| BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); |
| String response = br.readLine(); |
| if ("true".equals(response)) { |
| messages.addError("comment.validator.akismetMessage"); |
| return 0; |
| } |
| else { |
| return RollerConstants.PERCENT_100; |
| } |
| } catch (Exception e) { |
| log.error("ERROR checking comment against Akismet", e); |
| } |
| // interpreting error as spam: better safe than sorry? |
| return 0; |
| } |
| } |
| |
| |
| |