Mercurial > hg > chronicle
annotate cgi-bin/comments.cgi @ 307:fe474f3ed3e5 default tip
Making archive pages have the same layout as the index
author | Dominic Cleal <dominic@computerkb.co.uk> |
---|---|
date | Mon, 22 Dec 2008 12:08:20 +0000 |
parents | 6f1aaf5309c7 |
children |
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 # |
284
9c05c34e7e8f
Updating config for local use
Dominic Cleal <dominic@computerkb.co.uk>
parents:
244
diff
changeset
|
43 my $COMMENT = "/var/lib/chronicle/"; |
108 | 44 # |
98 | 45 |
108 | 46 # |
47 # The notification addresses - leave blank to disable | |
48 # | |
284
9c05c34e7e8f
Updating config for local use
Dominic Cleal <dominic@computerkb.co.uk>
parents:
244
diff
changeset
|
49 my $TO = 'dominic@computerkb.co.uk'; |
9c05c34e7e8f
Updating config for local use
Dominic Cleal <dominic@computerkb.co.uk>
parents:
244
diff
changeset
|
50 my $FROM = 'dominic@computerkb.co.uk'; |
154 | 51 |
240
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
52 # |
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
53 # Find sendmail |
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
54 # |
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
55 my $SENDMAIL = undef; |
244 | 56 foreach my $file (qw ! /usr/lib/sendmail /usr/sbin/sendmail !) |
240
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
57 { |
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
58 $SENDMAIL = $file if ( -x $file ); |
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
59 } |
108 | 60 |
61 | |
98 | 62 # |
63 # Get the parameters from the request. | |
64 # | |
65 my $cgi = new CGI(); | |
219 | 66 my $name = $cgi->param('name') || undef; |
67 my $mail = $cgi->param('mail') || undef; | |
68 my $body = $cgi->param('body') || undef; | |
69 my $id = $cgi->param('id') || undef; | |
108 | 70 my $cap = $cgi->param('captcha') || undef; |
219 | 71 my $ajax = $cgi->param("ajax") || 0; |
154 | 72 |
98 | 73 |
74 # | |
75 # If any are missing just redirect back to the blog homepage. | |
76 # | |
295 | 77 if ( !defined($name) || |
78 !length($name) || | |
79 !defined($mail) || | |
80 !length($mail) || | |
81 !defined($body) || | |
82 !length($body) || | |
83 !defined($id) || | |
84 !length($id) ) | |
98 | 85 { |
175 | 86 if ($ajax) |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
87 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
88 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
|
89 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
|
90 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
91 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
92 { |
219 | 93 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
|
94 } |
98 | 95 exit; |
96 } | |
97 | |
108 | 98 # |
99 # Does the captcha value contain text? If so spam. | |
100 # | |
175 | 101 if ( defined($cap) && length($cap) ) |
108 | 102 { |
175 | 103 if ($ajax) |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
104 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
105 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
|
106 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
|
107 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
108 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
109 { |
219 | 110 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
|
111 } |
108 | 112 exit; |
113 } | |
114 | |
98 | 115 |
116 # | |
123
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
117 # Convert the message to crude HTML. |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
118 # |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
119 $body =~ s/\n$/<br>\n/mg; |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
120 |
412506c2de6b
Attempt to recognise paragraphs.
Steve Kemp <steve@steve.org.uk>
parents:
108
diff
changeset
|
121 # |
98 | 122 # Otherwise save them away. |
123 # | |
124 # | |
125 # ID. | |
126 # | |
175 | 127 if ( $id =~ /^(.*)[\/\\](.*)$/ ) |
128 { | |
129 $id = $2; | |
98 | 130 } |
131 | |
132 | |
133 # | |
108 | 134 # Show the header |
135 # | |
136 print "Content-type: text/html\n\n"; | |
137 | |
138 | |
139 # | |
98 | 140 # get the current time |
141 # | |
99
cd27fd555272
Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents:
98
diff
changeset
|
142 my $timestr = strftime "%e-%B-%Y-%H:%M:%S", gmtime; |
98 | 143 |
108 | 144 |
98 | 145 # |
146 # Open the file. | |
147 # | |
99
cd27fd555272
Use a better date + time format.
Steve Kemp <steve@steve.org.uk>
parents:
98
diff
changeset
|
148 my $file = $COMMENT . "/" . $id . "." . $timestr; |
237 | 149 $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
|
150 |
98 | 151 open( FILE, ">", $file ); |
152 print FILE "Name: $name\n"; | |
153 print FILE "Mail: $mail\n"; | |
154 print FILE "User-Agent: $ENV{'HTTP_USER_AGENT'}\n"; | |
155 print FILE "IP-Address: $ENV{'REMOTE_ADDR'}\n"; | |
175 | 156 print FILE "\n"; |
98 | 157 print FILE $body; |
175 | 158 close(FILE); |
98 | 159 |
108 | 160 |
161 # | |
162 # Send a mail. | |
163 # | |
244 | 164 if ( length($TO) && length($FROM) && defined($SENDMAIL) ) |
108 | 165 { |
240
e1d0a8576342
Allow location of snedmail to vary
Steve Kemp <steve@steve.org.uk>
parents:
237
diff
changeset
|
166 open( SENDMAIL, "|$SENDMAIL -t -f $FROM" ); |
175 | 167 print SENDMAIL "To: $TO\n"; |
168 print SENDMAIL "From: $FROM\n"; | |
169 print SENDMAIL "Subject: New Comment [$id]\n"; | |
170 print SENDMAIL "\n\n"; | |
171 print SENDMAIL `cat $file`; | |
172 close(SENDMAIL); | |
108 | 173 } |
174 | |
98 | 175 # |
176 # Now show the user the thanks message.. | |
177 # | |
175 | 178 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
|
179 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
180 print <<EOF; |
155
4d2f0d6866e5
Updated the display of the blog comment when using AJAX
Steve Kemp <steve@steve.org.uk>
parents:
154
diff
changeset
|
181 <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
|
182 <blockquote> |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
183 <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
|
184 </blockquote> |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
185 |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
186 EOF |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
187 exit; |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
188 } |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
189 else |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
190 { |
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
191 print <<EOF; |
98 | 192 <html> |
193 <head> | |
194 <title>Thanks For Your Comment</title> | |
195 </head> | |
196 <body> | |
197 <h2>Thanks!</h2> | |
198 <p>Your comment will be included the next time this blog is rebuilt.</p> | |
285
05ef582dfa3b
Changing return to blog link
Dominic Cleal <dominic@computerkb.co.uk>
parents:
284
diff
changeset
|
199 <p><a href="http://$ENV{'HTTP_HOST'}/blog/">Return to blog</a>.</p> |
98 | 200 </body> |
201 </html> | |
202 EOF | |
150
4a882ba147e4
Updated to allow Ajax to be used for comment submission.
Steve Kemp <steve@steve.org.uk>
parents:
123
diff
changeset
|
203 } |