#
# 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