hammackj/risu

View on GitHub
lib/risu/models/reference.rb

Summary

Maintainability
A
3 hrs
Test Coverage
# Copyright (c) 2010-2020 Jacob Hammack.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.


module Risu
    module Models

        # Reference Model
        class Reference < ActiveRecord::Base
          has_many :plugins

            class << self

                #Generates a full string of all the references
                # @TODO automate references to parser references to see if all are covered
                #
                # @returns [String] of all the references with in-line formatting for
                # direct output to the report
                def reference_string
                    reference_names = ["cve", "cpe", "bid", "see_also", "iava", "msft",
                        "osvdb", "cert", "edbid", "rhsa", "secunia", "suse", "dsa",
                        "owasp", "cwe", "iavb", "iavt", "cisco_sa", "ics_alert",
                        "cisco_bug_id", "cisco_sr", "cert_vu", "vmsa", "cert_cc",
                        "msvr", "apple_sa", "icsa"
                    ]

                    ref_string = ""

                    reference_names.each do |type|
                        ref = reference_string_by self.send(type)

                        ref_string << "<b>#{type}</b>: #{ref}\n" if ref.length != 0
                    end

                    ref_string
                end

                # Generates a string of all the references of the specified type
                #
                # @param type Result of a [Reference] model reference accessors
                #
                # @return [String] containing all references of type comma separated
                def reference_string_by type
                    rstring = []
                    type.each do |ref|
                        rstring << ref.value
                    end

                    rstring.join(", ")
                end

                # Queries all unique CVEs
                #
                def cve
                    where(:reference_name => "cve").select('DISTINCT value')
                end

                # Queries all unique CPE
                #
                def cpe
                    where(:reference_name => "cpe").select('DISTINCT value')
                end

                # Queries all unique BID
                #
                def bid
                    where(:reference_name => "bid").select('DISTINCT value')
                end

                # Queries all unique see_also
                #
                def see_also
                    where(:reference_name => "see_also").select('DISTINCT value')
                end

                # Queries all unique IAVA
                #
                def iava
                    where(:reference_name => "iava").select('DISTINCT value')
                end

                # Queries all unique MSFT
                #
                def msft
                    where(:reference_name => "msft").select('DISTINCT value')
                end

                # Queries all unique OSvdb
                #
                def osvdb
                    where(:reference_name => "osvdb").select('DISTINCT value')
                end

                # Queries all unique cert refs
                #
                def cert
                    where(:reference_name => "cert").select('DISTINCT value')
                end

                # Queries all unique edbid refs
                #
                def edbid
                    where(:reference_name => "edb-id").select('DISTINCT value')
                end

                # Queries all unique rhsa refs
                #
                def rhsa
                    where(:reference_name => "rhsa").select('DISTINCT value')
                end

                # Queries all unique secunia refs
                #
                def secunia
                    where(:reference_name => "secunia").select('DISTINCT value')
                end

                # Queries all unique suse refs
                #
                def suse
                    where(:reference_name => "suse").select('DISTINCT value')
                end

                # Queries all unique dsa refs
                #
                def dsa
                    where(:reference_name => "dsa").select('DISTINCT value')
                end

                # Queries all unique owasp refs
                #
                def owasp
                    where(:reference_name => "owasp").select('DISTINCT value')
                end

                # Queries all unique cwe refs
                #
                def cwe
                    where(:reference_name => "cwe").select('DISTINCT value')
                end

                #
                #
                def iavb
                    where(:reference_name => "iavb").select('DISTINCT value')
                end

                #
                #
                def iavt
                    where(:reference_name => "iavt").select('DISTINCT value')
                end

                #
                #
                def cisco_sa
                    where(:reference_name => "cisco-sa").select('DISTINCT value')
                end

                #
                #
                def ics_alert
                    where(:reference_name => "ics-alert").select('DISTINCT value')
                end

                #
                #
                def cisco_bug_id
                    where(:reference_name => "cisco-bug-id").select('DISTINCT value')
                end

                #
                #
                def cisco_sr
                    where(:reference_name => "cisco-sr").select('DISTINCT value')
                end

                #
                #
                def cert_vu
                    where(:reference_name => "cert-vu").select('DISTINCT value')
                end

                #
                #
                def vmsa
                    where(:reference_name => "vmsa").select('DISTINCT value')
                end

                #
                #
                def cert_cc
                    where(:reference_name => "cert-cc").select('DISTINCT value')
                end

                #
                #
                def apple_sa
                    where(:reference_name => "apple-sa").select('DISTINCT value')
                end

                #
                #
                def icsa
                    where(:reference_name => "icsa").select('DISTINCT value')
                end

                #
                #
                def msvr
                    where(:reference_name => "msvr").select('DISTINCT value')
                end

                #
                #
                def usn
                    where(:reference_name => "usn").select('DISTINCT value')
                end
            end
        end
    end
end