controls 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: 55c739a368bec0d5fb73f517d4646f91491f25fc
4
- data.tar.gz: c592434a49b7919d222663c9c54c1af04a9bebdb
3
+ metadata.gz: 8b246a67459339490b8d0afcdf27f033bc458b6e
4
+ data.tar.gz: ee9b5eab69a2e4add533df170ea443c5f4d314cc
5
5
  SHA512:
6
- metadata.gz: 68cfed432b398e1f4b2b4e7651ee4ca7f446d3ff8bd7ca185201b2e10267bf0c8612c0033dcf75f0c838a38ac6899f25ad836fb6a7cb5468185e2d7db4f5413d
7
- data.tar.gz: 9058fbd27a40f5a5abe79d17fec605bb13b37c7ec57db3d3184d460c42d7c2a3a239850e352f026d439fd42beb7406b458cf22ffee5a2e1525e382264f5c921b
6
+ metadata.gz: 6f3cca4615165876ece9886fbafb87db819d875e09c62511e0631c66ea643e958b9d353abd90337601ec426ede94d0918095b5edb84046d22c8ef37ef1701df8
7
+ data.tar.gz: e4267b9510bab07d0214a4879456190be7fb6d3e14b0035dbad50d2f4561153596bc91904d21b7264e271bd853323fbcf54bae8e5bdfb61592a0df845d3de97c
data/LICENSE.md CHANGED
@@ -1,20 +1,27 @@
1
- The MIT License (MIT)
1
+ Copyright (c) 2013, Rapid7 Inc.
2
+ All rights reserved.
2
3
 
