無趣味の戯言

🔍️

kintoneからメールワイズの検索画面を開く

こんにちは、だいちゃんです。

日頃からメールワイズとkintoneを行ったり来たりするので、kintoneの画面上からメールワイズの検索結果画面を立ち上げられないかなーと思って調査してみました。

結論

mw.cgi? に対して、CSRFTicketPageWIDBSVIDKeyword を持った状態でPOSTすることで、検索結果画面を表示できそうです。

なので、kintoneの画面上にformを作って、6つの値を https://(subdomain).cybozu.com/m/mw.cgi? にPOSTすることで、検索窓を作ることはできました。

ただ、CSRFTicket が定期的に変動するランダムな文字列になっているため、次のような動きをするChrome拡張機能の作って、チケットをkintoneのアプリに保存し、POSTするタイミングでレコードとして存在する最新のチケットを使うことで回避可能でした。

  1. URLが https://(subdomain).cybozu.com/m/mw.cgi?formkeyupdate=true だったら 2. 以降の処理を実行する
  2. document.getElementsByName('CSRFTicket')[0].valueCSRFTicket を取得する
  3. kintone上に用意したアプリにレコードを追加する

★ ブックマークに保存してるメールワイズのURLを 1. のものに変えておくことで、手間なく裏で勝手に新しいチケットを取得しててくれます。

メールワイズの検索仕様

URL

Google検索みたいに、URLに検索クエリも持つタイプの検索仕様であれば簡単に実装できたのですが、メールワイズは一筋縄ではいかなさそうです。

調べた感じ、検索のたびに st の値が変動することから、検索キーワードとか絞り込み条件をどこかに保持してて、その条件のIDのようなもので検索結果を表示しているような動きに見えました。(st = search ticket...?)

となると、検索条件を投げてIDを返してくれるAPIのようなものが用意されていない限り、外から新しい検索条件を指定するのは難しそうです。

画面上の検索ボックス

次に、画面上部にある検索窓のHTML要素を見てみました。

Form タグで作られていて、CSRFTicketPageWIDBSVIDKeywordmw.cgi? にPOSTして、新しい st が発行され、検索結果を表示することができるようになるようです。

WID はメールスペースのIDで、BS はアプリケーションのID、Keyword は読んで字の如く検索キーワードを与えてあげれば良さそうでした。

これは憶測ですが、CSRFTicket は定期的に更新されるランダムな文字列なので、認証用のチケットとして利用しているかも。

2023/10/20 追記:
クロスサイト・リクエスト・フォージェリっていう脆弱性を対策するための認証トークン、らしい。と認識しました。

安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ) | IPA 独立行政法人 情報処理推進機構

その他はちょっと何やってるかわかりませんでした。ちなみに、僕の環境のメールワイズでは、Page には FtsMailSearch が、VID は空が指定されていました。

Chrome Extention

kintoneのカスタマイズだけで終わると思ってたのに、Chromeの拡張機能を作るハメになるとは...

しかも、一筋縄ではうまくいかず、content scriptsから普通にkintoneにレコードを追加しようとすると、クロスドメイン規制で怒られちゃいました。

最新のマニフェスト(v3)の日本語の情報が少なくて泣きそうでしたが、backgroundスクリプトのservice workerからfetch()を使うことでクロスドメインを回避してPOSTとかを実行することができました!

service workerからだとしても、XMLHttpRequestだとダメみたいです。


という感じで、kintoneのポータル画面に、メールワイズの検索ボックスがあったら便利かなーという思いつきから、メールワイズの検索仕様を調査したり、Chromeの拡張機能を作ったりすることになるとは想像もしていませんでしたw

ただ、初知りの情報は知的好奇心を満たしてくれるし、Chromeの拡張機能はずっと作ってみたかったけど重い腰が上がらずに触れていなかったので、結果いい機会になりました。

Buy Me A Coffee