/*******************************************************************************
* Copyright 2006 - 2014 Vienna University of Technology,
* Department of Software Technology and Interactive Systems, IFS
*
* 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 eu.scape_project.pw.idp.validator;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;
import eu.scape_project.pw.idp.utils.ConfigurationLoader;
import org.apache.commons.configuration.Configuration;
import net.tanesha.recaptcha.ReCaptchaImpl;
import net.tanesha.recaptcha.ReCaptchaResponse;
/**
* Validator for ReCaptcha.
*/
@FacesValidator("ReCaptchaValidator")
public class ReCaptchaValidator implements Validator {
/**
* IDP properties.
*/
private Configuration config;
/**
* Constructor.
*/
public ReCaptchaValidator() {
ConfigurationLoader configurationLoader = new ConfigurationLoader();
config = configurationLoader.load();
}
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
String remoteAddr = request.getRemoteAddr();
ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
reCaptcha.setPrivateKey(config.getString("recaptcha.privatekey"));
String challenge = request.getParameter("recaptcha_challenge_field");
String uresponse = request.getParameter("recaptcha_response_field");
if (challenge == null || uresponse == null) {
throw new ValidatorException(new FacesMessage("No ReCaptcha text. Maybe you have JavaScript disabled. Please enable and retry."));
}
ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);
if (reCaptchaResponse.isValid()) {
return;
} else {
throw new ValidatorException(new FacesMessage("Invalid ReCaptcha text. Please try again."));
}
}
}