home *** CD-ROM | disk | FTP | other *** search
Wrap
#!/usr/bin/perl $board_name = "My Conference"; $rev_messages = 1; $change_smiles = 0; %forums = ( "001","Programs", "002","SecurityPad", "003","CPU", "004","Hard", "005","Soft", ); $password = '000'; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; $value =~ s/<([^>]|\n)*>//g; $FORM{$name} = $value; } $temp=$ENV{'QUERY_STRING'}; @pairs=split(/&/,$temp); foreach $item(@pairs) { ($key,$content)=split (/=/,$item,2); $content=~tr/+/ /; $content=~ s/%(..)/pack("c",hex($1))/ge; $FORM{$key}=$content; } ($s,$m,$h,$d,$mn,$y) = (localtime)[0..5]; $y+=1900; $mn++; if ($s < 10) { $s = "0$s"; } if ($m < 10) { $m = "0$m"; } if ($h < 10) { $h = "0$h"; } if ($mn < 10) { $mn = "0$mn"; } $time_post = "$d.$mn.$y Γ $h:$m:$s"; if($FORM{'action'} eq 'show_topics') {&show_topics;} if($FORM{'action'} eq 'make_topic') {&make_topic;} if($FORM{'action'} eq 'view_topic') {&view_topic;} if($FORM{'action'} eq 'register') {®ister;} if($FORM{'action'} eq 'register_try') {®_apply;} if($FORM{'action'} eq 'install') {&install;} if($FORM{'action'} eq 'reply_message') {&reply_message;} if($FORM{'action'} eq 'change_profile') {&change_profile_step_1;} else {&show_themes;} $copyright = "<a href=\"http:www.agfreesoft.com\"></a>"; sub show_themes { print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "[ <a href=board.cgi?action=register>registration</a> ] [ <a href=board.cgi?action=change_profile_step_1>your data</a> ] [ faq ]<br><br>\n"; print "<table width=100% cellpadding=3 cellsapcing=1 border=0>\n"; print "<tr><td bgcolor=#336699 width=20></td><td bgcolor=#336699><font color=#ffffff size=2><center>Section name</center></font></td><td width=100 bgcolor=#336699><font color=#ffffff size=2><center>topics in section</center></font></td></tr>\n"; foreach $file (keys %forums) { open(TOPICS,"$file.txt"); @topics = <TOPICS>; close(TOPICS); $top_q = @topics; print "<tr bgcolor=#dddddd><td></td><td><font color=#000000 size=2><a href=board.cgi?action=show_topics&theme=$file>$forums{$file}</a></font></td><td bgcolor=#dddddd><font color=#000000 size=2>$top_q</font></td></tr>\n"; } print "</table>\n"; print "<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub show_topics { open(TOPICS,"$FORM{'theme'}.txt"); @topics = <TOPICS>; close(TOPICS); @topics = reverse(@topics); $top_q = @topics; print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "<b>Total messages: $top_q</b><br><br>\n"; print "<table width=100% cellpadding=3 cellsapcing=1 border=0>\n"; print "<tr><td bgcolor=#336699><font color=#ffffff size=2><center>Message subject</center></font></td><td width=150 bgcolor=#336699><font color=#ffffff size=2><center>└uthor</center></font></td><td width=100 bgcolor=#336699><font color=#ffffff size=2><center>Answer</center></font></td><td width=200 bgcolor=#336699><font color=#ffffff size=2><center>Last change</center></font></td></tr>\n"; foreach $topic (@topics) { @topic_params = split(/\|\|/,$topic); print "<tr bgcolor=#eeeeee><td><font color=#000000 size=2><a href=$topic_params[5]>$topic_params[1]</a></font></td><td bgcolor=#dddddd><font color=#000000 size=2>"; if($topic_params[6] ne '') { print "<a href=mailto:$topic_params[6]>$topic_params[2]</a>"; } else { print "$topic_params[2]"; } print "</font></td><td><font color=#000000 size=2>$topic_params[3]</font></td><td bgcolor=#dddddd><font color=#000000 size=2>$topic_params[4]</font></td></tr>\n"; } print "</table>\n"; print "<form action=board.cgi method=post>\n"; print "<table ±ellspacing=1 cellpadding=3 border=0>\n"; print "<input type=hidden name=action value=make_topic>\n"; print "<input type=hidden name=theme value=$FORM{'theme'}>\n"; print "<tr><td>Your name(nickname): </td><td><input type=text name=name size=25></td></tr>"; print "<tr><td>Your password(or the password if you are registered): </td><td><input type=text name=email size=25></td></tr>"; print "<tr><td>Subject of discussion: </td><td><input type=text name=topic size=25></td></tr>"; print "<tr><td>Message: </td><td><textarea name=message rows=10 cols=30></textarea></td></tr>"; print "<tr><td colspan=2><center><input type=submit value=\"Create subject\"></center></td></tr>"; print "</table>\n"; print "</form>\n<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub make_topic { ✓ chdir("users"); open(USER_NAME,"$FORM{'name'}.cgi"); @data = <USER_NAME>; chomp($data[4]); chomp($data[1]); if ($data[4] eq $FORM{'email'}) { $FORM{'email'} = $data[1]; } chdir("../"); open(TOPICS,"$FORM{'theme'}.txt"); @topics_array = <TOPICS>; close(TOPICS); $topics = @topics_array + 1; open(TOPICS,">> $FORM{'theme'}.txt"); print TOPICS "||$FORM{'topic'}||$FORM{'name'}||0||$time_post||board.cgi?action=view_topic\&topic=$topics\&theme=$FORM{'theme'}||$FORM{'email'}||\n"; close(TOPICS); $FORM{'message'} =~ s/\n/<br>/g; open(TOPIC,"> $FORM{'theme'}/$topics"); print TOPIC "||$FORM{'topic'}||$FORM{'name'}||1||$time_post||$FORM{'message'}||$FORM{'email'}||\n"; close(TOPIC); print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "Subject <b>$FORM{'topic'}</b> it was added by you $time_post\n in section $forums{$FORM{'theme'}}<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub view_topic { open(TOPIC,"$FORM{'theme'}/$FORM{'topic'}"); @messages = <TOPIC>; close(TOPIC); $prev = $FORM{'topic'} - 1; $next = $FORM{'topic'} + 1; print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } $replies = @messages - 1; (undef,$topic_name,undef,undef,$last_change,undef,undef,undef) = split(/\|\|/,$messages[-1]); (undef,undef,$name_author,undef,undef,undef,$author_email,undef) = split(/\|\|/,$messages[0]); $topic = $FORM{'topic'}; print "<a name=up></a>\n"; print "<table width=100% border=1 cellspacing=0 cellpadding=0 bordercolor=black>\n"; print "<tr>\n"; print "<td width=220 bgcolor=#eeeeee valign=top>\n"; print "<table><tr><td>\n"; print "<b>Subject of discussion:</b> $topic_name.<br>\n"; print "<b>Author of subject:</b>"; if($author_email ne '') { print " <a href=mailto:$author_email>$name_author</a>"; } else { print " $name_author"; } print "<br>\n<b>Last change:</b> $last_change.<br>\n"; print "<b>Answers:</b> $replies<br>\n"; print "<br>\n"; print "<br>\n"; print "<b>Transmit answer:</b><br><br>\n"; print "<form action=board.cgi method=POST>\n"; print "<b>Your name(nickname):</b><br>\n"; print "<input type=text name=name style=\"width: 210\"><br>\n"; print "<b>Your email(or the password if you are registered):</b><br>\n"; print "<input type=text name=email style=\"width: 210\"><br>\n"; print "<b>Message:</b><br>\n"; print "<textarea rows=10 name=message style=\"width: 210\"></textarea><br>\n"; print "<input type=hidden name=topic value=\"$topic\">\n"; print "<input type=hidden name=action value=reply_message>\n"; print "<input type=hidden name=theme value=$FORM{'theme'}>\n"; print "<input type=submit value=\"Transmit answer\">\n"; print "</form>\n"; print "</td></tr></table>\n"; print "<center><b>| <a href=board.cgi?action=view_topic&topic=$prev&theme=$FORM{'theme'}><<</a> | <a href=board.cgi>home</a> | <a href=board.cgi?action=view_topic&topic=$next&theme=$FORM{'theme'}>>></a> |</b></center><br><br>\n"; print "</td>\n"; print "<td bgcolor=#eeeeee valign=top>\n"; if ($rev_messages) { @messages = reverse(@messages); } foreach $message (@messages) { &change_smiles if $change_smiles = 1; (undef,undef,$name,undef,$date,$message,$email,undef) = split(/\|\|/,$message); print "<table cellspacing=1 cellpadding=3 border=0>\n"; print "<tr>\n"; print "<td bgcolor=#dddddd width=99%>"; if ($email ne '') { print "<a href=mailto:$email>$name</a>"; } else { print $name; } print " ( $date ) </td>\n"; print "<td bgcolor=#dddddd>[<a href=#up>Up</a>]\n"; print "</td>\n"; print "</tr>\n"; print "<tr><td bgcolor=#eeeeee colspan=2><br>$message<br><br></td></tr>\n"; print "</table>\n"; } print "</td></tr></table>\n<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub register { print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "<b>Registration</b><br><br>\n"; print "<table width=100% cellpadding=3 cellsapcing=1 border=0>\n"; print "<form action=board.cgi method=post>\n"; print "<table ±ellspacing=1 cellpadding=3 border=0>\n"; print "<input type=hidden name=action value=register_try>\n"; print "<tr><td>Your name(nickname)<font color=red>*</font>: </td><td><input type=text name=name size=25></td></tr>"; print "<tr><td>Your email<font color=red>*</font>: </td><td><input type=text name=email size=25></td></tr>"; print "<tr><td>Your web-page: </td><td><input type=text name=homepage size=25></td></tr>"; print "<tr><td>Your ICQ: </td><td><input type=text name=icq size=25></td></tr>"; print "<tr><td>Password<font color=red>*</font>: </td><td><input type=password name=password size=25></td></tr>"; print "<tr><td>Repeat password<font color=red>*</font>: </td><td><input type=password name=password2 size=25></td></tr>"; print "<tr><td>Interests: </td><td><input type=text name=interests size=25></td></tr>"; print "<tr><td>Residence: </td><td><input type=text name=place size=25></td></tr>"; print "<tr><td colspan=2><center><input type=submit value=\"Register\"></center></td></tr>"; print "</table>\n"; print "</form>\n<font color=red>*</font> - mandatory fields for filling .<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub reg_apply { chdir("users"); if (!(-e "$FORM{'name'}.cgi")) { open(USER_PROFILE,">$FORM{'name'}.cgi"); print USER_PROFILE "$FORM{'name'}\n"; print USER_PROFILE "$FORM{'email'}\n"; print USER_PROFILE "$FORM{'homepage'}\n"; print USER_PROFILE "$FORM{'icq'}\n"; print USER_PROFILE "$FORM{'password'}\n"; print USER_PROFILE "$FORM{'interests'}\n"; print USER_PROFILE "$FORM{'place'}\n"; close(USER_PROFILE); } chdir("../"); print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "You have successfully registered. Your name: <b>$FORM{'name'}</b>, password: <b>$FORM{'password'}</b>\n<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub change_profile { if (!($FORM{'step'})) { print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "<b>Enter your name and password</b><br><br>\n"; print "<table width=100% cellpadding=3 cellsapcing=1 border=0>\n"; print "<form action=board.cgi method=post>\n"; print "<table ±ellspacing=1 cellpadding=3 border=0>\n"; print "<input type=hidden name=action value=change_profile>\n"; print "<input type=hidden name=step value=2>\n"; print "<tr><td>Your name(nickname)<font color=red>*</font>: </td><td><input type=text name=name size=25></td></tr>"; print "<tr><td>Password<font color=red>*</font>: </td><td><input type=password name=password size=25></td></tr>"; print "<tr><td colspan=2><center><input type=submit value=\"Register\"></center></td></tr>"; print "</table>\n"; print "</form>\n<font color=red>*</font> - mandatory fields for filling.<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } elsif($FORM{'step'} eq '2') { open(USER_PROFILE,"users/$FORM{'name'}.cgi"); @data = <USER_PROFILE>; close(USER_PROFILE); chomp($data[4]); if($FORM{'password'} ne $data[4]) {&error('Incorrect password');} print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "<b>Change data</b><br><br>\n"; print "<table width=100% cellpadding=3 cellsapcing=1 border=0>\n"; print "<form action=board.cgi method=post>\n"; print "<table ±ellspacing=1 cellpadding=3 border=0>\n"; print "<input type=hidden name=action value=change_profile>\n"; print "<input type=hidden name=step value=3>\n"; print "<input type=hidden name=name value=\"$data[0]\">"; print "<tr><td>Your email<font color=red>*</font>: </td><td><input type=text name=email size=25 value=\"$data[1]\"></td></tr>"; print "<tr><td>Your page: </td><td><input type=text name=homepage size=25 value=\"$data[2]\"></td></tr>"; print "<tr><td>Your ICQ: </td><td><input type=text name=icq size=25 value=\"$data[3]\"></td></tr>"; print "<tr><td>Password<font color=red>*</font>: </td><td><input type=password name=password size=25 value=\"$data[4]\"></td></tr>"; print "<tr><td>Repeat password<font color=red>*</font>: </td><td><input type=password name=password2 size=25 value=\"$data[4]\"></td></tr>"; print "<tr><td>Interests: </td><td><input type=text name=interests size=25 value=\"$data[5]\"></td></tr>"; print "<tr><td>Residence: </td><td><input type=text name=place size=25 value=\"$data[6]\"></td></tr>"; print "<tr><td colspan=2><center><input type=submit value=\"Change data\"></center></td></tr>"; print "</table>\n"; print "</form>\n<font color=red>*</font> - mandatory fields for filling.<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } elsif ($FORM{'step'} eq '3') { chdir("users"); open(USER_PROFILE,">$FORM{'name'}.cgi"); print USER_PROFILE "$FORM{'name'}\n"; print USER_PROFILE "$FORM{'email'}\n"; print USER_PROFILE "$FORM{'homepage'}\n"; print USER_PROFILE "$FORM{'icq'}\n"; print USER_PROFILE "$FORM{'password'}\n"; print USER_PROFILE "$FORM{'interests'}\n"; print USER_PROFILE "$FORM{'place'}\n"; close(USER_PROFILE); chdir("../"); print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "You have successfully changed the data. Your name: <b>$FORM{'name'}</b>, password: <b>$FORM{'password'}</b>\n<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } else {exit;} } sub install { if($FORM{'password'} eq $password) { foreach $key (keys(%forums)) { mkdir($key,0777); } mkdir("users",0777); print "Content-Type: text/html\n\n"; print "Installation is completed."; } exit; } sub reply_message { ✓ chdir("users"); open(USER_NAME,"$FORM{'name'}.cgi"); @data = <USER_NAME>; chomp($data[4]); chomp($data[1]); if ($data[4] eq $FORM{'email'}) { $FORM{'email'} = $data[1]; } chdir("../"); open(TOPICS,"+< $FORM{'theme'}.txt"); flock(TOPICS,2); @topics = <TOPICS>; $topic = $FORM{'topic'}; @topic_params = split(/\|\|/,$topics[$topic - 1]); $topic_params[3]++; $topic_params[4] = $time_post; $topic_name = $topic_params[1]; $topics[$topic - 1] = join("||",@topic_params); seek (TOPICS, 0, 0); truncate (TOPICS,0); print TOPICS @topics; close(TOPICS); $FORM{'message'} =~ s/\n/<br>/g; open(TOPIC,">> $FORM{'theme'}/$topic"); print TOPIC "||$topic_name||$FORM{'name'}||1||$time_post||$FORM{'message'}||$FORM{'email'}||\n"; close(TOPIC); print "Content-Type: text/html\n\n"; open(HEAD,"header.txt"); @head = <HEAD>; close(HEAD); foreach (@head) { print $_; } print "Answer to a subject <b>$topic_name</b>was added by you $time_post\n<br><br><center>$copyright</center>"; open(FOOT,"footer.txt"); @foot = <FOOT>; close(FOOT); foreach (@foot) { print $_; } exit; } sub change_smiles { $message =~ s/:[\)]+/<IMG SRC="smile.gif">/g; $message =~ s/:\(/<IMG SRC="frown.gif">/g; $message =~ s/\:D/<IMG SRC="biggrin.gif">/g; $message =~ s/\;[\)]+/<IMG SRC="wink.gif">/g; $message =~ s/\:o/<IMG SRC="redface.gif">/g; } sub check { if ($FORM{'name'} ne '') { $name = $FORM{'name'}; $name =~ s/"//g; $name =~ s/<//g; $name =~ s/>//g; $name =~ s/\&//g; $FORM{'name'} = $name; } else {$FORM{'name'} = '[Anonim]';} if ($FORM{'topic'} ne '') { $topic = "$FORM{'topic'}"; $topic =~ s/\&/\&\;/g; $topic =~ s/"/\"\;/g; $FORM{'topic'} = $topic; } else { &error('You have not entered a subject.'); } if (!($FORM{'message'} ne '')) { &error('You have not entered the text of the message.'); } } sub error { $err = $_[0]; print "Content-Type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<title>$board_name error</title>\n"; print "<style>\n"; print "BODY {font-family: Tahoma; font-size: 11}\n"; print "</style>\n"; print "</head>\n"; print "<body>\n"; print "<center>\n"; print "<font size=2 face=Tahoma>$err</font>\n<br><br><center>$copyright</center>"; print "</center>\n"; print "</body>\n"; print "</html>\n"; exit; }