threadfix-cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1e54acd08e9bb3fae80fc89232d76d1e2c2d57b3e94d4d640b687c61cace57f
4
- data.tar.gz: 2269a7fb0d0b9ac1ab02072ce8d507a57383d385a0330655aa73400b9969771a
3
+ metadata.gz: b742e971c8a8526553a028f6977d58f412ea8366279ddb691ec1359b924fb371
4
+ data.tar.gz: c08fabb6f96447287c261d5bd102cf6f76141842f3614e6fc0058af3b9067dc6
5
5
  SHA512:
6
- metadata.gz: 7b123e7c57c914c821cf434430c46310bd41cf46e5bce6bcab53c0ee882ae0b1742bcc9ba918aeb68a76f9d14058359b2ad7a0c061a79f6d8b2ae87fb02b0a68
7
- data.tar.gz: af0c3b4df849907049b148f73c7d7ebacb6856f0e52ed87de12dcb52a911051413e81a5b737a70e38dae108789bda9ee6df02d541a6dd93b3d721674baa55376
6
+ metadata.gz: 7263c301222945d2b3faed28fca1df0100a0b5310b66213b7557d3761dfd735ef3effcca67b7879e4a7b6bef99f93cb7b3b31b3a04facac4568633beefd725ee
7
+ data.tar.gz: 44ecd4264b54fc75276fd4ada4e9d2013b0a59faf0baa3c20e08b6bf0248d45c65f7a9688753a9bc0bfa292d5130b6b11e744684b1c697f0783e7f215cf38e2c
@@ -1,3 +1,9 @@
1
1
  # v0.1.0
2
2
 
3
3
  - Initial release to upload scans
