Skip to content

Commit 0f22f15

Browse files
committed
Add licenses and properties to CDX.Models.Metadata. CycloneDX#1019
Signed-off-by: Augustus Kling <[email protected]>
1 parent c6cfd6f commit 0f22f15

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

src/models/metadata.ts

+8
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
1818
*/
1919

2020
import type { Component } from './component'
21+
import { LicenseRepository } from './license'
2122
import { LifecycleRepository } from './lifecycle'
2223
import { OrganizationalContactRepository } from './organizationalContact'
2324
import type { OrganizationalEntity } from './organizationalEntity'
25+
import { PropertyRepository } from './property'
2426
import { ToolRepository } from './tool'
2527

2628
export interface OptionalMetadataProperties {
@@ -31,6 +33,8 @@ export interface OptionalMetadataProperties {
3133
component?: Metadata['component']
3234
manufacture?: Metadata['manufacture']
3335
supplier?: Metadata['supplier']
36+
licenses?: Metadata['licenses']
37+
properties?: Metadata['properties']
3438
}
3539

3640
export class Metadata {
@@ -41,6 +45,8 @@ export class Metadata {
4145
component?: Component
4246
manufacture?: OrganizationalEntity
4347
supplier?: OrganizationalEntity
48+
licenses: LicenseRepository
49+
properties: PropertyRepository
4450

4551
constructor (op: OptionalMetadataProperties = {}) {
4652
this.timestamp = op.timestamp
@@ -50,5 +56,7 @@ export class Metadata {
5056
this.component = op.component
5157
this.manufacture = op.manufacture
5258
this.supplier = op.supplier
59+
this.licenses = op.licenses ?? new LicenseRepository()
60+
this.properties = op.properties ?? new PropertyRepository()
5361
}
5462
}

src/serialize/json/normalize.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,13 @@ export class MetadataNormalizer extends BaseJsonNormalizer<Models.Metadata> {
223223
: orgEntityNormalizer.normalize(data.manufacture, options),
224224
supplier: data.supplier === undefined
225225
? undefined
226-
: orgEntityNormalizer.normalize(data.supplier, options)
226+
: orgEntityNormalizer.normalize(data.supplier, options),
227+
licenses: data.licenses.size > 0
228+
? this._factory.makeForLicense().normalizeIterable(data.licenses, options)
229+
: undefined,
230+
properties: this._factory.spec.supportsProperties(data) && data.properties.size > 0
231+
? this._factory.makeForProperty().normalizeIterable(data.properties, options)
232+
: undefined,
227233
}
228234
}
229235
}

src/serialize/json/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export namespace Normalized {
9494
manufacture?: OrganizationalEntity
9595
supplier?: OrganizationalEntity
9696
licenses?: License[]
97+
properties?: Property[]
9798
}
9899

99100
export interface LifecyclePhase {

src/serialize/xml/normalize.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,20 @@ export class MetadataNormalizer extends BaseXmlNormalizer<Models.Metadata> {
246246
children: this._factory.makeForOrganizationalContact().normalizeIterable(data.authors, options, 'author')
247247
}
248248
: undefined
249+
const licenses: SimpleXml.Element | undefined = data.licenses.size > 0
250+
? {
251+
type: 'element',
252+
name: 'licenses',
253+
children: this._factory.makeForLicense().normalizeIterable(data.licenses, options)
254+
}
255+
: undefined
256+
const properties: SimpleXml.Element | undefined = this._factory.spec.supportsProperties(data) && data.properties.size > 0
257+
? {
258+
type: 'element',
259+
name: 'properties',
260+
children: this._factory.makeForProperty().normalizeIterable(data.properties, options, 'property')
261+
}
262+
: undefined
249263
return {
250264
type: 'element',
251265
name: elementName,
@@ -262,7 +276,9 @@ export class MetadataNormalizer extends BaseXmlNormalizer<Models.Metadata> {
262276
: orgEntityNormalizer.normalize(data.manufacture, options, 'manufacture'),
263277
data.supplier === undefined
264278
? undefined
265-
: orgEntityNormalizer.normalize(data.supplier, options, 'supplier')
279+
: orgEntityNormalizer.normalize(data.supplier, options, 'supplier'),
280+
licenses,
281+
properties
266282
].filter(isNotUndefined)
267283
}
268284
}

0 commit comments

Comments
 (0)