summaryrefslogtreecommitdiff
path: root/fml
diff options
context:
space:
mode:
authorfukachan <fukachan>2008-09-10 11:00:59 +0000
committerfukachan <fukachan>2008-09-10 11:00:59 +0000
commit1df95350cae0065af29d8b64de1d21d57dcc6a03 (patch)
tree3ffb2d67f39f1920932686d092460937e4208186 /fml
parent1a75c97abc0e59b8b507f82f4066e256cd0d5562 (diff)
downloadfml8-1df95350cae0065af29d8b64de1d21d57dcc6a03.tar.gz
fml8-1df95350cae0065af29d8b64de1d21d57dcc6a03.tar.bz2
fml8-1df95350cae0065af29d8b64de1d21d57dcc6a03.zip
clean up setup_cgi_interface() to be more modular.
Diffstat (limited to 'fml')
-rw-r--r--fml/lib/FML/ML/Control.pm201
1 files changed, 102 insertions, 99 deletions
diff --git a/fml/lib/FML/ML/Control.pm b/fml/lib/FML/ML/Control.pm
index d5cdd20a..477b30bc 100644
--- a/fml/lib/FML/ML/Control.pm
+++ b/fml/lib/FML/ML/Control.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: Control.pm,v 1.17 2008/06/28 21:16:12 fukachan Exp $
+# $FML: Control.pm,v 1.18 2008/09/09 08:30:11 fukachan Exp $
#
package FML::ML::Control;
@@ -448,136 +448,139 @@ set up CGI interface for this mailing list.
sub setup_cgi_interface
{
my ($self, $curproc, $command_context, $params) = @_;
- my $template_dir = $curproc->newml_command_template_files_dir();
- my $config = $curproc->config();
+ my $config = $curproc->config();
+
+ # 0. check if this cgi-setup is the first time or not.
+ my $is_first_time = 0;
+ my $cgi_base_dir = $config->{ cgi_base_dir };
+ unless (-d $cgi_base_dir) {
+ $is_first_time = 1;
+ }
- #
# 1. create directory path if needed
- #
- my (%is_dir_exists) = ();
- my $cgi_base_dir = $config->{ cgi_base_dir };
- my $admin_cgi_dir = $config->{ admin_cgi_base_dir };
- my $ml_admin_cgi_dir = $config->{ ml_admin_cgi_base_dir };
- my $ml_anonymous_cgi_dir = $config->{ ml_anonymous_cgi_base_dir };
- for my $dir ($cgi_base_dir, $admin_cgi_dir, $ml_admin_cgi_dir,
- $ml_anonymous_cgi_dir) {
+ for my $cgi_mode (qw(admin ml-admin ml-anonymous)) {
+ my $dir = $self->_cgi_base_dir($curproc, $cgi_mode);
unless (-d $dir) {
$curproc->ui_message("creating $dir");
- $is_dir_exists{ $dir } = 0;
$curproc->mkdir($dir, "mode=public");
}
- else {
- $is_dir_exists{ $dir } = 1;
- }
}
- #
# 2. disable CGI access by creating a dummy .htaccess
# install .htaccess only for the first time.
- #
- unless ( $is_dir_exists{ $cgi_base_dir } ) {
- use File::Spec;
- my $src = File::Spec->catfile($template_dir, 'dot_htaccess');
- my $dst = File::Spec->catfile($cgi_base_dir, '.htaccess');
-
- $curproc->ui_message("creating $dst");
- $curproc->ui_message(" (a dummy to disable cgi by default)");
- $self->_install($src, $dst, $params);
+ if ($is_first_time) {
+ $self->_htaccess_setup($curproc, $params);
}
- #
# 3. install *.cgi
- #
+ $self->_cgi_setup($curproc, $params, "install", "admin");
+ $self->_cgi_setup($curproc, $params, "install", "ml-admin");
+ $self->_cgi_setup($curproc, $params, "install", "ml-anonymous");
+}
- use File::Spec;
- my $libexec_dir = $config->{ fml_libexec_dir };
- my $src = File::Spec->catfile($libexec_dir, 'loader');
- my $ml_name = $config->{ ml_name };
- my $ml_domain = $config->{ ml_domain };
- # 3.1 install admin/{menu,config,thread}.cgi
- {
- # hints
- $params->{ __hints_for_fml_process__ } = qq{
- \$hints = {
- cgi_mode => 'admin',
- ml_name => '$ml_name',
- ml_domain => '$ml_domain',
- };
- };
+# Descriptions: install $dst with variable expansion within $src.
+# Arguments: OBJ($self) STR($src) STR($dst) HASH_REF($config)
+# Side Effects: create $dst
+# Return Value: none
+sub _install
+{
+ my ($self, $src, $dst, $config) = @_;
- use File::Spec;
- for my $dst (
- File::Spec->catfile($admin_cgi_dir, 'menu.cgi'),
- File::Spec->catfile($admin_cgi_dir, 'config.cgi'),
- File::Spec->catfile($admin_cgi_dir, 'thread.cgi')
- ) {
- $curproc->ui_message("creating $dst");
- $self->_install($src, $dst, $params);
- chmod 0755, $dst;
- }
- }
+ # XXX-TODO: method-ify.
+ eval q{
+ use FML::Config::Convert;
+ &FML::Config::Convert::convert_file($src, $dst, $config);
+ };
+ croak($@) if $@;
+}
- # 3.2. install ml-admin/
- {
- # hints
- $params->{ __hints_for_fml_process__ } = qq{
- \$hints = {
- cgi_mode => 'ml-admin',
- ml_name => '$ml_name',
- ml_domain => '$ml_domain',
- };
- };
- use File::Spec;
- for my $dst (
- File::Spec->catfile($ml_admin_cgi_dir, 'menu.cgi'),
- File::Spec->catfile($ml_admin_cgi_dir, 'config.cgi'),
- File::Spec->catfile($ml_admin_cgi_dir, 'thread.cgi')
- ) {
- $curproc->ui_message("creating $dst");
- $self->_install($src, $dst, $params);
- chmod 0755, $dst;
- }
- }
+# Descriptions: return the cgi script base directory
+# for the specified mode.
+# Arguments: OBJ($self) OBJ($curproc) STR($cgi_mode)
+# Side Effects: none
+# Return Value: STR
+sub _cgi_base_dir
+{
+ my ($self, $curproc, $cgi_mode) = @_;
+ my $config = $curproc->config();
+
+ $cgi_mode =~ s/-/_/g;
+ my $var_name = sprintf("%s_cgi_base_dir", $cgi_mode);
+ my $base_dir = $config->{ $var_name };
+}
- # 3.3. install cgi script(s) for anonymous users.
- {
- use File::Spec;
- my $submit = File::Spec->catfile($ml_anonymous_cgi_dir, 'submit.cgi');
- # hints
- $params->{ __hints_for_fml_process__ } = qq{
- \$hints = {
- cgi_mode => 'anonymous',
- ml_name => '$ml_name',
- ml_domain => '$ml_domain',
- };
+# Descriptions: install admin/{menu,config,thread}.cgi
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($params)
+# STR($action) STR($cgi_mode)
+# Side Effects: cgi scriptes created.
+# Return Value: none
+sub _cgi_setup
+{
+ my ($self, $curproc, $params, $action, $cgi_mode) = @_;
+ my $config = $curproc->config();
+ my $ml_name = $config->{ ml_name };
+ my $ml_domain = $config->{ ml_domain };
+ my $base_dir = $self->_cgi_base_dir($curproc, $cgi_mode);
+ my (@file_list) = ();
+
+ # hints to be hard-coded.
+ $params->{ __hints_for_fml_process__ } = qq{
+ \$hints = {
+ cgi_mode => '$cgi_mode',
+ ml_name => '$ml_name',
+ ml_domain => '$ml_domain',
};
+ };
- for my $dst ($submit) {
- $curproc->ui_message("creating $dst");
+ # file(s) to install/deinstall depend(s) $cgi_mode.
+ if ($cgi_mode eq 'ml-anonymous') {
+ @file_list = qw(submit.cgi);
+ }
+ else {
+ @file_list = qw(menu.cgi config.cgi thread.cgi);
+ }
+
+ # install it(them) !
+ use File::Spec;
+ my $libexec_dir = $config->{ fml_libexec_dir };
+ my $src = File::Spec->catfile($libexec_dir, 'loader');
+ for my $file (@file_list) {
+ my $dst = File::Spec->catfile($base_dir, $file);
+ $curproc->ui_message("creating $dst");
+ if ($action eq 'install') {
$self->_install($src, $dst, $params);
chmod 0755, $dst;
}
+ elsif ($action eq 'deinstall') {
+ unlink $dst;
+ }
+ else {
+ croak("unknown action: $action");
+ }
}
}
-# Descriptions: install $dst with variable expansion within $src.
-# Arguments: OBJ($self) STR($src) STR($dst) HASH_REF($config)
-# Side Effects: create $dst
+# Descriptions: set up a dummy htaccess at the first time only.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($params)
+# Side Effects: create a dummy htaccess.
# Return Value: none
-sub _install
+sub _htaccess_setup
{
- my ($self, $src, $dst, $config) = @_;
+ my ($self, $curproc, $params) = @_;
+ my $template_dir = $curproc->newml_command_template_files_dir();
+ my $config = $curproc->config();
+ my $cgi_base_dir = $config->{ cgi_base_dir };
- # XXX-TODO: method-ify.
- eval q{
- use FML::Config::Convert;
- &FML::Config::Convert::convert_file($src, $dst, $config);
- };
- croak($@) if $@;
+ use File::Spec;
+ my $src = File::Spec->catfile($template_dir, 'dot_htaccess');
+ my $dst = File::Spec->catfile($cgi_base_dir, '.htaccess');
+ $curproc->ui_message("creating $dst");
+ $curproc->ui_message(" (a dummy to disable cgi by default)");
+ $self->_install($src, $dst, $params);
}