4
+
5
+ # v0.2.0
6
+
7
+ - Changed $HOST to $THREADFIX_HOST
8
+ - Added $ threadfix version
9
+ - Added $ threadfix applications lookup
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- threadfix (0.1.0)
5
- rest-client
6
- thor
4
+ threadfix-cli (0.1.0)
5
+ rest-client (= 2.0.2)
6
+ thor (= 0.20.3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -53,7 +53,7 @@ DEPENDENCIES
53
53
  pry
54
54
  rake (~> 10.0)
55
55
  rspec (~> 3.0)
56
- threadfix!
56
+ threadfix-cli!
57
57
 
58
58
  BUNDLED WITH
59
59
  2.0.1
data/README.md CHANGED
@@ -1,18 +1,29 @@
1
1
  # Threadfix
2
- Command line tool to upload a static analysis report to ThreadFix
2
+ Command line tool that wraps the ThreadFix API
3
3
 
4
4
  ## Installation
5
5
 
6
- Install it with:
6
+ Install with:
7
7
 
8
8
  ```ruby
9
- $ gem install threadfix
9
+ $ gem install threadfix-cli
10
10
  ```
11
11
 
12
12
  ## Usage
13
13
 
14
14
  ```ruby
15
- $ threadfix scan upload --app-id <APP-ID> --host <Server> --key <Auth Key> --file ./repo/results.json
15
+ $ export THREADFIX_TOKEN=<API key>
16
+
17
+ $ threadfix applications lookup \
18
+ --app-name <Application Name> \
19
+ --team-name <Team Name> \
20
+ #=> <Application ID>
21
+
22
+ $ threadfix scan upload \
23
+ --app-id <Application ID> \
24
+ --host <Host Name> \
25
+ --file ./repo/results.json
26
+ #=> <Upload Status>
16
27
  ```
17
28
 
18
29
  ## Development
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require "threadfix/cli/version"
3
3
  require "threadfix/cli/scan"
4
+ require "threadfix/cli/applications"
4
5
  require "threadfix/client"
5
6
 
6
7
  module Threadfix
@@ -8,7 +9,15 @@ module Threadfix
8
9
 
9
10
  class Error < StandardError; end
10
11
 
12
+ desc "version", "print version"
13
+ def version
14
+ puts Cli::VERSION
15
+ end
16
+
11
17
  desc "scan <command>", "manage scans"
12
18
  subcommand "scan", Cli::Scan
19
+
20
+ desc "applications <command>", "manage applications"
21
+ subcommand "applications", Cli::Applications
13
22
  end
14
23
  end
@@ -0,0 +1,30 @@
1
+ require "threadfix/client"
2
+ module Threadfix
3
+ module Cli
4
+ class Applications < Thor
5
+ desc "lookup", "lookup an application ID"
6
+ option :host
7
+ option :key, desc: "Authorisation key"
8
+ option :app_name, required: true
9
+ option :team_name, required: true
10
+ def lookup
11
+ Client.configure do |config|
12
+ config.host = options[:host] if options[:host]
13
+ config.key = options[:key] if options[:key]
14
+ end
15
+
16
+ begin
17
+ response = Client::Applications.lookup(team_name: options[:team_name], app_name: options[:app_name] )
18
+ if response['message'] == ''
19
+ puts "ID: #{response['object']['id']}"
20
+ else
21
+ puts response['message']
22
+ end
23
+ rescue SocketError => e
24
+ puts "Error: Unable open connection to '#{Client.config.host}'"
25
+ exit 1
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -4,7 +4,7 @@ module Threadfix
4
4
  class Scan < Thor
5
5
  desc "upload", "Uploads a scan to ThreadFix"
6
6
  option :host
7
- option 'app-id', required: true, type: :numeric
7
+ option :app_id, required: true, type: :numeric
8
8
  option :file, required: true, aliases: '-f', desc: "Report to upload"
9
9
  option :key, desc: "Authorisation key"
10
10
  def upload
@@ -14,7 +14,7 @@ module Threadfix
14
14
  end
15
15
 
16
16
  begin
17
- response = Client::Scans.upload(file_path: options[:file], app_id: options['app-id'] )
17
+ response = Client::Scans.upload(file_path: options[:file], app_id: options[:app_id] )
18
18
  puts response['message']
19
19
  rescue Errno::ENOENT => e
20
20
  puts "Error: File or directory '#{options[:file]}' doesn't exist."
@@ -1,5 +1,5 @@
1
1
  module Threadfix
2
2
  module Cli
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  require "threadfix/client/scans"
2
+ require "threadfix/client/applications"
2
3
 
3
4
  module Threadfix
4
5
  module Client
@@ -15,7 +16,7 @@ module Threadfix
15
16
  attr_accessor :host, :key
16
17
 
17
18
  def initialize
18
- @host = ENV['HOST']
19
+ @host = ENV['THREADFIX_HOST']
19
20
  @key = ENV['THREADFIX_TOKEN']
20
21
  end
21
22
  end
@@ -0,0 +1,17 @@
1
+ require "threadfix/client/applications/lookup"
2
+
3
+ module Threadfix
4
+ module Client
5
+ module Applications
6
+ class <<self
7
+
8
+ # @param file_path
9
+ # @return Hash
10
+ def lookup(options={})
11
+ action = Lookup.new(options)
12
+ action.perform!
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ module Threadfix
2
+ module Client
3
+ module Applications
4
+ class Lookup
5
+ API_VERSION='2.5.0.2'
6
+
7
+ attr_reader :team_name, :app_name
8
+
9
+ def initialize(options={})
10
+ @team_name = options[:team_name]
11
+ @app_name = options[:app_name]
12
+ end
13
+
14
+ def perform!
15
+ begin
16
+ r = RestClient.get(
17
+ endpoint.to_s,
18
+ { :accept => "application/json", :Authorization => "APIKEY #{apiKey}" }
19
+ )
20
+ JSON.parse(r.body)
21
+ rescue RestClient::NotFound => e
22
+ puts "Endpoint not found (using API version: #{API_VERSION})"
23
+ raise e
24
+ rescue RestClient::ExceptionWithResponse => e
25
+ raise e
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def endpoint
32
+ URI("#{host}/rest/#{API_VERSION}/applications/#{team_name}/lookup?name=#{app_name}")
33
+ end
34
+
35
+ def host
36
+ Client.config.host
37
+ end
38
+
39
+ def apiKey
40
+ Client.config.key
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -1,12 +1,13 @@
1
1
  require 'rest-client'
2
2
  require 'json'
3
+ require 'uri'
3
4
 
4
5
  module Threadfix
5
6
  module Client
6
7
  module Scans
7
8
  class Upload
8
9
  API_VERSION='2.5'
9
- attr_accessor :file_path, :app_id
10
+ attr_reader :file_path, :app_id
10
11
 
11
12
  def initialize(options={})
12
13
  @file_path = options[:file_path]
@@ -16,7 +17,7 @@ module Threadfix
16
17
  def perform!
17
18
  begin
18
19
  r = RestClient.post(
19
- "#{host}/rest/#{API_VERSION}/applications/#{app_id}/upload",
20
+ endpoint.to_s,
20
21
  { file: file },
21
22
  { :accept => "application/json", :Authorization => "APIKEY #{apiKey}" }
22
23
  )
@@ -31,6 +32,10 @@ module Threadfix
31
32
 
32
33
  private
33
34
 
35
+ def endpoint
36
+ URI("#{host}/rest/#{API_VERSION}/applications/#{app_id}/upload")
37
+ end
38
+
34
39
  def file
35
40
  File.new(file_path, 'rb')
36
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: threadfix-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Elliott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-08 00:00:00.000000000 Z
11
+ date: 2019-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -100,9 +100,12 @@ files:
100
100
  - bin/setup
101
101
  - bin/threadfix
102
102
  - lib/threadfix/cli.rb
103
+ - lib/threadfix/cli/applications.rb
103
104
  - lib/threadfix/cli/scan.rb
104
105
  - lib/threadfix/cli/version.rb
105
106
  - lib/threadfix/client.rb
107
+ - lib/threadfix/client/applications.rb
108
+ - lib/threadfix/client/applications/lookup.rb
106
109
  - lib/threadfix/client/scans.rb
107
110
  - lib/threadfix/client/scans/upload.rb
108
111
  - threadfix-cli.gemspec