Projet

Général

Profil

0001-misc-don-t-display-wrong-answer-on-initial-display-o.patch

Frédéric Péters, 07 décembre 2015 09:26

Télécharger (2,81 ko)

Voir les différences:

Subject: [PATCH] misc: don't display wrong answer on initial display of
 captcha (#9222)

When tracking codes are enabled request.form is filled with magictoken and thus
the captcha form is considered to be submitted, and obviously wrong.
 tests/test_form_pages.py | 27 +++++++++++++++++++++++++++
 wcs/qommon/form.py       |  4 ++--
 2 files changed, 29 insertions(+), 2 deletions(-)
tests/test_form_pages.py
1199 1199
    resp = resp.click('test')
1200 1200
    assert 'Some field' in resp.body
1201 1201

  
1202
def test_form_captcha_and_tracking_code(pub):
1203
    user = create_user(pub)
1204
    formdef = create_formdef()
1205
    formdef.data_class().wipe()
1206
    formdef.fields = [fields.StringField(id='0', label='Some field')]
1207
    formdef.has_captcha = True
1208
    formdef.enable_tracking_codes = True
1209
    formdef.store()
1210

  
1211
    # check the captcha is not given as being an error
1212
    app = get_app(pub)
1213
    resp = app.get('/')
1214
    resp = resp.click('test')
1215
    assert 'form_captcha' in resp.body
1216
    assert not 'wrong answer' in resp.body
1217

  
1218
    resp.form['captcha$q'] = 'az' # wrong answer
1219
    resp = resp.form.submit()
1220
    assert 'form_captcha' in resp.body
1221
    assert 'wrong answer' in resp.body
1222

  
1223
    session_id = app.cookies.values()[0].strip('"')
1224
    session = BasicSession.get(session_id)
1225
    resp.form['captcha$q'] = session.get_captcha_token(resp.forms[0]['captcha$token'].value)['answer']
1226
    resp = resp.form.submit()
1227
    assert 'f0' in resp.form.fields
1228

  
1202 1229
def test_form_file_field_submit(pub):
1203 1230
    formdef = create_formdef()
1204 1231
    formdef.fields = [fields.FileField(id='0', label='file')]
wcs/qommon/form.py
1134 1134
            self.hint = kwargs.get('hint')
1135 1135
            if self.hint is None:
1136 1136
                self.hint = _('Please answer this simple mathematical question as proof you are not a bot.')
1137
        self.add(StringWidget, 'q', required=True)
1137
        self.add(StringWidget, 'q', required=True, attrs={'required': 'required'})
1138 1138
        token['answer'] = str(answer)
1139 1139

  
1140 1140
    def _parse(self, request):
......
1144 1144
        if v['answer'] and token and token['answer'] == v['answer'].strip():
1145 1145
            get_session().won_captcha = True
1146 1146
            self.value = v
1147
        else:
1147
        elif v['answer']:
1148 1148
            self.error = _('wrong answer')
1149 1149

  
1150 1150
    def get_title(self):
1151
-