[Seaside-dev] Re: ZnSeasideStaticServerAdaptorDelegate

Sven Van Caekenberghe sven at stfx.eu
Mon Sep 26 21:15:25 UTC 2016


> On 22 Sep 2016, at 10:06, Johan Brichau <johan at inceptive.be> wrote:
> 
> Hi Sven,
> 
> Refined it a little bit more (only try to get a file when it’s a GET request).
> Don’t know if there is a more elegant way of doing that but because this adaptor should really only be used in development, it does not matter a lot.
> 
> Can you change the package or can we upload it?

Done:

===
Name: Zinc-Seaside-SvenVanCaekenberghe.46
Author: SvenVanCaekenberghe
Time: 26 September 2016, 11:14:44.435222 pm
UUID: ef50a73e-9858-4600-bc4a-1099317b3068
Ancestors: Zinc-Seaside-pmm.45

Change ZnSeasideStaticServerAdaptorDelegate>>#handleRequest: to be a bit more conservative: only if Seaside returns a 404 Not Found for an unauthenticated GET request, try a static file access, else return **the original** error response [ thanks Johan Brichau for this fix ]
===

Sven

> 
> thx
> Johan
> 
> handleRequest: znRequest
> 	"If the Seaside request processing apparatus returns an HTTP response with a 'not found' error for a GET request,
> 	check the filesystem for a file that matches the uri of the request, if found send the file if not send the original error."
> 
> 	| response staticResponse |
> 	response := self adaptor process: znRequest.
> 	^ (response isNotFound and: [ (znRequest method = 'GET') and: [ response isAuthenticationRequired not ] ])
> 			ifTrue: [ 
> 				staticResponse := self staticDelegate handleRequest: znRequest.
> 				staticResponse isNotFound ifTrue:[ response ] ifFalse:[ staticResponse ] ]
> 			ifFalse: [ response ].
> 
>> On 22 Sep 2016, at 09:38, Sven Van Caekenberghe <sven at stfx.eu> wrote:
>> 
>> Hi Johan,
>> 
>> The original code was a bit of a hack, IMHO, but your solution makes way more sense, because it is more specific, so OK for me.
>> 
>> Sven
>> 
>>> On 22 Sep 2016, at 09:32, Johan Brichau <johan at inceptive.be> wrote:
>>> 
>>> Hi all, (cc: Sven)
>>> 
>>> I just started to use the ZnSeasideStaticServerAdaptorDelegate to replace our uses of Seaside-Filesystem (exposing external file directories in Seaside handlers) in the development environment.
>>> The Zinc solution is really better, but I noticed it is a bit too liberal about throwing away error responses coming from the Seaside backend. 
>>> 
>>> Our application (and its API, which is a separate handler) responds different errors which should really be answered to the client.
>>> The ZnSeasideStaticServerAdaptorDelegate tries to look for a file upon _any_ error coming from the Seaside backend and will eventually yield a 404 because it cannot find a file for the given url either.
>>> 
>>> I propose to change the code as shown below. A file should only be searched when the Seaside backend responds a 404 and if the file was not found, we just return the original error response.
>>> This yields the expected behaviour in our case, which I think is not specific to our application.
>>> 
>>> What do you think?
>>> 
>>> Cheers
>>> Johan
>>> 
>>> 
>>> handleRequest: znRequest
>>> 	"If the Seaside request processing apparatus returns an HTTP response with a 'not found' error
>>> 	check the filesystem for a file that matches the uri of the request, if found send the file if not send the original error."
>>> 
>>> 	| response staticResponse |
>>> 	response := self adaptor process: znRequest.
>>> 	^ (response isNotFound and: [ response isAuthenticationRequired not ])
>>> 			ifTrue: [ 
>>> 				staticResponse := self staticDelegate handleRequest: znRequest.
>>> 				staticResponse isNotFound ifTrue:[ response ] ifFalse:[ staticResponse ] ]
>>> 			ifFalse: [ response ].
>> 
> 



More information about the seaside-dev mailing list