moved qdb here because matt is lazy
[public/www-new.git] / pub / qdb / src / modules / Chirpy / UI / WebApp / Captcha / Authen_Captcha.pm
1 ###############################################################################\r
2 # Chirpy! 0.3, a quote management system                                      #\r
3 # Copyright (C) 2005-2007 Tim De Pauw <ceetee@users.sourceforge.net>          #\r
4 ###############################################################################\r
5 # This program is free software; you can redistribute it and/or modify it     #\r
6 # under the terms of the GNU General Public License as published by the Free  #\r
7 # Software Foundation; either version 2 of the License, or (at your option)   #\r
8 # any later version.                                                          #\r
9 #                                                                             #\r
10 # This program is distributed in the hope that it will be useful, but WITHOUT #\r
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #\r
12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #\r
13 # more details.                                                               #\r
14 #                                                                             #\r
15 # You should have received a copy of the GNU General Public License along     #\r
16 # with this program; if not, write to the Free Software Foundation, Inc., 51  #\r
17 # Franklin St, Fifth Floor, Boston, MA  02110-1301  USA                       #\r
18 ###############################################################################\r
19 \r
20 ###############################################################################\r
21 # $Id:: Authen_Captcha.pm 293 2007-02-05 22:33:34Z ceetee                   $ #\r
22 ###############################################################################\r
23 \r
24 =head1 NAME\r
25 \r
26 Chirpy::UI::WebApp::Captcha::Authen_Captcha - Captcha provider interface using\r
27 L<Authen::Captcha>\r
28 \r
29 =head1 CONFIGURATION\r
30 \r
31 This module uses the following parameters from your configuration file:\r
32 \r
33 =over 4\r
34 \r
35 =item webapp.authen_captcha_source_image_path\r
36 \r
37 The physical path to the source images to be used by L<Authen::Captcha>.\r
38 \r
39 =item webapp.authen_captcha_character_width\r
40 \r
41 The pixel width of each character in a captcha image.\r
42 \r
43 =item webapp.authen_captcha_character_height\r
44 \r
45 The pixel height of each character in a captcha image.\r
46 \r
47 =item webapp.authen_captcha_code_length\r
48 \r
49 The number of characters in the captcha code.\r
50 \r
51 =back\r
52 \r
53 =head1 AUTHOR\r
54 \r
55 Tim De Pauw E<lt>ceetee@users.sourceforge.netE<gt>\r
56 \r
57 =head1 SEE ALSO\r
58 \r
59 L<Chirpy::UI::WebApp::Captcha>, L<Chirpy>, L<http://chirpy.sourceforge.net/>\r
60 \r
61 =head1 COPYRIGHT\r
62 \r
63 Copyright 2005-2007 Tim De Pauw. All rights reserved.\r
64 \r
65 This program is free software; you can redistribute it and/or modify it under\r
66 the terms of the GNU General Public License as published by the Free Software\r
67 Foundation; either version 2 of the License, or (at your option) any later\r
68 version.\r
69 \r
70 This program is distributed in the hope that it will be useful, but WITHOUT ANY\r
71 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\r
72 PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
73 \r
74 =cut\r
75 \r
76 package Chirpy::UI::WebApp::Captcha::Authen_Captcha;\r
77 \r
78 use strict;\r
79 use warnings;\r
80 \r
81 use vars qw($VERSION @ISA);\r
82 \r
83 $VERSION = '0.3';\r
84 @ISA = qw(Chirpy::UI::WebApp::Captcha);\r
85 \r
86 use Chirpy 0.3;\r
87 use Chirpy::UI::WebApp::Captcha 0.3;\r
88 use Authen::Captcha;\r
89 \r
90 sub new {\r
91         my $class = shift;\r
92         my $self = $class->SUPER::new(@_);\r
93         $self->{'ac'} = new Authen::Captcha(\r
94                 'data_folder' => $self->data_path(),\r
95                 'output_folder' => $self->base_path()\r
96         );\r
97         return $self;\r
98 }\r
99 \r
100 sub create {\r
101         my ($self, $expire) = @_;\r
102         my $ac = $self->{'ac'};\r
103         $ac->expire($expire);\r
104         my $length = $self->param('authen_captcha_code_length') || 4;\r
105         my $imgpath = $self->param('authen_captcha_source_image_path');\r
106         my $width = $self->param('authen_captcha_character_width');\r
107         my $height = $self->param('authen_captcha_character_height');\r
108         my $set_dimensions = ($width && $height);\r
109         unless ($set_dimensions) {\r
110                 $width = 25;\r
111                 $height = 35;\r
112         }\r
113         if ($imgpath && -d $imgpath) {\r
114                 $ac->images_folder($imgpath);\r
115                 if ($set_dimensions) {\r
116                         $ac->width($width);\r
117                         $ac->height($height);\r
118                 }\r
119         }\r
120         my $hash = $ac->generate_code($length);\r
121         my $imgurl = $self->base_url() . '/' . $hash . '.png';\r
122         return ($hash, $imgurl, $length * $width, $height);\r
123 }\r
124 \r
125 sub verify {\r
126         my ($self, $code) = @_;\r
127         return ($self->{'ac'}->check_code($code, $self->hash()) == 1);\r
128 }\r
129 \r
130 1;\r
131 \r
132 ###############################################################################