Engine
in package
Table of Contents
Constants
- ALLOWED_CONTENT_TYPES = ['application/json', 'application/json; charset=utf-8', 'application/x-www-form-urlencoded', 'application/x-www-form-urlencoded; charset=utf-8']
- Content-Type の許可リスト。許可リスト外の値が保存されていた場合は先頭の値にフォールバックする。
- ALLOWED_METHODS = ['POST', 'DELETE', 'PUT', 'PATCH', 'GET']
- 送信を許可する HTTP メソッド。
- SENSITIVE_HEADER_NAMES = ['Authorization', 'X-Api-Key', 'X-Auth-Token']
- ログに記録する際、値をマスクする機密ヘッダー名。
Properties
- $headerValidator : HeaderValidator
- $httpClient : HttpClientInterface
- $isProfessionalEditionResolver : callable
- $payload : mixed
- $whiteList : array<string|int, mixed>
Methods
- __construct() : mixed
- Engine constructor.
- call() : mixed
- validateUrlScheme() : bool
- URLのスキーマが http or https か確認する
- validateUrlWhiteList() : bool
- URLのホストがホワイトリストに含まれるか確認
- buildHeaders() : array<int, string>
- ヘッダー配列の組み立て。 Standard エディションでは Content-Type 固定・カスタムヘッダー無視にフォールバックする。 カスタムヘッダーは HeaderValidator で全行検証し、1行でも不正な場合は送信全体を中止する。
- buildPayload() : mixed
- buildRequestBody() : string
- リクエストボディの組み立て。GET には付与しない。
- decodeHeaders() : array<int, array{name?: string, value?: string}>
- getHooks() : mixed
- getPayload() : false|mixed
- hookLogContext() : array<string, mixed>
- 送信失敗時のログへ残す Webhook 設定。カスタムヘッダー(Authorization 等)と署名シークレットは 値を伏せる(送信ログのリクエストヘッダーを maskSensitiveHeaders で伏せているのと同じ理由)。
- isProfessionalEdition() : bool
- Professional以上のエディションかどうかを判定する。 コンストラクタで注入されたcallable(未指定時はグローバル関数 editionWithProfessional())を使う。
- maskSensitiveHeaders() : string
- 機密ヘッダーの値をマスクする(ログ保存前に呼び出す)。
- resolveContentType() : string
- 許可リスト外の Content-Type が保存されていた場合は application/json にフォールバックする。
- resolveMethod() : string
- Standard エディションでは POST 固定とする。UI 表示制御に加えて送信時にもサーバ側で強制する。
- saveLog() : mixed
- send() : mixed
Constants
ALLOWED_CONTENT_TYPES
Content-Type の許可リスト。許可リスト外の値が保存されていた場合は先頭の値にフォールバックする。
private
mixed
ALLOWED_CONTENT_TYPES
= ['application/json', 'application/json; charset=utf-8', 'application/x-www-form-urlencoded', 'application/x-www-form-urlencoded; charset=utf-8']
ALLOWED_METHODS
送信を許可する HTTP メソッド。
private
mixed
ALLOWED_METHODS
= ['POST', 'DELETE', 'PUT', 'PATCH', 'GET']
SENSITIVE_HEADER_NAMES
ログに記録する際、値をマスクする機密ヘッダー名。
private
mixed
SENSITIVE_HEADER_NAMES
= ['Authorization', 'X-Api-Key', 'X-Auth-Token']
Properties
$headerValidator
protected
HeaderValidator
$headerValidator
$httpClient
protected
HttpClientInterface
$httpClient
$isProfessionalEditionResolver
protected
callable
$isProfessionalEditionResolver
$payload
protected
mixed
$payload
Tags
$whiteList
protected
array<string|int, mixed>
$whiteList
= []
Methods
__construct()
Engine constructor.
public
__construct(mixed $payload, array<string|int, mixed> $whiteList, HttpClientInterface $httpClient[, callable|null $isProfessionalEditionResolver = null ]) : mixed
Parameters
- $payload : mixed
- $whiteList : array<string|int, mixed>
- $httpClient : HttpClientInterface
- $isProfessionalEditionResolver : callable|null = null
-
Professional以上かどうかを判定する関数。 テストで差し替え可能にするための注入ポイントで、未指定時はグローバル関数 editionWithProfessional() を使う。
call()
public
call(int $bid, string $type, array<string|int, mixed>|string $events[, array<string|int, mixed> $args = [] ]) : mixed
Parameters
- $bid : int
- $type : string
- $events : array<string|int, mixed>|string
- $args : array<string|int, mixed> = []
validateUrlScheme()
URLのスキーマが http or https か確認する
public
validateUrlScheme(string $url) : bool
Parameters
- $url : string
Return values
boolvalidateUrlWhiteList()
URLのホストがホワイトリストに含まれるか確認
public
validateUrlWhiteList(string $url) : bool
Parameters
- $url : string
Return values
boolbuildHeaders()
ヘッダー配列の組み立て。 Standard エディションでは Content-Type 固定・カスタムヘッダー無視にフォールバックする。 カスタムヘッダーは HeaderValidator で全行検証し、1行でも不正な場合は送信全体を中止する。
protected
buildHeaders(array<string|int, mixed> $hook) : array<int, string>
Parameters
- $hook : array<string|int, mixed>
Tags
Return values
array<int, string>buildPayload()
protected
buildPayload(mixed $payload, mixed $tpl) : mixed
Parameters
- $payload : mixed
- $tpl : mixed
buildRequestBody()
リクエストボディの組み立て。GET には付与しない。
protected
buildRequestBody(array<string|int, mixed> $hook, array<string|int, mixed> $payload, string $method) : string
Parameters
- $hook : array<string|int, mixed>
- $payload : array<string|int, mixed>
- $method : string
Return values
stringdecodeHeaders()
protected
decodeHeaders(string $webhookHeadersJson) : array<int, array{name?: string, value?: string}>
Parameters
- $webhookHeadersJson : string
Return values
array<int, array{name?: string, value?: string}>getHooks()
protected
getHooks(int $bid, string $type, array<string|int, mixed> $events) : mixed
Parameters
- $bid : int
- $type : string
- $events : array<string|int, mixed>
getPayload()
protected
getPayload(string $type, array<string|int, mixed> $events[, array<string|int, mixed> $args = [] ]) : false|mixed
Parameters
- $type : string
- $events : array<string|int, mixed>
- $args : array<string|int, mixed> = []
Return values
false|mixedhookLogContext()
送信失敗時のログへ残す Webhook 設定。カスタムヘッダー(Authorization 等)と署名シークレットは 値を伏せる(送信ログのリクエストヘッダーを maskSensitiveHeaders で伏せているのと同じ理由)。
protected
hookLogContext(array<string, mixed> $hook) : array<string, mixed>
Parameters
- $hook : array<string, mixed>
Return values
array<string, mixed>isProfessionalEdition()
Professional以上のエディションかどうかを判定する。 コンストラクタで注入されたcallable(未指定時はグローバル関数 editionWithProfessional())を使う。
protected
isProfessionalEdition() : bool
Return values
boolmaskSensitiveHeaders()
機密ヘッダーの値をマスクする(ログ保存前に呼び出す)。
protected
maskSensitiveHeaders(string $headers) : string
Parameters
- $headers : string
Return values
stringresolveContentType()
許可リスト外の Content-Type が保存されていた場合は application/json にフォールバックする。
protected
resolveContentType(array<string|int, mixed> $hook) : string
Parameters
- $hook : array<string|int, mixed>
Return values
stringresolveMethod()
Standard エディションでは POST 固定とする。UI 表示制御に加えて送信時にもサーバ側で強制する。
protected
resolveMethod(array<string|int, mixed> $hook) : string
Parameters
- $hook : array<string|int, mixed>
Return values
stringsaveLog()
protected
saveLog(array{status: int, responseHeader: string, responseBody: string, responseTime: float} $result, mixed $id, mixed $endpoint, mixed $events, mixed $requestHeader, mixed $requestBody) : mixed
Parameters
- $result : array{status: int, responseHeader: string, responseBody: string, responseTime: float}
- $id : mixed
- $endpoint : mixed
- $events : mixed
- $requestHeader : mixed
- $requestBody : mixed
send()
protected
send(array<string|int, mixed> $hook, array<string|int, mixed> $payload, array<string|int, mixed> $events) : mixed
Parameters
- $hook : array<string|int, mixed>
- $payload : array<string|int, mixed>
- $events : array<string|int, mixed>