[Seaside] Accessing current session in RestfulFilter
Esteban Lorenzano
estebanlm at gmail.com
Wed May 28 11:40:44 UTC 2014
Hi,
AFAIK, REST purpose is to be stateless, and because of that you do not have the session available when passing through the filter.
Nevertheless, I hacked the REST filter to use it as an bookmarked entry point for my applications (to provide readable urls). What I did is to add this:
(notice that is kind of a hack… probably there is a better way to do this).
MyRestFilter>>#continueWithRoot: aBlock
"Continues the execution of the application.
I will execute aBlock with the root component of app"
| requestContext application session rootComponent |
requestContext := self requestContext.
application := requestContext application.
session := self obtainSessionWithApplication: application context: requestContext.
requestContext
push: session
during: [
rootComponent := requestContext rootComponentIfAbsent: [ nil ].
rootComponent ifNil: [
rootComponent := (application preferenceAt: #rootClass) new.
requestContext rootComponent: rootComponent ].
aBlock value: rootComponent.
self next handleFiltered: requestContext ].
MyRestFilter>>#obtainSessionWithApplication: application context: requestContext
| sessionKey session |
sessionKey := application trackingStrategy keyFromContext: requestContext.
session := sessionKey ifNotNil: [
application cache
at: sessionKey
ifAbsent: [ nil] ].
session ifNil: [
session := application newSession.
application register: session ].
^ session
with that, I can add some filters like this:
MyRestFilter>>#newScan
<get>
<path: '/new'>
self continueWithRoot: [ :root |
root show: EveSpyNewTrackPanel new ].
If I understand what I’m doing, this will:
a) look for an active session
a.1) retrieve a new one if not found
b) obtain the root component for active session
c) use #show:, to display the component I want to display.
It works… I don’t know if it can be done better… but that’s how I provide readable urls to my apps usually :)
cheers,
Esteban
On 28 May 2014, at 06:00, Philippe Marschall <philippe.marschall at gmail.com> wrote:
> On Wed, May 28, 2014 at 2:08 AM, Esteban A. Maringolo
> <emaringolo at gmail.com> wrote:
>> The RESTful filter is part of the Component as a decorator of it,
>
> Are you sure you meant to say component? Didn't you want to say application?
>
>> but
>> if I try to access the current session dynamic variable it is not
>> available.
>>
>> How do I do to retrieve the current session in the filter?
>>
>> Is it possible?
>
> The application looks up the session and sets up the dynamic variable.
> The filter runs earlier.
>
> What are you trying to achieve?
>
> Cheers
> Philippe
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
More information about the seaside
mailing list