Started ripping out mod_perl
This commit is contained in:
parent
97432e2407
commit
7603fce565
9 changed files with 181 additions and 249 deletions
|
|
@ -71,7 +71,6 @@ B<NOTE:> It is important to distinguish the difference between a WebGUI session
|
|||
$session->privilege
|
||||
$session->request
|
||||
$session->scratch
|
||||
$session->server
|
||||
$session->setting
|
||||
$session->stow
|
||||
$session->style
|
||||
|
|
@ -424,7 +423,7 @@ sub log {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 open ( webguiRoot, configFile [, requestObject, serverObject, sessionId, noFuss ] )
|
||||
=head2 open ( webguiRoot, configFile [, requestObject, sessionId, noFuss ] )
|
||||
|
||||
Constructor. Opens a closed ( or new ) WebGUI session.
|
||||
|
||||
|
|
@ -438,11 +437,7 @@ The filename of the config file that WebGUI should operate from.
|
|||
|
||||
=head3 requestObject
|
||||
|
||||
The Apache request object (aka $r). If this session is being instanciated from the web, this is required.
|
||||
|
||||
=head3 serverObject
|
||||
|
||||
The Apache server object (Apache2::ServerUtil). If this session is being instanciated from the web, this is required.
|
||||
The Plack::Request object. If this session is being instanciated from the web, this is required.
|
||||
|
||||
=head3 sessionId
|
||||
|
||||
|
|
@ -459,23 +454,10 @@ sub open {
|
|||
my $webguiRoot = shift;
|
||||
my $configFile = shift;
|
||||
my $request = shift;
|
||||
my $server = shift;
|
||||
my $config = WebGUI->config || WebGUI::Config->new($webguiRoot,$configFile);
|
||||
my $self = {_config=>$config, _server=>$server};
|
||||
my $config = WebGUI::Config->new($webguiRoot,$configFile);
|
||||
my $self = {_config=>$config };
|
||||
bless $self , $class;
|
||||
|
||||
# $self->{_request} = $request if (defined $request);
|
||||
if ($request) {
|
||||
if ($request->isa('WebGUI::Session::Plack')) {
|
||||
# Use our WebGUI::Session::Plack object that is supposed to do everything Apache2::* can
|
||||
$self->{_request} = $request;
|
||||
} else {
|
||||
# Use WebGUI::Session::Request to wrap Apache2::* calls
|
||||
require WebGUI::Session::Request;
|
||||
$self->{_request} = WebGUI::Session::Request->new( r => $request, session => $self );
|
||||
}
|
||||
}
|
||||
|
||||
$self->{_request} = $request if (defined $request);
|
||||
my $sessionId = shift || $self->http->getCookies->{$config->getCookieName} || $self->id->generate;
|
||||
$sessionId = $self->id->generate unless $self->id->valid($sessionId);
|
||||
my $noFuss = shift;
|
||||
|
|
@ -559,7 +541,7 @@ sub quick {
|
|||
|
||||
=head2 request ( )
|
||||
|
||||
Returns the Apache request (aka $r) object, or undef if it doesn't exist.
|
||||
Returns the Plack::Request object, or undef if it doesn't exist.
|
||||
|
||||
=cut
|
||||
|
||||
|
|
@ -588,13 +570,13 @@ sub scratch {
|
|||
|
||||
=head2 server ( )
|
||||
|
||||
Returns the Apache server object (Apache2::ServerUtil), or undef if it doesn't exist.
|
||||
DEPRECATED (used to return the Apache2::ServerUtil object)
|
||||
|
||||
=cut
|
||||
|
||||
sub server {
|
||||
my $self = shift;
|
||||
return $self->{_server};
|
||||
$self->log->fatal('WebGUI::Session::server is deprecated');
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -91,20 +91,7 @@ Retrieves the cookies from the HTTP header and returns a hash reference containi
|
|||
|
||||
sub getCookies {
|
||||
my $self = shift;
|
||||
if ($self->session->request) {
|
||||
if ($self->session->request->isa('WebGUI::Session::Plack')) {
|
||||
return $self->session->request->{request}->cookies;
|
||||
}
|
||||
|
||||
# Have to require this instead of using it otherwise it causes problems for command-line scripts on some platforms (namely Windows)
|
||||
require APR::Request::Apache2;
|
||||
my $jarHashRef = APR::Request::Apache2->handle($self->session->request)->jar();
|
||||
return $jarHashRef if $jarHashRef;
|
||||
return {};
|
||||
}
|
||||
else {
|
||||
return {};
|
||||
}
|
||||
return $self->session->request ? $self->session->request->cookies : {};
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -219,7 +206,7 @@ sub ifModifiedSince {
|
|||
my $self = shift;
|
||||
my $epoch = shift;
|
||||
require APR::Date;
|
||||
my $modified = $self->session->request->headers_in->{'If-Modified-Since'};
|
||||
my $modified = $self->session->request->header('If-Modified-Since');
|
||||
return 1 if ($modified eq "");
|
||||
$modified = APR::Date::parse_http($modified);
|
||||
return ($epoch > $modified);
|
||||
|
|
@ -282,32 +269,32 @@ sub sendHeader {
|
|||
$self->setNoHeader(1);
|
||||
my %params;
|
||||
if ($self->isRedirect()) {
|
||||
$request->headers_out->set(Location => $self->getRedirectLocation);
|
||||
$request->status($self->getStatus);
|
||||
$request->new_response->header(Location => $self->getRedirectLocation);
|
||||
$request->new_response->status($self->getStatus);
|
||||
} else {
|
||||
$request->content_type($self->getMimeType);
|
||||
my $cacheControl = $self->getCacheControl;
|
||||
my $date = ($userId eq "1") ? $datetime->epochToHttp($self->getLastModified) : $datetime->epochToHttp;
|
||||
# under these circumstances, don't allow caching
|
||||
if ($userId ne "1" || $cacheControl eq "none" || $self->session->setting->get("preventProxyCache")) {
|
||||
$request->headers_out->set("Cache-Control" => "private, max-age=1");
|
||||
$request->new_response->header("Cache-Control" => "private, max-age=1");
|
||||
$request->no_cache(1);
|
||||
}
|
||||
# in all other cases, set cache, but tell it to ask us every time so we don't mess with recently logged in users
|
||||
else {
|
||||
$request->headers_out->set('Last-Modified' => $date);
|
||||
$request->headers_out->set('Cache-Control' => "must-revalidate, max-age=" . $cacheControl);
|
||||
else {
|
||||
$request->new_response->header( 'Last-Modified' => $date);
|
||||
$request->new_response->header( 'Cache-Control' => "must-revalidate, max-age=" . $cacheControl );
|
||||
# do an extra incantation if the HTTP protocol is really old
|
||||
if ($request->protocol =~ /(\d\.\d)/ && $1 < 1.1) {
|
||||
my $date = $datetime->epochToHttp(time() + $cacheControl);
|
||||
$request->headers_out->set('Expires' => $date);
|
||||
$request->new_response->header( 'Expires' => $date );
|
||||
}
|
||||
}
|
||||
if ($self->getFilename) {
|
||||
$request->headers_out->set('Content-Disposition' => qq{attachment; filename="}.$self->getFilename().'"');
|
||||
$request->new_response->headers( 'Content-Disposition' => qq{attachment; filename="}.$self->getFilename().'"');
|
||||
}
|
||||
$request->status($self->getStatus());
|
||||
$request->status_line($self->getStatus().' '.$self->getStatusDescription());
|
||||
$request->new_response->status($self->getStatus());
|
||||
# $request->new_response->status_line($self->getStatus().' '.$self->getStatusDescription()); # TODO - re-enable
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
|
@ -316,10 +303,10 @@ sub _sendMinimalHeader {
|
|||
my $self = shift;
|
||||
my $request = $self->session->request;
|
||||
$request->content_type('text/html; charset=UTF-8');
|
||||
$request->headers_out->set('Cache-Control' => 'private');
|
||||
$request->new_response->header('Cache-Control' => 'private');
|
||||
$request->no_cache(1);
|
||||
$request->status($self->getStatus());
|
||||
$request->status_line($self->getStatus().' '.$self->getStatusDescription());
|
||||
$request->response->status($self->getStatus());
|
||||
# $request->response->status_line($self->getStatus().' '.$self->getStatusDescription()); # TODO - re-enable
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
|
@ -389,26 +376,12 @@ sub setCookie {
|
|||
$ttl = (defined $ttl ? $ttl : '+10y');
|
||||
|
||||
if ($self->session->request) {
|
||||
if ( $self->session->request->isa('WebGUI::Session::Plack') ) {
|
||||
$self->session->request->{response}->cookies->{$name} = {
|
||||
$self->session->request->new_response->cookies->{$name} = {
|
||||
value => $value,
|
||||
path => '/',
|
||||
expires => $ttl ne 'session' ? $ttl : undef,
|
||||
domain => $domain,
|
||||
};
|
||||
}
|
||||
return;
|
||||
|
||||
require Apache2::Cookie;
|
||||
my $cookie = Apache2::Cookie->new($self->session->request,
|
||||
-name=>$name,
|
||||
-value=>$value,
|
||||
-path=>'/'
|
||||
);
|
||||
|
||||
$cookie->expires($ttl) if $ttl ne 'session';
|
||||
$cookie->domain($domain) if ($domain);
|
||||
$cookie->bake($self->session->request);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,17 @@ sub print {
|
|||
print $handle $content;
|
||||
}
|
||||
elsif ($self->session->request) {
|
||||
$self->session->request->print($content);
|
||||
# TODO - take away this hack
|
||||
if (ref $self->session->request->body eq 'ARRAY') {
|
||||
push @{$self->session->request->body}, $content;
|
||||
} else {
|
||||
if ($self->session->request->logger) {
|
||||
$self->session->request->logger->({ level => 'warn', message => "dropping content: $content" });
|
||||
} else {
|
||||
warn "dropping content: $content";
|
||||
}
|
||||
}
|
||||
# $self->session->request->print($content);
|
||||
}
|
||||
else {
|
||||
print $content;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ package WebGUI::URL::Content;
|
|||
=cut
|
||||
|
||||
use strict;
|
||||
use Apache2::Const -compile => qw(OK DECLINED);
|
||||
use WebGUI::Affiliate;
|
||||
use WebGUI::Exception;
|
||||
use WebGUI::Pluggable;
|
||||
|
|
@ -42,7 +41,7 @@ These subroutines are available from this package:
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 handler ( request, server, config )
|
||||
=head2 handler ( request, session )
|
||||
|
||||
The Apache request handler for this package.
|
||||
|
||||
|
|
@ -61,55 +60,51 @@ to the user, instead of displaying the Page Not Found page.
|
|||
=cut
|
||||
|
||||
sub handler {
|
||||
my ($request, $server, $config) = @_;
|
||||
$request->push_handlers(PerlResponseHandler => sub {
|
||||
my $session = $request->pnotes('wgSession');
|
||||
unless (defined $session) {
|
||||
$session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server);
|
||||
my ($request, $session) = @_;
|
||||
my $config = $session->config;
|
||||
# my $session = $request->pnotes('wgSession'); # TODO - no more pnotes
|
||||
# unless (defined $session) {
|
||||
# TODO - fix this - server is gone
|
||||
# $session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server);
|
||||
# }
|
||||
WEBGUI_FATAL: foreach my $handler (@{$config->get("contentHandlers")}) {
|
||||
my $output = eval { WebGUI::Pluggable::run($handler, "handler", [ $session ] )};
|
||||
if ( my $e = WebGUI::Error->caught ) {
|
||||
$session->errorHandler->error($e->package.":".$e->line." - ".$e->error);
|
||||
$session->errorHandler->debug($e->package.":".$e->line." - ".$e->trace);
|
||||
}
|
||||
WEBGUI_FATAL: foreach my $handler (@{$config->get("contentHandlers")}) {
|
||||
my $output = eval { WebGUI::Pluggable::run($handler, "handler", [ $session ] )};
|
||||
if ( my $e = WebGUI::Error->caught ) {
|
||||
$session->errorHandler->error($e->package.":".$e->line." - ".$e->error);
|
||||
$session->errorHandler->debug($e->package.":".$e->line." - ".$e->trace);
|
||||
elsif ( $@ ) {
|
||||
$session->errorHandler->error( $@ );
|
||||
}
|
||||
else {
|
||||
if ($output eq "chunked") {
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
elsif ( $@ ) {
|
||||
$session->errorHandler->error( $@ );
|
||||
if ($output eq "empty") {
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
else {
|
||||
if ($output eq "chunked") {
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
if ($output eq "empty") {
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
elsif (defined $output && $output ne "") {
|
||||
$session->http->sendHeader;
|
||||
$session->output->print($output);
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
# Keep processing for success codes
|
||||
elsif ($session->http->getStatus < 200 || $session->http->getStatus > 299) {
|
||||
$session->http->sendHeader;
|
||||
last;
|
||||
elsif (defined $output && $output ne "") {
|
||||
$session->http->sendHeader;
|
||||
$session->output->print($output);
|
||||
if ($session->errorHandler->canShowDebug()) {
|
||||
$session->output->print($session->errorHandler->showDebug(),1);
|
||||
}
|
||||
last;
|
||||
}
|
||||
# Keep processing for success codes
|
||||
elsif ($session->http->getStatus < 200 || $session->http->getStatus > 299) {
|
||||
$session->http->sendHeader;
|
||||
last;
|
||||
}
|
||||
}
|
||||
$session->close;
|
||||
return Apache2::Const::OK;
|
||||
});
|
||||
$request->push_handlers(PerlMapToStorageHandler => sub { return Apache2::Const::OK });
|
||||
$request->push_handlers(PerlTransHandler => sub { return Apache2::Const::OK });
|
||||
return Apache2::Const::OK;
|
||||
}
|
||||
$session->close;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ sub handler {
|
|||
unless ($privs[1] eq "7" || $privs[1] eq "1") {
|
||||
my $session = $request->pnotes('wgSession');
|
||||
unless (defined $session) {
|
||||
$session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request, $server);
|
||||
# $session = WebGUI::Session->open($server->dir_config('WebguiRoot'), $config->getFilename, $request);
|
||||
}
|
||||
my $hasPrivs = ($session->var->get("userId") eq $privs[0] || $session->user->isInGroup($privs[1]) || $session->user->isInGroup($privs[2]));
|
||||
$session->close();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue