コンテンツにスキップ

アーカイブを見る(picker)

pnpm run api で起動した API は、/ に画面を 1 枚出します。取り込んだページを一覧から選んで、 replay(アーカイブを再生するビューア)で開くための画面で、 この docs では picker と呼びます。できるのは「選んで開く」だけです。ページを撮る機能も、 クロールを始めるボタンもありません。

取り込んだページは、1 ページごとに、 WACZ(Web Archive Collection Zipped)という 1 つのファイルになって保管されています。 picker の 1 行が、そのファイル 1 つです。

http://127.0.0.1:7070/

API は起動したときに、呼び出し元がどう名乗るかを 1 つに決めます —— JWT(JSON Web Token —— 署名つきの身分証)か、開発用のヘッダか、どちらも受けないか。picker はそれに合わせて、 名乗りの欄を変えます。

API の .env 名乗り方 picker に出る欄
CAPTURE_LEDGER_OIDC_ISSUER が在る JWT トークン 1 つ
CAPTURE_LEDGER_DEV_IDENTITY=1 だけ 開発用ヘッダ subject と organizations の 2 つ
どちらも無い 名乗りの設定が無い 欄なし(注意だけ)

両方が在れば JWT です。2 つを同時には受けません —— 両方設定された環境で、弱いほうへ落ちないためです。 クイックスタートのとおりに進めているなら、§6 では開発用ヘッダ、 §7 で 4 行を貼った後は JWT です。どちらで起きているかは、API の起動ログの最後の行 (identity: …)にも出ます(起動ログで確かめる)。

3 手で使う(開発用ヘッダの設定)

Section titled “3 手で使う(開発用ヘッダの設定)”
  1. 2 つの欄に名乗りを入れます。 subject に自分の名前、organizations に自分の組織の名前です。 クイックスタートのとおりに進めているなら、whoami の出力と acme (§7 でクロールを始めるときに名乗る組織)を入れます。
  2. 「読み込む」を押します。 Enter キーでは読み込まれません。入力を変えたら、毎回押します。
  3. 見たい行をクリックします。 別のタブで replay が開きます(行をクリックした後)。
  1. トークンを取ります。 capture-ledger のディレクトリで次を打つと、開発用の issuer (pnpm run oidc:issuer)が 1 時間有効なトークンを刷り、クリップボードに入ります。 同じコマンドが、画面の枠の中にも出ています。

    ターミナルウィンドウ
    pnpm run --silent oidc:token --subject "$(whoami)" --org acme | pbcopy
  2. 「トークン」の欄に貼って、「読み込む」を押します。

  3. 見たい行をクリックします。

