handle

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


  def handle(args, options)

    options['dryRun'] = false;
    options['descriptorIDsFromStdin'] = false;

    postParams = {}

    # Local keystroke-saver for this enum
    names = ThreatExchange::TENet::POST_PARAM_NAMES

    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 == '--dry-run'
        options['dryRun'] = true

      elsif option == '-N'
        options['descriptorIDsFromStdin'] = true;
      elsif option == '-n'
        self.usage(1) unless args.length >= 1
        postParams[names[:descriptor_id]] = args.shift;

      elsif option == '--tags'
        self.usage(1) unless args.length >= 1
        postParams[names[:tags]] = args.shift;
      elsif option == '--add-tags'
        self.usage(1) unless args.length >= 1
        postParams[names[:add_tags]] = args.shift;
      elsif option == '--remove-tags'
        self.usage(1) unless args.length >= 1
        postParams[names[:remove_tags]] = args.shift;

      else
        handled, args = self.commonPosterOptionCheck(option, args, postParams)
        if not handled
          $stderr.puts "#{$0} #{@verbName}: unrecognized  option #{option}"
          exit 1
        end
      end
    end

    if args.length > 0
      $stderr.puts "#{$0} #{@verbName}: extraneous argument(s) \"#{args.join(' ')}\"."
      exit 1
    end

    if options['descriptorIDsFromStdin']
      unless postParams[names[:descriptor_id]].nil?
        $stderr.puts "#{$0} #{@verbName}: only one of -N and -n must be supplied."
        exit 1
      end

      $stdin.readlines.each do |line|
        postParams[names[:descriptor_id]] = line.chomp
        self.updateSingle(
          postParams,
          verbose: options['verbose'],
          showURLs: options['showURLs'],
          dryRun: options['dryRun'],
        )
      end
    else
      if postParams[names[:descriptor_id]].nil?
        $stderr.puts "#{$0} #{@verbName}: exactly one of -N and -n must be supplied."
        exit 1
      end
      self.updateSingle(
        postParams,
        verbose: options['verbose'],
        showURLs: options['showURLs'],
        dryRun: options['dryRun'],
      )
    end
  end # UpdateHandler.handle

  # ----------------------------------------------------------------
  def updateSingle(
    postParams,
    verbose: false,
    showURLs: false,
    dryRun: false)

    validationErrorMessage, response_body, response_code = ThreatExchange::TENet::updateThreatDescriptor(
      postParams,
      showURLs: showURLs,
      dryRun: dryRun)

    unless validationErrorMessage.nil?
      $stderr.puts validationErrorMessage
      exit 1
    end

    puts response_body

    if response_code != "200"
      exit 1
    end
  end # UpdateHandler.updateSingle
end # class UpdateHandler

# ----------------------------------------------------------------
class CopyHandler < AbstractPostSubcommandHandler
  # ----------------------------------------------------------------
  def initialize(verbName)
    super(verbName)
  end