001/* 002 * Copyright 2010 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.ametys.cms.repository.comment; 018 019import java.util.ArrayList; 020import java.util.List; 021import java.util.Map; 022import java.util.regex.Pattern; 023 024import org.apache.avalon.framework.logger.AbstractLogEnabled; 025import org.apache.cocoon.environment.ObjectModelHelper; 026import org.apache.cocoon.environment.Request; 027import org.apache.commons.lang.StringUtils; 028 029import org.ametys.cms.repository.Content; 030import org.ametys.cms.repository.comment.actions.AddCommentAction; 031import org.ametys.core.captcha.CaptchaHelper; 032import org.ametys.runtime.config.Config; 033import org.ametys.runtime.i18n.I18nizableText; 034 035/** 036 * Handle all the listeners for the add comment action 037 */ 038public class DefaultCommentManagerExtensionPoint extends AbstractLogEnabled implements CommentManagerExtensionPoint 039{ 040 /** The pattern to check emails */ 041 public static final Pattern EMAIL_VALIDATOR = Pattern.compile("^([a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-zA-Z0-9]{2,})?$"); 042 /** The pattern to check url */ 043 public static final Pattern URL_VALIDATOR = Pattern.compile("^(https?:\\/\\/.+)?$"); 044 045 @Override 046 public boolean isValidatedByDefault(Content content) 047 { 048 return !Config.getInstance().getValueAsBoolean("cms.contents.comments.postvalidation"); 049 } 050 051 @Override 052 public boolean isCaptchaRequired(Content content, Map objectModel) 053 { 054 return false; 055 } 056 057 /** 058 * Call the validityCheck method on all listeners and add the results 059 * @param content The content to comment 060 * @param objectModel The cocoon object model 061 * @return An list of error messages (empty if no errors) 062 */ 063 @Override 064 public List<I18nizableText> getErrors(CommentableContent content, Map objectModel) 065 { 066 Request request = ObjectModelHelper.getRequest(objectModel); 067 068 List<I18nizableText> errors = new ArrayList<>(); 069 070 if (StringUtils.isBlank(request.getParameter(AddCommentAction.PARAMETER_AUTHOR_NAME))) 071 { 072 errors.add(new I18nizableText("plugin.cms", "PLUGINS_CMS_CONTENT_COMMENTS_ADD_ERROR_NAME")); 073 } 074 075 if (!EMAIL_VALIDATOR.matcher(StringUtils.trimToEmpty(request.getParameter(AddCommentAction.PARAMETER_AUTHOR_EMAIL))).matches()) 076 { 077 errors.add(new I18nizableText("plugin.cms", "PLUGINS_CMS_CONTENT_COMMENTS_ADD_ERROR_EMAIL")); 078 } 079 080 if (!URL_VALIDATOR.matcher(StringUtils.trimToEmpty(request.getParameter(AddCommentAction.PARAMETER_AUTHOR_URL))).matches()) 081 { 082 errors.add(new I18nizableText("plugin.cms", "PLUGINS_CMS_CONTENT_COMMENTS_ADD_ERROR_URL")); 083 } 084 085 if (StringUtils.isBlank(request.getParameter(AddCommentAction.PARAMETER_CONTENTTEXT))) 086 { 087 errors.add(new I18nizableText("plugin.cms", "PLUGINS_CMS_CONTENT_COMMENTS_ADD_ERROR_CONTENT")); 088 } 089 090 if (isCaptchaRequired(content, objectModel)) 091 { 092 String captchaKey = request.getParameter(AddCommentAction.PARAMETER_CAPTCHA_KEY); 093 String captchaValue = request.getParameter(AddCommentAction.PARAMETER_CAPTCHA_VALUE); 094 if (!CaptchaHelper.checkAndInvalidate(captchaKey, captchaValue)) 095 { 096 errors.add(new I18nizableText("plugin.cms", "plugin.cms:PLUGINS_CMS_CONTENT_COMMENTS_ADD_ERROR_CAPTCHA")); 097 } 098 } 099 100 return errors; 101 } 102}