JWT の設定の picker。上の青い枠に「この API は JWT で名乗る設定(http://127.0.0.1:9099)。その issuer が刷ったトークンを貼る」、その下にトークンの欄と取り方のコマンド、「alice(acme)として見ている」の行と 3 行の一覧が出ている

読み込めると、一覧の上に「名前(組織)として見ている」と出ます。API がトークンを検めた結果 (GET /api/me)で、ブラウザはトークンの中身を読みません。トークンを刷るときの --subject と --org が、開発用ヘッダの設定の 2 つの欄と同じ役をします(名乗りで何が見えるか)。 本物の IdP(Identity Provider —— 身元を証明する外部のサービス)を使う配備なら、 その IdP が出したアクセストークンを貼ります。

picker の画面。subject に alice、organizations に acme を入れて読み込んだ後で、3 行の一覧が出ている。部品に 1 から 9 の番号が付いている

絵は開発用ヘッダの設定で、見本データを使って撮ったものです(subject に alice、 organizations に acme)。JWT の設定では、1 と 2 の代わりにトークンの欄が 1 つ出ます。 番号は、下の表の行に対応します。このページの絵はすべて pnpm run docs:shots の生成物で、 手で撮ったものはありません(画面の絵を撮り直す)。

緑のヘッダの「使い方」は、このページを開くリンクです。

番号 部品 何をするか
1 subject 誰として見るか。自分の名前を入れます。空のまま読み込むと 401 になります。薄い字の alice は入力例です
2 organizations 自分が属している組織の名前。複数ならカンマで区切ります(薄い字の acme,beta が入力例)。空でも読み込めますが、見えるのは自分が始めたクロールの成果物だけになります
3 読み込む いまの名乗りで一覧を取り直します
4 取り込んだ URL 取り込んだページの URL。1 行が 1 回の取り込みです。同じページを 3 回取り込めば 3 行になるので、「いつ」で見分けます
5 いつ 取り込んだ日時。ブラウザの時計(手元の時間帯)で表示されます。API や DB の値は UTC です
6 ラベル 取り込み対象(capture_targets)に付けておいた分類の札
7 欠けあり 4 列目に赤い字で出ます。本文を保存できなかった応答が 1 つ以上あるアーカイブです(wacz_complete が false になるとき)。開いてから気づかずに済むよう、開く前に出しています
8 さらに読む 次の 50 件を下に足します。続きが無くても 1 度は表示されます。押して何も増えなければ、そこで終わりです
9 下の注意書き 名乗りで絞っているのは「一覧に出すかどうか」だけ、という断り書きです(アーカイブ台帳)

並びは新しい順で、1 ページは 50 件です。検索や絞り込みの欄はありません。 探すときは、ブラウザのページ内検索が使えます。

名乗りは「誰として見るか」です。パスワードではなく、検索の条件でもありません。 開発用ヘッダの設定では、2 つの欄の値がそのままリクエストのヘッダになります (X-Capture-ledger-Subject と X-Capture-ledger-Organizations の 2 本)。 JWT の設定では、picker は貼られたトークンを Authorization: Bearer で送り、 トークンの中の名前と組織が名乗りになります。クロールを始めるときの curl と同じ形です。

名乗りによって、見える行が変わります。見えるのは、次のどちらかに当たるアーカイブです。

条件 中身
始めた本人 そのクロールを始めたときの subject と、いまの subject が同じ
同じ組織の一員 クロールは、始めた人が名乗った先頭の組織のものになります。見るときに同じ組織名を organizations に入れていれば見えます

たとえばクイックスタートの §7 は、whoami の出力と acme でクロールを始めます。その成果物は、 同じ名前で名乗るか、acme の一員として名乗れば見えます。 別の名前だけで名乗ると「見えるアーカイブが無い」になります。

判定しているのは OpenFGA の can_view です。モデルの全体は、 アーカイブ台帳の「認可モデル」にあります。

開いた直後は、まだ何も訊いていないので、こう見えます(開発用ヘッダの設定)。

開いた直後の picker。2 つの欄は空で、下に「subject を入れて『読み込む』」と出ている

見える行が無い名乗りで読み込んだとき(上)と、subject を空にして読み込んだとき(下)です。

subject に dave だけを入れて読み込んだ picker。「見えるアーカイブが無い」と出ている subject を空にして読み込んだ picker。赤い字で「401 — subject が空(この API は開発用ヘッダで名乗る設定)」と出ている

名乗りの設定が無い API では、注意だけが出ます。欄も「読み込む」もありません —— 押しても必ず 401 になるからです。

名乗りの設定が無い API の picker。赤い枠に「この API には名乗りの設定が無く、誰の一覧も出せない(全員 401)」と出ていて、入力欄は無い

開発用ヘッダの設定の API を 0.0.0.0 で待たせているときは、画面の上に赤い注意が出ます。

0.0.0.0 で待つ開発用ヘッダの設定の picker。上の赤い枠に「この API は 0.0.0.0:7070 で待ちながら、名乗りをそのまま信じる —— 同じネットワークの誰もが、誰にでもなれる」と出ている
出る文 名乗り方 意味 どうするか
subject を入れて「読み込む」 開発用ヘッダ 開いた直後で、まだ一覧を訊いていない 2 つの欄に入れて「読み込む」を押す
トークンを貼って「読み込む」 JWT 開いた直後か、トークンの欄が空 トークンを取って貼り、「読み込む」を押す
見えるアーカイブが無い どちらも API は正常に答えたが、その名乗りで見える行が 0 件 下の「空のときに確かめること」を見る
401 — subject が空(この API は開発用ヘッダで名乗る設定) 開発用ヘッダ subject を空のまま読み込んだ subject を入れる
401 — このトークンは通らない(期限切れ・issuer を起こし直した後・別の issuer のもの)。取り直して貼る JWT API がトークンを受け付けなかった トークンを取り直して貼る。issuer が止まっていれば pnpm run oidc:issuer で起こしてから。落ちた検査(exp など)は、API のログの JWT rejected の行に出ます
この API には名乗りの設定が無く、誰の一覧も出せない(全員 401) 設定なし .env に名乗りの設定が無い .env に CAPTURE_LEDGER_OIDC_ISSUER か CAPTURE_LEDGER_DEV_IDENTITY=1 を書いて、API を起こし直す
この API は 0.0.0.0:7070 で待ちながら、名乗りをそのまま信じる 開発用ヘッダ 同じネットワークの誰もが、誰にでもなれる CAPTURE_LEDGER_API_HOST=127.0.0.1 で起こし直すか、JWT の設定に戻す
500 などの数字 — 一覧を取れなかった どちらも API の中で失敗した(DB や OpenFGA に届かない、など) pnpm run api を動かしている端末のログを見る
  • まだ何も取り込んでいない。 クイックスタートを順に進めた §6 の時点では、これが普通です。
  • 名乗りが、クロールを始めたときと違う。 組織名の綴りを確かめます。 迷ったら、クロールを始めたときと同じ名前と組織で名乗ります (JWT の設定なら、トークンを刷るときの --subject と --org)。
  • クロールがまだ途中。 ページが台帳に載るのは、そのページの居た段の報告が届いた後です (まだ終わっていないとき)。 載ってから見えるようになるまでは、長くても 5 秒ほどです —— API が 5 秒おきに、認可の情報を OpenFGA へ届けています。 少し待って「読み込む」を押し直します。

行をクリックすると、別のタブで replay が開きます。 開く URL は、replay の場所と、その WACZ の鍵(objectKey)で組み立てたものです。

http://127.0.0.1:8899/?source=/wacz/<objectKey>

replay が最初に出すのは、その WACZ に入っているページの一覧です。 picker の 1 行は 1 ページの取り込みなので、ふつうは 1 件です。 題名をクリックすると、再生が始まります。 上の欄に元の URL と取り込んだ日時が出て、その下が、取り込んだときのページです。

replay の場所は .env の REPLAY_ORIGIN で決まります(既定は http://127.0.0.1:8899)。 replay のコンテナは、pnpm run stack:up で一緒に起動しています。

  • 名乗りの 2 つの欄は、ブラウザに覚えられます。 次に開いたときは、前回の名乗りで自動的に 読み込まれます。別の名乗りを試した後は、戻し忘れに注意してください。
  • トークンは、そのタブを閉じると消えます。 トークンはそれ自体が鍵なので、picker はタブの間だけ (sessionStorage)覚えます。開き直したら貼り直します。1 時間で切れたときも同じです。
  • picker はトークンを刷りません。 刷るのは開発用の issuer で、127.0.0.1 でしか待ちません。
  • 開発用ヘッダの設定では、この画面は誰も認証しません。 開発用の画面です。外から届く場所には 出さないでください。
  • 絞っているのは一覧だけです。 WACZ の鍵を知っていれば、replay からは誰でも読めます (アーカイブ台帳)。