Skip to main content

lib/api/security_advisories/security_advisories.ex

# Generated by `mix github.gen` from docs/github-api/api.github.com.json.
# Do not edit by hand; re-run the task instead.

defmodule Noizu.Github.Api.SecurityAdvisories do
  @moduledoc """
  GitHub `security-advisories` API.
  """
  import Noizu.Github

  @doc """
  Create a temporary private fork

  @see https://docs.github.com/rest/security-advisories/repository-advisories#create-a-temporary-private-fork
  """
  def create_fork(ghsa_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories/#{ghsa_id}/forks"
    body = body
    api_call(:post, url, body, Noizu.Github.FullRepository, options)
  end

  @doc """
  Privately report a security vulnerability

  @see https://docs.github.com/rest/security-advisories/repository-advisories#privately-report-a-security-vulnerability
  """
  def create_private_vulnerability_report(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories/reports"
    body = body
    api_call(:post, url, body, Noizu.Github.RepositoryAdvisory, options)
  end

  @doc """
  Create a repository security advisory

  @see https://docs.github.com/rest/security-advisories/repository-advisories#create-a-repository-security-advisory
  """
  def create_repository_advisory(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories"
    body = body
    api_call(:post, url, body, Noizu.Github.RepositoryAdvisory, options)
  end

  @doc """
  Request a CVE for a repository security advisory

  @see https://docs.github.com/rest/security-advisories/repository-advisories#request-a-cve-for-a-repository-security-advisory
  """
  def create_repository_advisory_cve_request(ghsa_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories/#{ghsa_id}/cve"
    body = body
    api_call(:post, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Get a global security advisory

  @see https://docs.github.com/rest/security-advisories/global-advisories#get-a-global-security-advisory
  """
  def get_global_advisory(ghsa_id, options \\ nil) do
    url = github_base() <> "/advisories/#{ghsa_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.GlobalAdvisory, options)
  end

  @doc """
  Get a repository security advisory

  @see https://docs.github.com/rest/security-advisories/repository-advisories#get-a-repository-security-advisory
  """
  def get_repository_advisory(ghsa_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories/#{ghsa_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.RepositoryAdvisory, options)
  end

  @doc """
  List global security advisories

  @see https://docs.github.com/rest/security-advisories/global-advisories#list-global-security-advisories
  """
  def list_global_advisories(options \\ nil) do
    url =
      (
        query =
          [
            get_field(:ghsa_id, options, nil),
            get_field(:type, options, nil),
            get_field(:cve_id, options, nil),
            get_field(:ecosystem, options, nil),
            get_field(:severity, options, nil),
            get_field(:cwes, options, nil),
            get_field(:is_withdrawn, options, nil),
            get_field(:affects, options, nil),
            get_field(:published, options, nil),
            get_field(:updated, options, nil),
            get_field(:modified, options, nil),
            get_field(:epss_percentage, options, nil),
            get_field(:epss_percentile, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:direction, options, nil),
            get_field(:per_page, options, nil),
            get_field(:sort, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/advisories" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.GlobalAdvisory, options)
  end

  @doc """
  List repository security advisories for an organization

  @see https://docs.github.com/rest/security-advisories/repository-advisories#list-repository-security-advisories-for-an-organization
  """
  def list_org_repository_advisories(org, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:direction, options, nil),
            get_field(:sort, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil),
            get_field(:state, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/security-advisories" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.RepositoryAdvisory, options)
  end

  @doc """
  List repository security advisories

  @see https://docs.github.com/rest/security-advisories/repository-advisories#list-repository-security-advisories
  """
  def list_repository_advisories(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:direction, options, nil),
            get_field(:sort, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil),
            get_field(:state, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/security-advisories" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.RepositoryAdvisory, options)
  end

  @doc """
  Update a repository security advisory

  @see https://docs.github.com/rest/security-advisories/repository-advisories#update-a-repository-security-advisory
  """
  def update_repository_advisory(ghsa_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/security-advisories/#{ghsa_id}"
    body = body
    api_call(:patch, url, body, Noizu.Github.RepositoryAdvisory, options)
  end
end