3
- Copyright (c) 2013 Erran Carey
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
4
6
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of
6
- this software and associated documentation files (the "Software"), to deal in
7
- the Software without restriction, including without limitation the rights to
8
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
- the Software, and to permit persons to whom the Software is furnished to do so,
10
- subject to the following conditions:
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
11
9
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
14
13
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ * Neither the name of the Rapid7 Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
- # ![controls insight](https://raw.github.com/ipwnstuff/controls.rb/master/docs/images/controlsinsight.png "controlsinsight") client gem
2
- The **controls**insight (controls) gem interfaces with [Rapid7's **controls**insight API](http://docs.controlsinsight.apiary.io).
1
+ # controlsinsight client gem
2
+ The **controls**insight (controls) gem interfaces with [Rapid7's **controls**insight API](http://rapid7.viewdocs.io/controlsinsight.rb).
3
3
 
4
4
  ## Installation
5
5
  Add this line to your application's Gemfile:
@@ -15,8 +15,8 @@ Or install it yourself as:
15
15
  $ gem install controls
16
16
 
17
17
  ## Documentation
18
- * [Apiary API documentation](http://docs.controlsinsight.apiary.io)
19
- * [YARD documentation for the Ruby client](http://www.rubydoc.info/github/ipwnstuff/controls.rb)
18
+ * [viewdocs.io API documentation](http://rapid7.viewdocs.io/controlsinsight.rb)
19
+ * [YARD documentation for the Ruby client](http://www.rubydoc.info/github/rapid7/controlsinsight.rb)
20
20
 
21
21
  ## Basic Resources
22
22
  ### Authentication
@@ -60,6 +60,9 @@ Controls.assets('your-asset-uuid-here')
60
60
  # Only retrieve a single guidance by name
61
61
  Controls.guidance('your-guidance-name-here')
62
62
  # => TODO: Add example output
63
+
64
+ Controls.guidance_by_threat('overall-malware')
65
+ # => TODO: Add example output
63
66
  ```
64
67
 
65
68
  ### Threats
@@ -73,6 +76,29 @@ Controls.threats('threat-name-here')
73
76
  # => TODO: Add example output
74
77
  ```
75
78
 
79
+ ### Threat Vectors
80
+ ```ruby
81
+ # Retrieve a list of all the threat vectors
82
+ Controls.threat_vectors
83
+ # => TODO: Add example output
84
+
85
+ # Only retrieve a single threat vector
86
+ Controls.threat_vectors('vector-name-here')
87
+ # => TODO: Add example output
88
+ ```
89
+
90
+ # Trends
91
+ ```ruby
92
+ # Retrieve a set of statistics over time
93
+ Controls.threat_trends('threat-name-here')
94
+ # => TODO: Add example output
95
+
96
+ Controls.threat_vector_trends('vector-name-here')
97
+ # => TODO: Add example output
98
+
99
+ Controls.configuration_trends('configuration-name-here')
100
+ # => TODO: Add example output
101
+ ```
76
102
 
77
103
  ## License
78
104
  This project was created by [Erran Carey (@ipwnstuff)](http://ipwnstuff.github.io) and licensed under [the MIT License](LICENSE.md).
@@ -0,0 +1,86 @@
1
+ ControlsInsight API v1.0 (beta)
2
+ ---
3
+
4
+ ## Overview
5
+ Rapid7's **controlsinsight**, hereafter **controls**insight or simply **controls**,
6
+
7
+ The **controls**insight API v1.0 allow developers to utilize information about security controls, configurations, threats, and more from **controls**.
8
+
9
+ This documentation includes custom Curl examples and Ruby examples using the Ruby API client (ipwnstuff/controls.rb).
10
+
11
+ Apiary.io also adds example requests in other languages, though they aren't supported tested them.
12
+
13
+ To see advanced usage in Ruby read the [Ruby client documentation here](http://www.rubydoc.info/github/rapid7/controlsinsight.rb).
14
+
15
+ ## Authentication
16
+ You must authenticate using HTTP Basic Auth when making any of the API requests.
17
+
18
+ ## Curl
19
+ See the cURL man pages on how to authenticate.
20
+
21
+ ```bash
22
+ # Use -k to allow a self-signed certificate
23
+ curl --user admin:password https://nexpose.local:3780/insight/controls/api/1.0
24
+ ```
25
+
26
+ ## Ruby
27
+ ```ruby
28
+ # Allow connections to Nexpose's self-signed cert
29
+ Controls.middleware.ssl[:verify] = false
30
+
31
+ Controls.login 'admin', 'password'
32
+
33
+ # Return the API reference for the current API version
34
+ Controls.get '/'
35
+ ```
36
+
37
+ ## Authentication via a `.netrc` file
38
+ ### Curl
39
+ ```bash
40
+ # Use -k to allow a self-signed certificate
41
+ curl -H 'Accept: application/json' --netrc-file ~/.rapid7_netrc -ik https://nexpose.local:3780/insight/controls/api/1.0
42
+ ```
43
+
44
+ ### Ruby
45
+ On the command line run:
46
+ ```bash
47
+ gem install netrc
48
+ irb -r controls
49
+ ```
50
+
51
+ Once you open IRB run:
52
+ ```ruby
53
+ # Allow connections to Nexpose's self-signed cert
54
+ Controls.middleware.ssl[:verify] = false
55
+
56
+ client = Controls::Client.new({
57
+ :api_endpoint => 'https://nexpose.local:3780/insight/controls/api/1.0',
58
+ :web_endpoint => 'https://nexpose.local:3780/insight/controls',
59
+ :netrc => true,
60
+ :netrc_file => '~/.rapid7_netrc'
61
+ })
62
+ ```
63
+
64
+ **NOTE**: The **controls** Ruby client doesn't enable or install netrc support by default. You must follow the preceding instructions to enable it.
65
+ # Status & Error Codes
66
+ ## Success
67
+ <table>
68
+ <tr><th>Status Code</th><th>Status</th><th>Description</th></tr>
69
+ <tr><td>200</td><td>OK</td><td>The request was successful (includes a hash/array for the requested resource)</td></tr>
70
+ </table>
71
+
72
+ ## Failure
73
+ <table>
74
+ <tr><th>Status Code</th><th>Status</th><th>Description</th></tr>
75
+ <tr><td>401</td><td>Unauthorized</td><td>The request didn't contain any information for authentication</td></tr>
76
+ <tr><td>403</td><td>Bad Request</td><td>The query parameters you supplied were invalid</td></tr>
77
+ <tr><td>404</td><td>Not Found</td><td>The resource(s) you requested couldn't be found (returns an error message)</td></tr>
78
+ </table>
79
+
80
+ ## Example Error JSON
81
+ ```json
82
+ {
83
+ "status": 404,
84
+ "messsage": "The resource x could not be found."
85
+ }
86
+ ```
@@ -8,6 +8,7 @@ require 'controls/client/assets'
8
8
  require 'controls/client/guidance'
9
9
  require 'controls/client/security_controls'
10
10
  require 'controls/client/threats'
11
+ require 'controls/client/trends'
11
12
  require 'controls/response'
12
13
 
13
14
  module Controls
@@ -20,6 +21,7 @@ module Controls
20
21
  include Controls::Client::Guidance
21
22
  include Controls::Client::SecurityControls
22
23
  include Controls::Client::Threats
24
+ include Controls::Client::Trends
23
25
 
24
26
  SSL_WARNING = ["The API endpoint used a self-signed or invalid SSL certificate.",
25
27
  "To allow this connection temporarily use `Controls.verify_ssl = false`.",
@@ -78,7 +80,7 @@ module Controls
78
80
  url = URI.escape(File.join(api_endpoint, path))
79
81
  resp = middleware.get(url, params, headers)
80
82
 
81
- Response.generate_ruby(resp.body)
83
+ Response.parse(resp.body)
82
84
  rescue Faraday::Error::ConnectionFailed => e
83
85
  if e.message =~ /^SSL_connect/
84
86
  warn(*SSL_WARNING)
@@ -96,8 +98,7 @@ module Controls
96
98
  url = URI.escape(File.join(web_endpoint, path))
97
99
  resp = middleware.get(url, params, headers)
98
100
 
99
- # Response.parse(resp.body)
100
- Response.generate_ruby(resp.body)
101
+ Response.parse(resp.body)
101
102
  rescue Faraday::Error::ConnectionFailed => e
102
103
  if e.message =~ /^SSL_connect/
103
104
  warn(*SSL_WARNING)
@@ -4,6 +4,8 @@ module Controls
4
4
  # @since API v1.0
5
5
  # @version v1.0.0
6
6
  module Assessments
7
+ # @!group Assessment Methods
8
+
7
9
  # @return [Array<Hash>] an array of assessment hashes
8
10
  def assessments(assessment_id = nil)
9
11
  if assessment_id
@@ -12,6 +14,8 @@ module Controls
12
14
  get '/assessments'
13
15
  end
14
16
  end
17
+
18
+ # @!endgroup
15
19
  end
16
20
  end
17
21
  end
@@ -3,8 +3,9 @@ module Controls
3
3
  # A module to encapsulate API methods related to assets
4
4
  # @since API v1.0
5
5
  # @version v1.0.0
6
- # TODO: Update docs
7
6
  module Assets
7
+ # @!group Asset Methods
8
+
8
9
  # @note since the uuid is an optional param it has been added to the
9
10
  # params options hash
10
11
  # @raise [Controls::NotFound] if the uuid didn't match any assets
@@ -59,6 +60,8 @@ module Controls
59
60
  get "/threat_vectors/#{threat_vector}/undefended_assets", params
60
61
  end
61
62
  alias_method :assets_by_threat_vector, :undefended_assets
63
+
64
+ # @!endgroup
62
65
  end
63
66
  end
64
67
  end
@@ -16,30 +16,12 @@ module Controls
16
16
  get "/guidance/#{name}"
17
17
  end
18
18
 
19
- # @param [String] configuration the configuration name to search by
20
- # @return [Array<Hash>] an array of "guidance hashes"
21
- def guidance_by_configuration(security_control, configuration)
22
- get "/configurations/#{configuration}/guidance"
23
- end
24
-
25
- # @param [String] security_control the security control name to search by
26
- # @return [Array<Hash>] an array of "guidance hashes"
27
- def guidance_by_security_control(security_control)
28
- get "/security_controls/#{security_control}/guidance"
29
- end
30
-
31
19
  # @param [String] threat the threat name to search by
32
20
  # @return [Array<Hash>] an array of "guidance hashes"
33
21
  def guidance_by_threat(threat)
34
22
  get "/threats/#{threat}/guidance"
35
23
  end
36
24
 
37
- # @param [String] threat_vector the threat name to search by
38
- # @return [Array<Hash>] an array of "guidance hashes"
39
- def guidance_by_threat_vector(threat_vector)
40
- get "/threat_vectors/#{threat_vector}/guidance"
41
- end
42
-
43
25
  # @!endgroup
44
26
  end
45
27
  end
@@ -29,6 +29,8 @@ module Controls
29
29
  def prioritized_guidance_by_threat_vector(threat_vector)
30
30
  get "/threat_vectors/#{threat_vector}/prioritized_guidance"
31
31
  end
32
+
33
+ # @!endgroup
32
34
  end
33
35
  end
34
36
  end
@@ -0,0 +1,39 @@
1
+ module Controls
2
+ class Client
3
+ # A module to encapsulate API methods related to trends
4
+ # @since API v1.0
5
+ # @version v1.0.1
6
+ module Trends
7
+ # @!group Trending Methods
8
+
9
+ # @param [String] configuration the name of the configuration for which
10
+ # to receive trending for
11
+ # @return [Array<Hash>] a list of hashes representing trending data over
12
+ # time
13
+ def configuration_trends(configuration)
14
+ get "/configurations/#{configuration}/trend"
15
+ end
16
+ alias_method :trends_by_configuration, :configuration_trends
17
+
18
+ # @param [String] threat the name of the threat for which
19
+ # to receive trending for
20
+ # @return [Array<Hash>] a list of hashes representing trending data over
21
+ # time
22
+ def threat_trends(threat)
23
+ get "/threats/#{threat}/trend"
24
+ end
25
+ alias_method :trends_by_threat, :threat_trends
26
+
27
+ # @param [String] threat_vector the name of the threat_vector for which
28
+ # to receive trending for
29
+ # @return [Array<Hash>] a list of hashes representing trending data over
30
+ # time
31
+ def threat_vector_trends(threat_vector)
32
+ get "/threat_vectors/#{threat_vector}/trend"
33
+ end
34
+ alias_method :trends_by_threat_vector, :threat_vector_trends
35
+
36
+ # @!endgroup
37
+ end
38
+ end
39
+ end
@@ -1,4 +1,4 @@
1
1
  module Controls
2
2
  # The version of the Controls gem
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: controls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erran Carey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-17 00:00:00.000000000 Z
11
+ date: 2013-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -138,6 +138,7 @@ files:
138
138
  - controls.gemspec
139
139
  - docs/images/controlsinsight+shield.png
140
140
  - docs/images/controlsinsight.png
141
+ - docs/index.md
141
142
  - lib/controls.rb
142
143
  - lib/controls/authentication.rb
143
144
  - lib/controls/client.rb
@@ -149,6 +150,7 @@ files:
149
150
  - lib/controls/client/security_controls.rb
150
151
  - lib/controls/client/threat_vectors.rb
151
152
  - lib/controls/client/threats.rb
153
+ - lib/controls/client/trends.rb
152
154
  - lib/controls/configurable.rb
153
155
  - lib/controls/default.rb
154
156
  - lib/controls/error.rb
@@ -177,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
179
  version: '0'
178
180
  requirements: []
179
181
  rubyforge_project:
180
- rubygems_version: 2.1.9
182
+ rubygems_version: 2.0.3
181
183
  signing_key:
182
184
  specification_version: 4
183
185
  summary: This gem interfaces to Rapid7's **controls**insight API.