Changeset 257 for captcha/trunk/plugins

Show
Ignore:
Timestamp:
10/05/06 16:27:10 (2 years ago)
Author:
ogawa
Message:

Now employs Data::Dumper for config object serialization.

Location:
captcha/trunk/plugins/captcha
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • captcha/trunk/plugins/captcha/captcha.pl

    r256 r257  
    1414use File::Spec; 
    1515use File::Basename; 
     16use Data::Dumper; 
    1617use Authen::Captcha; 
    1718use base 'MT::Plugin'; 
    18 our $VERSION = '0.10'; 
     19our $VERSION = '0.11'; 
    1920 
    2021my $dirname = dirname(__FILE__); 
     
    9091    my $plugin = shift; 
    9192 
    92     my $res = ''; 
    93     my @blogs = MT::Blog->load; 
    94     for my $blog (@blogs) { 
    95         my $cfg = $plugin->get_config_hash('blog:' . $blog->id); 
    96         next unless $cfg->{captcha_enable}; 
    97         $res .= $blog->id . ',' . 
    98             $cfg->{captcha_ttl} . ',' . 
    99             $cfg->{captcha_secret} . ',' . 
    100             $cfg->{captcha_length} . ',' . 
    101             $cfg->{captcha_images_url} . ',' . 
    102             $cfg->{captcha_images_path} . "\n"; 
     93    my $config; 
     94    for my $blog (MT::Blog->load) { 
     95        $config->{$blog->id} = $plugin->get_config_hash('blog:' . $blog->id); 
    10396    } 
    10497 
    105     my $cfg_file = File::Spec->catfile(dirname(__FILE__), 'data', 'config.txt'); 
     98    my $config_file = File::Spec->catfile(dirname(__FILE__), 'data', 'config.txt'); 
    10699    local(*FH); 
    107     open FH, ">$cfg_file" or die "Can't open File: $cfg_file\n"; 
     100    open FH, ">$config_file" or die "Can't open File: $config_file\n"; 
    108101    flock FH, 2; 
    109     print FH $res; 
     102    print FH Data::Dumper->Dump([$config], ['config']); 
    110103    close(FH); 
    111104} 
  • captcha/trunk/plugins/captcha/captcha_js.cgi

    r254 r257  
    1212   data_folder => File::Spec->catdir($dirname, 'data') 
    1313); 
    14 my $cfg_file = File::Spec->catfile($dirname, 'data', 'config.txt'); 
     14my $config_file = File::Spec->catfile($dirname, 'data', 'config.txt'); 
    1515my $config; 
    1616 
    1717my $q = CGI->new; 
    1818eval { 
    19     $config = read_config($cfg_file); 
    20     gen_code($q); 
     19    $config = read_config($config_file); 
     20    generate_code($q); 
    2121}; 
    2222if ($@) { 
     
    2525 
    2626sub read_config { 
    27     my($cfg_file) = @_; 
     27    my($config_file) = @_; 
     28 
     29    local(*FH); 
     30    open FH, $config_file or die "Can't open File: $config_file."; 
     31    flock FH, 1; # read lock 
     32    my @lines = <FH>; 
     33    close(FH); 
     34 
    2835    my $config; 
    29  
    30     local(*FH, $_, $/); 
    31     $/ = "\n"; 
    32     open FH, $cfg_file or die "Can't open File: $cfg_file\n"; 
    33     flock FH, 1; 
    34     while (<FH>) { 
    35         chomp; 
    36         my @c = split(',', $_); 
    37         next unless scalar @c == 6; 
    38         $config->{$c[0]} = { 
    39             captcha_ttl => $c[1], 
    40             captcha_secret => $c[2], 
    41             captcha_length => $c[3], 
    42             captcha_images_url => $c[4], 
    43             captcha_images_path => $c[5], 
    44         }; 
    45     } 
    46     close(FH); 
    47     $config; 
     36    eval join('', @lines); 
    4837} 
    4938 
    50 sub gen_code { 
     39sub generate_code { 
    5140    my $q = shift; 
    5241    my $blog_id = $q->param('blog_id') || 1; 
    53     my $conf = $config->{$blog_id} or die "blog_id is not properly given."; 
     42    my $cfg = $config->{$blog_id} or die "blog_id is not properly given."; 
    5443 
    55     $captcha->expire($conf->{captcha_ttl} || 3600); 
    56     $captcha->secret($conf->{captcha_secret} || ''); 
    57     $captcha->output_folder($conf->{captcha_images_path}); 
     44    die "CAPTCHA test is disabled for this blog (BLOG_ID:$blog_id)." 
     45        unless $cfg->{captcha_enable}; 
    5846 
    59     my $captcha_images_url = $conf->{captcha_images_url}; 
    60     $captcha_images_url .= '/' if $captcha_images_url !~ m!/$!; 
    61  
    62     my $captcha_length = $conf->{captcha_length} || 5; 
     47    $captcha->expire($cfg->{captcha_ttl} || 3600); 
     48    $captcha->secret($cfg->{captcha_secret} || ''); 
     49    $captcha->output_folder($cfg->{captcha_images_path}); 
     50    my $captcha_length = $cfg->{captcha_length} || 5; 
     51    my $captcha_md5 = $captcha->generate_code($captcha_length); 
     52    my $captcha_img = $cfg->{captcha_images_url}; 
     53    $captcha_img .= '/' if $captcha_img !~ m!/$!; 
     54    $captcha_img .= $captcha_md5 . '.png'; 
    6355    my $captcha_img_width = 25 * $captcha_length; 
    6456    my $captcha_img_height = 35; 
    65  
    66     my $captcha_md5 = $captcha->generate_code($captcha_length); 
    6757 
    6858    print $q->header('text/javascript'); 
     
    7262  document.writeln('<input type="hidden" name="captcha_md5" value="$captcha_md5" />'); 
    7363  document.writeln('<label for="comment-captcha">CAPTCHA&trade; Code:</label>'); 
    74   document.writeln('<img src="$captcha_images_url$captcha_md5.png" width="$captcha_img_width" height="$captcha_img_height" alt="CAPTCHA Image" />'); 
     64  document.writeln('<img src="$captcha_img" width="$captcha_img_width" height="$captcha_img_height" alt="CAPTCHA Image" />'); 
    7565  document.writeln('<input type="text" id="comment-captcha" name="captcha_code" value="" length="$captcha_length" maxlength="$captcha_length" />'); 
    7666  document.writeln('</div>'); 
  • captcha/trunk/plugins/captcha/captcha_js.fcgi

    r254 r257  
    1212   data_folder => File::Spec->catdir($dirname, 'data') 
    1313); 
    14 my $cfg_file = File::Spec->catfile($dirname, 'data', 'config.txt'); 
     14my $config_file = File::Spec->catfile($dirname, 'data', 'config.txt'); 
    1515my $config; 
    1616 
     
    1818while (my $q = CGI::Fast->new) { 
    1919    eval { 
    20         my $ctime_current = (stat($cfg_file))[9]; 
     20        my $ctime_current = (stat($config_file))[9]; 
    2121        if ($ctime_current > $ctime) { 
    22             $config = read_config($cfg_file); 
     22            $config = read_config($config_file); 
    2323            $ctime = $ctime_current; 
    2424        } 
    25         gen_code($q); 
     25        generate_code($q); 
    2626    }; 
    2727    print $q->header("text/plain"), $@ if $@; 
     
    2929 
    3030sub read_config { 
    31     my($cfg_file) = @_; 
     31    my($config_file) = @_; 
     32 
     33    local(*FH); 
     34    open FH, $config_file or die "Can't open File: $config_file."; 
     35    flock FH, 1; # read lock 
     36    my @lines = <FH>; 
     37    close(FH); 
     38 
    3239    my $config; 
    33  
    34     local(*FH, $_, $/); 
    35     $/ = "\n"; 
    36     open FH, $cfg_file or die "Can't open File: $cfg_file\n"; 
    37     flock FH, 1; 
    38     while (<FH>) { 
    39         chomp; 
    40         my @c = split(',', $_); 
    41         next unless scalar @c == 6; 
    42         $config->{$c[0]} = { 
    43             captcha_ttl => $c[1], 
    44             captcha_secret => $c[2], 
    45             captcha_length => $c[3], 
    46             captcha_images_url => $c[4], 
    47             captcha_images_path => $c[5], 
    48         }; 
    49     } 
    50     close(FH); 
    51     $config; 
     40    eval join('', @lines); 
    5241} 
    5342 
    54 sub gen_code { 
     43sub generate_code { 
    5544    my $q = shift; 
    5645    my $blog_id = $q->param('blog_id') || 1; 
    57     my $conf = $config->{$blog_id} or die "blog_id is not properly given."; 
     46    my $cfg = $config->{$blog_id} or die "blog_id is not properly given."; 
    5847 
    59     $captcha->expire($conf->{captcha_ttl} || 3600); 
    60     $captcha->secret($conf->{captcha_secret} || ''); 
    61     $captcha->output_folder($conf->{captcha_images_path}); 
     48    die "CAPTCHA test is disabled for this blog (BLOG_ID:$blog_id)." 
     49        unless $cfg->{captcha_enable}; 
    6250 
    63     my $captcha_images_url = $conf->{captcha_images_url}; 
    64     $captcha_images_url .= '/' if $captcha_images_url !~ m!/$!; 
    65  
    66     my $captcha_length = $conf->{captcha_length} || 5; 
     51    $captcha->expire($cfg->{captcha_ttl} || 3600); 
     52    $captcha->secret($cfg->{captcha_secret} || ''); 
     53    $captcha->output_folder($cfg->{captcha_images_path}); 
     54    my $captcha_length = $cfg->{captcha_length} || 5; 
     55    my $captcha_md5 = $captcha->generate_code($captcha_length); 
     56    my $captcha_img = $cfg->{captcha_images_url}; 
     57    $captcha_img .= '/' if $captcha_img !~ m!/$!; 
     58    $captcha_img .= $captcha_md5 . '.png'; 
    6759    my $captcha_img_width = 25 * $captcha_length; 
    6860    my $captcha_img_height = 35; 
    69  
    70     my $captcha_md5 = $captcha->generate_code($captcha_length); 
    7161 
    7262    print $q->header('text/javascript'); 
     
    7666  document.writeln('<input type="hidden" name="captcha_md5" value="$captcha_md5" />'); 
    7767  document.writeln('<label for="comment-captcha">CAPTCHA&trade; Code:</label>'); 
    78   document.writeln('<img src="$captcha_images_url$captcha_md5.png" width="$captcha_img_width" height="$captcha_img_height" alt="CAPTCHA Image" />'); 
     68  document.writeln('<img src="$captcha_img" width="$captcha_img_width" height="$captcha_img_height" alt="CAPTCHA Image" />'); 
    7969  document.writeln('<input type="text" id="comment-captcha" name="captcha_code" value="" length="$captcha_length" maxlength="$captcha_length" />'); 
    8070  document.writeln('</div>');