fix: header color in zoom (#3128)

* fix: merge version ranges when adding existing package signer (#3125)

* fix: merge version ranges when adding existing package signer

   Previously, add_package_signer unconditionally inserted the new
   version range, overwriting any existing authorization for that signer.
   Now it OR-merges the new range with the existing one, so running
   signer add multiple times accumulates permissions rather than
   replacing them.

* add --merge flag to registry package signer add

  Default behavior remains overwrite. When --merge is passed, the new
  version range is OR-merged with the existing one, allowing admins to
  accumulate permissions incrementally.

* add missing attribute to TS type

* make merge optional

* upsert instead of insert

* VersionRange::None on upsert

* fix: header color in zoom

---------

Co-authored-by: Dominion5254 <musashidisciple@proton.me>
This commit is contained in:
Alex Inkin
2026-02-26 02:09:25 +04:00
committed by GitHub
parent 8da9d76cb4
commit 803dd38d96
3 changed files with 17 additions and 2 deletions

View File

@@ -58,6 +58,9 @@ pub struct AddPackageSignerParams {
#[arg(long, help = "help.arg.version-range")] #[arg(long, help = "help.arg.version-range")]
#[ts(type = "string | null")] #[ts(type = "string | null")]
pub versions: Option<VersionRange>, pub versions: Option<VersionRange>,
#[arg(long, help = "help.arg.merge")]
#[ts(optional)]
pub merge: Option<bool>,
} }
pub async fn add_package_signer( pub async fn add_package_signer(
@@ -66,6 +69,7 @@ pub async fn add_package_signer(
id, id,
signer, signer,
versions, versions,
merge,
}: AddPackageSignerParams, }: AddPackageSignerParams,
) -> Result<(), Error> { ) -> Result<(), Error> {
ctx.db ctx.db
@@ -76,13 +80,22 @@ pub async fn add_package_signer(
"unknown signer {signer}" "unknown signer {signer}"
); );
let versions = versions.unwrap_or_default();
db.as_index_mut() db.as_index_mut()
.as_package_mut() .as_package_mut()
.as_packages_mut() .as_packages_mut()
.as_idx_mut(&id) .as_idx_mut(&id)
.or_not_found(&id)? .or_not_found(&id)?
.as_authorized_mut() .as_authorized_mut()
.insert(&signer, &versions.unwrap_or_default())?; .upsert(&signer, || Ok(VersionRange::None))?
.mutate(|existing| {
*existing = if merge.unwrap_or(false) {
VersionRange::or(existing.clone(), versions)
} else {
versions
};
Ok(())
})?;
Ok(()) Ok(())
}) })

View File

@@ -6,4 +6,5 @@ export type AddPackageSignerParams = {
id: PackageId id: PackageId
signer: Guid signer: Guid
versions: string | null versions: string | null
merge?: boolean
} }

View File

@@ -100,9 +100,10 @@ import { getManifest } from 'src/app/utils/get-package-data'
.title::before { .title::before {
content: ''; content: '';
position: absolute; position: absolute;
inset: 0; inset: -0.5rem -1rem 0;
background: var(--background); background: var(--background);
background-size: 1px; background-size: 1px;
filter: blur(0.5rem);
mask: linear-gradient(to bottom, black, transparent); mask: linear-gradient(to bottom, black, transparent);
opacity: 0.2; opacity: 0.2;
} }