X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FCGIBin.pm;h=f05db5b7eb5fc2405d8e593bc57a9119e2ddd44b;hb=bef5bffc1e2bbd5e907e3e8010aed6de0c3054be;hp=52bb1a2079d4f6a45e39ea88de30409a2f41d2c6;hpb=1d40d9c3ce5fb228adaa52cdefecfa76929853c6;p=catagits%2FCatalyst-Controller-WrapCGI.git diff --git a/lib/Catalyst/Controller/CGIBin.pm b/lib/Catalyst/Controller/CGIBin.pm index 52bb1a2..f05db5b 100644 --- a/lib/Catalyst/Controller/CGIBin.pm +++ b/lib/Catalyst/Controller/CGIBin.pm @@ -6,7 +6,6 @@ use mro 'c3'; extends 'Catalyst::Controller::WrapCGI'; use File::Find::Rule (); -use Catalyst::Exception (); use File::Spec::Functions qw/splitdir abs2rel/; use IPC::Open3; use Symbol 'gensym'; @@ -22,13 +21,9 @@ use namespace::clean -except => 'meta'; Catalyst::Controller::CGIBin - Serve CGIs from root/cgi-bin -=head1 VERSION - -Version 0.027 - =cut -our $VERSION = '0.027'; +our $VERSION = '0.030'; =head1 SYNOPSIS @@ -41,9 +36,12 @@ In your controller: In your .conf: - cgi_root_path cgi-bin - cgi_dir cgi-bin - cgi_chain_root /optional/private/path/to/Chained/root + cgi_root_path cgi-bin + cgi_dir cgi-bin + cgi_chain_root /optional/private/path/to/Chained/root + cgi_file_pattern *.cgi + # or regex + cgi_file_pattern /\.pl\z/ username_field username # used for REMOTE_USER env var pass_env PERL5LIB @@ -88,11 +86,20 @@ the path to the CGI file. Path from which to read CGI files. Can be relative to C<$MYAPP_HOME/root> or absolute. Defaults to C<$MYAPP_HOME/root/cgi-bin>. +=head2 cgi_file_pattern + +By default all files in L will be loaded as CGIs, however, with this +option you can specify either a glob or a regex to match the names of files you +want to be loaded. + +Can be an array of globs/regexes as well. + =cut -has cgi_root_path => (is => 'ro', isa => 'Str', default => 'cgi-bin'); -has cgi_chain_root => (is => 'ro', isa => 'Str'); -has cgi_dir => (is => 'ro', isa => 'Str', default => 'cgi-bin'); +has cgi_root_path => (is => 'ro', isa => 'Str', default => 'cgi-bin'); +has cgi_chain_root => (is => 'ro', isa => 'Str'); +has cgi_dir => (is => 'ro', isa => 'Str', default => 'cgi-bin'); +has cgi_file_pattern => (is => 'rw', default => sub { ['*'] }); sub register_actions { my ($self, $app) = @_; @@ -105,7 +112,16 @@ sub register_actions { my $class = ref $self || $self; - for my $file (File::Find::Rule->file->in($cgi_bin)) { + my $patterns = $self->cgi_file_pattern; + $patterns = [ $patterns ] if not ref $patterns; + for my $pat (@$patterns) { + if ($pat =~ m{^/(.*)/\z}) { + $pat = qr/$1/; + } + } + $self->cgi_file_pattern($patterns); + + for my $file (File::Find::Rule->file->name(@$patterns)->in($cgi_bin)) { my $cgi_path = abs2rel($file, $cgi_bin); next if any { $_ eq '.svn' } splitdir $cgi_path; @@ -365,5 +381,4 @@ under the same terms as Perl itself. =cut 1; # End of Catalyst::Controller::CGIBin - -# vim: expandtab shiftwidth=4 ts=4 tw=80: +# vim:et sw=4 sts=4 tw=0: