]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - goto.1.pl
input validation; goto form; show version; 2 words password
[ott/bsta] / goto.1.pl
index 8ea175383dabbc5761f8f6ec268eb69f36b60022..37feb2391c8998200426ea87d32912269da2daf2 100644 (file)
--- a/goto.1.pl
+++ b/goto.1.pl
@@ -28,32 +28,24 @@ use Encode ('encode', 'decode');
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
        'read_header_env',
-       'read_data_file',
-       'url_query_encode', 'url_query_decode',
-       'merge_url',
-       'join_path',
-       'html_entity_encode_dec'
+       'url_query_decode',
+       '_x_encoded'
 );
 use bsta_lib (
        'STATE',
        'fail_method', 'fail_content_type',
+       'redirect',
        'get_password',
-       'print_html_start', 'print_html_end',
-       'print_html_head_start', 'print_html_head_end',
-       'print_html_body_start', 'print_html_body_end',
-       'write_index',
-       'merge_settings'
+       'print_goto',
+       'merge_settings',
+       'read_settings', 'read_state', 'read_goto'
 );
 
-###PERL_PATH_SEPARATOR:     PATH_SEPARATOR     = /
-
 ###PERL_CGI_PATH:           CGI_PATH           = /bsta/
+###PERL_CGI_LIST_PATH:      CGI_LIST_PATH      = /bsta/goto.htm
 ###PERL_CGI_VIEWER_PATH:    CGI_VIEWER_PATH    = /bsta/v
 
-###PERL_DATA_PATH:          DATA_PATH          = /botm/data/bsta/
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
-###PERL_DATA_STATE_PATH:    DATA_STATE_PATH    = /botm/data/bsta/state
-###PERL_DATA_LIST_PATH:     DATA_LIST_PATH     = /botm/data/bsta/list
+###PERL_WWW_GOTO_PATH:      WWW_GOTO_PATH      = /botm/www/1190/bsta/goto.htm
 
 ###PERL_WEBSITE_NAME:       WEBSITE_NAME       = Bicycles on the Moon
 
@@ -74,11 +66,7 @@ my %goto_list;
 my $method;
 my $password;
 my $password_ok;
-my $password_query;
-my $frame;
-my $last_frame;
-my $ong_state;
-my $line;
+my $no_cgi;
 
 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
 ###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
@@ -87,7 +75,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);
@@ -104,119 +92,32 @@ if ($method eq 'POST') {
        }
 }
 
-$password = get_password(\%cgi);
+$no_cgi = (scalar (keys %cgi) == 0);
+
+if ($no_cgi) {
+       if (_x_encoded('-f', WWW_GOTO_PATH())) {
+               exit redirect($method, CGI_LIST_PATH());
+       }
+}
 
-%settings  = read_data_file(DATA_SETTINGS_PATH());
-%state     = read_data_file(DATA_STATE_PATH());
-%goto_list = read_data_file(DATA_LIST_PATH());
+$password = get_password(\%cgi);
 
-$last_frame = int($state{'last'});
-$ong_state  = int($state{'state'});
+%settings  = read_settings();
+%state     = read_state();
+%goto_list = read_goto();
 
 $password_ok = ($password eq $settings{'password'});
-$password_query = url_query_encode({'p', $settings{'password'}});
 
-print "Content-type: text/html\n";
+print "Content-type: text/html; charset=UTF-8\n";
 print "\n";
 if($method eq 'HEAD') {
        exit;
 }
 
-my $_title        = html_entity_encode_dec($settings{'story'}, 1);
-my $_website_name = html_entity_encode_dec(WEBSITE_NAME()    , 1);
-my $_base_url     = html_entity_encode_dec(CGI_PATH()        , 1);
-
-print_html_start(\*STDOUT);
-print_html_head_start(\*STDOUT);
-
-print '  <title>GOTO &bull; '.$_title.' &bull; '.$_website_name.'</title>'."\n";
-
-print_html_head_end(\*STDOUT);
-print_html_body_start(\*STDOUT);
-
-print '   <div id="inst" class="ins">'."\n";
-
-print '    <div id="title">'."\n";
-print '     <h1 id="titletext">'.$_title.'</h1>'."\n";
-print '    </div>'."\n";
-
-print '   </div>'."\n";
-print '   <div id="insb" class="ins">'."\n";
-
-print '    <div id="chat">'."\n";
-for ($frame = 0; ; $frame += 1) {
-       unless (
-               $password_ok || (
-                       ($frame <= $last_frame) &&
-                       ($ong_state >= STATE->{'waiting'})
-               )
-       ) {
-               last;
-       }
-       my $title;
-       my $ongtime;
-       my @time_tab;
-       my $time_text;
-       my $timer_color;
-       my $frame_text;
-       my $viewer_url;
-       
-       $ongtime = $goto_list{'ongtime-'.$frame};
-       $title   = $goto_list{'title-'  .$frame};
-       if (($ongtime eq '') && ($title eq '')) {
-               my $frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame);
-               my %frame_data = read_data_file($frame_data_path);
-               $ongtime = $frame_data{'ongtime'};
-               $title   = $frame_data{'title'};
-               unless (keys %frame_data) {
-                       last;
-               }
-       }
-       
-       if ($ongtime ne '') {
-               @time_tab = gmtime($ongtime);
-               $time_text = sprintf(
-                       '%02d.%02d.%02d %02d:%02d',
-                       $time_tab[3],
-                       $time_tab[4]+1,
-                       $time_tab[5]-100, # TODO: %100 ?
-                       $time_tab[2],
-                       $time_tab[1]
-               );
-       }
-       else {
-               $time_text = (($frame <= $last_frame) && ($ong_state >= STATE->{'waiting'})) ?
-                       'EE.EE.EE EE:EE' : '--.--.-- --:--';
-       }
-       if ($title eq '') {
-               $title = '_';
-       }
-       $timer_color = (($frame > $last_frame) || ($ong_state < STATE->{'waiting'})) ?
-               'cz' : (
-                       (($frame == $last_frame) && ($ong_state < STATE->{'ready'})) ?
-                               'ni' : 'br'
-               );
-       $frame_text = sprintf('%03d',$frame);
-       $viewer_url = merge_url(
-               {'path' => CGI_VIEWER_PATH()},
-               {'path' => $frame}
-       );
-       if ($password_ok) {
-               $viewer_url = merge_url($viewer_url, {'query' => $password_query, 'append_query' => 1, 'preserve_fragment' => 1});
-       }
-       
-       my $_viewer_url = html_entity_encode_dec($viewer_url, 1);
-       my $_title      = html_entity_encode_dec($title     , 1);
-       
-       print '     <span class="'.$timer_color.'">'.$frame_text.'</span> '.$time_text.' <a href="'.$_viewer_url.'">'.$_title.'</a><br>'."\n";
-}
-print '    </div>'."\n";
-
-print '    <div id="underlinks">'."\n";
-print '     <a href="'.$_base_url.'">BSTA</a>'."\n";
-print '    </div>'."\n";
-
-print '   </div>'."\n";
-
-print_html_body_end(\*STDOUT, $ong_state == STATE->{'inactive'});
-print_html_end(\*STDOUT);
+print_goto(
+       \*STDOUT,
+       \%state,
+       \%settings,
+       \%goto_list,
+       $password_ok
+);