[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[upki-fed:00903] embedded-wayf.jsのバグ修正
- Subject: [upki-fed:00903] embedded-wayf.jsのバグ修正
- Date: Fri, 20 Feb 2015 09:38:35 +0900
- From: Junya Nakamura <xxxxx@xxxxxxxxxxxxx>
豊橋技術科学大学 中村純哉と申します。
お世話になっております。
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>');