All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.meltmedia.cadmium.email.jersey.EmailFormValidator Maven / Gradle / Ivy

/**
 *    Copyright 2012 meltmedia
 *
 *    Licensed 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.
 */
package com.meltmedia.cadmium.email.jersey;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;


import javax.ws.rs.core.MultivaluedMap;

import org.apache.commons.lang.StringUtils;

import com.meltmedia.cadmium.core.ContentService;
import com.meltmedia.cadmium.email.config.EmailComponentConfiguration;
import com.meltmedia.cadmium.email.config.EmailComponentConfiguration.Field;

public class EmailFormValidator {
	
	private static final String emailExpression = "^.+?@.+?[\\.]{1}.+?$";
  static Pattern pattern = Pattern.compile(emailExpression,Pattern.CASE_INSENSITIVE);
   
  public static void validate(MultivaluedMap formData, EmailComponentConfiguration config, ContentService contentService) throws ValidationException {
  	
  	List errors = new ArrayList();
  	  	
  	// Validate From Name
    if(StringUtils.isBlank(getRequiredFieldValue(formData, config.getFromName(), Constants.FROM_NAME))) {
  		errors.add(new ValidationError(Constants.FROM_NAME, Constants.FROM_NAME + " is required."));
  	}
    
    // Validate ToAddress
    String toAddress = getRequiredFieldValue(formData, config.getToAddress(), Constants.TO_ADDRESS);
    if(StringUtils.isBlank(toAddress)) {
  		errors.add(new ValidationError(Constants.TO_ADDRESS, Constants.TO_ADDRESS + " is required."));
  	} else if(!isValidEmailAddress(toAddress)) {
  		errors.add(new ValidationError(Constants.TO_ADDRESS, Constants.TO_ADDRESS + " is an invalid email address."));
  	}
    
    //  Validate To Name
  	if(StringUtils.isBlank(getRequiredFieldValue(formData, config.getToName(), Constants.TO_NAME))) {
  		errors.add(new ValidationError(Constants.TO_NAME, Constants.TO_NAME + " is required."));
  	}
  	
  	// Validate Subject
  	if(StringUtils.isBlank(getRequiredFieldValue(formData, config.getSubject(), Constants.SUBJECT))) {
  		errors.add(new ValidationError(Constants.SUBJECT, Constants.SUBJECT + " is required."));
  	}
  	for(Field field : config.getFields()) {
  		checkValidField(field, formData, contentService, errors);
  	}
  	
	  if (errors.size() > 0) {
      throw new ValidationException("Validation error(s) occurred.", errors.toArray(new ValidationError[errors.size()]));
    }
  	
  }
  
  protected static void checkValidField(Field field, MultivaluedMap formData, ContentService contentService, List errors) {
  	String value = field.getRawValue(formData);
  	if(field.required && StringUtils.isBlank(value)) {
  		errors.add(new ValidationError(field.name, field.validationMessage));
  	}
  	if(StringUtils.isNotBlank(value)) {
			if(field.email && !isValidEmailAddress(value)) {
				errors.add(new ValidationError(field.name, field.validationMessage));
			} else if (field.page && !pageExists(value, contentService)) {
				errors.add(new ValidationError(field.name, field.validationMessage));
			}
  	}
  }
  
  protected static boolean isValidEmailAddress(String emailAddress) {
    
    if (emailAddress != null) {
      if (pattern.matcher(emailAddress).matches() && !emailAddress.contains("'") && !emailAddress.contains(")") && !emailAddress.contains("*") && !emailAddress.contains("\"")) {
        return true;
      }
    }   
    return false;
  }
  
	protected static boolean pageExists(String pagePath, ContentService contentService) {
		if (pagePath.contains("-INF")) {
			return false;
		}
		File pagePathFile = new File(contentService.getContentRoot(),pagePath);
		return pagePathFile.exists();
	}
	
	protected static String getRequiredFieldValue(MultivaluedMap formData, String defaultString, String requestKey) {
		
		if(StringUtils.isNotBlank(defaultString)) {
			return defaultString.trim();
		} else if(formData.get(requestKey) != null && StringUtils.isNotBlank((String)formData.get(requestKey).get(0))) {
			return formData.get(requestKey).get(0);
		}		
		return "";
	}
  
  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy