diff options
| author | fukachan <fukachan> | 2001-11-08 15:36:21 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-11-08 15:36:21 +0000 |
| commit | 0ec512b6a5c2c81d1d88c93009c6e99df9a3f9ce (patch) | |
| tree | a20380a995661140d119b9193e9c1c21264be9d5 /fml/lib/FML/Process/CGI.pm | |
| parent | 269dd48f3ddaa9fb15de54b2e10f8911e13490f1 (diff) | |
| download | fml8-0ec512b6a5c2c81d1d88c93009c6e99df9a3f9ce.tar.gz fml8-0ec512b6a5c2c81d1d88c93009c6e99df9a3f9ce.tar.bz2 fml8-0ec512b6a5c2c81d1d88c93009c6e99df9a3f9ce.zip | |
use FML::Process::CGI::{Kernel,Param}
Diffstat (limited to 'fml/lib/FML/Process/CGI.pm')
| -rw-r--r-- | fml/lib/FML/Process/CGI.pm | 213 |
1 files changed, 5 insertions, 208 deletions
diff --git a/fml/lib/FML/Process/CGI.pm b/fml/lib/FML/Process/CGI.pm index 1c8e2591..6d57f6f1 100644 --- a/fml/lib/FML/Process/CGI.pm +++ b/fml/lib/FML/Process/CGI.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: CGI.pm,v 1.17 2001/11/07 14:11:46 fukachan Exp $ +# $FML: CGI.pm,v 1.18 2001/11/07 14:25:55 fukachan Exp $ # package FML::Process::CGI; @@ -12,6 +12,10 @@ use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp; +use FML::Process::CGI::Kernel; +use FML::Process::CGI::Param; +@ISA = qw(FML::Process::CGI::Kernel FML::Process::CGI::Param); + =head1 NAME FML::Process::CGI - CGI basic functions @@ -30,213 +34,6 @@ This new() creates CGI object which wraps C<FML::Process::Kernel>. the base class of CGI programs. It provides basic functions and flow. -=head1 METHODS - -=head2 C<new()> - -ordinary constructor which is used widely in FML::Process classes. - -=cut - -use FML::Process::Kernel; -use FML::Log qw(Log LogWarn LogError); -use FML::Config; - -# load standard CGI routines -use CGI qw/:standard/; - -@ISA = qw(FML::Process::Kernel); - - -# XXX now we re-evaluate $ml_home_dir and @cf again. -# XXX but we need the mechanism to re-evaluate $args passed from -# XXX libexec/loader. -sub new -{ - my ($self, $args) = @_; - my $type = ref($self) || $self; - - # we should get $ml_name from HTTP. - my $ml_home_prefix = $args->{ ml_home_prefix }; - my $ml_name = safe_param_ml_name($self) || do { - croak("not get ml_name from HTTP") if $args->{ need_ml_name }; - }; - - use File::Spec; - my $ml_home_dir = File::Spec->catfile($ml_home_prefix, $ml_name); - my $config_cf = File::Spec->catfile($ml_home_dir, 'config.cf'); - - # fix $args { cf_list, ml_home_dir }; - my $cflist = $args->{ cf_list }; - push(@$cflist, $config_cf); - $args->{ ml_home_dir } = $ml_home_dir; - - # o.k. load configurations - my $curproc = new FML::Process::Kernel $args; - return bless $curproc, $type; -} - - -=head2 C<prepare()> - -print HTTP header. -The charset is C<euc-jp> by default. - -=cut - -# XXX FML::Process::Kernel::prepare() parses incoming_message -# XXX CGI do not parse incoming_message; -sub prepare -{ - my ($curproc) = @_; - my $config = $curproc->{ config }; - my $charset = $config->{ cgi_charset } || 'euc-jp'; - - print header(-type => "text/html; charset=$charset"); -} - - -=head2 C<verify_request()> - -dummy method now. - -=head2 C<finish()> - -dummy method now. - -=cut - -sub verify_request { 1;} -sub finish { 1;} - - -=head2 C<run()> - -dispatch *.cgi programs. - -=cut - -# See CGI.pm for more details -sub run -{ - my ($curproc, $args) = @_; - my $config = $curproc->{ config }; - my $myname = $config->{ program_name }; - - # model specific ticket object - if ($myname eq 'fmlticket.cgi') { - my $module = $config->{ ticket_driver }; - my $ticket = $curproc->load_module($args, $module); - $ticket->mode({ mode => 'html' }); - $ticket->run_cgi($curproc, $args); - } - elsif ($myname eq 'makefml.cgi') { - $curproc->_makefml($args); - } - else { - croak("Who am I ($myname)? I don't know $myname\n"); - } -} - - -sub _makefml -{ - my ($curproc, $args) = @_; - my $method = $curproc->safe_param_method; - my $ml_name = $curproc->safe_param_ml_name; - my $address = $curproc->safe_param_address || ''; - my $argv = $curproc->command_line_argv(); - my @options = (); - - # arguments to pass off to each method - my $optargs = { - command => $method, - ml_name => $ml_name, - address => $address, - options => \@options, - argv => $argv, - args => $args, - }; - - Log("makefml.cgi ml_name=$ml_name command=$method address=$address"); - - # here we go - require FML::Command; - my $obj = new FML::Command; - $obj->$method($curproc, $optargs); -} - - -=head1 Input Data Diagnostic - -=head2 safe_param(str, filter) - -=cut - - -# Descriptions: -# Arguments: $self $args -# Side Effects: -# History: fml 4.0's SecureP() -# Return Value: none -sub safe_param -{ - my ($key, $filter) = @_; - my $value = param($key); - - if (defined $filter && defined $value) { - if ($value =~ /^$filter$/) { - return $value; - } - else { - return undef; - } - } - else { - return undef; - } -} - - -=head2 safe_param_xxx() - -get and filter param('xxx') via AUTOLOAD(). - -=cut - - -my %allow_regexp = ( - 'address' => '[-a-z0-9_]@[-A-Z0-9\.]+', - 'ml_name' => '[-a-z0-9_]+', - 'method' => '[a-z]+', - 'user' => '[-a-z0-9_]+', - ); - - -sub AUTOLOAD -{ - my ($curproc) = @_; - - return if $AUTOLOAD =~ /DESTROY/; - - my $comname = $AUTOLOAD; - $comname =~ s/.*:://; - - if ($comname =~ /^safe_param_(\S+)/) { - my $varname = $1; - - # diagnostic - unless (defined $allow_regexp{ $varname }) { - croak("no allow_regexp for $comname"); - } - return safe_param($varname, $allow_regexp{ $varname }); - } - else { - croak("unknown method $comname"); - } -} - - =head1 AUTHOR Ken'ichi Fukamachi |
