diff --git a/pastiche.scm b/pastiche.scm index 2900823..4ebd957 100644 --- a/pastiche.scm +++ b/pastiche.scm @@ -263,65 +263,66 @@ (navigation-links))) title: "Pastiche: the Chicken Scheme pasting service") - (define-page "paste" - (lambda () - (let ((paste-title "Untitled paste")) - (with-request-variables ((nick (nonempty as-string)) - (title (nonempty as-string)) - paste - id) - (html-page + (define (handle-pastes) + (let ((paste-title "Untitled paste")) + (with-request-variables ((nick (nonempty as-string)) + (title (nonempty as-string)) + paste + id) + (html-page + (++ + (
id: "content" + (or (and-let* ((nick (or (and nick (htmlize nick)) "anonymous")) + (title (or (and title (htmlize title)) "no title")) + (time (current-seconds)) + (paste (and (not (equal? "" paste)) paste)) + (hashsum (string->sha1sum + (++ nick title (->string time) paste))) + (url '()) + (snippet (map + (lambda (i) + (if (and (string? i) (string-null? i)) + "anonymous" + i)) + (list nick title time paste)))) + (if (and use-captcha? + (not (equal? ($ 'captcha-user-answer) + (and-let* ((hash ($ 'captcha-hash)) + (captcha (alist-ref hash captchas equal?))) + (captcha-string captcha))))) + (bail-out "Wrong captcha answer.") + (if (string-null? paste) + (bail-out "I am not storing empty pastes.") + (begin (cond ((fetch-paste id) + => (lambda (p) + (let ((count (+ 1 (length (cdr p))))) + (update-paste id snippet) + (set! url (make-pathname + base-path + (++ "paste?id=" id "#a" (->string count))))))) + (else (insert-paste hashsum snippet) + (set! url (make-pathname base-path (++ "paste?id=" hashsum))))) + (set! paste-title title) + (when ($ 'notify-irc) (notify nick title url)) + (++ (

align: "center" "Thanks for your paste!") + (

"Hi " nick ", thanks for pasting: " ( title) (
)) + (

align: "center") "Your paste can be reached with this url: " (link url url)))))) + (cond ((fetch-paste id) + => (lambda (p) + (set! paste-title (third (last p))) (++ - (

id: "content" - (or (and-let* ((nick (or (and nick (htmlize nick)) "anonymous")) - (title (or (and title (htmlize title)) "no title")) - (time (current-seconds)) - (paste (and (not (equal? "" paste)) paste)) - (hashsum (string->sha1sum - (++ nick title (->string time) paste))) - (url '()) - (snippet (map - (lambda (i) - (if (and (string? i) (string-null? i)) - "anonymous" - i)) - (list nick title time paste)))) - (if (and use-captcha? - (not (equal? ($ 'captcha-user-answer) - (and-let* ((hash ($ 'captcha-hash)) - (captcha (alist-ref hash captchas equal?))) - (captcha-string captcha))))) - (bail-out "Wrong captcha answer.") - (if (string-null? paste) - (bail-out "I am not storing empty pastes.") - (begin (cond ((fetch-paste id) - => (lambda (p) - (let ((count (+ 1 (length (cdr p))))) - (update-paste id snippet) - (set! url (make-pathname - base-path - (++ "paste?id=" id "#a" (->string count))))))) - (else (insert-paste hashsum snippet) - (set! url (make-pathname base-path (++ "paste?id=" hashsum))))) - (set! paste-title title) - (when ($ 'notify-irc) (notify nick title url)) - (++ (

align: "center" "Thanks for your paste!") - (

"Hi " nick ", thanks for pasting: " ( title) (
)) - (

align: "center") "Your paste can be reached with this url: " (link url url)))))) - (cond ((fetch-paste id) - => (lambda (p) - (set! paste-title (third (last p))) - (++ - (format-all-snippets p) - (

id: "paste-footer" - (

align: "center" - (link (++ base-path "?id=" id - ";annotate=t") "Annotate this paste!")))))) - (else (bail-out "Could not find a paste with this id:" id))))) - (navigation-links)) - css: (page-css) - title: paste-title)))) - no-template: #t) + (format-all-snippets p) + (
id: "paste-footer" + (

align: "center" + (link (++ base-path "?id=" id + ";annotate=t") "Annotate this paste!")))))) + (else (bail-out "Could not find a paste with this id:" id))))) + (navigation-links)) + css: (page-css) + title: paste-title)))) + + (define-page "paste" handle-pastes method: 'GET) + (define-page "paste" handle-pastes method: 'POST) (define-page "raw" (lambda ()