トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/69

ページの作成や編集にはユーザ登録が必要です。

権限がなく参照/編集できなかったページにログイン後移動するパッチ

  • 投稿者: あがた
  • カテゴリ: 新規
  • 優先度: 普通
  • 状態: 提案
  • 日時: 2003年10月29日 08時18分41秒

 内容

権限がないため参照/編集できなかったページの名前をログイン画面に埋め込んでおき、ログイン後、そこにリダイレクトするためのパッチです(plugin/admin/Login.pm, plugin/core/EditPage.pm, plugin/core/ShowPage.pmの三つのファイルに対してです)。編集についてはEDIT画面にリダイレクトの方法がよくわかりませんでしたので、元ページに戻るという形にしています。直接、編集に飛びます。

patch3_5_2dev2.txt(698)は編集中にタイムアウト等でログアウトしてしまったときにも編集テキストをログイン後参照できるように修正しました。これで不意のログアウトでロストしてしまっていた編集テキストを失う可能性を少しは減らせるのではと思います。

--- admin/Login.pm.orig	2003-10-13 12:54:50.000000000 -0400
+++ admin/Login.pm	2003-10-31 11:15:09.093750000 -0500
@@ -42,13 +42,23 @@
 				$session->param("wiki_type",$login->{type});
 				$session->param("wiki_path",$login->{path});
 				$session->flush();
+				my $pagename = $cgi->param("page");
+				my $isEdit = $cgi->param("isEdit");
+				if($pagename ne "") {
+					$cgi->param("page",&Util::url_decode($pagename));
+					if($isEdit ne "") {
+						return $wiki->call_handler('EDIT');
+					} else {
+						return $wiki->call_handler('');
+					}
+				}
 				return $self->admin_form($wiki,$login);
 			} else {
 				return $wiki->error("IDもしくはパスワードが違います。");
 			}
 		}
 	}
-	return $self->default($wiki);
+	return $self->default($wiki, $cgi);
 }
 
 #==============================================================================
@@ -95,6 +105,10 @@
 sub default {
 	my $self = shift;
 	my $wiki = shift;
+	my $cgi = shift;
+	my $pagename = $cgi->param("page");
+	my $isEdit = $cgi->param("isEdit");
+
 	return "<h2>IDとパスワードを入力してください</h2>\n".
 	       "<form action=\"".$wiki->config('script_name')."\" method=\"POST\">".
 	       "  <table>\n".
@@ -103,6 +117,8 @@
 	       "  </table><br>\n".
 	       "  <input type=\"submit\" name=\"login\" value=\"ログイン\">\n".
 	       "  <input type=\"hidden\" name=\"action\" value=\"LOGIN\">\n".
+	       "  <input type=\"hidden\" name=\"page\" value=\"".&Util::url_encode($pagename)."\">\n".
+	       "  <input type=\"hidden\" name=\"isEdit\" value=\"".$isEdit."\">\n".
 	       "</form>\n";
 }
 
 
--- core/ShowPage.pm.orig	2003-10-13 12:54:50.000000000 -0400
+++ core/ShowPage.pm	2003-10-29 10:52:06.296875000 -0500
@@ -37,7 +37,8 @@
 		# 参照権限のチェック
 		if(!$wiki->can_show($pagename)){
 			$wiki->set_title("参照権限がありません");
-			return $wiki->error("参照権限がありません。");
+			return $wiki->error("参照権限がありません。")."\n".
+				$wiki->call_handler('LOGIN');
 		}
 		
 		$wiki->set_title($pagename);
--- core/EditPage.pm.orig	2003-10-13 12:54:50.000000000 -0400
+++ core/EditPage.pm	2003-10-29 11:03:31.921875000 -0500
@@ -37,7 +37,9 @@
 		return $wiki->error("ページ名にブラケットを含めることはできません。");
 	}
 	if(!$wiki->can_modify_page($pagename)){
-		return $wiki->error("ページの編集は許可されていません。");
+		$cgi->param("isEdit", "true");
+		return $wiki->error("ページの編集は許可されていません。")."\n".
+				$wiki->call_handler('LOGIN');
 	}
 	
 	#---------------------------------------------------------------
  • また、後学のために、こういう場合の標準的な差分の作り方について、紹介ページ等をご存知の方がいらっしゃいましたら、教えていただけるとたすかります。typerさま、ありがとうございました。

 コメント

  • diffの基本は以下のとおりです。また複数のファイルの場合はつなげて1つのファイルにしてしまってかまいません。ただし、この場合は特にカレントディレクトリを合わせるようにしてください。 - typer (2003年10月29日 13時04分54秒)
    • context形式
      • diff -c 変更前のファイル 変更後のファイル
    • unified形式
      • diff -u 変更前のファイル 変更後のファイル
    • 複数の場合
      • diff -u 変更前のファイル1 変更後のファイル1 > patch.txt
      • diff -u 変更前のファイル2 変更後のファイル2 >> patch.txt
      • diff -u 変更前のファイル3 変更後のファイル3 >> patch.txt
  • typerさま、丁寧なご説明をありがとうございます。さっそくメモメモφ(..)させていただきました。Googleで調べたところいろいろなやり方があって混乱していたものですからありがたいかぎりです(^^)ゞ - あがた (2003年10月29日 13時41分20秒)
  • 以下のような変更を行いました - あがた (2003年10月30日 01時43分04秒)
    • 権限がない場合、エラー画面にエラーメッセージとともにID&パスワードの入力を求めるボックスを表示する
    • ログイン後、参照/編集画面に直接飛ぶ
  • 複数のファイルの場合、別ディレクトリに変更前のものを用意して、
