Skip to content

chore(deps): bump time from 0.3.36 to 0.3.47 in the cargo group across 1 directory - #1

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/cargo-19d6922b9f
Closed

chore(deps): bump time from 0.3.36 to 0.3.47 in the cargo group across 1 directory#1
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/cargo-19d6922b9f

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 28, 2026

Copy link
Copy Markdown
Contributor

⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


Bumps the cargo group with 1 update in the / directory: time.

Updates time from 0.3.36 to 0.3.47

Release notes

Sourced from time's releases.

v0.3.47

See the changelog for details.

v0.3.46

See the changelog for details.

v0.3.45

See the changelog for details.

v0.3.44

See the changelog for details.

v0.3.43

See the changelog for details.

v0.3.42

See the changelog for details.

v0.3.41

See the changelog for details.

v0.3.40

See the changelog for details.

v0.3.39

See the changelog for details.

v0.3.38

See the changelog for details.

v0.3.37

See the changelog for details.

Changelog

Sourced from time's changelog.

0.3.47 [2026-02-05]

Security

  • The possibility of a stack exhaustion denial of service attack when parsing RFC 2822 has been eliminated. Previously, it was possible to craft input that would cause unbounded recursion. Now, the depth of the recursion is tracked, causing an error to be returned if it exceeds a reasonable limit.

    This attack vector requires parsing user-provided input, with any type, using the RFC 2822 format.

Compatibility

  • Attempting to format a value with a well-known format (i.e. RFC 3339, RFC 2822, or ISO 8601) will error at compile time if the type being formatted does not provide sufficient information. This would previously fail at runtime. Similarly, attempting to format a value with ISO 8601 that is only configured for parsing (i.e. Iso8601::PARSING) will error at compile time.

Added

  • Builder methods for format description modifiers, eliminating the need for verbose initialization when done manually.
  • date!(2026-W01-2) is now supported. Previously, a space was required between W and 01.
  • [end] now has a trailing_input modifier which can either be prohibit (the default) or discard. When it is discard, all remaining input is ignored. Note that if there are components after [end], they will still attempt to be parsed, likely resulting in an error.

Changed

  • More performance gains when parsing.

Fixed

  • If manually formatting a value, the number of bytes written was one short for some components. This has been fixed such that the number of bytes written is always correct.
  • The possibility of integer overflow when parsing an owned format description has been effectively eliminated. This would previously wrap when overflow checks were disabled. Instead of storing the depth as u8, it is stored as u32. This would require multiple gigabytes of nested input to overflow, at which point we've got other problems and trivial mitigations are available by downstream users.

0.3.46 [2026-01-23]

Added

  • All possible panics are now documented for the relevant methods.
  • The need to use #[serde(default)] when using custom serde formats is documented. This applies only when deserializing an Option<T>.
  • Duration::nanoseconds_i128 has been made public, mirroring std::time::Duration::from_nanos_u128.

... (truncated)

Commits
  • d5144cd v0.3.47 release
  • f6206b0 Guard against integer overflow in release mode
  • 1c63dc7 Avoid denial of service when parsing Rfc2822
  • 5940df6 Add builder methods to avoid verbose construction
  • 00881a4 Manually format macros everywhere
  • bb723b6 Add trailing_input modifier to end
  • 31c4f8e Permit W12 in date! macro
  • 490a17b Mark error paths in well-known formats as cold
  • 6cb1896 Optimize Rfc2822 parsing
  • 6d264d5 Remove erroneous #[inline(never)] attributes
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions
    You can disable automated security fix PRs for this repo from the Security Alerts page.

