[racket] Stateless Web Server: Generating a response on a stuffer error

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Tue Apr 24 16:31:16 EDT 2012

There was no way to do this, but I just added the 92nd keyword to
serve/servlet to do it:

               #:servlet-responder
               (λ (url exn)
                 (response/xexpr
                  `(html (body "Some other message"))))

allows you to inspect the exception and return a different thing.

(The push will happen shortly.)

Jay

On Mon, Apr 23, 2012 at 3:35 PM, Galler <lzgaller at optonline.net> wrote:
> Description:
>
> the stateless webserver allows a user to generate a stuffer to manipulate
> the encoding of the ANF sent to the client in the URL
>
> For example
>
> (stuffer-chain serialize-stuffer (stuffer-compose base64-stuffer
> (HMAC-SHA1-stuffer #"mysupersecretkey")))
>
> will prepend a digest to the base64-encoded ANF, and recompute and
> authenticate the digest on receipt.
>
> If either the encoded ANF, or the digest has been altered (i.e. forged) by
> the client, the stuffer correctly throws an error, which is caught by the
> webserver, which sends the following response back to the client:
>
> <some html>
> Exception
>
> The application raised an exception with the message:
>
> HMAC-SHA1-stuffer: Signature does not match!
>
> </some html>
>
> Question:
>
> While the behavior is absolutely correct, is there someplace to set a
> response if an error occurs with the stuffer? Is the error caught at the
> top-level of the dispatching server and not available for customization?
>
> If the answer is the latter, its ***not*** critical and probably not
> important to implement.
>
> Example code: Once running, alter the url in your browser in any manner
> (character addition, deletion, substitution) to generate the expected error.
>
> #lang web-server
>
>
> (require web-server/stuffers)
> (provide/contract (start (request? . -> . response?)))
>
> (define (start request)
>  (phase-1 request))
>
> ; phase-1: request -> response
> (define (phase-1 request)
>  (local [(define (response-generator embed/url)
>            (response/xexpr
>             `(html
>               (body (h1 "Phase 1")
>                     (a ((href ,(embed/url phase-2)))
>                        "click me!")))))]
>    (send/suspend/dispatch response-generator)))
>
> ; phase-2: request -> response
> (define (phase-2 request)
>  (display (request-bindings/raw request))
>  (local [(define (response-generator embed/url)
>            (response/xexpr
>             `(html
>               (body (h1 "Phase 2")
>                     (a ((href ,(embed/url phase-1)))
>                        "click me!")))))]
>    (send/suspend/dispatch response-generator)))
>
>
> (require web-server/servlet-env)
> (serve/servlet start
>              #:stateless? #t
>              #:launch-browser? #t
>              #:connection-close? #t
>              #:stuffer (stuffer-chain serialize-stuffer (stuffer-compose
> base64-stuffer (HMAC-SHA1-stuffer #"mysupersecretkey")))
>              #:quit? #f
>              #:listen-ip #f
>               #:servlet-path "/")
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93


Posted on the users mailing list.