v3.0.19 Thu Feb 27 09:19:46 EST 2003 * krb: fixed a compiler error where it wasn't successfuly determining a relativly pathed document root as being under PAS_BASE. * krb: worked some more on the developer's manual * krb: added additional_headers, and add_http_header methods to the response object to support the addition of arbitrary HTTP headers by page objects. * krb: added 'no warnings "all";' to the code evaled by makeGetSetMethods to hopefuly quiet down logged warnings by mod_perl environments. * krb: added new method to Org::Bgw::Pas::Base => query_string * krb: added page based and request handler based page render time elapsed time tracking. This adds a dependency on the Time::HiRes CPAN module. * krb: added content length header in response from request handler... v3.0.18 Tue Sep 24 09:36:46 EDT 2002 * krb: minor enhancments to the HTTP proxy to allow the local port for proxying and the control port to be specified on the command line. * krb: fixed really annoying bug where you lost your sid when error_page was called in the request handler. * krb: added sidCookieExpires get/set to the Response object. This allows you to set an expiration for the cookie so you are no longer forced to use a session cookie. Be careful setting this value, time differences between your server and your users computers can cause problems with cookie/session support that are _seriously_ _difficult_ to debug. * krb/wbj: added a catch method to Org::Bgw::Base::Common. It's not too far off of Graham Barr's Error module, and it's similar in purpose. We decided to provide this alternative for a few (possibly invalid reasons), mostly because as a method it's part of the inheritence hierarchy and logging systems. * krb/wbj: we fixed a problem with the include dependency checking for nested includes. Only the includes from the deepest psp file were being written to the .dep file. Now all the files, nested or not, are written to the .dep file, which allows the compiler and request handler to perform condiational recompilation based on all of the included psps. * krb: added localized scope to the PSP compiler for included files. So now included files inherit the including file's symbols, and can declare their own locals, possibly overshadowing those from their including file. There is no longer a fully shared namespace for a PSP built from multiple include files. * krb: fixed an error with the stacktrace that crept in somewhere recently that prevneted all but the deepest stack frame to get saved and reported. Now full stacktraces should be produced by the request handler's error page method and Exception's as_string method. * krb: I added conditionals to the build stack trace function in Exception to toss out the stackframes for Exception->_build_stack_trace, Exception->new, and Base::Common->throw, so they won't clutter up the reported stacktraces. v3.0.17 Thu Aug 15 09:07:44 EDT 2002 * krb: fixed a long time problem with the request handler not correctly handling relativly pathed forward_request calls. Previously they had to be fully pathed from the root, while now they can be relative to the page object, unless they begin with a '/', in which case they are still considered absolute from the document root * krb: fixed a compiler problem with resolving included files in psp pages * krb: fixed typo: Recomile => Recompile for the config file setting * krb: fixed the request handler so page->execute() is only called if request_init returns true. This helps for features like a LoggedInPage that verfies the users status in request_init and redirects the user if the fail the verification. * krb: fixed exception problem in the request handler -- I had changed "my $self = shift;" to "my($self) = @_;", which was dropping the exception. Now the exception is preserved -- the install problems we've been seeing where the system doesn't report that it can't write to the psp-cache directory should be solved (it will now report the error correctly). * krb: added in basic unit tests for every package in the project * krb: revamped the db object generation to use PSPs instead, which is much simpler. See the files bin/dbObjectGenerator, test/objectTemplate.psp, and test/testDbGen.sh for examples. * krb: this begins the migration to Log::Dispatch, and Log::Dispatch::Config I gutted the old logging system and installed the new one. * krb: after Jason added the RequestInquisitor, I made some ehancements to it that additionaly scrub the parameter names, and allow for multiple parameter values. The code now also logs a warning when it encounters a potential XSS attack. v3.0.16 Mon May 6 21:07:59 EDT 2002 * krb: Minor optimization for most subroutines, change {my $self = shift;} to {my($self) = @_;}. * krb: added more documentation in App and Base/Common. * krb: added auto method-creation in Base/Common. Should save alot of code and make the get/set functions faster, as they shold now be directly implemented instead of calling _get_set_scalar(). v3.0.15 Fri Mar 8 12:34:58 EST 2002 * Fixed a minor bug where registered URI's with a double slash wouldnt work. v3.0.14 Fri Mar 1 11:03:37 EST 2002 * Applied patch from Jason Stelzer that adds dependency (include file) checking for dynamic recompilation of the PSP files from within the mod_perl request handler. After applying the patch, minor refactoring of the code was done. v3.0.13 Sun Feb 3 18:02:49 EST 2002 * Justin Bedard and I (Kyle ) have been making some minor improvements based on using Pas for a project for our current employer. These include enhancements to the Proxy, to the base objects, an Org::Bgw::App object, and several build utility additions and improvements. v3.0.12 Mon Jul 9 10:27:30 EDT 2001 * "Herb Chenault" discovered a bug related to session ids not propagating when requests are forwarded (to either another page object, or a PSP page). The issue occurred when a browser had hit Pas for the first time (and did not have the sid cookie set), and the request was forwarded between page objects or psps internaly to Pas - a new sid was generated within the object/psp the request was forwarded to. Changes have been made to the request object and the request handler to support the propagation of the sid when requests are forwarded, which should preserve a consistient session id when a browser initialy hits a page/psp which forwards the request. The only question that currently remains is what will occurr if the forwarding chain ends at static conent (Pas should still maintain the sid by pushing the sid cookie into the headers, even for static content). v3.0.11 Thu May 24 22:22:49 EDT 2001 * Herb, this one's for you...Implemented a wrapper around Apache::Session: Org::Bgw::Pas::Session::Apache This is a simple wrapper - Pas was already generating it's own session ids, which made the process of wrapping Apache::Session difficult, as Apache::Session seems to want to generate it's own session ids, and doens't seem to have support for externaly generated ids. If we were going to use Apache::Session's id for the Pas sid, we would have had to change the architecture a bit to allow the sid to be changed that late in the request initialization process, and this would have made Pas dependant on Apache::Session - I'm not sure I want to do that. Also, on past sites that I've worked on, with database based sessions, there was the need for customization of the table - beyond the id,length,data columns. For instance, to support some of the the B2B protocols (like Ariba, OBI and OCI), it was necessary to tag the sessions with a type column and a timestamp column. The Ariba sessions had to out-live the normal reaping process that cleaned up old sessions - as Ariba provides for the ability for a user to return to the web site and re-manipulate their original shopping basket, possibly up to one week after they have left the site for the first time. I want Pas to support this kind of customization easily if developers implementing sites on top of Pas need it. To support this type of functionality, they could create their own session implementation, for their database, to add these kinds of columns (or whatever kinds of customization they need). Right now, Pas's session system can handle that if need be. v3.0.10 Thu May 17 17:42:08 EDT 2001 * changed the behavior of both the pas.lib.*, and the pas.logfile entries in the configuration file. Now if those entries begin with a leading slash, they are used as literal file paths, otherwise they behave as usual (i.e. as relative paths from PAS_BASE). v3.0.9 Wed May 16 09:20:19 EDT 2001 * remvoed superfuluous make targets -- kept only "make test" * removed the dependency on the Apache Table object in the RequestHandler -- this was causing problems for mod_perl installations that didn't build mod_perl with PERL_TABLE_API=1, or DYNAMIC=1, or EVERYTHING=1 -- this lessens our dependencies on environment/settings, so it should be a good thing * fixed problem with recordGenerator [bad here doc terminator] v3.0.8 Fri May 11 09:55:05 EDT 2001 * fixed bugs pointed out by Christian Winkler : - pas.sid.cookie was not present in pas/conf/pas.conf - Org::Bgw::Pas::Session::File needed to translate the slash '/' character in the md5 portion of the sid, as it's an invalid character for a filename. * docs/whyPas * found and fixed bug when forwarding to a URI that resolved to a directoryIndex file - the query was being thrown away, now it's being preserved. * examples/dbExplorer, pages/DbExplorer/Explorer.pm v3.0.7 Thu May 10 10:22:28 EDT 2001 * the line number compiler issue has been slain! * basic forwarding to static content [like .txt and .html files] is implemented (using Apache's internal_redirect_handler), still needs work - see the TODO file. * moved 2 methods from the request handler to the compiler to support the PSP build tool, and... * completed first implementation of bin/pspBuild * reworked the diagnostics section * docs/pspCompilation v3.0.6 Tue May 8 13:18:17 EDT 2001 * implmented HTTP redirection in the response object, and in the request handler. * implemented * added an example for redirection * more in-module, in-line POD documentation * docs/developer * implemented directoryIndex based on pas.conf file. v3.0.5 Mon May 7 15:28:44 EDT 2001 * created a MySQL based session implementation * new example: Temperature converter - pages/Therm/ThermPage.pm - htdocs/examples/therm/therm.psp * finished some of the integration of Org::Bgw::Db::ObjectGenerator, and Org::Bgw::Db::ObjectGenerator::Perl * implemented bin/recordGenerator, and are currently using it to generate the Org::Bgw::Pas::Session::MySQL::SessionRec object. * doc/database_abstraction * started Org::Bgw::Db::Base as a first implementatin of a generic database feature v3.0.4 Fri May 4 15:01:43 EDT 2001 * added in support for the sid cookie - this was necessary to support sessions, and... * implemented first rev of the session object, including a file based implementation * implmeneted Org::Bgw::Pas::SessionPage * did the: # line n "file.psp" thing with the compiler - this needs to be fixed properly though, right now it looks right (or at least very close) for the psp name instead of the .pm file name, but we don't yet have it reverting back at the end of the execute() method (look at a generated file and you'll see what I'm talking about). * implemented <%@ page session = "true" %>, which causes the PSP to be derived from Org::Bgw::Pas::SessionPage, and it works in the examples w/file based sessions. v3.0.3 Wed May 2 15:47:06 EDT 2001 * started fleshing out more documentation * fixed forwarding in the request handler v3.0.2 Tue May 1 21:13:18 EDT 2001 * did alot of documentation * implemented a bunch more of the psp tags, and improved the compiler, though there is still alot to be desired on this front, see the TODO file * started the re-write of the request handler, though it's currently broken, it won't forward requests correctly now v3.0.1 Sun Apr 22 21:09:48 EDT 2001 * this is the first beta revision of the third generation of the Pas architecture * psp - Pas now uses psp pages (pas [or perl] server pages), which closely model jsp pages, by compiling down a text file with psp tags into a Pas page object. * new page object model * full Apache request handler, the entire system is now centered around the request handler - standalone CGI's are no longer viable, well, they are, but it would only make sense to use a single CGI, and the performance would be lacking -- I might do this just so the system can be run in unsupporting [of mod_perl] environments for testing or evaluation purposes (or who knows, even if you want to do that [though I wouldn't know why]). * complete re-write, from scratch