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.lang.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 | |
|
55 | 0 | public class JCaptchaEngineService implements ICaptchaEngine |
56 | |
{ |
57 | |
private static final String CAPTCHA_PROVIDER = "JCaptcha"; |
58 | |
private static final String TEMPLATE_JCAPTCHA = "jcaptcha.template.captchaTemplate"; |
59 | |
private static final String LOGGER = "lutece.captcha"; |
60 | |
private static final String PARAMETER_HONEY_POT = "jcaptchahoneypot"; |
61 | |
private static final String PARAMETER_J_CAPTCHA_RESPONSE = "j_captcha_response"; |
62 | |
private static final String BEAN_NAME_JCAPTCHA_IMAGE_SERVICE = "jcaptcha.imageCaptchaService"; |
63 | |
private static final String BEAN_NAME_JCAPTCHA_SOUND_SERVICE = "jcaptcha.soundCaptchaService"; |
64 | |
|
65 | |
|
66 | |
|
67 | |
|
68 | |
@Override |
69 | |
public boolean validate( HttpServletRequest request ) |
70 | |
{ |
71 | 0 | AppLogService.debug( LOGGER, "Validate captcha response for id : " + request.getSession( ).getId( ) ); |
72 | |
|
73 | |
|
74 | 0 | String strHoneyPot = request.getParameter( PARAMETER_HONEY_POT ); |
75 | 0 | String captchaReponse = request.getParameter( PARAMETER_J_CAPTCHA_RESPONSE ); |
76 | 0 | if ( StringUtils.isNotBlank( strHoneyPot ) || captchaReponse == null ) |
77 | |
{ |
78 | 0 | return false; |
79 | |
} |
80 | |
|
81 | 0 | captchaReponse = captchaReponse.toLowerCase( ); |
82 | 0 | ImageCaptchaService imageCaptcha = (ImageCaptchaService) SpringContextService |
83 | 0 | .getBean( BEAN_NAME_JCAPTCHA_IMAGE_SERVICE ); |
84 | 0 | SoundCaptchaService soundCaptcha = (SoundCaptchaService) SpringContextService |
85 | 0 | .getBean( BEAN_NAME_JCAPTCHA_SOUND_SERVICE ); |
86 | 0 | boolean validImage = false; |
87 | 0 | boolean validSound = false; |
88 | 0 | String sessionId = request.getSession( ).getId( ); |
89 | |
|
90 | |
try |
91 | |
{ |
92 | 0 | validImage = imageCaptcha.validateResponseForID( sessionId, captchaReponse ); |
93 | 0 | validSound = soundCaptcha.validateResponseForID( sessionId, captchaReponse ); |
94 | |
} |
95 | 0 | catch ( CaptchaServiceException e ) |
96 | |
{ |
97 | 0 | AppLogService.debug( LOGGER, e ); |
98 | 0 | } |
99 | |
|
100 | 0 | if ( validImage || validSound ) |
101 | |
{ |
102 | 0 | AppLogService.debug( LOGGER, "Valid response" ); |
103 | |
|
104 | 0 | return true; |
105 | |
} |
106 | 0 | AppLogService.debug( LOGGER, "Unvalid response" ); |
107 | 0 | return false; |
108 | |
} |
109 | |
|
110 | |
|
111 | |
|
112 | |
|
113 | |
@Override |
114 | |
public String getHtmlCode( ) |
115 | |
{ |
116 | 0 | String strCaptchaTemplate = AppPropertiesService.getProperty( TEMPLATE_JCAPTCHA ); |
117 | |
|
118 | 0 | HtmlTemplate captchaTemplate = AppTemplateService.getTemplate( strCaptchaTemplate ); |
119 | |
|
120 | 0 | return captchaTemplate.getHtml( ); |
121 | |
} |
122 | |
|
123 | |
|
124 | |
|
125 | |
|
126 | |
@Override |
127 | |
public String getCaptchaEngineName( ) |
128 | |
{ |
129 | 0 | return CAPTCHA_PROVIDER; |
130 | |
} |
131 | |
} |