usage

in api-reference-examples/ruby/te-tag-query/TETagQuery.rb [33:167]


  def usage(exitCode)
    stream =  exitCode == 0 ? $stdout : $stderr
  output = <<-EOF
Usage: te-tag-query [options] {verb} {verb arguments}
Downloads descriptors in bulk from ThreatExchange, given
either a tag name or a list of IDs one per line on standard input.

Options:
  -h|--help      Show detailed help.
  --list-verbs   Show a list of supported verbs.
  -q|--quiet     Only print IDs/descriptors output with no narrative.
  -v|--verbose   Print IDs/descriptors output along with narrative.
  -s|--show-urls Print URLs used for queries, before executing them.
  -a|--app-token-env-name {...} Name of app-token environment variable.
                 Defaults to "TX_ACCESS_TOKEN".
  -b|--te-base-url {...} Defaults to "#{ThreatExchange::TENet::DEFAULT_TE_BASE_URL}"

EOF

    stream.puts output
    SubcommandHandlerFactory.listVerbs()
    exit(exitCode)
  end 

  
  
  
  
  
  
  
  
  
  
  def handle(args)
    options = self.getDefaultOptions()
    subcommandHandlerFactory = SubcommandHandlerFactory.new

    
    
    loop do
      break if args.length == 0
      break unless args[0][0] == '-'
      option = args.shift

      if option == '-h'
        self.usage(0)
      elsif option == '--help'
        self.usage(0)
      elsif option == '-l' || option == '--list-verbs'
        SubcommandHandlerFactory.listVerbs()
        exit(0)

      elsif option == '-v' || option == '--verbose'
        options['verbose'] = true
      elsif option == '-q' || option == '--quiet'
        options['verbose'] = false
      elsif option == '-s' || option == '--show-urls'
        options['showURLs'] = true

      elsif option == '-a' || option == '--app-token-env-name'
        self.usage(1) unless args.length >= 1
        options['accessTokenEnvName'] = args.shift
      elsif option == '-b' || option == '--base-te-url'
        self.usage(1) unless args.length >= 1
        options['baseTEURL'] = args.shift

      else
        $stderr.puts "#{$0}: unrecognized  option #{option}"
        exit 1
      end
    end

    if args.length < 1
      self.usage(1)
    end
    verbName = args.shift
    verbArgs = args

    
    ThreatExchange::TENet::setAppTokenFromEnvName(options['accessTokenEnvName'])
    baseTEURL = options['baseTEURL']
    unless baseTEURL.nil?
      ThreatExchange::TENet::setTEBaseURL(baseTEURL)
    end
    ThreatExchange::TENet::setAppTokenFromEnvName(options['accessTokenEnvName'])

    subcommandHandler = subcommandHandlerFactory.create(verbName)

    if subcommandHandler.nil?
      $stderr.puts "#{$0}: unrecognized verb \"#{verbName}\""
      exit 1
    end

    subcommandHandler.handle(args, options)

  end 

  
  def getDefaultOptions
    return {
      'verbose'                  => false,
      'showURLs'                 => false,
      'pageSize'                 => 10,

      'accessTokenEnvName'       => 'TX_ACCESS_TOKEN',
      
      'baseTEURL'                => nil,
    }
  end 
end 




class SubcommandHandlerFactory
  VERB_NAMES = {
    'look-up-tag-id' => 'look-up-tag-id',
    'tag-to-ids'     => 'tag-to-ids',
    'ids-to-details' => 'ids-to-details',
    'tag-to-details' => 'tag-to-details',
    'paginate'       => 'paginate',
    'submit'         => 'submit',
    'update'         => 'update',
    'copy'           => 'copy',
  }

  
  def self.listVerbs()
    puts "Verbs:"
    VERB_NAMES.each do |key, _value|
      puts "  #{key}"
    end
  end