Revision: 88 Author: matt Date: 2006-08-16 03:40:24 +0000 (Wed, 16 Aug 2006)
Log Message: ----------- DirectoryIndex moved to uri_to_file uri_to_file documented Modified Paths: -------------- trunk/etc/axkit.conf.sample trunk/lib/AxKit2/Config/Global.pm trunk/lib/AxKit2/Config/Location.pm trunk/lib/AxKit2/Config/Server.pm trunk/lib/AxKit2/Config.pm trunk/plugins/uri_to_file Modified: trunk/etc/axkit.conf.sample =================================================================== --- trunk/etc/axkit.conf.sample 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/etc/axkit.conf.sample 2006-08-16 03:40:24 UTC (rev 88) @@ -16,7 +16,6 @@ Port 8000 DocumentRoot demo - DirectoryIndex index.html Plugin uri_to_file Plugin serve_cgi @@ -24,6 +23,8 @@ CGI_Match .*\.(pl|cgi)$ + DirectoryIndex index.html + <Location /stylesheets> # CSS DocumentRoot demo/stylesheets Modified: trunk/lib/AxKit2/Config/Global.pm =================================================================== --- trunk/lib/AxKit2/Config/Global.pm 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/lib/AxKit2/Config/Global.pm 2006-08-16 03:40:24 UTC (rev 88) @@ -34,12 +34,6 @@ $self->{ConsoleAddr}; } -sub dirindex { - my $self = shift; - @_ and $self->{DirectoryIndex} = shift; - $self->{DirectoryIndex}; -} - sub add_plugin { my $self = shift; push @{$self->{Plugins}}, shift; Modified: trunk/lib/AxKit2/Config/Location.pm =================================================================== --- trunk/lib/AxKit2/Config/Location.pm 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/lib/AxKit2/Config/Location.pm 2006-08-16 03:40:24 UTC (rev 88) @@ -44,12 +44,6 @@ $self->{DocumentRoot} || $self->server->docroot; } -sub dirindex { - my $self = shift; - @_ and $self->{DirectoryIndex} = shift; - $self->{DirectoryIndex} || $self->server->dirindex; -} - sub add_plugin { my $self = shift; push @{$self->{Plugins}}, shift; Modified: trunk/lib/AxKit2/Config/Server.pm =================================================================== --- trunk/lib/AxKit2/Config/Server.pm 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/lib/AxKit2/Config/Server.pm 2006-08-16 03:40:24 UTC (rev 88) @@ -48,12 +48,6 @@ $self->{DocumentRoot} || $self->global->docroot; } -sub dirindex { - my $self = shift; - @_ and $self->{DirectoryIndex} = shift; - $self->{DirectoryIndex} || $self->global->dirindex; -} - sub add_plugin { my $self = shift; push @{$self->{Plugins}}, shift; Modified: trunk/lib/AxKit2/Config.pm =================================================================== --- trunk/lib/AxKit2/Config.pm 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/lib/AxKit2/Config.pm 2006-08-16 03:40:24 UTC (rev 88) @@ -14,7 +14,6 @@ Plugin => [\&TAKE1, sub { my $conf = shift; AxKit2::Client->load_plugin($conf, $_[0]); $conf->add_plugin($_[0]); }], Port => [\&TAKE1, sub { my $conf = shift; $conf->port($_[0]) }], DocumentRoot => [\&TAKE1, sub { my $conf = shift; $conf->docroot($_[0]) }], - DirectoryIndex => [\&TAKE1, sub { my $conf = shift; $conf->dirindex($_[0]) }], ConsolePort => [\&TAKE1, sub { my $conf = shift; $conf->isa('AxKit2::Config::Global') || die "ConsolePort only allowed at global level"; $conf->console_port($_[0]) }], ConsoleAddr => [\&TAKE1, sub { my $conf = shift; $conf->isa('AxKit2::Config::Global') || die "ConsoleAddr only allowed at global level"; $conf->console_addr($_[0]) }], PluginDir => [\&TAKE1, sub { my $conf = shift; $conf->plugin_dir($_[0]) }], Modified: trunk/plugins/uri_to_file =================================================================== --- trunk/plugins/uri_to_file 2006-08-16 03:39:00 UTC (rev 87) +++ trunk/plugins/uri_to_file 2006-08-16 03:40:24 UTC (rev 88) @@ -1,8 +1,48 @@ #!/usr/bin/perl -w +=head1 NAME + +uri_to_file - Convert URIs to filenames, and other critical stuff + +=head1 SYNOPSIS + + Plugin uri_to_file + + # optionally: + DirectoryIndex index.html + +=head1 DESCRIPTION + +This plugin provides the filename for a given URI. It is absolutely required +that you load this plugin if you wish to serve files off the filesystem, or else +re-implement its functionality somehow. + +It also splits off the path_info off the URI, provides a redirect when a +directory without a "/" is requested, and implements C<DirectoryIndex> (see below). + +=head1 CONFIG + +=head2 DirectoryIndex STRING + +A filename to append to directory requests. If the file exists then it will be +the filename used instead of the directory itself. + +=cut + use File::Spec::Functions qw(canonpath catfile); use AxKit2::Utils qw(uri_decode); +sub init { + my $self = shift; + $self->register_config('DirectoryIndex', sub { $self->set_dirindex(@_) }); +} + +sub set_dirindex { + my ($self, $config, $value) = @_; + my $key = $self->plugin_name . '::dirindex'; + $config->notes($key, $value); +} + sub hook_uri_translation { my ($self, $hd, $uri) = @_; @@ -41,8 +81,10 @@ EOT return DONE; } - my $filepath = catfile($path, $self->config->dirindex); - $path = $filepath if -f $filepath; + if (my $dirindex = $self->config->notes($self->plugin_name . '::dirindex')) { + my $filepath = catfile($path, $dirindex); + $path = $filepath if -f $filepath; + } } my $path_info = '';