ronin-rb/ronin

View on GitHub
lib/ronin/cli/commands/unquote.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# frozen_string_literal: true
#
# Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# Ronin is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ronin 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ronin.  If not, see <https://www.gnu.org/licenses/>.
#

require 'ronin/cli/string_methods_command'

module Ronin
  class CLI
    module Commands
      #
      # Unquotes a double/single quoted string.
      #
      # ## Usage
      #
      #     ronin unquote [options] [FILE ...]
      #
      # ## Options
      #
      #     -f, --file FILE                  Optional file to process
      #         --string STRING              Optional string to process
      #     -M, --multiline                  Process each line separately
      #     -n, --keep-newlines              Preserves newlines at the end of each line
      #     -X, --hex                        Unquotes the Hex string
      #     -c, --c                          Unquotes the C string
      #     -j, --js                         Unquotes the JavaScript String
      #     -S, --shell                      Unquotes the Shell String
      #     -P, --powershell                 Unquotes the PowerShell String
      #     -R, --ruby                       Unquotes the Ruby String
      #     -h, --help                       Print help information
      #
      # ## Arguments
      #
      #     [FILE ...]                       Optional file(s) to process
      #
      class Unquote < StringMethodsCommand

        option :hex, short: '-X',
                     desc: 'Unquotes the Hex string' do
                       require 'ronin/support/encoding/hex'
                       @method_calls << :hex_unquote
                     end

        option :c, short: '-c',
                   desc: 'Unquotes the C string' do
                     require 'ronin/support/encoding/c'
                     @method_calls << :c_unquote
                   end

        option :js, short: '-j',
                    desc: 'Unquotes the JavaScript String' do
                      require 'ronin/support/encoding/js'
                      @method_calls << :js_unquote
                    end

        option :shell, short: '-S',
                       desc: 'Unquotes the Shell String' do
                         require 'ronin/support/encoding/shell'
                         @method_calls << :shell_unquote
                       end

        option :powershell, short: '-P',
                            desc: 'Unquotes the PowerShell String' do
                              require 'ronin/support/encoding/powershell'
                              @method_calls << :powershell_unquote
                            end

        option :ruby, short: '-R',
                      desc: 'Unquotes the Ruby String' do
                        require 'ronin/support/encoding/ruby'
                        @method_calls << :ruby_unquote
                      end

        description 'Unquotes a double/single quoted string'

        man_page 'ronin-unquote.1'

        #
        # Unquotes the String.
        #
        # @param [String] string
        #   The String to unquote.
        #
        # @return [String]
        #   The unquoted String.
        #
        # @note
        #   If no options are given, then `--string` is assumed.
        #
        def process_string(string)
          if @method_calls.empty?
            string.unquote
          else
            super(string)
          end
        end

      end
    end
  end
end