ronin-rb/ronin-exploits

View on GitHub
lib/ronin/exploits/advisory.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true
#
# ronin-exploits - A Ruby library for ronin-rb that provides exploitation and
# payload crafting functionality.
#
# Copyright (c) 2007-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# ronin-exploits is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ronin-exploits is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ronin-exploits.  If not, see <https://www.gnu.org/licenses/>.
#

module Ronin
  module Exploits
    #
    # Represents a security advisory.
    #
    # @api semipublic
    #
    # @since 1.0.0
    #
    class Advisory

      # The advisory ID.
      #
      # @return [String]
      attr_reader :id

      # The advisory URL.
      #
      # @return [String]
      attr_reader :url

      #
      # Initializes the advisory.
      #
      # @param [String] id
      #   The advisory ID.
      #
      # @param [String] url
      #   The advisory URL.
      #
      def initialize(id,url=self.class.url_for(id))
        @id  = id
        @url = url
      end

      #
      # Generates a default URL for the given advisory ID.
      #
      # @param [String] id
      #   The advisory ID.
      #
      # @return [String, nil]
      #   The URL for the advisory.
      #
      def self.url_for(id)
        case id
        when /\ACVE-/  then "https://nvd.nist.gov/vuln/detail/#{id}"
        when /\AGHSA-/ then "https://github.com/advisories/#{id}"
        end
      end

      #
      # Converts the advisory to a String.
      #
      # @return [String]
      #   The advisory ID.
      #
      def to_s
        @id.to_s
      end

    end
  end
end