«前の日記(2007-07-26 (木)) 最新 次の日記(2007-07-28 (土))»  

まちゅダイアリー


2007-07-27 (金)

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 は相対パスっぽいからなぁ。

Tags: tDiary

base_url の設定プラグイン(まじめに)

base_url of tDiary

お昼の日記の続き。 よく考えたら index.rb も update.rb も base_url は同じだった。 だったら、小細工せずにストレートに設定できる。

チェックボックスにチェックを付けてOKを押すと、現在のbase_urlをtdiary.confに保存するようにしている。 こうやって別プラグインにせずに、defaultの「サイトの情報」に入れちゃったほうがいいかもしれない。

add_conf_proc('base_conf', '日記のURLの設定', 'basic') do
  if @mode == 'saveconf'
    if @cgi.params['base_url_update'][0] == 'true'
      @conf['base_url'] = @conf.base_url_org
    else
      @conf['base_url'] = @cgi.params['base_url'][0]
    end
  end
  <<-HTML
  <h3 class="subtitle">日記のURLの設定</h3>
  <p>
    あなたの日記のURL (base_url) を設定します。
    下のチェックボックスにチェックを入れてOKボタンを押すと、
    現在アクセスしているURLを設定します。
  </p>
  <p><input name="base_url" value="#{CGI::escapeHTML(@conf['base_url'] || '')}" size="70"></p>
  <p>
    <input name="base_url_update" type="checkbox" checked="checked" value="true">
    現在のURL ( #{@conf.base_url_org} ) を設定する
  </p>
  HTML
end

@conf.instance_eval { alias :base_url_org :base_url }
def @conf.base_url
  self['base_url'] || base_url_org
end

ところで、 @conf.base_url の特異メソッドとして定義して良かったんだろうか? 教えて、偉い人!

Tags: tDiary