[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:00903] embedded-wayf.jsのバグ修正



豊橋技術科学大学 中村純哉と申します。
お世話になっております。

Embedded DS - GakuNinShibInstall - meatwiki:
https://meatwiki.nii.ac.jp/confluence/display/GakuNinShibInstall/Embedded+DS

こちらの記述を参考に Embedded DS を設定していたところ、
https://ds.gakunin.nii.ac.jp/WAYF2/embedded-wayf.js
のバグに遭遇しましたので、相談させていただきたく、投稿させて頂きました。

バグは、特定のIdPをリストの先頭に表示するためのパラメータ
wayf_most_used_idps を設定すると、TypeErrorによってJavaScriptの実
行が失敗する、というものです。そのため、IdPを選択するためのプルダウンメ
ニューが表示されず、認証を行うことができません。
このとき、FireFox 31.3のコンソールには、

 TypeError: json_idp_favoritelist[(json_idp_favoritelist.length - 1)]
is undefined

というエラーが出力されます。

embedded-wayf.jsのコードを見たところ wayf_most_used_idps に設定された値
を処理している箇所(3724行〜3737行)に問題があることわかりました。具体的
には、

 問題1: json_idp_listに要素が挿入される前にjson_idp_listを参照している
 問題2: json_idp_listの要素を参照するのに整数でなく文字列を使っている

という2つが原因で、TypeErrorが発生していました。

このバグを修正するパッチを作成しましたので、
https://ds.gakunin.nii.ac.jp/WAYF2/embedded-wayf.js
で配布しているコードを修正していただけないでしょうか。
(パッチは本メール末尾に載せております)

特に複雑な修正は行なっておらず、
・問題1の解決のためにコードの位置を移動
・問題2の解決のためにjson_idp_listの参照方法を変更
しただけのものです。

不躾なお願いで申し訳ありませんが、ご検討よろしくお願いいたします。

----
中村 純哉 xxxxx@xxxxxxxxxxxxx
豊橋技術科学大学 情報メディア基盤センター 特任助教

--- embedded-wayf.js.orig       2015-02-19 20:22:18.575681660 +0900
+++ embedded-wayf.js    2015-02-19 20:23:18.976223437 +0900
@@ -3721,20 +3721,6 @@
                writeHTML('<input name="request_type" type="hidden"
value="embedded">');
                writeHTML('<input id="user_idp" name="user_idp"
type="hidden" value="">');

-               // Favourites
-               if (wayf_most_used_idps.length > 0){
-                       if(typeof(wayf_overwrite_most_used_idps_text) !=
"undefined"){
-                               favorite_idp_group =
wayf_overwrite_most_used_idps_text;
-                       }
-
-                       // Show additional IdPs in the order they are
defined
-                       for ( var i=0; i < wayf_most_used_idps.length; i++){
-                               if (wayf_idps[wayf_most_used_idps[i]]){
-
json_idp_favoritelist.push(json_idp_list[wayf_most_used_idps[i]]);
-
json_idp_favoritelist[json_idp_favoritelist.length - 1].categoryName =
favorite_idp_group;
-                               }
-                       }
-               }
                if (last_idp ==
'https://shib-idp01.iic.hokudai.ac.jp/idp/shibboleth'){
                        dispDefault = '北海道大学';
                }               if
(isAllowedType('https://shib-idp01.iic.hokudai.ac.jp/idp/shibboleth','hokkaido')
&& isAllowedIdP('h
ttps://shib-idp01.iic.hokudai.ac.jp/idp/shibboleth')){
@@ -5539,6 +5525,28 @@
                        }

                }
+
+               // Favourites
+               if (wayf_most_used_idps.length > 0){
+                       if(typeof(wayf_overwrite_most_used_idps_text) !=
"undefined"){
+                               favorite_idp_group =
wayf_overwrite_most_used_idps_text;
+                       }
+
+                       // Show additional IdPs in the order they are
defined
+                       for ( var i=0; i < wayf_most_used_idps.length; i++){
+                               if (wayf_idps[wayf_most_used_idps[i]]){
+
+                                       for (var j=0;
j<json_idp_list.length; j++) {
+                                               if
(json_idp_list[j].entityid == wayf_most_used_idps[i]) {
+
json_idp_favoritelist.push(json_idp_list[j]);
+                                                       break;
+                                               }
+                                       }
+
json_idp_favoritelist[json_idp_favoritelist.length - 1].categoryName =
favorite_idp_group;
+                               }
+                       }
+               }
+
                writeHTML('<div style="clear:both;"></div>');
                writeHTML('<table border="0" cellpadding="0"
cellspacing="0" style="width: 100%;">');
                writeHTML('<tr>');