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