ManagedDomainRegistry
in package
管理ドメイン(ブログ・エイリアスの blog_domain / alias_domain)の判定・取得を担う。 DB 依存を隔離し、リクエスト内でメモ化する。
Table of Contents
Properties
- $managedDomainsCache : array<string|int, string>|null
- 管理ドメインリスト(キャッシュ)
Methods
- buildPreviewAllowedOrigins() : array<string|int, string>
- getManagedOrigins() の組み立てロジックを、グローバル定数(HTTP_HOST 等)に依存しない 純粋関数として切り出したもの。テストで各入力パターン(空文字・null・大文字混在・ポート有無・ スキーム)を直接検証できるようにする意図。
- clearCache() : void
- メモ化した管理ドメイン一覧を破棄し、次回参照時に DB から読み直させる。
- getManagedDomains() : array<string|int, string>
- 管理ドメインのリストを取得(キャッシュあり)
- getManagedOrigins() : array<string|int, string>
- window.postMessage の origin 検証に使う最小限のオリジン集合を、 scheme 付きオリジン(scheme://host[:port])の配列として取得する
- isManagedDomain() : bool
- 指定されたドメインが管理ドメインかどうかを判定
- isSafeUrl() : bool
- a-blog cms で管理しているドメインのURLかチェックする
Properties
$managedDomainsCache
管理ドメインリスト(キャッシュ)
private
array<string|int, string>|null
$managedDomainsCache
= null
Methods
buildPreviewAllowedOrigins()
getManagedOrigins() の組み立てロジックを、グローバル定数(HTTP_HOST 等)に依存しない 純粋関数として切り出したもの。テストで各入力パターン(空文字・null・大文字混在・ポート有無・ スキーム)を直接検証できるようにする意図。
public
static buildPreviewAllowedOrigins(string $ownHost, string|null $targetDomain, bool $isSecure, string $portValue) : array<string|int, string>
isUrlFromManagedDomain() / isSafeUrl() と同じく strtolower() を通し、event.origin (ブラウザは必ず小文字で通知する)との比較を成立させる。
Parameters
- $ownHost : string
-
現在のリクエストのホスト名(HTTP_HOST 相当)
- $targetDomain : string|null
-
プレビュー対象ブログのドメイン(blogDomain(BID) 相当。未設定なら空文字/null)
- $isSecure : bool
-
現在のリクエストが https か(HTTPS 相当)
- $portValue : string
-
ポート文字列(":8080" 形式。既定ポートなら空文字。HTTP_PORT_VALUE 相当)
Return values
array<string|int, string>clearCache()
メモ化した管理ドメイン一覧を破棄し、次回参照時に DB から読み直させる。
public
clearCache() : void
Why not コンテナから作り直させる(forgetInstance): このレジストリは 'url.delivery-rewriter' / 'url' からもコンストラクタ注入で参照されており、forgetInstance('url.managed-domain') だけでは それらが掴んでいる旧インスタンスが残ってメモ化が分裂する。共有インスタンス自身のキャッシュを 落とすことで、どの参照経路からも読み直しが効く。
getManagedDomains()
管理ドメインのリストを取得(キャッシュあり)
public
getManagedDomains([array<string|int, string> $additionalDomains = [] ]) : array<string|int, string>
Parameters
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
array<string|int, string>getManagedOrigins()
window.postMessage の origin 検証に使う最小限のオリジン集合を、 scheme 付きオリジン(scheme://host[:port])の配列として取得する
public
getManagedOrigins() : array<string|int, string>
以前は getManagedDomains()(全ブログ・全エイリアスのドメイン全件)をそのまま公開していたが、 実運用で問題が発覚したため最小集合に変更した。
- qs(クライアント側のクエリパーサー)の既定 arrayLimit=20 を超えると配列でなくプレーン オブジェクトへ変質し、呼び出し側の Array メソッド呼び出しが丸ごと例外を投げる
- blog_domain が空文字の行が1件でも混ざると不正な origin を生成し postMessage が例外を投げる
- 未ログインの共有ビューアーにまで全ブログ・全エイリアスの一覧を開示してしまう 必要なのは「今このリクエストが乗っている origin」と「プレビュー対象ブログ(BID)の origin」 の高々2件だけなので、その2件に絞る。
Return values
array<string|int, string>isManagedDomain()
指定されたドメインが管理ドメインかどうかを判定
public
isManagedDomain(string $domain[, array<string|int, string> $additionalDomains = [] ]) : bool
Parameters
- $domain : string
-
チェックするドメイン
- $additionalDomains : array<string|int, string> = []
-
追加で許可するドメインのリスト
Return values
boolisSafeUrl()
a-blog cms で管理しているドメインのURLかチェックする
public
isSafeUrl(string $url) : bool
Parameters
- $url : string