package Initialize; use base Bbs; use strict; sub attribute { my $s = shift; my %a = @{$_[0]}; # @$_[0];とか書くと正常に動きません $s->{'from'} = {'bbs'=>undef,'key'=>undef,'time'=>undef,'subject'=>undef,'name'=>undef,'mail'=>undef,'message'=>undef,'date'=>undef,'submit'=>undef,'code'=>undef,'check'=>undef}; $s->{'list'} = {'dat'=>undef,'subject'=>undef,'response'=>undef,'thread'=>undef,}; $s->{'path'} = {'script'=>undef,'bbs'=>undef,'dat'=>undef,'subject'=>undef,'subback'=>undef,'caps'=>undef,'template'=>undef,}; $s->{'file'} = { 'setting' => 'SETTING.TXT', # 板設定 'conf' => 'conf.txt', # 掲示板動作詳細設定 'subject' => 'subject.txt', # アクティブスレッド記録ファイル 'subback' => 'subback.html', # subback 'index' => 'index.html', # index 'index_i' => 'index.html', # i-mode用index 'rss' => 'headline.rss', # rss 'caps' => 'caps.cgi', # キャップ 'response' => 'response.cgi', # レスのホスト一時格納(仮名) 'thread' => 'thread.cgi', # スレッドのホスト一時格納(仮名) 'caution' => 'caution.cgi', # 連続投稿しすぎとかで確認画面に飛ばされたホスト一時格納 'proxy' => 'proxy.cgi', # プロクシ規制リスト(仮名) 'ban' => 'ban.cgi', # 規制ファイル(仮名) 'kisei' => 'kisei.cgi', # 板別規制ファイル(仮名) 'gonta' => undef, # HOST_CHECK有効時の全ホスト記録ファイル ../test/aho/板名とか.cgi 'head' => 'head.html', # 板のトップ表示 'option' => 'option.txt', # サーバ別まとめて表示(クリックで救えるとか) 'putad' => 'putad.txt', # 広告(16メロミックス) 'headad' => 'headad.txt', # 広告(e-Bankなど) 'henkan' => 'henkan.cgi', # 変換する文字列リスト }; $s->{'template'} = { 'index' => 'index.tmpl', # index.htmlのテンプレート 'index_i' => 'index_i.tmpl', # index.htmlのテンプレート 'make_dat' => 'make_dat.tmpl', # 新規スレ立ての確認画面のテンプレート 'error' => 'error.tmpl', # エラー画面のテンプレート 'caution' => 'caution.tmpl', # 警告画面のテンプレート 'cookie' => 'cookie.tmpl', # cookie確認のテンプレート 'wait' => 'wait.tmpl', # 書き込み完了時のテンプレート 'notice_make_dat' => 'notice_make_dat.tmpl', # スレ立て最終確認画面のテンプレート 'notice_write_dat' => 'notice_write_dat.tmpl', # レス書き最終確認画面のテンプレート 'rss' => 'rss.tmpl', # rssテンプレート }; $s->{'conf'} = { 'line_break' => '
', # \nを置換する文字列 'date_time_format' => '%Y/%m/%d (%v) %H:%M', 'delimiter' => '<>', # 全ログ共通デリミタ 'notice_line_length' => 230, # 警告を出す一行の長さ 'notice_line_break' => 25, # 警告を出す改行数 'limit_line_length' => 256, # 一行の長さ制限 'limit_line_break' => 32, # 改行数制限 'limit_fromtime' => 1080, # フォームのtimeの制限時間(秒) 'limit_dat_file_size' => 512000, # datの最大ファイルサイズ(byte) 'limit_dat_line' => 1000, # スレッドストッパーをかける行数 'limit_line_number' => 16, # レス省略までの行数 index.tmplで使用 'limit_res_anchor' => 16, # レスアンカー数制限 'cookie_expire' => 86400, # クッキー有効期限(秒) 'cookie_jcode_encode' => undef, # Jcode.pmを使用して作った、URLエンコードのクッキーを食べさせるかどうか 使用しない場合はそのまま何もせず食べさせる。本当はちゃんとやらないといけないんだけど・・・ 'limit_thread_name' => undef, # スレッド行数リミットオーバースレスト名前 空白かundefだと行数が入る 'limit_thread_datetime' => 'limit over', 'limit_thread_message' => 'スレッドが保持できる最大レス数に到達しました。
もうこのスレッドに書き込む事は出来ません。新しいスレッドを立ててね。', 'stopper_thread_name' => 'スレッドストッパー(´・ω・`)', # スレスト名前 'stopper_thread_datetime' => '書き込めません', # スレスト投稿日時 'stopper_thread_message' => 'もうこのスレッドに書き込む事は出来ません。新しいスレッドを立ててね。', # スレスト本文 # コメントアウトしてあるやつは無駄なifが多くなって嫌なので今のところ使ってません # 'check_from' => 'checked', # 送られてきた情報をチェック これを無効にすると後の処理はほぼノーチェックなので非常に危険 # 'check_log_thread' => 'checked', # スレ立てすぎチェック # 'check_log_response' => 'checked', # 2重カキコチェック # 'check_log_ban' => 'checked', # 規制ファイルチェック # 'check_line_length' => 'checked', # 長すぎる行がありますチェック # 'check_port' => undef, # ポートチェックするかどうか 'check_port_list' => '80,8080,3128,1080,81,8081', # チェックするポート 'check_port_timeout' => 1, # ポートチェックのタイムアウト(秒) # 'write_log_thread' => 'checked', # 一時的にIPを記録するかどうか checkedにしないと2重カキコとか連投とか検出できません 多分 # 'write_log_response' => 'checked', # 'write_log_caution' => 'checked', # 'write_log_ban' => 'checked', # 'remake_index' => 'checked', # indexを作るかどうか # 'remake_subback' => 'checked', # subbackを作るかどうか # 'replace_cap' => 'checked', # capを使う # 'replace_trip' => 'checked', # トリップを使う # 'replace_fusianasan' => 'checked', # fusianasanを使う # 'replace_resanchor' => 'checked', # resanchorを使う # 'replace_urianchor' => 'checked', # urianchorを使う # 'replace_tag' => 'checked', # \nを
に置換 # 'replace_unicode' => 'checked', # unicodeは?に置換 # 'replace_char_entity_set' => 'checked', # & < > " などを文字参照に置換 # 'replace_msg_char_entity_set' => 'checked', # 本文の & < > " などを文字参照に置換 # 'replace_ng_word' => 'checked', # NGワードは適当に置換 }; $s->{'setting'} = { # SETTING.TXTデフォルト設定 'BBS_TITLE' => '掲示板', #掲示板名称 'BBS_SUBTITLE' => '掲示板です', #掲示板副題 'BBS_FIGUREHEAD' => '../images/2ch.gif', #看板画像 'BBS_HEADLINK' => 'http://www.2ch.net/guide/', #看板リンク 'BBS_BACKGROUND' => '../images/ba.gif', #背景画像 'BG_COLOR_INFO' => '#CCFFCC', # 色関係はあんまり使いません テンプレートでHTMLをガリガリ直接書けば済むし・・・ 'BG_COLOR_THREAD' => '#EEEEEE', 'TEXT_COLOR_BASE' => '#000000', 'TEXT_COLOR_SUBJECT' => '#FF0000', 'TEXT_COLOR_NAME' => '#228822', 'LINK_COLOR' => '#0000CC', 'ALINK_COLOR' => '#FF0000', 'VLINK_COLOR' => '#AA0088', 'THREAD_MENU' => 50, #スレッド一覧の表示数 'THREAD_NUMBER' => 20, #index.htmlで表示するスレッド数 'CONTENTS_NUMBER' => 10, #スレッドでの最新レス数 'LIMIT_SUBJECT' => 48, #スレッドタイトル文字数制限 'LIMIT_NAME' => 48, #名前文字数制限 'LIMIT_MAIL' => 48, #メール欄文字数制限 'LIMIT_MESSAGE' => 2048, #本文文字数制限 'LIMIT_LINE' => 16, #改行制限&「省略されました全てを・・」の条件 'NANASHI_NAME' => '名無しさん',#名無しさんの名前 'CAP_CHECK' => undef, #キャップもログ取る? 'NAME_CHECK' => undef, #名前強制入力 'PROXY_CHECK' => undef, #串禁止 'RES_CHECK' => undef, #書きこみ確認画面を出す 'HOST_CHECK' => undef, #ホスト全部記録(BBS_SLIP相当) 'UNICODE_CHANGE' => 'checked', #ユニコード置換 checked:置換 pass || undef:やらない 'THREAD_TATESUGI' => 25, #スレ立てチェック数 'THREAD_JUNBAN' => undef, #スペシャルなスレ立て規制 用途不明 'RES_RENZOKU' => 12, #12回分のログを記録して、 'RES_KAKISUGI' => 5, #そのうち5回同じ人が投稿したら確認画面に飛ばす 'PING_ITAZURA' => 12, #確認画面に飛ばされた奴を12回分記録して 'PING_IYADURA' => 5, #そのうち5回同じ人が引っかかったらアク禁に飛ばす 'ASETTYA_DAME' => 3, #強制レス間隔 'ID_DISP' => 'show', #ID表示 [show:任意] [snow:任意逝印] [force:強制] [none || non || undef:表示しない] }; $s->{'permission'} = { # パーミッション設定は必要かなぁ・・・ 'index' => 0666, 'subject' => 0666, 'dat' => 0666, 'response' => 0600, # レスのホスト一時格納(仮名) 'thread' => 0600, # スレッドのホスト一時格納(仮名) 'caution' => 0600, # 注意ホスト一時格納(仮名) 'ban' => 0600, # アク禁ホスト永久格納(仮名) 'stopper' => 0444, # スレスト発動時 }; $s->{'flag'} = { 'print_headerfields' => 0, # content-type: text/htmlとか出力したかどうか 'limit_dat_line' => 0, 'error' => 0, # 0:エラーなし 1:注意 2:致命的なエラー 3:書き込み確認 'make_dat' => 0, # スレ立てかどうか 'write_dat' => 0, # レスかどうか 'caution' => 0, # 注意出すかどうか 'ban' => 0, # アク禁にするかどうか 'gonta' => 0, # 'ua_imode' => 0, # UAがimodeであるかどうか 'cap' => 0, # キャップ持ちかどうか 'trip' => 0, # トリップ使ってるかどうか 'fusianasan' => 0, # fusianasanでリモホ晒してるかどうか 'tag' => 0, # tag置換されたか 'unicode' => 0, # unicode置換されたか 'char_entity_set' => 0, # char_entity_set置換されたか 'resanchor' => 0, # resanchor置換されたか 'urianchor' => 0, # urianchor置換されたか 'ng_word' => 0, # ng_word置換されたか 'replace_tag' => 0, # 関数が実行されたかどうか 'replace_char_entity_set' => 0, 'replace_unicode' => 0, 'replace_cap' => 0, 'replace_trip' => 0, 'replace_fusianasan' => 0, 'replace_resanchor' => 0, 'replace_urianchor' => 0, 'replace_ng_word' => 0, }; $s->{'counter'} = { 'dat_line' => 0, # スレッドのレス数(改行の数) 'replace_tag' => 0, # 関数が置換した回数 'replace_char_entity_set' => 0, 'replace_unicode' => 0, 'replace_cap' => 0, 'replace_trip' => 0, 'replace_fusianasan' => 0, 'replace_resanchor' => 0, 'replace_urianchor' => 0, 'replace_ng_word' => 0, }; $s->{'headerfields'} = { 'Content-Type: ' => 'text/html; charset=Shift_JIS', }; $s->{'cookie'} = { 'NAME'=>undef, 'MAIL'=>undef, 'SPID'=>undef, }; my ($n,$v); my @c = split '; ', $ENV{'HTTP_COOKIE'}; ($n,$v) = split('=', $_, 2), $s->{'cookie'}->{$n} = $v foreach @c; $s->{'error_reason'} = { 'title' => undef, 'head' => undef, 'body' => undef, }; my ($k1,$k2); while ( $k1 = each %a ) { $s->{$k1} = $a{$k1}, next unless ref $a{$k1} eq 'HASH'; $s->{$k1}->{$k2} = $a{$k1}->{$k2} while $k2 = each %{$a{$k1}}; } $s; } sub path { my $bbs=$_[0]->from('bbs'); return if $bbs =~ /\W/g; # 変な文字の場合何もしないで終了 $_[0]->path( 'script' => '../test/' ) unless $_[0]->path('script'); $_[0]->path( 'bbs' => "../$bbs/" ) unless $_[0]->path('bbs'); $_[0]->path( 'dat' => "../$bbs/dat/" ) unless $_[0]->path('dat'); $_[0]->path( 'html' => "../$bbs/html/" ) unless $_[0]->path('html'); $_[0]->path( 'imode' => "../$bbs/i/" ) unless $_[0]->path('imode'); $_[0]->path( 'subject' => "../$bbs/" ) unless $_[0]->path('subject'); $_[0]->path( 'subback' => "../$bbs/" ) unless $_[0]->path('subback'); $_[0]->path( 'rss' => "../$bbs/" ) unless $_[0]->path('rss'); $_[0]->path( 'caps' => '../' ) unless $_[0]->path('caps'); $_[0]->path( 'proxy' => './' ) unless $_[0]->path('proxy'); $_[0]->path( 'kisei' => "../$bbs/" ) unless $_[0]->path('kisei'); $_[0]->path( 'template' => '../template/default/' ) unless $_[0]->path('template'); $_[0]->path( 'gonta' => ($_[0]->path('script')||'../test/').'aho/' ) unless $_[0]->path('gonta'); $_[0]; } 1; __END__