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