Skip to content

[Bug] allowedInternalCidrs 未設定でも「社内限定」が選べ、しかも既定なので初回の発行が必ず失敗する #10

Description

@takke1986

起きたこと

content.allowedInternalCidrs を設定していない環境でも、共有URL発行パネルの「公開範囲」に 「社内限定」が選択肢として表示されます

この状態で「社内限定」を選んで発行すると、API が 400 { "error": "Internal sharing is not configured" } を返して失敗します。

さらに「社内限定」は <option> の先頭にあり、selected 属性も初期化処理も無いため既定値になっています。

<!-- web/app/index.html -->
<select id="page-share-scope">
  <option value="i">社内限定</option>   <!-- ← 既定 -->
  <option value="p">IP制限なし</option>
</select>

そのため CIDR未設定の環境では、パネルを開いて何も触らずに「発行してコピー」を押すと必ず失敗します。

web/mobile-page-shell.js のセレクタも同じ並びです。

分かりにくい点

失敗時のメッセージがUIに出ません。

issue.textContent = generatedUrl ? 'URLを表示しました' : '発行できませんでした';

APIは Internal sharing is not configured という的確なメッセージを返しているのに、画面には「発行できませんでした」としか出ないため、設定が原因だと気づけませんでした。ブラウザの開発者ツールを開いて初めて分かりました。

提案

未設定なら選択肢を出さない。設定済みなら「社内限定」を既定のまま残す。

安全側を既定にするという現状の意図は良いと思うので、それは維持したうえで、使えないときだけ選択肢から外す形です。

allowedInternalCidrs 選択肢 既定
あり 社内限定 / IP制限なし 社内限定
なし IP制限なしのみ IP制限なし

html-share publish は設定を知っているので、manifest.json に真偽値を1つ足せば判断できます。CIDRそのものはブラウザへ渡しません(組織のIPをクライアントに配らないため)。

// src/bundle.ts
export interface BuildManifest {
  generatedAt: string;
  internalSharing: boolean;
  pages: BuiltPage[];
}

const manifest = {
  generatedAt: new Date().toISOString(),
  internalSharing: config.content.allowedInternalCidrs.length > 0,
  pages,
};

手元で試したところ、manifest.jsonsrc/publish.ts の2箇所(copyConsole の呼び出しと ownerManifest)でも組み立て直されているため、そちらにも通す必要がありました。

UI側は、フラグが偽なら option[value="i"] を取り除いて value = 'p' にするだけで動きました。

再現手順

  1. content.allowedInternalCidrs を設定せずに html-share publish する
  2. コンソールでページを開き、共有パネルを開く
  3. 「公開範囲」が「社内限定」になっている
  4. そのまま「発行してコピー」を押す
  5. 「発行できませんでした」と表示される(開発者ツールでは 400 Internal sharing is not configured

環境

  • Node.js 24
  • main ブランチ相当(2026-08-17 時点)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions