62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require '/data_importer/lib/github_api/github_api'
|
|
module GithubApi
|
|
class SecurityAdvisory
|
|
SecurityAdvisoryQuery = GithubApi::Client.parse <<-'GRAPHQL'
|
|
query($ghsa_id: String!) {
|
|
securityAdvisory(ghsaId: $ghsa_id) {
|
|
ghsaId
|
|
summary
|
|
severity
|
|
description
|
|
cvss {
|
|
vectorString
|
|
}
|
|
origin
|
|
permalink
|
|
notificationsPermalink
|
|
updatedAt
|
|
publishedAt
|
|
cwes(first: 100) {
|
|
edges {
|
|
node {
|
|
cweId
|
|
description
|
|
}
|
|
}
|
|
}
|
|
references {
|
|
url
|
|
}
|
|
vulnerabilities(first: 100) {
|
|
edges {
|
|
node {
|
|
package {
|
|
name
|
|
ecosystem
|
|
}
|
|
severity
|
|
updatedAt
|
|
vulnerableVersionRange
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
GRAPHQL
|
|
|
|
def self.find(ghsa_id)
|
|
# Retryable.retryable(tries: 3, on: QueryExecutionError, sleep: lambda { |n| 4**n } ) do
|
|
response = GithubApi::Client.query(SecurityAdvisoryQuery, variables: { ghsa_id: ghsa_id })
|
|
if response.errors.any?
|
|
raise QueryExecutionError, response.errors[:data].join(', ')
|
|
else
|
|
response.data.security_advisory
|
|
end
|
|
# end
|
|
end
|
|
end
|
|
end
|
|
|
|
class QueryExecutionError < StandardError; end
|