]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - attach.1.pl
use optimised HTML entity encoding
[ott/bsta] / attach.1.pl
index 226714f42dd2c9be034d29ebef562968dbb4b8a6..cb34f63e996a200797fb9361189e94278e1e8286 100644 (file)
@@ -27,29 +27,27 @@ use Encode ('encode', 'decode');
 
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
+       'HTTP_STATUS',
        'read_header_env',
        'url_query_decode',
-       'read_data_file',
        'join_path',
        'merge_url',
-       'open_encoded', 'stat_encoded'
+       'open_encoded', 'stat_encoded',
+       'http_header_line', 'http_header_content_length', 'http_header_content_disposition'
 );
 use bsta_lib (
        'STATE',
        'merge_settings',
        'get_id', 'get_password',
-       'fail_attachment', 'fail_500', 'redirect'
+       'fail_method', 'fail_content_type', 'fail_attachment', 'fail_500',
+       'redirect',
+       'read_settings', 'read_state', 'read_attachment'
 );
 
 ###PERL_PATH_SEPARATOR:     PATH_SEPARATOR     = /
 
 ###PERL_CGI_PATH:           CGI_PATH           = /bsta/
-
 ###PERL_DATA_PATH:          DATA_PATH          = /botm/data/bsta
-###PERL_DATA_ATTACH_PATH:   DATA_ATTACH_PATH   = /botm/data/bsta/a
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
-###PERL_DATA_STATE_PATH:    DATA_STATE_PATH    = /botm/data/bsta/state
-
 ###PERL_WWW_PATH:           WWW_PATH           = /botm/www/1190/bsta/
 
 binmode STDIN,  ':encoding(UTF-8)';
@@ -89,7 +87,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);
@@ -106,14 +104,12 @@ if ($method eq 'POST') {
        }
 }
 
-# print "content-type: text/plain\n\n";
-
 $ID       = get_id(      \%cgi);
 $password = get_password(\%cgi);
 
-%settings  = read_data_file(DATA_SETTINGS_PATH());
-%state     = read_data_file(DATA_STATE_PATH());
-%file_data = read_data_file(DATA_ATTACH_PATH().$ID);
+%settings  = read_settings();
+%state     = read_state();
+%file_data = read_attachment($ID);
 $frame = ($file_data{'frame'} ne '') ? int($file_data{'frame'}) : -1;
 $last_frame = int($state{'last'});
 $ong_state  = int($state{'state'});
@@ -152,7 +148,7 @@ else {
                                {'path' => CGI_PATH()},
                                {'path' => $file_name}
                        );
-                       exit redirect ($method, $file_path, 303);
+                       exit redirect ($method, $file_path, HTTP_STATUS->{'see_other'});
                }
        }
        unless ($r) {
@@ -167,11 +163,15 @@ else {
                exit fail_500("Can't switch file to binary mode.");
        }
        if (my @file_info = stat_encoded($file_path)) {
-               print 'Content-length: '.$file_info[7]."\n";
+               print http_header_content_length($file_info[7]);
        }
 }
-print 'Content-type: '.$file_data{'content-type'}."\n";
-print 'Content-disposition: attachment; filename="'.$file_name.'"'."\n";
+if ($file_data{'content-type'} ne '') {
+       print http_header_line('content-type', $file_data{'content-type'});
+}
+if ($file_name ne '') {
+       print http_header_content_disposition('inline', $file_name);
+}
 unless ($direct) {
        unless (binmode STDOUT) {
                close($fh);