move the captcha checking code inside the handler

that deals with expected networking errors

closes PR 13205
This commit is contained in:
Robby Findler 2012-11-22 10:35:51 -06:00
parent 316bbcb038
commit 279e5aa0d9

View File

@ -206,33 +206,34 @@
[current-alist-separator-mode 'amp]) [current-alist-separator-mode 'amp])
(thread (thread
(λ () (λ ()
;; Note that this UI is not great: every submission asks for a
;; captcha and nothing is kept. This is fine since this is only in
;; case it needs to be used in the future -- if/when that happens,
;; the code can be improved to remember some of it, and the server
;; can have some better policy to send the same captcha to the same
;; client. So the only case where you'd suffer the bad UI is if a
;; captcha is added *and* you have this version of the code (which
;; will be outdated by that time).
(define captcha-question (get-captcha-text))
(define captcha-answer
(and captcha-question
(get-text-from-user
"Are you human?" ; FIXME: use string-constant
captcha-question bug-frame)))
(define post-data
(let* ([q (get-query)]
[q (if captcha-answer
`([captcha . ,captcha-answer]
;; send back the question too: if things get really
;; bad, then the server can make up random captchas
;; and check the reply against the challenge that
;; was used
[captcha-question . ,captcha-question]
,@q)
q)])
(string->bytes/utf-8 (alist->form-urlencoded q))))
(with-handlers ([exn:fail? (λ (x) (channel-put exn-chan x))]) (with-handlers ([exn:fail? (λ (x) (channel-put exn-chan x))])
;; Note that this UI is not great: every submission asks for a
;; captcha and nothing is kept. This is fine since this is only in
;; case it needs to be used in the future -- if/when that happens,
;; the code can be improved to remember some of it, and the server
;; can have some better policy to send the same captcha to the same
;; client. So the only case where you'd suffer the bad UI is if a
;; captcha is added *and* you have this version of the code (which
;; will be outdated by that time).
(define captcha-question (get-captcha-text))
(define captcha-answer
(and captcha-question
(get-text-from-user
"Are you human?" ; FIXME: use string-constant
captcha-question bug-frame)))
(define post-data
(let* ([q (get-query)]
[q (if captcha-answer
`([captcha . ,captcha-answer]
;; send back the question too: if things get really
;; bad, then the server can make up random captchas
;; and check the reply against the challenge that
;; was used
[captcha-question . ,captcha-question]
,@q)
q)])
(string->bytes/utf-8 (alist->form-urlencoded q))))
(call/input-url (call/input-url
bug-report-url bug-report-url
(lambda (x) (post-impure-port x post-data)) (lambda (x) (post-impure-port x post-data))