diff -ur 変更前のディレクトリ 変更後のディレクトリ

とやると一気にできますし、チェック漏れも防げます - にらたま (2003年10月30日 10時50分15秒)

  • にらたまさま、再帰的な方法のご紹介、ありがとうございます。次回以降、パッチを作成するときには参考にさせていただきます<(__)>。あまり関係ないのですが、素人考えに複数の差分履歴をdiffでとっておけば、何版か前にロールバックみたいなこともできると思うのですが、Storageなどの話(あまりわかっていませんが)で開発されているようなことがらなのでしょうか? - あがた (2003年10月30日 14時21分28秒)
  • ページ名に / や - が入るようなページからログインするとエスケープされた名前のページを編集しちゃいますね・・・ - 紅猫 (2003年10月31日 23時05分52秒)
  • Diary/2003-10-17のつもりがDiary%2F2003%2D10%2D17になっちゃいます。 - 紅猫 (2003年10月31日 23時07分04秒)
  • 紅猫さん、ご指摘をありがとうございます。たしかにそのとおりで、decodeするのを失念していました。 - あがた (2003年11月01日 01時44分35秒)
    • とりあえず、plugin/admin/Login.pmの以下の部分に一文を追加すればいいようです。patchも修正しておきます。
if($pagename ne "") {
if($isEdit ne "") {
↓
if($pagename ne "") {
	$cgi->param("page",&Util::url_decode($pagename));
if($isEdit ne "") {
  • ところで、添付ファイルを削除したいのですが、このサイトにguestログインする方法がわかりません。どなたかご存知の方がいらっしゃいましたら教えていただけないでしょうか? - あがた (2003年11月01日 01時55分46秒)
  • 添付ファイルは削除されてしまうと復旧できないので管理者以外ログイン不可としました。上書きアップロードは可能です。削除が必要な場合、ページ名とファイル名を書いていただければ私のほうで削除しておきます。 - たけぞう (2003年11月01日 09時39分23秒)
  • お忙しいところ、コメントをありがとうございます。このページに添付したzipファイルは両方とも不要ですので、ご都合がよろしいときに削除していただけると助かります。 - あがた (2003年11月01日 15時48分03秒)
  • zipファイルを削除しておきました。 - たけぞう (2003年11月02日 02時34分18秒)
  • おいそがしいところ、ありがとうございました。 - あがた (2003年11月02日 11時29分15秒)
  • 3.5.2dev1用のパッチをアップしました。 - あがた (2003年11月04日 13時33分04秒)

patch3.5.2dev1.txt(762)

  • 3.5.2dev2用のパッチをアップしました。編集状態にあったときに、タイムアウトや他のウィンドウでログアウトしたときに、ログイン後その内容を継続して編集できるように変更しました。残念ながら部分編集には対応していません。以下の形式で作成したファイルです。 - あがた (2003年11月11日 11時48分32秒)
diff -u plugin/admin/Login.pm.orig plugin/admin/Login.pm > patch3_5_2dev2.txt
diff -u plugin/core/ShowPage.pm.orig plugin/core/ShowPage.pm >> patch3_5_2dev2.txt
diff -u plugin/core/EditPage.pm.orig plugin/core/EditPage.pm >> patch3_5_2dev2.txt
  • patch3_5_2dev2.txt ですが、ShowPageへのパッチが含まれていないようです。 dev1を先に当てるんでしょうか。 - Kuboon (2004年07月08日 15時57分47秒)
  • 3_5_5用を作ってみました。 diff -ur . orig > patch3_5_5.txt - Kuboon (2004年07月08日 16時31分09秒)
  • すいません、3_5_9でも利用可能でしょうか? - とび (2005年11月08日 09時11分15秒)
  • この機能ぜひ、どなたか、FreeStyleWiki3.5.10での対応方法をご教授願えませんでしょうか? - やま (2006年05月11日 09時28分04秒)
  • 3.5.11とWiki書式挿入編集ボタンのedit_button_rev05.zip用のパッチをまとめたものpatch3_5_11.txt(782)を作ってみました.中身はほぼpatch3_5_5.txtと変わりません - くらっつ (2006年05月20日 03時22分34秒)
    • 適用対象ファイルが3.5.11と変更点がない3.5.9と3.5.10にも適用できると思います - 名無しさん (2006年05月20日 03時23分04秒)
    • 3.6.0はplugin/core/EditPage.pmに若干の変更があるので手動適用が必要かもしれません - 名無しさん (2006年05月20日 03時23分25秒)
  • 無事patchあて完了しました。ありがとうございます。>くらっつさん - やま (2006年06月20日 21時17分59秒)
  • 使わせてもらってます。patch3_5_11.txt Ver.3.62で問題なく動いてます。便利です。 - すなぷ (2006年07月19日 08時19分35秒)
  • 便利に使わせてもらっています。WIKI本体をVer3.6.2から3.6.3に変えたら自環境ではうまく動かないので、3.6.3用を作ってみました。patch3_6_3.alpha.diff(460) /plugin/admin/Login.pm の53行目あたりで return $wiki->call_handler(''); をコメントアウトしてるんですが、問題ないですよね?? - KKA (2008年12月28日 22時10分01秒)
  • 主な変更点は2点で、ログインフォームがテンプレートになったための変更と、/plugin/admin/Login.pm の編集画面を呼び出す部分 return $wiki->call_handler('EDIT'); が暴走するようだったので、redirectURL に変更した点です。diffは標準の3.6.3からの差分を trac lightning に作らせたものです。あまり自信ないのでalpha版ということでご容赦ください。 - KKA (2008年12月28日 22時21分15秒)
  • 申し訳ありません。完全に漏れがあるので、patch3_6_3.alpha.diff はアップしたばかりですが取り下げますm(_ _ )m - KKA (2008年12月28日 22時32分22秒)
  • patch3_6_3.alpha2.diff(615) をアップしました。先述したcall_handler の暴走は BugTrack-wiki/317 との干渉のようでしたので、defined に戻してしまいました。いい方法をご存知の方はご教示いただけると幸いです。 - KKA (2008年12月29日 01時14分00秒)
  • 宛 KKA さん:plugin/admin/Login.pm に下記のように delete $wiki->{'login_info'}; を追加すれば、BugTrack-wiki/317 の exists 使用のままでも OK になるかと思うのですが試してみていただけますか? - ぐうます (2008年12月29日 08時34分51秒)
	$session->param("wiki_path",$login->{path});
	$session->flush();
	delete $wiki->{'login_info'}; # ログイン情報キャッシュをクリアします。

	my $pagename = $cgi->param("page");
	my $isEdit = $cgi->param("isEdit");
	if($pagename ne "") {
	if($isEdit ne "") {
		return $wiki->call_handler('EDIT');
	} else {
		return $wiki->call_handler('');
	}
}
  • ぐうますさん、ありがとうございます。試してみましたところ、期待通りの動きをしているようです。理解するのには時間がかかりそうです(^^; - KKA (2008年12月30日 00時33分37秒)
  • patch3_6_3.alpha2.diff を適用後、メニューなどにログインフォームを表示させている場合に、ログインしようとしてIDかパスワードを間違えてエラーになった後、ログインすると、リダイレクト先のページ名が文字化けしてしまいます。plugin/admin/Login.pm の sub default を下記のように修正して対応してください。 - KKA (2009年05月23日 12時46分58秒)
	$tmpl->param(
		ACCEPT_USER_REGISTER => $wiki->config("accept_user_register"),
		URL => $wiki->create_url(),
		PAGE => $pagename,			#正
#		PAGE => &Util::url_encode($pagename),	#誤
		ISEDIT => $isEdit,
		CONTENT => $content

		);
  • あるページを開こうとして、参照権限がない場合、ログイン画面が出て、正しいIDとパスを入れるとそのページが開くということにしたく、このプラグインを使いたいのですが、何度かページの説明を読んでてみてもさっぱりわかりません。一番下に添付されているファイルのうちのどのファイルを、どのようにすればいいのでしょうか? よろしくお願いいたします。 - わたる (2009年05月24日 01時11分13秒)
  • 本パッチ適用済みの FSWiki で BugTrack-plugin/400 を使用する場合には、上記ぐうますのコメント(2008年12月29日 08時34分51秒)に書いた delete $wiki->{'login_info'}; の次の行に、delete $wiki->{'can_show_max'}; の追記をお願い致します。そうしないと、BugTrack-plugin/400 で追加したキャッシュがクリアされないので、誤動作が起きると思います。 - ぐうます (2009年06月24日 23時46分25秒)
  • パッチpatch3_6_3.alpha.diffを当ててみましたが、Can't call method "hook" on an undefined value at lib/Wiki.pm line 377.というエラーメッセージが出てしまいます。 - タマ (2009年08月16日 11時40分06秒)
  • 本パッチの機能を包含するプラグインを BugTrack-plugin/407:FSWiki の操作性をちょっとだけ向上するプラグイン に投稿致しました。本パッチの適用を新規にお考えの場合は、まず BugTrack-plugin/407 を試されることをお勧め致します。 - ぐうます (2009年08月18日 21時19分04秒)
お名前: コメント: