annotate cgi-bin/comments.cgi @ 150:4a882ba147e4

Updated to allow Ajax to be used for comment submission.
author Steve Kemp <steve@steve.org.uk>
date Mon, 31 Dec 2007 00:01:51 +0000
parents 412506c2de6b
children 9f91d9377d1a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
1 #!/usr/bin/perl -w
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
2 #
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
3 # This is a simple script which is designed to accept comment requests,
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
4 # and save the details to local text files upon the localhost.
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
5 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
6 # This code is very simple and should be easy to extend with anti-spam
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
7 # at a later point.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
8 #
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
9 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
10 ###
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
11 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
12 # NOTE: If you wish to use this you must edit three things at the
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
13 # top of the script.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
14 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
15 # 1. The directory to save the comment data to.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
16 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
17 # 2. The email address to notify.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
18 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
19 # 3. The email address to use as the sender.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
20 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
21 ####
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
22 #
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
23 # Steve
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
24 # --
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
25 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
26
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
27
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
28
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
29 use strict;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
30 use warnings;
99
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
31
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
32 use CGI;
99
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
33 use POSIX qw(strftime);
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
34
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
35
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
36
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
37 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
38 # The directory to store comments in
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
39 #
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
40 # my $COMMENT = "/home/www/comments/";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
41 #
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
42 my $COMMENT = $ENV{'DOCUMENT_ROOT'} . "../comments/";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
43
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
44 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
45 # The notification addresses - leave blank to disable
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
46 #
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
47 my $TO = 'weblog@steve.org.uk';
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
48 my $FROM = 'weblog@steve.org.uk';
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
49 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
50
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
51
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
52
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
53
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
54
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
55 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
56 # Get the parameters from the request.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
57 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
58 my $cgi = new CGI();
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
59 my $name = $cgi->param('name') || undef;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
60 my $mail = $cgi->param('mail') || undef;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
61 my $body = $cgi->param('body') || undef;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
62 my $id = $cgi->param('id') || undef;
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
63 my $cap = $cgi->param('captcha') || undef;
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
64 my $ajax = $cgi->param( "ajax" ) || 0;
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
65
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
66 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
67 # If any are missing just redirect back to the blog homepage.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
68 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
69 if ( !defined( $name ) || !length( $name ) ||
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
70 !defined( $mail ) || !length( $mail ) ||
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
71 !defined( $body ) || !length( $body ) ||
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
72 !defined( $id ) || !length( $id ) )
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
73 {
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
74 if ( $ajax )
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
75 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
76 print "Content-type: text/html\n\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
77 print "Missing fields.\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
78 }
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
79 else
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
80 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
81 print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
82 }
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
83 exit;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
84 }
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
85
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
86 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
87 # Does the captcha value contain text? If so spam.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
88 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
89 if ( defined( $cap ) && length( $cap ) )
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
90 {
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
91 if ( $ajax )
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
92 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
93 print "Content-type: text/html\n\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
94 print "Missing fields.\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
95 }
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
96 else
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
97 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
98 print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
99 }
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
100 exit;
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
101 }
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
102
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
103
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
104 #
123
412506c2de6b Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents: 108
diff changeset
105 # Convert the message to crude HTML.
412506c2de6b Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents: 108
diff changeset
106 #
412506c2de6b Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents: 108
diff changeset
107 $body =~ s/\n$/<br>\n/mg;
412506c2de6b Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents: 108
diff changeset
108
412506c2de6b Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents: 108
diff changeset
109 #
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
110 # Otherwise save them away.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
111 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
112 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
113 # ID.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
114 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
115 if ( $id =~ /^(.*)[\/\\](.*)$/ ){
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
116 $id=$2;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
117 }
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
118
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
119
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
120 #
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
121 # Show the header
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
122 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
123 print "Content-type: text/html\n\n";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
124
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
125
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
126 #
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
127 # get the current time
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
128 #
99
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
129 my $timestr = strftime "%e-%B-%Y-%H:%M:%S", gmtime;
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
130
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
131
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
132 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
133 # Open the file.
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
134 #
99
cd27fd555272 Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents: 98
diff changeset
135 my $file = $COMMENT . "/" . $id . "." . $timestr;
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
136 open( FILE, ">", $file );
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
137 print FILE "Name: $name\n";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
138 print FILE "Mail: $mail\n";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
139 print FILE "User-Agent: $ENV{'HTTP_USER_AGENT'}\n";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
140 print FILE "IP-Address: $ENV{'REMOTE_ADDR'}\n";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
141 print FILE "\n";
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
142 print FILE $body;
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
143 close( FILE );
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
144
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
145
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
146 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
147 # Send a mail.
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
148 #
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
149 if ( length($TO) && length($FROM) )
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
150 {
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
151 open ( SENDMAIL, "|/usr/lib/sendmail -t -f $FROM");
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
152 print SENDMAIL "To: $TO\n";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
153 print SENDMAIL "From: $FROM\n";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
154 print SENDMAIL "Subject: New Comment [$id]\n";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
155 print SENDMAIL "\n\n";
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
156 print ( SENDMAIL `cat $file` );
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
157 close ( SENDMAIL );
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
158 }
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
159
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
160 #
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
161 # Now show the user the thanks message..
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
162 #
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
163 if ( $cgi->param( "ajax" ) )
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
164 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
165 print <<EOF;
108
a25099606ec5 Updated.
Steve Kemp <steve@steve.org.uk>
parents: 99
diff changeset
166
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
167 <p>Thanks for your comment, it will be made live when the queue is moderated next.</p>
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
168
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
169 EOF
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
170 exit;
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
171 }
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
172 else
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
173 {
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
174 print <<EOF;
98
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
175 <html>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
176 <head>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
177 <title>Thanks For Your Comment</title>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
178 </head>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
179 <body>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
180 <h2>Thanks!</h2>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
181 <p>Your comment will be included the next time this blog is rebuilt.</p>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
182 <p><a href="http://$ENV{'HTTP_HOST'}/">Return to blog</a>.</p>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
183 </body>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
184 </html>
Steve Kemp <steve@steve.org.uk>
parents:
diff changeset
185 EOF
150
4a882ba147e4 Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents: 123
diff changeset
186 }