Skip to content

feat(api): retrieve stored export authorization requests by extra-segment GET - #457

Closed
seonghobae wants to merge 1 commit into
feat/export-retrieval-get-gap-003afrom
feat/export-stored-request-get-gap-003a
Closed

feat(api): retrieve stored export authorization requests by extra-segment GET#457
seonghobae wants to merge 1 commit into
feat/export-retrieval-get-gap-003afrom
feat/export-stored-request-get-gap-003a

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Folded into #459

Closed as superseded_by_fold, not discarded. #459's head contains this PR as its direct ancestor and has been retargeted to this PR's former base, so the stored-request GET implementation/tests and this review history remain intact while queue WIP is reduced.

Canonical landing vehicle: #459 (feat(api): consolidate export stored-request GET and CLI).

Do not reopen unless the folded head demonstrably loses unique behavior or evidence.

…ment GET

GAP-003A unique slice: GET /v1/exports/{export_id}/request returns the
accepted naruon authorization request on AnalysisRunLiveService so operators
do not replay POST. NaruonLiveService stays POST-only. LineageWeave refused.
Metric-free. ADR 0089. Stacked on #411. Does not re-open cancel lineages.
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: e2009333-ab28-4d55-b65a-49e742bbd632

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Devin Review

Comment on lines +135 to +138
require_nonempty(export_id)?;
if export_id.contains('/') || export_id.contains('\0') {
return Err(ApiError::InvalidWirePayload);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Control-character IDs create unusable requests

When an export ID contains a non-NUL control character, naruon_export_stored_request_exchange accepts and encodes it. The paired server rejects that URL.

Suggested change
require_nonempty(export_id)?;
if export_id.contains('/') || export_id.contains('\0') {
return Err(ApiError::InvalidWirePayload);
}
require_nonempty(export_id)?;
if export_id.contains('/') || export_id.chars().any(char::is_control) {
return Err(ApiError::InvalidWirePayload);
}
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +67 to +71
/// Whether `path` is the stored-request extra-segment resource.
#[must_use]
pub fn is_export_stored_request_path(path: &str) -> bool {
export_stored_request_path_id(path).is_ok()
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Path predicate excludes oversized routes

is_export_stored_request_path returns false for a correctly shaped route with an oversized ID. Predicate-based routers can lose the intended 413 response.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant