pub struct LineRequestLog<'a> { /* private fields */ }Expand description
リクエスト送信直前にコールバックへ渡される情報。
§秘匿情報の扱い
秘匿情報はヘッダー側とボディ側の双方に入り得る。
- ヘッダー: メッセージング系および一部のログイン系
(例:
post_user_v1_deauthorize)はheadersにAuthorization: Bearer <token>を含む。 - ボディ: OAuth ログイン系(token / revoke / POST verify / deauthorize)は
client_secret/refresh_token/access_token/codeなどの秘匿情報をbody側に持つ(post_user_v1_deauthorizeはヘッダーとボディの 両方に秘匿情報を持つ)。
ログ出力時は headers_redacted でヘッダーを、
body_redacted でボディの既知の秘匿キーをマスクできる。
クエリ文字列に秘匿情報を載せるエンドポイント(GET verify の access_token)もあるため、
クエリは query で生値が、query_redacted で
既知の秘匿キー(access_token 等)をマスクした値が得られる。GET verify の access_token
は既定の REDACTED_BODY_KEYS に含まれるため query_redacted で
マスクされる。ログ出力時は各 *_redacted ヘルパーを使うこと。
Implementations§
Source§impl<'a> LineRequestLog<'a>
impl<'a> LineRequestLog<'a>
Sourcepub fn method(&self) -> Option<&'a Method>
pub fn method(&self) -> Option<&'a Method>
HTTP メソッド(GET / POST など)。
リクエストの複製(try_clone)や再構築に失敗した場合は None
(headers と同じ捕捉契約)。
Sourcepub fn query(&self) -> Option<&'a str>
pub fn query(&self) -> Option<&'a str>
リクエスト URL の生のクエリ文字列(例: from=20240101&to=20241231)。
None になるのは「クエリ文字列が無い」場合と「リクエストの捕捉に失敗した」場合の
両方。両者を区別したい場合は path を併用する(path() が Some なら
捕捉は成功しており、query() が None なのは純粋にクエリが無いため)。
⚠ 秘匿情報に注意: クエリに秘匿情報を載せるエンドポイント(GET verify の
access_token)があるため、本メソッドの戻り値はマスクされていない生値である。ログ等へ
出力する前に query_redacted でマスクすること。
Sourcepub fn query_redacted(&self) -> Option<String>
pub fn query_redacted(&self) -> Option<String>
クエリ文字列(query)の既知の秘匿キーを *** に置換した複製を返す。
マスク対象キーは LineOptions の設定値
(with_redacted_body_keys)、未設定時は
REDACTED_BODY_KEYS(access_token 等)。キー比較は大文字小文字を無視する。GET verify の
access_token は既定キーに含まれるためマスクされる。クエリが無い/捕捉失敗時は None。
§限界(許可リスト方式)
マスクは設定されたキーの完全一致(大文字小文字無視)のみで行う。リストに無いキーは
マスクされず素通りする。本メソッドの戻り値を「すべての秘匿情報が除去済み」とみなさないこと。
また、マスクの有無に関わらず内部の redact_query が url::form_urlencoded で再エンコード
するため、秘匿キーを含まないペアも表現が正規化され得る(空白の +↔%20 など)。生値の
忠実な再現が必要なら query を使うこと。
Sourcepub fn headers(&self) -> Option<&'a HeaderMap>
pub fn headers(&self) -> Option<&'a HeaderMap>
リクエストヘッダー。
リクエストの複製(try_clone)や再構築に失敗した場合は None。これにより
「ヘッダーが空」と「捕捉に失敗」を区別できる。なお現行の全エンドポイントは
in-memory なボディ(.json / .form / .query)を使うため try_clone は
失敗せず、通常 None にはならない。
捕捉したヘッダーは RequestBuilder を再構築した時点のもので、送信時に reqwest が
付与する content-length / host などは含まれない。
Sourcepub fn body(&self) -> &'a Value
pub fn body(&self) -> &'a Value
各エンドポイントがログ用に渡す論理表現を JSON 化したもの。
フォームエンコード系エンドポイント(OAuth の token / revoke / POST verify)では
実際の送信形式は application/x-www-form-urlencoded であり、この JSON 表現とは
異なる。ボディを持たない GET(GET verify など)は Value::Null、クエリ系の GET
(get_v2_bot_message_aggregation_list / get_v2_bot_insight_message_event_aggregation)
は query params を JSON オブジェクト化した値になる(HTTP ボディそのものではなく
ログ表現である点に注意)。
シリアライズに失敗した場合は {"_serialize_error": "<理由>"} となり、Value::Null
(=ボディ無し)とは区別できる。
Sourcepub fn headers_redacted(&self) -> Option<HeaderMap>
pub fn headers_redacted(&self) -> Option<HeaderMap>
Authorization ヘッダー値を *** に置換したヘッダーの複製を返す。
ヘッダーのみをマスクする。OAuth 系のようにボディへ秘匿情報が入る場合は
body_redacted を使うこと。捕捉失敗時は None。
Sourcepub fn body_redacted(&self) -> Value
pub fn body_redacted(&self) -> Value
ボディ(body)の既知の秘匿キーを *** に置換した複製を返す。
マスク対象キーは LineOptions の設定値
(with_redacted_body_keys)、未設定時は REDACTED_BODY_KEYS
(client_secret / access_token / refresh_token / code / code_verifier /
id_token / userAccessToken)。ネストしたオブジェクト/配列も再帰的に走査する。
§限界(許可リスト方式)
マスクは設定されたキーの完全一致(大文字小文字無視)のみで行う。リストに無いキー、
例えば LINE が将来追加するフィールドや、レスポンス型の #[serde(flatten)] extra 経由で
流れ込む未知の秘匿フィールドはマスクされず素通りする。本メソッドの戻り値を「すべての
秘匿情報が除去済み」とみなさないこと。
Trait Implementations§
Source§impl<'a> Clone for LineRequestLog<'a>
impl<'a> Clone for LineRequestLog<'a>
Source§fn clone(&self) -> LineRequestLog<'a>
fn clone(&self) -> LineRequestLog<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more