# # ronin-exploits - A Ruby library for ronin-rb that provides exploitation and # payload crafting functionality. # # Copyright (c) 2007-2022 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 . # module Ronin module Exploits module Metadata # # Adds a {Shouts::ClassMethods#shouts shouts} metadata # attribute to a class. # # ### Example # # require 'ronin/exploits/metadata/shouts' # # class MyExploit < Exploit # # include Metadata::Shouts # # shouts ['Ultra Laser', 'Dr.Doom'] # # end # module Shouts # # Adds {ClassMethods} to the class. # # @param [Class] base # The base class which is including {Shouts}. # # @api private # def self.included(base) base.extend ClassMethods end module ClassMethods # # Gets or sets the exploit's shouts. # # @param [Array, nil] new_shouts # The optional new shout list to set. # # @return [Array] # The previously set shout list. # # @example Set the shouts: # shouts ['Ultra Laser', 'Dr.Doom'] # # @example Get the shout links: # MyExploit.shouts # # => ["Ultra Laser", "Dr.Doom"] # def shouts(new_shouts=nil) if new_shouts @shouts = shouts() + new_shouts else @shouts || if superclass.kind_of?(ClassMethods) superclass.shouts else [] end end end end end end end end