What's Changed
- fix(openapi): give quarantine reject a unique operationId (unblocks SDK publishing) by @brandonrc in #1937
- fix(auth): derive admin authorization from the server-side role, not the JWT claim by @brandonrc in #1939
- fix(webhooks): enforce object-level authorization on webhook endpoints by @brandonrc in #1942
- fix(promotion): enforce promotion_rules on manual single and bulk promote endpoints by @brandonrc in #1940
- fix(lifecycle): block release-immutability swap via delete + re-upload of different content by @brandonrc in #1941
- fix(auth): seed baseline 'user' role assumed by federated role mapping by @ysolomon-plat in #1919
- fix(grype): accept bare-string licenses in GrypeLicense deserialize by @nicexe2e4 in #1929
- fix(npm): serve abbreviated metadata and compress responses (#1931) by @rob-howie-depop in #1932
- fix(maven): include WWW-Authenticate headers in guest_access_guard 401 response by @mymarche in #1920
- fix(maven): centralize metadata resolution for remote and virtual repos by @Dreamacro in #1922
- fix: derive external base URL from HTTP/2 authority by @Dreamacro in #1921
- fix(proxy): presign proxy-cache downloads via the no-prefix backend instead of streaming (#1555) by @ysolomon-plat in #1917
- fix: make Maven hosted repositories production-ready by @valfon1393 in #1907
- fix(lifecycle): require repository_id at policy create for repo-scoped policy types (#1850) by @brandonrc in #1951
- fix(scan): use repo-scoped image ref for Grype OCI scans on docker repos (#1903) by @brandonrc in #1952
- fix(peers): repair repository-to-peer assignment (DATABASE_ERROR) (1.2.2) by @brandonrc in #1954
- fix(sso): allow OIDC discovery to reach configured private-IP IdPs (#1891) by @brandonrc in #1953
- fix(migration): repair migration-connection/job create (DATABASE_ERROR) by @brandonrc in #1959
- fix(promotion): tenant-ownership check on promote target + separation-of-duties on approval by @brandonrc in #1961
- fix(search): key search rate limit per authenticated user, not per IP by @brandonrc in #1962
- fix(security): restrict /system/config disclosure + close fail-open auth gates by @brandonrc in #1960
- fix(peers): authorize PUT labels (BOLA/cross-tenant) + 4xx on self-referential probe by @brandonrc in #1963
- chore(deps): bump quinn-proto to patched version (RUSTSEC-2026-0185) by @brandonrc in #1969
- fix(quota): treat quota_bytes 0/null as unlimited + correct usage accounting by @brandonrc in #1970
- fix(security): block RFC 6598 CGNAT (100.64.0.0/10) in outbound SSRF validator by @brandonrc in #1968
- fix(robustness): 400 on over-length artifact path (+ migration-connection input) by @brandonrc in #1967
- docs: document QUARANTINE_ENABLED mode by @brandonrc in #1976
- security: escape apostrophe in pypi html_escape helper by @brandonrc in #1981
- fix(upload): derive artifact_version on chunked uploads to format repos by @brandonrc in #1983
- test(maven): pin virtual fall-through to remote-only POM (#1562) by @brandonrc in #1986
- fix(search): sanitize free-text into a valid tsquery so search endpoints cannot 500 on metacharacters by @brandonrc in #1991
- docs(lifecycle): clarify tag_pattern_keep is a deletion policy, not protection by @brandonrc in #1980
- refactor(storage): extract shared oci-manifests/ storage key prefix const by @brandonrc in #1982
- fix(scanner): qualify Trivy image scan target with owning repository key by @nicexe2e4 in #1965
- fix(auth): enforce per-token ownership on repository token read/revoke by @brandonrc in #1974
- fix(lifecycle): retain the sole oci_tags row protecting a live image by @brandonrc in #1987
- fix(authz): require repository:admin to change proxy cache-TTL by @brandonrc in #1985
- fix(dependency-track): add PORTFOLIO_MANAGEMENT to DT permission hint by @brandonrc in #1977
- docs(openapi): document Bearer vs Basic auth asymmetry for /api/v1 and format endpoints by @brandonrc in #1978
- fix(auth): stop LDAP env bootstrap from duplicating an existing provider by @brandonrc in #1984
- fix(scanner): resolve OCI image index to a concrete child platform before scanning (#1971) by @brandonrc in #1992
- fix(auth): allow mandatory first-login password-change flow through the 428 gate by @brandonrc in #1993
- fix(auth): make login rate limiter per-identifier so junk floods cannot lock out all accounts by @brandonrc in #1979
- fix(scanner): make scan-dedup short-circuit atomic under concurrency by @brandonrc in #1989
- fix(conan): resolve recipe/package revisions from upstream for Conan remote repos by @brandonrc in #1990
- chore(docker): harden images — bump bundled trivy to 0.71.2, refresh base OS errata, document residual scanner CVEs by @brandonrc in #2004
- fix(promotion): enforce promotion_only repos reject all direct artifact uploads by @brandonrc in #2005
- fix(migration): enforce per-user/tenant ownership across the migration subsystem by @brandonrc in #2007
- fix(promotion): require and consume an approved approval request before promote by @brandonrc in #2006
- test(ratelimit): pin general + download limiters to per-source-IP ConnectInfo keying by @brandonrc in #2012
- fix(promotion-rules): restrict rule authoring to admins and default auto_promote to false by @brandonrc in #2013
- fix(auth): anchor the must-change-password self-lookup exemption to the exact /auth/me route by @brandonrc in #2014
- chore(release): bump version to 1.2.2 by @brandonrc in #2035
New Contributors
- @nicexe2e4 made their first contribution in #1929
Full Changelog: v1.2.1...v1.2.2