Hi Steve! Why not simply use the session? If the user has to authenticate anyway?
In case you want avoid a session you can create onetime tokens. Unfortunately checking token validity or detecting outdated tokens requires persistence somehow... Jens Von meinem iPhone gesendet > Am 24.10.2013 um 17:44 schrieb Steve <steves...@gmail.com>: > > On a side note, both of my options (using the User object and using a > persisted field) will result in only being able to show one > StreamResponse at a time (otherwise they would both show the same). I > could extend this by having some kind of data structure (hashmap?) in > the User object and passing a token which is valid only to that user > as a parameter, but I think i'm so far off the mark.. there must be an > easier way. > >> On 24 October 2013 16:32, Steve <steves...@gmail.com> wrote: >> Hi, >> >> I think I am doing something very, very wrong. What I have currently >> works - but I get a feeling that it's not the best way of doing it. >> I'm hoping for a little bit of advice again (sorry to ask so many >> questions recently, and sorry this is a long one). >> >> This is the issue: >> I have some dynamic files with file paths which depend on the user. >> Previously, all of those files existed on the context which was bad >> news because it meant if a user knew the URL, they could download any >> file. Without going into S3 servers for now (I can't unfortunately as >> I have a monstrously huge pile of ethics forms to fill out if I want >> to do that), I want to be able to embed these files on the page for a >> user to see once they have logged in. >> >> My solution has been to create a page named "FileStreamResponse" which >> returns a StreamResponse from the onActivate method. I then can do the >> following from another page class to get a link to that file. >> >> @Inject ComponentResources resources; >> public Link getStaticFileLink() { >> return resources.createPageLink("util/FileStreamResponse", true); >> } >> >> In the TML, I can use that link to embed it. This works for one file, >> which I have tested as "C:/file.xml" for now, but of course if anyone >> visits the link for /util/FileStreamResponse they get the same file. >> However, what I should be able to do is pass a parameter containing >> information about which file to show to the FileStreamResponse page. >> >> For my first attempt is to pass a parameter, I tried this: >> return resources.createPageLink("util/FileStreamResponse", true, >> "C:/file.xml"); >> >> This creates a link like this: >> http://localhost:8080/xyz/util/filestreamresponse/C:$002ffile.xml >> >> If I pick that up in the onActivate for the page it works. >> >> However, this isn't good because the the param is passed in the URL >> which again means anyone can view that link, unless I put a lot of >> permissions logic in that filestreamresponse class which already >> exists elsewhere then i'm a little stuck. >> >> So I know of one more solution to passing this parameter but it seems >> like a bit too much of a "hack" for even me. >> I create a setup method in the filestreamresponse page which takes in >> a filename and sets it. It persists the property. Then I just use the >> link to that page and it should show the correct file. Like this: >> >> @InjectPage >> private FileStreamResponse fsr; >> @Inject ComponentResources resources; >> >> public Link getStaticFileLink() { >> fsr.setup("C:/file.xml"); >> return resources.createPageLink("util/FileStreamResponse", true); >> } >> >> I believe that now the user cannot change that parameter so it should >> be safe. However, this doesn't seem right to me. It seems very.. very >> bad and i'm sure someone will tell me exactly that. Another option is >> to have the file which is requested stored in the User object which I >> have in the sessionstate but again I don't think that is a good way to >> do it. >> >> If I put the logic for testing permissions in to the page class, I >> still need to pass something to that page class to tell it which file >> to show, and i'd rather that not show in the URL. >> >> I'm sure others have had a similar problem and there is a standard way >> to do this which I am missing, I would really appreciate any guidance. >> Perhaps what I am doing is perfectly OK, but I suspect not as it leads >> to issues such as, even if the user logs out, if the value is >> persisted then they would see that file if re-visiting the link. >> (Unless it is indeed stored in the User object). >> >> >> Thanks, > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org