]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - chat.1.pl
improve HTTP headers; can't post with GET request
[ott/bsta] / chat.1.pl
index bf764ee0f7a291a9af32c3d1b1cf3e6f73ccf582..1fd807361bac9c4281b462fbba1560fba1c4f277 100644 (file)
--- a/chat.1.pl
+++ b/chat.1.pl
@@ -28,12 +28,14 @@ use Encode ('encode', 'decode');
 
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
+       'HTTP_STATUS',
        'read_data_file', 'write_data_file',
        'read_header_env',
        'url_query_decode', 'url_query_encode',
        'merge_url',
        'html_entity_encode_dec',
-       'open_encoded'
+       'open_encoded',
+       'http_header_status'
 );
 use bsta_lib (
        'STATE', 'CHAT_STATE', 'CHAT_ACTION',
@@ -83,6 +85,7 @@ my $state;
 my $password_ok;
 my @chat_lines;
 my $chat_state;
+my $status;
 my $message;
 my $chat_id;
 my $last_id;
@@ -94,7 +97,7 @@ if ($ENV{'REQUEST_METHOD'} =~ /^(HEAD|GET|POST)$/) {
        $method = $1;
 }
 else {
-       exit fail_method($ENV{'REQUEST_METHOD'}, 'GET, POST, HEAD');
+       exit fail_method($ENV{'REQUEST_METHOD'}, ['GET', 'POST', 'HEAD']);
 }
 
 %http = read_header_env(\%ENV);
@@ -144,8 +147,16 @@ if ($page < 0) {
                        $chat_id    = int($chat{'id'});
                        $last_id    = $chat_id;
                        
-                       if (($action == CHAT_ACTION->{'none'}) && ($words ne '')) {
+                       if ($method ne 'POST') {
+                               #
+                       }
+                       
+                       elsif (
+                               ($action == CHAT_ACTION->{'none'}) &&
+                               ($words ne '')
+                       ) {
                                if (($chat_state < CHAT_STATE->{'ready'}) && !$password_ok) {
+                                       $status = HTTP_STATUS->{'forbidden'};
                                        $message = 'Not connected.';
                                }
                                else {
@@ -159,10 +170,12 @@ if ($page < 0) {
                                                        write_data_file($fh, \%chat);
                                                }
                                                else {
+                                                       $status = HTTP_STATUS->{'bad_request'};
                                                        $message = 'Invalid username.';
                                                }
                                        }
                                        else {
+                                               $status = HTTP_STATUS->{'bad_request'};
                                                $message = 'Invalid text.';
                                        }
                                }
@@ -183,16 +196,20 @@ if ($page < 0) {
                                                        write_data_file($fh, \%chat);
                                                }
                                                elsif ($words eq '') {
+                                                       $status = HTTP_STATUS->{'bad_request'};
                                                        $message = 'Server ID missing.';
                                                }
                                                elsif ($words !~ /^[0-9]+$/) {
+                                                       $status = HTTP_STATUS->{'bad_request'};
                                                        $message = 'Invalid server ID.';
                                                }
                                                else {
+                                                       $status = HTTP_STATUS->{'not_found'};
                                                        $message = 'No active Coincidence server with this ID.';
                                                }
                                        }
                                        else {
+                                               $status = HTTP_STATUS->{'bad_request'};
                                                $message = 'Invalid username.';
                                        }
                                }
@@ -223,6 +240,7 @@ if ($page < 0) {
                                                }
                                        }
                                        else {
+                                               $status = HTTP_STATUS->{'bad_request'};
                                                $message = 'Invalid username.';
                                        }
                                }
@@ -244,17 +262,21 @@ if ($page < 0) {
                                                write_data_file($fh, \%chat);
                                        }
                                        else {
+                                               $status = HTTP_STATUS->{'bad_request'};
                                                $message = 'Invalid username.';
                                        }
                                }
                                else {
+                                       $status = HTTP_STATUS->{'bad_request'};
                                        $message = 'Invalid text.';
                                }
                        }
+                       
                        @chat_lines = split(/\r?\n/, $chat{'content'});
                }
-               else{
+               else {
                        $chat_state = CHAT_STATE->{'disconnected'};
+                       $status = HTTP_STATUS->{'internal_server_error'};
                        $message = 'Can\'t lock data file!';
                }
                
@@ -262,6 +284,7 @@ if ($page < 0) {
        }
        else {
                $chat_state = CHAT_STATE->{'disconnected'};
+               $status = HTTP_STATUS->{'internal_server_error'};
                $message='Can\'t open data file!';
        }
 }
@@ -277,6 +300,9 @@ else {
        }
 }
 
+if ($status ne '') {
+       print http_header_status($status);
+}
 print "Content-type: text/html; charset=UTF-8\n\n";
 if($method eq 'HEAD') {
        exit;
@@ -349,7 +375,7 @@ elsif ($chat_state > CHAT_STATE->{'disconnected'}) {
        print '     Connected to server <span class="br">'.$_server.'</span> as user <span class="ni">'.$_username.'</span> (<span class="ni">'.$_abbr.'</span>), public key <span class="br">'.$_key.'</span>.'."\n";
 }
 else{
-       print '     Not connected.';
+       print '     Not connected.'."\n";
 }
 print '    </div>'."\n";