Skip to content

Commit 1770db4

Browse files
committed
chore(service): add debug logging to receipt handling
1 parent fe22bb9 commit 1770db4

File tree

3 files changed

+67
-14
lines changed

3 files changed

+67
-14
lines changed

crates/service/src/middleware/auth/tap.rs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,42 @@ where
5555

5656
async move {
5757
let execute = || async {
58-
let receipt = receipt.ok_or(IndexerServiceError::ReceiptNotFound)?;
58+
let receipt = receipt.ok_or_else(|| {
59+
tracing::debug!(
60+
"TAP receipt validation failed: receipt not found in request extensions"
61+
);
62+
IndexerServiceError::ReceiptNotFound
63+
})?;
64+
65+
let version = match &receipt {
66+
TapReceipt::V1(_) => "V1",
67+
TapReceipt::V2(_) => "V2",
68+
};
69+
tracing::debug!(receipt_version = version, "Starting TAP receipt validation");
70+
5971
// Verify the receipt and store it in the database
6072
tap_manager
6173
.verify_and_store_receipt(&ctx.unwrap_or_default(), receipt)
6274
.await
63-
.inspect_err(|_| {
64-
if let Some(labels) = labels {
75+
.inspect_err(|err| {
76+
tracing::debug!(error = %err, receipt_version = version, "TAP receipt validation failed");
77+
if let Some(labels) = &labels {
6578
failed_receipt_metric
6679
.with_label_values(&labels.get_labels())
6780
.inc()
6881
}
6982
})?;
83+
84+
tracing::debug!(
85+
receipt_version = version,
86+
"TAP receipt validation successful"
87+
);
7088
Ok::<_, IndexerServiceError>(request)
7189
};
72-
execute().await.map_err(|error| error.into_response())
90+
execute().await.map_err(|error| {
91+
tracing::debug!(error = %error, "TAP authorization failed, returning HTTP error response");
92+
error.into_response()
93+
})
7394
}
7495
}
7596
}

crates/service/src/middleware/tap_receipt.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,21 @@ use crate::service::TapHeader;
1414
///
1515
/// This is useful to not deserialize multiple times the same receipt
1616
pub async fn receipt_middleware(mut request: Request, next: Next) -> Response {
17-
if let Ok(TypedHeader(TapHeader(receipt))) =
18-
request.extract_parts::<TypedHeader<TapHeader>>().await
19-
{
20-
request.extensions_mut().insert(receipt);
17+
match request.extract_parts::<TypedHeader<TapHeader>>().await {
18+
Ok(TypedHeader(TapHeader(receipt))) => {
19+
let version = match &receipt {
20+
crate::tap::TapReceipt::V1(_) => "V1",
21+
crate::tap::TapReceipt::V2(_) => "V2",
22+
};
23+
tracing::debug!(
24+
receipt_version = version,
25+
"TAP receipt extracted successfully"
26+
);
27+
request.extensions_mut().insert(receipt);
28+
}
29+
Err(e) => {
30+
tracing::debug!(error = %e, "No TAP receipt found in request headers");
31+
}
2132
}
2233
next.run(request).await
2334
}

crates/service/src/service/tap_receipt_header.rs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,40 @@ impl Header for TapHeader {
3131
{
3232
let mut execute = || -> anyhow::Result<TapHeader> {
3333
let raw_receipt = values.next().ok_or(headers::Error::invalid())?;
34+
tracing::debug!(
35+
raw_receipt_length = raw_receipt.len(),
36+
"Processing TAP receipt header"
37+
);
3438

3539
// we first try to decode a v2 receipt since it's cheaper and fail earlier than using
3640
// serde
3741
match BASE64_STANDARD.decode(raw_receipt) {
3842
Ok(raw_receipt) => {
39-
tracing::debug!("Decoded v2");
40-
let receipt = grpc::v2::SignedReceipt::decode(raw_receipt.as_ref())?;
41-
Ok(TapHeader(TapReceipt::V2(receipt.try_into()?)))
43+
tracing::debug!(
44+
decoded_length = raw_receipt.len(),
45+
"Successfully base64 decoded v2 receipt"
46+
);
47+
let receipt =
48+
grpc::v2::SignedReceipt::decode(raw_receipt.as_ref()).map_err(|e| {
49+
tracing::debug!(error = %e, "Failed to protobuf decode v2 receipt");
50+
e
51+
})?;
52+
tracing::debug!("Successfully protobuf decoded v2 receipt");
53+
let converted_receipt = receipt.try_into().map_err(|e: anyhow::Error| {
54+
tracing::debug!(error = %e, "Failed to convert v2 receipt");
55+
e
56+
})?;
57+
tracing::debug!("Successfully converted v2 receipt to TapReceipt::V2");
58+
Ok(TapHeader(TapReceipt::V2(converted_receipt)))
4259
}
43-
Err(_) => {
44-
tracing::debug!("Could not decode v2, trying v1");
60+
Err(e) => {
61+
tracing::debug!(error = %e, "Could not base64 decode v2 receipt, trying v1");
4562
let parsed_receipt: SignedReceipt =
46-
serde_json::from_slice(raw_receipt.as_ref())?;
63+
serde_json::from_slice(raw_receipt.as_ref()).map_err(|e| {
64+
tracing::debug!(error = %e, "Failed to JSON decode v1 receipt");
65+
e
66+
})?;
67+
tracing::debug!("Successfully decoded v1 receipt");
4768
Ok(TapHeader(TapReceipt::V1(parsed_receipt)))
4869
}
4970
}

0 commit comments

Comments
 (0)