base_url の設定プラグイン (もどき)
tDiaryの脆弱性に関する報告(2007-07-23)を受けての今なら conf.base_url を設定画面から変更できるようにするパッチを書くと…という話。
とはいえ、 base_url をわざわざ設定するのは面倒。 問題は base_url 中の SERVER_NAME が書き換えられるということなので、以下のようにしてみた。
- 日記の設置者が設定画面を開く
- 設定画面の SERVER_NAME を選択し、内容を確認して OK ボタンをクリックする
- その時の SERVER_NAME が tdiary.conf に保存される
- 日記の閲覧時に、 SERVER_NAME を保存した値に書き換える
add_conf_proc('server_name', 'SERVER_NAME') do if @mode == 'saveconf' @conf['server_name'] = ENV['SERVER_NAME'] "Thank you." else "SERVER_NAME is #{ENV['SERVER_NAME']}. If correct, please press 'OK'" end end @conf.instance_eval { alias :base_url_org :base_url } def @conf.base_url base_url_org.gsub(%r|(https?://)([^:/]+)|, "\\1#{self['server_name']}") end
正規表現はちょっと自信ない。 本当は update.rb から index.rb の base_url が取得できるといいんだけど。 @index は相対パスっぽいからなぁ。