バグ #459
完了request_oauth_tokenに失敗するとmikutterがエラー終了する
説明
addon/change_account.rb の main での request_oauth_token の処理request_token = watch.request_oauth_token
でTwitter APIが401を返してくることがあり、その場合 mikutter がエラー終了します。
環境の問題で、ホストの時計が15分程度遅れていると
query_with_oauth で Timestamp out of bounds になり、
再認証でも request_oauth_token で 401 が返ってくるようです。
アクションとしてはリトライするか終了するくらいしかやりようは無い気がしますが、
mikutterのウインドウが開いてすぐ落ちるように見えるので、なにかしら
メッセージウインドウを出して表示したほうがいいような気がします。
時計を20分ずらして起動したときの --debug ログ
notice: {MIKUTTER_DIR}/core/lib/mikutwitter/connect.rb:61:in `query_with_oauth!': Timestamp out of bounds notice: {MIKUTTER_DIR}/core/addon/list/liststream.rb:40:in `block (2 levels) in start': list stream: connect notice: {MIKUTTER_DIR}/core/configloader.rb:38:in `block in <module:ConfigLoader>': configloader: wrote 5 keys (UserConfig::tab_position, UserConfig::url_open_specified_command, UserConfig::verify_credentials, UserConfig::extract_tabs, UserConfig::tab_order) notice: {MIKUTTER_DIR}/core/lib/mikutwitter/query.rb:104:in `ensure in fire_request_event': quit(3): http://api.twitter.com/1/saved_searches.json (16.883333s) notice: {MIKUTTER_DIR}/core/lib/mikutwitter/query.rb:104:in `ensure in fire_request_event': quit(4): http://api.twitter.com/1/statuses/home_timeline.json (16.874275s) notice: {MIKUTTER_DIR}/core/lib/mikutwitter/query.rb:104:in `ensure in fire_request_event': quit(1): http://api.twitter.com/1/lists/all.json (17.011919s) /usr/pkg/share/mikutter/core/lib/oauth/consumer.rb:204:in `token_request': 401 Unauthorized (OAuth::Unauthorized) from /usr/pkg/share/mikutter/core/lib/oauth/consumer.rb:128:in `get_request_token' from /usr/pkg/share/mikutter/core/lib/mikutwitter/connect.rb:27:in `request_oauth_token' from /usr/pkg/share/mikutter/core/addon/change_account.rb:95:in `main' from /usr/pkg/share/mikutter/core/addon/change_account.rb:37:in `_popup' from /usr/pkg/share/mikutter/core/addon/change_account.rb:19:in `block in popup' from /usr/pkg/share/mikutter/core/addon/change_account.rb:18:in `new' from /usr/pkg/share/mikutter/core/addon/change_account.rb:18:in `popup' from /usr/pkg/share/mikutter/core/lib/mikutwitter/authentication_failed_action.rb:42:in `call' from /usr/pkg/share/mikutter/core/lib/mikutwitter/authentication_failed_action.rb:42:in `block in authentication_failed_action' from <internal:prelude>:10:in `synchronize' from /usr/pkg/share/mikutter/core/lib/mikutwitter/authentication_failed_action.rb:41:in `authentication_failed_action' from /usr/pkg/share/mikutter/core/lib/mikutwitter/connect.rb:64:in `query_with_oauth!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:81:in `block (4 levels) in _query!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:102:in `fire_request_event' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:79:in `block (3 levels) in _query!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:119:in `block in retry_if_fail' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:117:in `times' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:117:in `retry_if_fail' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:78:in `block (2 levels) in _query!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/cache.rb:17:in `cache' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:77:in `block in _query!' from /usr/pkg/lib/ruby/1.9/monitor.rb:201:in `mon_synchronize' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:28:in `api_lock' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:76:in `_query!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:65:in `query!' from /usr/pkg/share/mikutter/core/lib/mikutwitter/query.rb:42:in `block in api' from /usr/pkg/share/mikutter/core/lib/deferred/deferred.rb:52:in `call' from /usr/pkg/share/mikutter/core/lib/deferred/deferred.rb:52:in `block in initialize'
ファイル
toshi_a 初音 さんが12年以上前に更新
そうですね。その条件下でクラッシュするのは仕様です。時計のズレの確認をお願いするようなアラートを表示してから正常終了するのが良いでしょう。
Izumi Tsutsui さんが12年以上前に更新
- ファイル oauth-error-exit.diff oauth-error-exit.diff を追加
- ファイル mikutter-oauth-401.png mikutter-oauth-401.png を追加
テキトーに引っ掛けてウインドウ出すだけのやっつけ修正作ってみましたが
chi_fatal_alert みたいなのを mui/gtk_mtk.rb に用意すべきという感じも……
Izumi Tsutsui さんが11年以上前に更新
今のTwitterはホストの時計が9時間遅れていても認証可能みたいです。
どれだけのズレまで許容されるのかは調べていませんが、
UTC/JSTの設定要因以外でそれ以上ズレるような人はいないでしょうから
このチケットもクローズしてしまってよいと思います。
toshi_a 初音 さんが11年以上前に更新
- ステータス を 新規 から 実装待ち に変更
パッチ見落としててすみませんてした。時間が15分以上ずれていても認証できるようになった旨のアナウンスが見つけられなかったのですが、こちらでも軽く検証してみます。なお、chi_fatal_alertはコア機能で、gtkがない場合は標準エラー出力にエラーを出力して終了するので、デーモンモードでも使用できます。もし対応するとしてもこちらを使うと思います