home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 October A / Pcwk10a98.iso / Lotus / NETOBJ / T2.Z / bbs_components.sit / bbs-submit.cgi.rsrc / TEXT_128_!.txt < prev    next >
Text File  |  1997-05-09  |  8KB  |  241 lines

  1.  
  2.  
  3. ##################################
  4. ###CONFIGURATION##################
  5. ##################################
  6. ##################################
  7. ###FULL URL of BBS################
  8. ##################################
  9. $BBS_HOME='::';
  10. ##################################
  11. ###DISPLAY DIRECTORY##############
  12. ##################################
  13. $HTML_DIR='::html';
  14. $ERROR='error.html';
  15. $ERROR_CHAR='error-char.html';
  16. $SUCCESS='success.html';
  17. ###################################
  18. ###STORAGE DIRECTORY###############
  19. ###################################
  20. # This directory should be "server" readable/writeable/executable only.
  21. $STORAGE_DIR='::message';
  22. # The files below should be world readable/writable only.
  23. $ERROR_COLLECT='error-collect.txt';
  24. $SUCCESS_COLLECT='bbs-data.html';
  25. $TOKEN_FILE ='counter';
  26. $THREAD_TOKEN ='thread_counter';
  27. # if your system does not support the flock() function, comment this out, or set it to 0.
  28. # the latest edition of NT Perl, as well as all unix perl should have flock build in.
  29. $flock_exists = 1;
  30. ##################################
  31. ### END OF CONFIGURATION #########
  32. ##################################
  33. ### APPEND DIRECTORY with FILE ###
  34. ##################################
  35.  $ERROR = $HTML_DIR.':'.$ERROR;
  36. $ERROR_CHAR = $HTML_DIR.':'.$ERROR_CHAR;
  37. $SUCCESS = $HTML_DIR.':'.$SUCCESS;
  38. $TMP = $STORAGE_DIR.':'.($$).".tmp";
  39. $ERROR_COLLECT = $STORAGE_DIR.':'.$ERROR_COLLECT;
  40. $INDEX_FILE = $STORAGE_DIR.':'.$SUCCESS_COLLECT;
  41. $TOKEN_FILE = $STORAGE_DIR.':'.$TOKEN_FILE;
  42. $THREAD_TOKEN = $STORAGE_DIR.':'.$THREAD_TOKEN;
  43. ###################################
  44.  
  45.  
  46. print "Content-type: text/html\n\n";
  47. #
  48. # This reads in the information sent when the user pressed Submit
  49. #
  50. if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; }
  51. else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
  52. #
  53. # Now, using a little loop, we'll split up the data into name/value
  54. # pairs, which makes them easier to work with. 
  55. #
  56. @pairs = split(/&/, $buffer);
  57. foreach $pair (@pairs)
  58. {
  59.     ($name, $value) = split(/=/, $pair);
  60.     $value =~ tr/+/ /;
  61.     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  62.      
  63.     $FORM{$name} = $value;
  64. }
  65. #
  66. # Once the name/value pairs have been created, you can work with
  67. # them by referring to the variable names you set up in the 
  68. # original HTML, using $FORM{"varname"}.
  69. #
  70. #
  71. # First, we make sure that they actually gave an email address
  72. #
  73. #check for error -- REQUIRE ALL
  74. ¬complete unless $FORM{'thread'} && $FORM{'time'} && $FORM{'RealTime'};
  75. #$FORM{'name'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  76. $FORM{'name'} =~ tr/\n//d;
  77. #$FORM{'email'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  78. $FORM{'email'} =~ tr/\n//d;
  79. # $FORM{'subject'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  80. $FORM{'subject'} =~ tr/\n//d;
  81. #$FORM{'body'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  82. $body = $FORM{'body'};
  83. $body =~ s/\r//g;
  84. $body =~ s/\n/<br>/g;
  85. $name = $FORM{'name'};
  86. $name =~ s/\r//g;
  87. $name =~ s/\n/<br>/g;
  88. $email = $FORM{'email'};
  89. $email =~ s/\r//g;
  90. $email =~ s/\n/<br>/g;
  91. $subject = $FORM{'subject'};
  92. $subject =~ s/\r//g;
  93. $subject =~ s/\n/<br>/g;
  94. $subject2 = $subject;
  95. $subject2 =~ s/\"/\\\"/g;
  96. $name2 = $name;
  97. $name2 =~ s/\"/\\\"/g;
  98.  
  99. ### The following 3 field is internal and self generating. user have no business
  100. ### to generate beyond the set allowed 
  101. &invalidchar if $FORM{'RealTime'} =~ /([*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\n\r])/;
  102. &invalidchar if $FORM{'thread'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  103. &invalidchar if $FORM{'time'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  104. &invalidchar if $FORM{'parent'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  105. $realTime = $FORM{'RealTime'};
  106. $realTime =~ s/_/ /g;
  107. &makeMessage;
  108. &addToIndex;
  109. &success;
  110. exit;
  111. #######################################################################
  112.  ############################  Add to data file  #######################
  113. #######################################################################
  114. sub addToIndex {
  115.     select(STDOUT);
  116.     open(toINDEX,"$INDEX_FILE") || die "can't open $INDEX_FILE\n";
  117.     &lock(toINDEX);
  118.     open(temp, "> $TMP") || die "can't open $TMP\n";
  119.     while(<toINDEX>){
  120.         if(/<!--insertion point-->/){
  121.             print temp "parent.addpbbsArray(\"$subject2\",$FORM{'time'},\"$realTime\",\"$name2\",$FORM{'thread'},\"message/$file_handle.html\",\"$FORM{'parent'}\",\"$file_handle\")\n<!--insertion point-->\n";
  122.         }
  123.         else {
  124.             print temp $_;
  125.         }
  126.     }
  127.     &unlock(toINDEX);
  128.     close(toINDEX);
  129.     close(temp);
  130.        rename($TMP, $INDEX_FILE);
  131. }
  132. ######################################################################
  133. ############################  Make .dat file    ######################
  134. ######################################################################
  135. sub makeMessage {
  136.     select(STDOUT);
  137.     $file_handle = getToken();
  138.     open(NEW,">> $STORAGE_DIR:$file_handle.html") || die "can't open $STORAGE_DIR:$file_handle.html\n";
  139.     select(NEW);
  140. print <<"DONE";
  141. <html>
  142. <META HTTP-EQUIV="Expires" CONTENT="Sat, 29 Sep 1973 23:59:00 GMT">
  143. <head>
  144.     <title>$subject</title>
  145. </head>
  146. <body bgcolor="#FFFFFF">
  147. <script language="JavaScript">
  148. <!--
  149.     var coun = navigator.appVersion.indexOf("(");
  150.     var last = navigator.appVersion.lastIndexOf(";");
  151.        document.write('<a href="#" onclick=parent.goNgbr($file_handle,"Prev")><img src="../image/previous.gif" border=0></a>');
  152.        document.write('<a href="#" onclick=parent.goNgbr($file_handle,"Next")><img src="../image/next.gif" border=0></a>');
  153.        document.write('<a href="../cgi-bin/submit-bbs-form.cgi?$FORM{'thread'}" target="message"><img src="../image/reply.gif" border=0></a><br>');    
  154. //-->
  155. </script><hr>
  156. <pre>
  157. <b>Name</b>:    $name
  158. <b>Email</b>:   <a href=mailto:$email>$email </a> 
  159. <b>Subject</b>: $subject
  160. <b>Thread</b>:  $FORM{'thread'}
  161. <b>Time</b>:    $realTime
  162. </pre><hr>
  163. <!-- since 1/1/70 GMT$FORM{'time'} -->
  164. <b>
  165.     $body
  166. </b>
  167. </body>
  168. </html>
  169. DONE
  170.     close(NEW);
  171. }
  172. ###############################################################################
  173. ############################  Get Token #######################################
  174. sub getToken{
  175. ######
  176. #lock
  177. ######
  178.     open(TOKEN,"$TOKEN_FILE") || die "can't open $STORDIR:$file_handle.html\n";
  179.     &lock(TOKEN);
  180.     while (<TOKEN>) {
  181.         $tokenReturn  = "$_";
  182.         chop($tokenReturn);
  183.     }
  184.     close(TOKEN);
  185.     open(TOKEN,"> $TOKEN_FILE") || die "can't open $STORDIR:$file_handle.html\n";
  186.     $tokenNext = $tokenReturn + 1;
  187.     select(TOKEN);
  188.  print <<"DONE";
  189. $tokenNext
  190. DONE
  191.     &unlock(TOKEN);
  192.     close(TOKEN);
  193.     select(STDOUT);
  194.     return $tokenReturn;
  195. #######
  196. #unlock
  197. #######
  198. }
  199. sub lock{
  200. }
  201. sub unlock{
  202. }
  203. ###############################################################################
  204. ############################  Complete/Success  ###############################
  205. ###############################################################################
  206. sub success{
  207.     select(STDOUT);
  208.     open(EP,"$SUCCESS");
  209.     while(<EP>){
  210.         $tk = "$_";
  211.        $tk =~ s/\#\#\#\#HOME-LOCATION\#\#\#\#/$BBS_HOME/;
  212.         print "$tk";
  213.     }
  214.     close(EP);
  215.     exit;
  216. }
  217. ###############################################################################
  218. ############################  Incomplete Error  ###############################
  219. ###############################################################################
  220. sub notcomplete {
  221.     select(STDOUT);
  222.     open(EP,"$ERROR");
  223.     while(<EP>){
  224.         print "$_";
  225.     }
  226.     close(EP);
  227.     exit;
  228. ###############################################################################
  229. ############################  Invalid char  ###############################
  230. ###############################################################################
  231. sub invalidchar {
  232.     select(STDOUT);
  233.     open(EP,"$ERROR_CHAR");
  234.     while(<EP>){
  235.         print "$_";
  236.     }
  237.     close(EP);
  238.     exit;
  239.