Mercurial > hg > chronicle
annotate cgi-bin/comments.cgi @ 219:52326e71a41e
Ran through perltidy
author | Steve Kemp <steve@steve.org.uk> |
---|---|
date | Wed, 16 Apr 2008 19:04:45 +0100 |
parents | e0ef0f218600 |
children | 053c52c4516f |
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 |
108 | 53 |
54 | |
98 | 55 # |
56 # Get the parameters from the request. | |
57 # | |
58 my $cgi = new CGI(); | |
219 | 59 my $name = $cgi->param('name') || undef; |
60 my $mail = $cgi->param('mail') || undef; | |
61 my $body = $cgi->param('body') || undef; | |
62 my $id = $cgi->param('id') || undef; | |
108 | 63 my $cap = $cgi->param('captcha') || undef; |
219 | 64 my $ajax = $cgi->param("ajax") || 0; |
154 | 65 |
98 | 66 |
67 # | |
68 # If any are missing just redirect back to the blog homepage. | |
69 # | |
175 | 70 if ( !defined($name) |
71 || !length($name) | |
72 || !defined($mail) | |
73 || !length($mail) | |
74 || !defined($body) | |
75 || !length($body) | |
76 || !defined($id) | |
77 || !length($id) ) | |
98 | 78 { |
175 | 79 if ($ajax) |
150
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 "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
|
82 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
|
83 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
84 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
85 { |
219 | 86 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
|
87 } |
98 | 88 exit; |
89 } | |
90 | |
108 | 91 # |
92 # Does the captcha value contain text? If so spam. | |
93 # | |
175 | 94 if ( defined($cap) && length($cap) ) |
108 | 95 { |
175 | 96 if ($ajax) |
150
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 "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
|
99 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
|
100 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
101 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
102 { |
219 | 103 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
|
104 } |
108 | 105 exit; |
106 } | |
107 | |
98 | 108 |
109 # | |
123
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
110 # Convert the message to crude HTML. |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
111 # |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
112 $body =~ s/\n$/<br>\n/mg; |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
113 |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
114 # |
98 | 115 # Otherwise save them away. |
116 # | |
117 # | |
118 # ID. | |
119 # | |
175 | 120 if ( $id =~ /^(.*)[\/\\](.*)$/ ) |
121 { | |
122 $id = $2; | |
98 | 123 } |
124 | |
125 | |
126 # | |
108 | 127 # Show the header |
128 # | |
129 print "Content-type: text/html\n\n"; | |
130 | |
131 | |
132 # | |
98 | 133 # get the current time |
134 # | |
99
cd27fd555272
Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents:
98
diff
changeset
|
135 my $timestr = strftime "%e-%B-%Y-%H:%M:%S", gmtime; |
98 | 136 |
108 | 137 |
98 | 138 # |
139 # Open the file. | |
140 # | |
99
cd27fd555272
Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents:
98
diff
changeset
|
141 my $file = $COMMENT . "/" . $id . "." . $timestr; |
205
e0ef0f218600
Updated CGI script a little
Steve Kemp <steve@steve.org.uk>
parents:
175
diff
changeset
|
142 $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
|
143 |
98 | 144 open( FILE, ">", $file ); |
145 print FILE "Name: $name\n"; | |
146 print FILE "Mail: $mail\n"; | |
147 print FILE "User-Agent: $ENV{'HTTP_USER_AGENT'}\n"; | |
148 print FILE "IP-Address: $ENV{'REMOTE_ADDR'}\n"; | |
175 | 149 print FILE "\n"; |
98 | 150 print FILE $body; |
175 | 151 close(FILE); |
98 | 152 |
108 | 153 |
154 # | |
155 # Send a mail. | |
156 # | |
157 if ( length($TO) && length($FROM) ) | |
158 { | |
175 | 159 open( SENDMAIL, "|/usr/lib/sendmail -t -f $FROM" ); |
160 print SENDMAIL "To: $TO\n"; | |
161 print SENDMAIL "From: $FROM\n"; | |
162 print SENDMAIL "Subject: New Comment [$id]\n"; | |
163 print SENDMAIL "\n\n"; | |
164 print SENDMAIL `cat $file`; | |
165 close(SENDMAIL); | |
108 | 166 } |
167 | |
98 | 168 # |
169 # Now show the user the thanks message.. | |
170 # | |
175 | 171 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
|
172 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
173 print <<EOF; |
155
4d2f0d6866e5
Updated the display of the blog comment when using AJAX
Steve Kemp <steve@steve.org.uk>
parents:
154
diff
changeset
|
174 <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
|
175 <blockquote> |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
176 <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
|
177 </blockquote> |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
178 |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
179 EOF |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
180 exit; |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
181 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
182 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
183 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
184 print <<EOF; |
98 | 185 <html> |
186 <head> | |
187 <title>Thanks For Your Comment</title> | |
188 </head> | |
189 <body> | |
190 <h2>Thanks!</h2> | |
191 <p>Your comment will be included the next time this blog is rebuilt.</p> | |
192 <p><a href="http://$ENV{'HTTP_HOST'}/">Return to blog</a>.</p> | |
193 </body> | |
194 </html> | |
195 EOF | |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
196 } |