1 ###RUN_PERL: #!/usr/bin/perl
3 # reset is generated from reset.1.pl.
7 # Copyright (C) 2016, 2017, 2018, 2023, 2024 Balthasar SzczepaĆski
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU Affero General Public License as
11 # published by the Free Software Foundation, either version 3 of the
12 # License, or (at your option) any later version.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU Affero General Public License for more details.
19 # You should have received a copy of the GNU Affero General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 use Encode::Locale ('decode_argv');
25 use Encode ('encode', 'decode');
27 ###PERL_LIB: use lib /botm/lib/bsta
29 'read_data_file', 'write_data_file',
30 'opendir_encoded', 'readdir_decoded', 'unlink_encoded',
34 'STATE', 'INTF_STATE', 'CHAT_STATE',
39 binmode STDIN, ':encoding(UTF-8)';
40 binmode STDOUT, ':encoding(UTF-8)';
41 binmode STDERR, ':encoding(UTF-8)';
44 ###PERL_PATH_SEPARATOR: PATH_SEPARATOR = /
46 ###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta/
47 ###PERL_DATA_ATTACH_PATH: DATA_ATTACH_PATH = /botm/data/bsta/a
48 ###PERL_DATA_CHAT_PATH: DATA_CHAT_PATH = /botm/data/bsta/chat
49 ###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
50 ###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
51 ###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/state
52 ###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
53 ###PERL_DATA_STORY_PATH: DATA_STORY_PATH = /botm/data/bsta/story
54 ###PERL_DATA_WORDS_PATH: DATA_WORDS_PATH = /botm/data/bsta/words/
56 ###PERL_WWW_PATH: WWW_PATH = /botm/www/
58 ###PERL_RESET_PASSWORD: RESET_PASSWORD = ''
69 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
70 ###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
72 %settings = read_data_file(DATA_SETTINGS_PATH());
75 ($ARGV[0] eq $settings{'password'}) ||
76 ($ARGV[0] eq RESET_PASSWORD())
79 print STDERR "Wrong password; no reset.\n";
83 $last_frame = int($settings{'last'});
84 %default = read_data_file(DATA_DEFAULT_PATH());
86 for (my $frame=0; $frame<=$last_frame; $frame+=1) {
87 my %frame_data =read_data_file(
88 join_path(PATH_SEPARATOR(), DATA_PATH(), $frame)
90 %frame_data = merge_settings(\%default, \%frame_data);
91 unless ($frame == 0) {
93 ($frame_data{'page'} ne '') ?
102 ($frame_data{'frame'} ne '') ?
103 $frame_data{'frame'} :
106 $frame, $frame_data{'ext'}
110 push @remove_list, 'goto.htm';
111 for (my $i=0; ;$i+=1) {
114 %file_data = read_data_file(DATA_ATTACH_PATH().$i);
115 if ($file_data{'frame'} eq '') {
118 if ($file_data{'content'} ne '') {
121 push @remove_list, $file_data{'filename'};
125 'state' => STATE->{'inactive'},
136 'lastip' => '0.0.0.0',
139 'state' => INTF_STATE->{'X'}
143 'state' => CHAT_STATE->{'disconnected'},
149 write_data_file(DATA_STATE_PATH(), \%state);
150 write_data_file(DATA_STORY_PATH(), \%story);
151 write_data_file(DATA_CHAT_PATH() , \%chat);
152 write_data_file(DATA_LIST_PATH() , \%goto_list);
162 if (opendir_encoded(my $dir, DATA_WORDS_PATH())) {
163 while (defined (my $file_name = readdir_decoded($dir))) {
164 if ($file_name !~ /^[0-9]+$/) {
167 my $full_path = join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $file_name);
168 # print "RM $full_path\n";
169 unlink_encoded ($full_path);
172 foreach my $file_name (@remove_list) {
173 my $full_path = join_path(PATH_SEPARATOR(), WWW_PATH(), $file_name);
174 # print "RM $full_path\n";
175 unlink_encoded ($full_path);