Skip to content

Commit ee8784d

Browse files
committed
Refactor audit verify signatures class
1 parent 87dfab9 commit ee8784d

1 file changed

Lines changed: 48 additions & 36 deletions

File tree

lib/commands/audit.js

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class VerifySignatures {
4242
}
4343

4444
// Prefetch and cache public keys from used registries
45-
const registries = this.findAllRegistryUrls(this.edges, this.npm.flatOptions)
45+
const registries = this.findAllRegistryUrls(this.edges)
4646
for (const registry of registries) {
4747
const keys = await this.getKeys({ registry })
4848
if (keys) {
@@ -122,15 +122,15 @@ class VerifySignatures {
122122
}
123123
}
124124

125-
findAllRegistryUrls (edges, opts) {
125+
findAllRegistryUrls (edges) {
126126
return new Set(Array.from(edges, (edge) => {
127127
let alias = false
128128
try {
129129
alias = npa(edge.spec).subSpec
130130
} catch (err) {
131131
}
132132
const spec = npa(alias ? alias.name : edge.name)
133-
return fetch.pickRegistry(spec, opts)
133+
return this.getSpecRegistry(spec)
134134
}))
135135
}
136136

@@ -176,35 +176,63 @@ class VerifySignatures {
176176
})
177177
}
178178

179-
async getVerifiedInfo (edge) {
179+
getEdgeType (edge) {
180+
return edge.optional ? 'optionalDependencies'
181+
: edge.peer ? 'peerDependencies'
182+
: edge.dev ? 'devDependencies'
183+
: 'dependencies'
184+
}
185+
186+
getEdgeSpec (edge) {
180187
let alias = false
181188
try {
182189
alias = npa(edge.spec).subSpec
183190
} catch (err) {
184191
}
185-
const spec = npa(alias ? alias.name : edge.name)
186-
const node = edge.to || edge
187-
const { location } = node
188-
const { version } = node.package || {}
189-
190-
const type = edge.optional ? 'optionalDependencies'
191-
: edge.peer ? 'peerDependencies'
192-
: edge.dev ? 'devDependencies'
193-
: 'dependencies'
194-
195-
// Skip local workspaces
196-
if (node.isWorkspace) {
192+
let spec
193+
try {
194+
spec = npa(`${alias ? alias.name : edge.name}@${edge.spec}`)
195+
} catch (_) {
196+
// Skip packages with invalid spec
197197
return
198198
}
199+
return spec
200+
}
201+
202+
buildRegistryConfig (registry) {
203+
const keys = this.keys.get(registry) || []
204+
const registryConfig = {}
205+
const parsedRegistry = new URL(registry)
206+
const regKey = `//${parsedRegistry.host}${parsedRegistry.pathname}`
207+
registryConfig[`${regKey}:_keys`] = keys
208+
return registryConfig
209+
}
199210

211+
getSpecRegistry (spec) {
212+
return fetch.pickRegistry(spec, this.npm.flatOptions)
213+
}
214+
215+
async getVerifiedInfo (edge) {
216+
const type = this.getEdgeType(edge)
200217
// Skip potentially optional packages that are not on disk, as these could
201218
// be omitted during install
202219
if (edge.error === 'MISSING' && type !== 'dependencies') {
203220
return
204221
}
205222

206-
// Skip packages that don't have a installed version, e.g. optonal dependencies
207-
if (!version) {
223+
const spec = this.getEdgeSpec(edge)
224+
// Skip invalid spec's
225+
if (!spec) {
226+
return
227+
}
228+
const node = edge.to || edge
229+
const { location } = node
230+
const name = spec.name
231+
const { version } = node.package || {}
232+
233+
if (node.isWorkspace || // Skip local workspaces packages
234+
!version || // Skip packages that don't have a installed version, e.g. optonal dependencies
235+
!spec.registry) { // Skip if not from registry, e.g. git package
208236
return
209237
}
210238

@@ -214,32 +242,16 @@ class VerifySignatures {
214242
}
215243
}
216244

217-
// Skip if the package is not in a registry, e.g. git or local workspace package
218-
try {
219-
if (!npa(`${alias ? alias.name : edge.name}@${edge.spec}`).registry) {
220-
return null
221-
}
222-
} catch (err) {
223-
return null
224-
}
225-
226245
this.audited += 1
227-
const name = spec.name
228-
229-
const registry = fetch.pickRegistry(spec, this.npm.flatOptions)
230-
const keys = this.keys.get(registry) || []
231246

247+
const registry = this.getSpecRegistry(spec)
232248
try {
233-
const registryConfig = {}
234-
const parsedRegistry = new URL(registry)
235-
const regKey = `//${parsedRegistry.host}${parsedRegistry.pathname}`
236-
registryConfig[`${regKey}:_keys`] = keys
237249
const {
238250
_integrity: integrity,
239251
_signatures,
240252
_resolved: resolved,
241253
} = await pacote.manifest(`${name}@${version}`, {
242-
verifySignatures: true, ...registryConfig, ...this.npm.flatOptions,
254+
verifySignatures: true, ...this.buildRegistryConfig(registry), ...this.npm.flatOptions,
243255
})
244256
const signatures = _signatures || []
245257

0 commit comments

Comments
 (0)