1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.captcha.modules.jcaptcha.service;
35
36 import javax.servlet.http.HttpServletRequest;
37
38 import org.apache.commons.lang3.StringUtils;
39
40 import com.octo.captcha.service.CaptchaServiceException;
41 import com.octo.captcha.service.image.ImageCaptchaService;
42 import com.octo.captcha.service.sound.SoundCaptchaService;
43
44 import fr.paris.lutece.plugins.captcha.service.ICaptchaEngine;
45 import fr.paris.lutece.portal.service.spring.SpringContextService;
46 import fr.paris.lutece.portal.service.template.AppTemplateService;
47 import fr.paris.lutece.portal.service.util.AppLogService;
48 import fr.paris.lutece.portal.service.util.AppPropertiesService;
49 import fr.paris.lutece.util.html.HtmlTemplate;
50
51
52
53
54 public class JCaptchaEngineService implements ICaptchaEngine
55 {
56 private static final String CAPTCHA_PROVIDER = "JCaptcha";
57 private static final String TEMPLATE_JCAPTCHA = "jcaptcha.template.captchaTemplate";
58 private static final String LOGGER = "lutece.captcha";
59 private static final String PARAMETER_HONEY_POT = "jcaptchahoneypot";
60 private static final String PARAMETER_J_CAPTCHA_RESPONSE = "j_captcha_response";
61 private static final String BEAN_NAME_JCAPTCHA_IMAGE_SERVICE = "jcaptcha.imageCaptchaService";
62 private static final String BEAN_NAME_JCAPTCHA_SOUND_SERVICE = "jcaptcha.soundCaptchaService";
63
64
65
66
67 @Override
68 public boolean validate( HttpServletRequest request )
69 {
70 AppLogService.debug( LOGGER, "Validate captcha response for id : " + request.getSession( ).getId( ) );
71
72
73 String strHoneyPot = request.getParameter( PARAMETER_HONEY_POT );
74 String captchaReponse = request.getParameter( PARAMETER_J_CAPTCHA_RESPONSE );
75 if ( StringUtils.isNotBlank( strHoneyPot ) || captchaReponse == null )
76 {
77 return false;
78 }
79
80 captchaReponse = captchaReponse.toLowerCase( );
81 ImageCaptchaService imageCaptcha = (ImageCaptchaService) SpringContextService.getBean( BEAN_NAME_JCAPTCHA_IMAGE_SERVICE );
82 SoundCaptchaService soundCaptcha = (SoundCaptchaService) SpringContextService.getBean( BEAN_NAME_JCAPTCHA_SOUND_SERVICE );
83 boolean validImage = false;
84 boolean validSound = false;
85 String sessionId = request.getSession( ).getId( );
86
87 try
88 {
89 validImage = imageCaptcha.validateResponseForID( sessionId, captchaReponse );
90 validSound = soundCaptcha.validateResponseForID( sessionId, captchaReponse );
91 }
92 catch( CaptchaServiceException e )
93 {
94 AppLogService.debug( LOGGER, e );
95 }
96
97 if ( validImage || validSound )
98 {
99 AppLogService.debug( LOGGER, "Valid response" );
100
101 return true;
102 }
103 AppLogService.debug( LOGGER, "Unvalid response" );
104 return false;
105 }
106
107
108
109
110 @Override
111 public String getHtmlCode( )
112 {
113 String strCaptchaTemplate = AppPropertiesService.getProperty( TEMPLATE_JCAPTCHA );
114
115 HtmlTemplate captchaTemplate = AppTemplateService.getTemplate( strCaptchaTemplate );
116
117 return captchaTemplate.getHtml( );
118 }
119
120
121
122
123 @Override
124 public String getCaptchaEngineName( )
125 {
126 return CAPTCHA_PROVIDER;
127 }
128 }