###PERL_LIB: use lib /botm/lib/bsta
use botm_common (
+ 'HTTP_STATUS',
+ 'http_header_status',
'read_header_env',
- 'read_data_file', 'write_data_file',
- 'url_query_decode',
- 'join_path'
+ 'write_data_file',
+ 'url_query_decode'
);
use bsta_lib (
'STATE',
'fail_method', 'fail_content_type',
'get_password',
- 'merge_settings'
+ 'merge_settings',
+ 'get_page_file', 'get_frame_file',
+ 'read_frame_data', 'read_default', 'read_noaccess',
+ 'read_settings', 'read_default', 'read_state',
+ 'read_words_list', 'read_words', 'read_attachment'
);
-###PERL_PATH_SEPARATOR: PATH_SEPARATOR = /
-
-###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta
-###PERL_DATA_ATTACH_PATH: DATA_ATTACH_PATH = /botm/data/bsta/a
-###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
-###PERL_DATA_NOACCESS_PATH: DATA_NOACCESS_PATH = /botm/data/bsta/noaccess
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
-###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
-###PERL_DATA_WORDS_PATH: DATA_WORDS_PATH = /botm/data/bsta/words/
-
binmode STDIN, ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
my $show_command;
my $ongtime;
my $timer;
-my $info_data_path;
-my $next_frame_data_path;
my $ong_state;
my $last_frame;
$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);
elsif ($cgi{'w'} =~ /^.+$/) {
$words = $&;
}
-elsif ($ENV{'PATH_INFO'} =~ /^\/a(.+)$/) {
+elsif ($ENV{'PATH_INFO'} =~ /^\/a\/?(.+)$/) {
$attachment = int($1);
}
-elsif ($ENV{'PATH_INFO'} =~ /^\/w(.+)$/) {
+elsif ($ENV{'PATH_INFO'} =~ /^\/w\/?(.+)$/) {
$words = $1;
}
-elsif ($ENV{'PATH_INFO'} =~ /^\/f?(.+)$/) {
- $frame = int($1);
+elsif ($ENV{'PATH_INFO'} =~ /^\/(f\/?)?(.+)$/) {
+ $frame = int($2);
}
$password = get_password(\%cgi);
-%settings = read_data_file(DATA_SETTINGS_PATH());
-%default = read_data_file(DATA_DEFAULT_PATH());
-%state = read_data_file(DATA_STATE_PATH());
+%settings = read_settings();
+%default = read_default();
+%state = read_state(());
$ong_state = int($state{'state'});
$last_frame = int($state{'last'});
# comment info, not frame
if ($words ne '') {
- $info_data_path = join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $words);
- %info_data = read_data_file($info_data_path);
if ($words =~ /^[0-9]+$/) {
+ %info_data = read_words_list(
+ int($&), # id
+ 0, # header only
+ 1 # not as list
+ );
$frame = int($&);
if ($info_data{'posts'} eq '') {
$info_data{'posts'} = 0;
}
}
- else {
+ elsif ($words =~ /^[0-9]+\.[0-9\.]+$/) {
+ %info_data = read_words($&);
$frame = ($info_data{'frame'} ne '') ? int($info_data{'frame'}) : -1;
unless ($password_ok) {
delete($info_data{'password'});
}
# attachment info, not frame
elsif ($attachment ne '') {
- %info_data = read_data_file(DATA_ATTACH_PATH().$attachment);
+ %info_data = read_attachment($attachment);
$frame = ($info_data{'frame'} ne '') ? int($info_data{'frame'}) : -1;
}
# frame info
if ($frame < 0) {
$frame = $last_frame + $frame +1;
}
- $info_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame);
- $next_frame_data_path = join_path(PATH_SEPARATOR(), DATA_PATH(), $frame+1);
- %info_data = read_data_file($info_data_path);
- %next_frame_data = read_data_file($next_frame_data_path);
- %info_data = merge_settings(\%default, \%info_data);
- %next_frame_data = merge_settings(\%default, \%next_frame_data);
+ %info_data = read_frame_data($frame, \%default);
+ %next_frame_data = read_frame_data($frame+1, \%default);
$timer = int($state{'nextong'}) - $time;
$ongtime = int($state{'ongtime'});
$state{'ip3'} = 1;
}
}
- print "Content-type: text/plain\n\n";
+ print "Content-type: text/plain; charset=UTF-8\n\n";
if ($method eq 'HEAD') {
exit;
}
%info_data = ();
}
else {
- %info_data = read_data_file(DATA_NOACCESS_PATH());
- %info_data = merge_settings(\%default, \%info_data);
+ %info_data = read_noaccess(\%default);
}
}
if (
- ($info_data{'frame'} eq '') &&
($attachment eq '') &&
($words eq '')
) {
- $info_data{'frame'} = sprintf($settings{'frame'}, $frame, $info_data{'ext'});
+ if ($info_data{'frame'} eq '') {
+ $info_data{'frame'} = get_frame_file($frame, \%info_data, \%settings)
+ }
+ if ($info_data{'page'} eq '') {
+ unless (($access) && ($frame < $last_frame)) {
+ $info_data{'page'} = '';
+ }
+ else {
+ $info_data{'page'} = get_page_file($frame, \%info_data, \%settings);
+ }
+ }
}
-print "Content-type: text/plain\n";
+print "Content-type: text/plain; charset=UTF-8\n";
if (!$access) {
- print "Status: 403 Forbidden\n";
+ print http_header_status(HTTP_STATUS->{'forbidden'});
}
print "\n";
if($method eq 'HEAD') {