Update of /project/lisppaste/cvsroot/lisppaste2
In directory clnet:/tmp/cvs-serv9580
Modified Files:
web-server.lisp
Log Message:
Captchas should only be entered once an hour
--- /project/lisppaste/cvsroot/lisppaste2/web-server.lisp 2007/01/16 00:56:31 1.88
+++ /project/lisppaste/cvsroot/lisppaste2/web-server.lisp 2007/01/16 01:10:44 1.89
@@ -1,4 +1,4 @@
-;;;; $Id: web-server.lisp,v 1.88 2007/01/16 00:56:31 bmastenbrook Exp $
+;;;; $Id: web-server.lisp,v 1.89 2007/01/16 01:10:44 bmastenbrook Exp $
;;;; $Source: /project/lisppaste/cvsroot/lisppaste2/web-server.lisp,v $
;;;; See the LICENSE file for licensing information.
@@ -86,12 +86,16 @@
(remhash host *referer-hash*)
(incf (gethash "Google" *referer-hash* 0) count)))))
+(defvar *show-captcha* t)
+
(defmethod handle-request-response :around ((handler lisppaste-basic-handler) method request)
(with-open-file (*trace-output* (times-file-for-class handler)
:direction :output
:if-exists :append :if-does-not-exist :create)
+ (expire-authorization-tokens)
(unwind-protect
- (call-next-method)
+ (let ((*show-captcha* (not (is-authorized request))))
+ (call-next-method))
(force-output *trace-output*))))
(defun make-css ()
@@ -677,15 +681,16 @@
(<tr>
(<th align="left" width="0%" nowrap="nowrap"> "Enter a title:")
(<td> <input type="text" name="title" value=?default-title />))
- (<tr>
- (<th align="left" width="0%" nowrap="nowrap"> "Captcha:")
- (<td>
- (multiple-value-bind (captcha captchaid)
- (make-captcha 8)
- (list
- captcha
- <input type="text" name="captcha" />
- <input type="hidden" name="captchaid" value=?captchaid />))))
+ (when *show-captcha*
+ (<tr>
+ (<th align="left" width="0%" nowrap="nowrap"> "Captcha:")
+ (<td>
+ (multiple-value-bind (captcha captchaid)
+ (make-captcha 8)
+ (list
+ captcha
+ <input type="text" name="captcha" />
+ <input type="hidden" name="captchaid" value=?captchaid />)))))
(unless annotate
(<tr>
(<th align="left" width="0%" nowrap="nowrap">
@@ -765,20 +770,26 @@
(annotate-paste (if annotate-number (find annotate-number *pastes* :key #'paste-number)))
(channel (body-param "channel" (request-body request)))
(captcha (body-param "captcha" (request-body request)))
- (captchaid (body-param "captchaid" (request-body request))))
- (if (> (length channel) 1)
- (request-send-headers request :expires 0
- :set-cookie (format nil "CHANNEL=~A; path=/"
- (or (and *no-channel-pastes*
- (string-equal channel "none")
- "None")
- (subseq channel 1))))
- (request-send-headers request :expires 0))
+ (captchaid (body-param "captchaid" (request-body request)))
+ (correct (and captcha captchaid (captcha-entered-correctly-p captcha 8 captchaid))))
+ (let ((cookies nil))
+ (when (> (length channel) 1)
+ (push (format nil "CHANNEL=~A; path=/"
+ (or (and *no-channel-pastes*
+ (string-equal channel "none")
+ "None")
+ (subseq channel 1))) cookies))
+ (when correct
+ (push (make-authorization-token) cookies))
+ (if cookies
+ (request-send-headers request :expires 0
+ :set-cookie cookies)
+ (request-send-headers request :expires 0)))
(expire-used-captchas)
(cond
- ((captcha-used captchaid)
+ ((and (> (length captchaid) 0) (captcha-used captchaid))
(new-paste-form request :message "This captcha has been used already. Did you use the back button?" :default-channel channel :annotate annotate-paste :default-user username :default-title title :default-contents text))
- ((not (captcha-entered-correctly-p captcha 8 captchaid))
+ ((and *show-captcha* (not correct))
(new-paste-form request :message "You entered the captcha incorrectly." :default-channel channel :annotate annotate-paste :default-user username :default-title title :default-contents text))
((> (length text) *paste-maximum-size*)
(new-paste-form request :message "Paste too large." :default-channel channel :annotate annotate-paste :default-user username :default-title title))