Bumps the cargo group with 1 update in the / directory: [time](https://github.com/time-rs/time).


Updates `time` from 0.3.36 to 0.3.47
- [Release notes](https://github.com/time-rs/time/releases)
- [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md)
- [Commits](time-rs/time@v0.3.36...v0.3.47)

---
updated-dependencies:
- dependency-name: time
  dependency-version: 0.3.47
  dependency-type: direct:production
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Free

Run ID: fee23435-58ae-4fb2-8500-f095ecc601fa

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

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

@yacosta738 yacosta738 closed this May 29, 2026
@yacosta738
yacosta738 deleted the dependabot/cargo/cargo-19d6922b9f branch May 29, 2026 17:09
@dependabot @github

dependabot Bot commented on behalf of github May 29, 2026

Copy link
Copy Markdown
Contributor Author

This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests.

To ignore these dependencies, configure ignore rules in dependabot.yml

yacosta738 added a commit that referenced this pull request Jun 2, 2026
Four pre-existing issues caught by inline review of the PR-A stack.
Finding 5 (SESSION_NOT_FOUND redirect) was verified invalid and skipped —
the dashboard redirect is driven by currentUser, not by rejection codes.

## Finding 1: stream paths bypassed forbidden/rate-limit HTTP mapping

chat_completions_stream and anthropic_messages_stream were returning
SSE 200 with a generic internal_error event when the upstream
execute_stream_with_format returned a forbidden or rate_limited error.
This means a model-restricted key streaming chat completions got
200 + a confusing SSE error event instead of a clean HTTP 403.

Added Err-arms for is_forbidden() and is_rate_limited() in both stream
handlers so streaming and non-streaming requests share identical
auth/rate-limit behavior. New helpers map_forbidden_openai and
map_rate_limited return typed HttpError for the IntoResponse path.

## Finding 2: restrictions_from_headers failed open on missing headers

The function used unwrap_or_default() on header lookups, so a missing
x-authz-allowed-models or x-authz-allowed-providers header was silently
treated as 'unrestricted'. The authz middleware must always stamp these
headers, so a missing header indicates either a routing bug or a
middleware bypass — both should be loud, not silent.

Restructured into a parse_csv_header helper that returns
Result<Vec<String>, HttpError> and propagates AUTHZ_HEADER_MISSING
or AUTHZ_HEADER_INVALID 500 responses. Empty header value (public
subject) still maps to empty Vec, which the domain treats as
unrestricted.

## Finding 3: scopes_from_json rejected pre-#83 legacy scope strings

auth-sqlite used ApiKeyScope::parse (strict) in scopes_from_json, which
rejects any unknown scope string. Existing API keys created before
#83 with legacy values ('read', 'write') would fail to load.

Switched to ApiKeyScope::parse_lenient, which is the documented
method for reading from the database (accepts unknowns, logs warning).
Added regression test read_key_with_legacy_scope_string_is_preserved.

## Finding 4: required_scope fallback allowed POST with read-only key

required_scope returned Some("chat:read") for ANY /v1/* path that
wasn't /v1/providers/* or /v1/chat/* — regardless of HTTP method. This
meant a key with only the chat:read scope could hit POST /v1/messages
(Anthropic) and pass the authz check, then rely on downstream luck.

Updated the fallback to inspect the method: GET → chat:read, all
others → chat:write. The special-cases for /v1/providers* and
/v1/chat/* are preserved.

Added regression test
client_api_with_chat_read_scope_rejected_on_post_to_messages.
yacosta738 added a commit that referenced this pull request Jun 2, 2026
…nt (#89)

* feat(api-key): typed ApiKeyScope with canonical scope values (#83)

Add KnownScope enum with five canonical values: chat:read, chat:write,
providers:read, providers:write, admin.

ApiKeyScope::parse now rejects unknown values with UnknownScope error.
ApiKeyScope::parse_lenient is introduced for DB reads — accepts any
non-empty value and emits a tracing::warn for unrecognised scopes.

ManageApiKeys::create and update validate all scopes before touching
the repository.

Fixes pre-existing sha2 0.11 compilation breakage in login.rs,
validate_session.rs, and auth.rs.

* feat(authz): scope enforcement per route class in client API policy (#84)

Add required_scope(method, path) mapping routes under /v1/* to their
canonical scope requirement. Add check_scope helper that allows requests
when the subject holds the required scope or the admin superset scope,
and rejects with HTTP 403 INSUFFICIENT_SCOPE otherwise.

Thread method and path through evaluate_policy and client_api_policy.
Update env-fallback credentials to use canonical scope names.
Update all affected tests to use canonical scope values.

* fix: apply CodeRabbit auto-fixes

Fixed 8 file(s) based on 3 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

* feat(api-key): add allowed_models/allowed_providers and enforce in routing (#85, #86) (#90)

* chore(deps-rust)(deps): bump axum-test from 15.7.4 to 20.1.0 (#78)

Bumps [axum-test](https://github.com/JosephLenton/axum-test) from 15.7.4 to 20.1.0.
- [Release notes](https://github.com/JosephLenton/axum-test/releases)
- [Commits](https://github.com/JosephLenton/axum-test/commits)

---
updated-dependencies:
- dependency-name: axum-test
  dependency-version: 20.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(api-key): add allowed_models and allowed_providers restriction fields (#85)

* feat(routing): enforce allowed_models and allowed_providers restrictions (#86)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(deps): add hex crate version 0.4.3 to Cargo.lock

* fix(dashboard): update API key scope options to canonical chat:read/chat:write

The dashboard was still emitting pre-#83 scope values ('read', 'write') in
the create/edit modals, which the backend now rejects with 400
'unknown API key scope'.

This was surfaced by 'just ci-local' failing the Playwright e2e suite
after #83/#84 landed. Without this fix, every dashboard user creating
an API key via the UI would have hit the same 400 error.

- ApiKeysView.vue: dropdown values updated to canonical scopes
- api-keys.spec.ts: helper defaults + 2 call sites updated; UI selector
  tightened to '^chat read$' to avoid accidental matches

* fix(authz): address code review findings (#1-#4)

Four pre-existing issues caught by inline review of the PR-A stack.
Finding 5 (SESSION_NOT_FOUND redirect) was verified invalid and skipped —
the dashboard redirect is driven by currentUser, not by rejection codes.

## Finding 1: stream paths bypassed forbidden/rate-limit HTTP mapping

chat_completions_stream and anthropic_messages_stream were returning
SSE 200 with a generic internal_error event when the upstream
execute_stream_with_format returned a forbidden or rate_limited error.
This means a model-restricted key streaming chat completions got
200 + a confusing SSE error event instead of a clean HTTP 403.

Added Err-arms for is_forbidden() and is_rate_limited() in both stream
handlers so streaming and non-streaming requests share identical
auth/rate-limit behavior. New helpers map_forbidden_openai and
map_rate_limited return typed HttpError for the IntoResponse path.

## Finding 2: restrictions_from_headers failed open on missing headers

The function used unwrap_or_default() on header lookups, so a missing
x-authz-allowed-models or x-authz-allowed-providers header was silently
treated as 'unrestricted'. The authz middleware must always stamp these
headers, so a missing header indicates either a routing bug or a
middleware bypass — both should be loud, not silent.

Restructured into a parse_csv_header helper that returns
Result<Vec<String>, HttpError> and propagates AUTHZ_HEADER_MISSING
or AUTHZ_HEADER_INVALID 500 responses. Empty header value (public
subject) still maps to empty Vec, which the domain treats as
unrestricted.

## Finding 3: scopes_from_json rejected pre-#83 legacy scope strings

auth-sqlite used ApiKeyScope::parse (strict) in scopes_from_json, which
rejects any unknown scope string. Existing API keys created before
#83 with legacy values ('read', 'write') would fail to load.

Switched to ApiKeyScope::parse_lenient, which is the documented
method for reading from the database (accepts unknowns, logs warning).
Added regression test read_key_with_legacy_scope_string_is_preserved.

## Finding 4: required_scope fallback allowed POST with read-only key

required_scope returned Some("chat:read") for ANY /v1/* path that
wasn't /v1/providers/* or /v1/chat/* — regardless of HTTP method. This
meant a key with only the chat:read scope could hit POST /v1/messages
(Anthropic) and pass the authz check, then rely on downstream luck.

Updated the fallback to inspect the method: GET → chat:read, all
others → chat:write. The special-cases for /v1/providers* and
/v1/chat/* are preserved.

Added regression test
client_api_with_chat_read_scope_rejected_on_post_to_messages.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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