69 lines
1.5 KiB
Ruby
69 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Ci
|
|
module Reports
|
|
module Security
|
|
class Identifier
|
|
attr_reader :external_id
|
|
attr_reader :external_type
|
|
attr_reader :fingerprint
|
|
attr_reader :name
|
|
attr_reader :url
|
|
|
|
def initialize(external_id:, external_type:, name:, url: nil)
|
|
@external_id = external_id
|
|
@external_type = external_type
|
|
@name = name
|
|
@url = url
|
|
|
|
@fingerprint = generate_fingerprint
|
|
end
|
|
|
|
def key
|
|
fingerprint
|
|
end
|
|
|
|
def to_hash
|
|
%i[
|
|
external_id
|
|
external_type
|
|
fingerprint
|
|
name
|
|
url
|
|
].index_with do |key|
|
|
public_send(key) # rubocop:disable GitlabSecurity/PublicSend
|
|
end
|
|
end
|
|
|
|
def ==(other)
|
|
other.external_type == external_type &&
|
|
other.external_id == external_id
|
|
end
|
|
|
|
def type_identifier?
|
|
cwe? || wasc?
|
|
end
|
|
|
|
def cve?
|
|
external_type.to_s.casecmp?('cve')
|
|
end
|
|
|
|
def cwe?
|
|
external_type.to_s.casecmp?('cwe')
|
|
end
|
|
|
|
def wasc?
|
|
external_type.to_s.casecmp?('wasc')
|
|
end
|
|
|
|
private
|
|
|
|
def generate_fingerprint
|
|
Digest::SHA1.hexdigest("#{external_type}:#{external_id}")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|