# # Copyright (c) 2009-2012 Hal Brodigan (postmodern.mod3 at gmail.com) # # This file is part of Ronin Gen. # # Ronin Gen 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 Gen 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 Gen. If not, see . # require 'ronin/ui/cli/command' require 'ronin/gen/file_generator' require 'ronin/gen/dir_generator' require 'ronin/gen/gen' require 'ronin/gen/version' require 'parameters/options' module Ronin module UI module CLI module Commands # # Runs or lists available generators. # # ## Usage # # ronin-gen [[options] | GENERATOR [generator-options]] # # ## Options # # -v, --[no-]verbose Enable verbose output. # -q, --[no-]quiet Disable verbose output. # --[no-]silent Silence all output. # --[no-]color Enables color output. # Default: true # -V, --[no-]version Prints the ronin-gen version. # # ## Examples # # ronin-gen repository myrepo --git # ronin-gen library ronin-pwn # class Gen < Command summary "Runs or lists available generators" usage '[[options] | GENERATOR [generator-options]]' option :version, :type => true, :flag => '-V', :description => 'Prints the ronin-gen version' examples [ "ronin-gen repository myrepo --git", "ronin-gen library ronin-pwn" ] # # Starts the `ronin-gen` command. # # @param [Array] argv # The arguments for the command. # def start(argv=ARGV) if (argv.empty? || argv.first.start_with?('-')) return super(argv) end generator_name = argv.shift generator = Ronin::Gen.generator(generator_name).new case generator when Ronin::Gen::FileGenerator, Ronin::Gen::DirGenerator opts = Parameters::Options.parser(generator) do |opts| opts.banner = "ronin-gen #{generator_name} PATH [options]" end args = opts.parse(argv) if args.empty? print_error "Must specify a PATH argument" exit -1 end generator.path = args.first else opts = Parameters::Options.parser(generator) do |opts| opts.banner = "ronin-gen #{generator_name} [options]" end args = opts.parse(argv) end begin generator.generate! rescue Parameters::MissingParam => error print_error error print_error "Please see `ronin-gen #{generator_name} --help`" exit -1 rescue => error print_exception error exit -1 end end # # Lists the available generators. # def execute if version? puts "ronin-gen #{Ronin::Gen::VERSION}" return end print_array Ronin::Gen.generators, :title => 'Available Generators' end end end end end end