a-blog cms PHP API Reference

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
bool

isSafeUrl()

a-blog cms で管理しているドメインのURLかチェックする

public isSafeUrl(string $url) : bool
Parameters
$url : string
Return values
bool

        
On this page

Search results