diff options
| author | mo <mo.khan@gmail.com> | 2018-03-18 17:27:05 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2018-03-18 17:27:05 -0600 |
| commit | 92f232c58f4d33dcc09006c43bf9ada20df720ec (patch) | |
| tree | 333557f6da4cc19bca6008386bdeac82ffc0c498 /lib | |
| parent | 033a124c0cf8e33ddd3590aed9c6954ab74042c5 (diff) | |
add amp4e computers command.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ats.rb | 7 | ||||
| -rw-r--r-- | lib/ats/amp4e/api.rb | 55 | ||||
| -rw-r--r-- | lib/ats/amp4e/computers.rb | 15 | ||||
| -rw-r--r-- | lib/ats/cli.rb | 6 | ||||
| -rw-r--r-- | lib/ats/cli/amp4e/application.rb | 12 | ||||
| -rw-r--r-- | lib/ats/cli/amp4e/command.rb | 26 | ||||
| -rw-r--r-- | lib/ats/cli/amp4e/computers.rb | 14 |
7 files changed, 133 insertions, 2 deletions
@@ -1,12 +1,15 @@ +require 'base64' require 'json' require 'logger' require 'net/http' require 'yaml' -require 'ats/version' - require 'ats/configuration' require 'ats/http_api' +require 'ats/version' + +require 'ats/amp4e/api' +require 'ats/amp4e/computers' require 'ats/threat_grid/api' require 'ats/threat_grid/organizations' require 'ats/threat_grid/samples' diff --git a/lib/ats/amp4e/api.rb b/lib/ats/amp4e/api.rb new file mode 100644 index 0000000..202df1a --- /dev/null +++ b/lib/ats/amp4e/api.rb @@ -0,0 +1,55 @@ +module ATS + module AMP4E + class API + HEADERS = { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'User-Agent' => "RubyGems/ATS #{ATS::VERSION}", + }.freeze + + attr_reader :http, :profile, :configuration + + def initialize( + api: HttpAPI.new(headers: HEADERS), + profile: :default, + configuration: ATS.configuration + ) + @http = api + @profile = profile.to_s + @configuration = configuration + end + + def computers + ATS::AMP4E::Computers.new(self) + end + + def get(url, params: {}, version: 1) + http.get(build_uri(url, version: version), headers: headers, body: params) do |request, response| + JSON.parse(response.body, symbolize_names: true) + end + end + + private + + def build_uri(relative_url, version:) + URI.parse("#{api_host}/v#{version}/#{relative_url}") + end + + def client_id + configuration[profile]['amp4e']['client_id'] + end + + def client_secret + configuration[profile]['amp4e']['client_secret'] + end + + def api_host + configuration[profile]['amp4e']['api_host'] + end + + def headers + { AUTHORIZATION: "Basic #{Base64.strict_encode64("#{client_id}:#{client_secret}")}" } + end + end + end +end diff --git a/lib/ats/amp4e/computers.rb b/lib/ats/amp4e/computers.rb new file mode 100644 index 0000000..c1f49a1 --- /dev/null +++ b/lib/ats/amp4e/computers.rb @@ -0,0 +1,15 @@ +module ATS + module AMP4E + class Computers + attr_reader :api + + def initialize(api) + @api = api + end + + def list + api.get("computers") + end + end + end +end diff --git a/lib/ats/cli.rb b/lib/ats/cli.rb index c8d360d..682bc50 100644 --- a/lib/ats/cli.rb +++ b/lib/ats/cli.rb @@ -2,6 +2,9 @@ require 'ats' require 'thor' require 'ats/cli/threat_grid' +require 'ats/cli/amp4e/command' +require 'ats/cli/amp4e/computers' +require 'ats/cli/amp4e/application' module ATS module CLI @@ -11,6 +14,9 @@ module ATS desc 'threatgrid SUBCOMMAND ...ARGS', 'interact with the Threat Grid API' subcommand 'threatgrid', ThreatGrid::Application + desc 'amp4e SUBCOMMAND ...ARGS', 'interact with the AMP for Endpoints API' + subcommand 'amp4e', AMP4E::Application + desc 'version', 'Display the current version' def version say ATS::VERSION diff --git a/lib/ats/cli/amp4e/application.rb b/lib/ats/cli/amp4e/application.rb new file mode 100644 index 0000000..34e5693 --- /dev/null +++ b/lib/ats/cli/amp4e/application.rb @@ -0,0 +1,12 @@ +module ATS + module CLI + module AMP4E + class Application < Thor + class_option :profile, default: :default, required: false + + desc 'computers SUBCOMMAND ...ARGS', 'interact with the Threat Grid API' + subcommand :computers, ATS::CLI::AMP4E::Computers + end + end + end +end diff --git a/lib/ats/cli/amp4e/command.rb b/lib/ats/cli/amp4e/command.rb new file mode 100644 index 0000000..9e6a93a --- /dev/null +++ b/lib/ats/cli/amp4e/command.rb @@ -0,0 +1,26 @@ +module ATS + module CLI + module AMP4E + class Command < Thor + class_option :profile, default: :default, required: false + + def self.printable_commands(*args) + super.map do |x| + x[0] = x[0].gsub(/^ats/, 'ats amp4e') + x + end + end + + protected + + def api + ATS::AMP4E::API.new(profile: options['profile']) + end + + def print_json(json) + say JSON.pretty_generate(json), :green + end + end + end + end +end diff --git a/lib/ats/cli/amp4e/computers.rb b/lib/ats/cli/amp4e/computers.rb new file mode 100644 index 0000000..741584f --- /dev/null +++ b/lib/ats/cli/amp4e/computers.rb @@ -0,0 +1,14 @@ +module ATS + module CLI + module AMP4E + class Computers < Command + class_option :profile, default: :default, required: false + + desc 'list', 'list' + def list + print_json api.computers.list + end + end + end + end +end |
