vectra 0.0.1 → 0.0.2

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: c3273ced24955e5aaa0d94d1e97ea5f7c7224b9a
4
- data.tar.gz: 648bbec3463d73afa3d4cd1f122a6b4b96483d0a
3
+ metadata.gz: bebaf2ac4a12c7917a69dc288cdca7c3869593e5
4
+ data.tar.gz: ad4df58d56b6a7f0f74276f40d195691e2f3537f
5
5
  SHA512:
6
- metadata.gz: 65f2b2badfea35b8f66541f5ebbe9792098273b0c1ee6779094e4a4326210d509a4863402ac76aa67bb10064287e390afb471b3f8a4b02466d44184dfdc4dd2d
7
- data.tar.gz: 507c2762a74cdd5c816b6e2404c9c13b19c580f1144c0067406dfec5d677d26d4e361e0f00082430375b9c60335e24e851a524635a7217e4ac15a1b53b2d12a8
6
+ metadata.gz: 56d09edeae08914b221242a215d45055714148d92157296cee2facb81f80d9bccdfdfc01a4da97ff6274723719b050dbe7bd83beab05ce5cfbb35c78e8012720
7
+ data.tar.gz: 0e1cb875c6538be00e85ac4abd533c289900839cdacbf4d1fccec8c69e03af5cbd80c1da2b6392711cd76e99397a4fd9267740921142ecbbb4e893c156f2233e
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ /.bundle/
2
+ /vendor/
3
+ Gemfile.lock
4
+ *.gem
data/.rock.yml ADDED
@@ -0,0 +1,5 @@
1
+ runtime: ruby21
2
+ build_gem: |
3
+ rm -rf *.gem
4
+ gem build vectra.gemspec
5
+ push_gem: exec gem push *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1 @@
1
+ language: ruby
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Mike Mackintosh
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # Ruby Vectra
2
+ A Ruby extension for interfacing with Vectra API.
3
+
4
+ [![TravisCI](https://travis-ci.org/mikemackintosh/ruby-vectra.svg)](https://travis-ci.org/mikemackintosh/ruby-vectra)
5
+
6
+ # Installation
7
+
8
+ Like any other gem:
9
+
10
+ ```shell
11
+ gem install vectra
12
+ ```
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ #encoding: utf-8
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ task default: :test
6
+
7
+ RSpec::Core::RakeTask.new do |spec|
8
+ spec.verbose = false
9
+ spec.pattern = './spec/{*/**/}*_spec.rb'
10
+ end
11
+
12
+ task :test do
13
+ ENV['RACK_ENV'] = 'test'
14
+
15
+ require './spec/spec_helper'
16
+ Rake::Task['spec'].invoke
17
+ end
data/lib/vectra.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'httparty'
2
+ require 'json'
3
+ require 'fattr'
4
+ require 'cgi'
5
+
6
+ require 'vectra/config'
7
+ require 'vectra/api'
8
+ require 'vectra/hosts'
9
+ require 'vectra/detections'
10
+
11
+ module Vectra
12
+
13
+ extend self
14
+
15
+ def configure
16
+ block_given? ? yield(Config) : Config
17
+ %w(username password endpoint).each do |key|
18
+ if Vectra::Config.instance_variable_get("@#{key}").nil?
19
+ raise Vectra::Config::RequiredOptionMissing,
20
+ "Configuration parameter missing: '#{key}'. " +
21
+ "Please add it to the Vectra.configure block"
22
+ end
23
+ end
24
+ end
25
+ alias_method :config, :configure
26
+
27
+ end
data/lib/vectra/api.rb ADDED
@@ -0,0 +1,49 @@
1
+ module Vectra
2
+ class Api
3
+ class InvalidResponse < RuntimeError ; end
4
+
5
+ include HTTParty
6
+
7
+ def self.send(url, args="", decode)
8
+ results = []
9
+
10
+ # Send the request
11
+ response = HTTParty.get(
12
+ "#{url}#{args}",
13
+ :verify => false, # Vectra doesnt accept real certs yet
14
+ :basic_auth => {
15
+ :username => Vectra::Config.username,
16
+ :password => Vectra::Config.password
17
+ })
18
+
19
+ if !response.code.eql?(200)
20
+ raise Vectra::Api::InvalidResponse, "Invalid Response Received"
21
+ end
22
+
23
+ # Decode the response
24
+ response = JSON.parse response.body
25
+
26
+ # Check if we should decode this response
27
+ if decode
28
+ # Map responses
29
+ response['results'].map{|r| results.push(r)}
30
+ else
31
+ results = response
32
+ end
33
+
34
+ # If there is a next, respect it
35
+ #unless response['next'].nil?
36
+ # puts self.send(response['next']).inspect
37
+ #end
38
+
39
+ results
40
+
41
+ end
42
+
43
+ def self.request(args="", decode=true)
44
+ r = self.send("#{Vectra::Config.endpoint}#{self.target}", args, decode)
45
+ r
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,35 @@
1
+ module Vectra
2
+ module Config
3
+ class RequiredOptionMissing < RuntimeError ; end
4
+ extend self
5
+
6
+ attr_accessor :endpoint, :username, :password
7
+
8
+ # Configure vectra from a hash. This is usually called after parsing a
9
+ # yaml config file such as vectra.yaml.
10
+ #
11
+ # @example Configure Vectra.
12
+ # config.from_hash({})
13
+ #
14
+ # @param [ Hash ] options The settings to use.
15
+ def from_hash(options = {})
16
+ options.each_pair do |name, value|
17
+ send("#{name}=", value) if respond_to?("#{name}=")
18
+ end
19
+ end
20
+
21
+ # Load the settings from a compliant vectra.yml file. This can be used for
22
+ # easy setup with frameworks other than Rails.
23
+ #
24
+ # @example Configure Vectra.
25
+ # Vectra.load!("/path/to/vectra.yml")
26
+ #
27
+ # @param [ String ] path The path to the file.
28
+ def load!(path)
29
+ settings = YAML.load(ERB.new(File.new(path).read).result)
30
+ if settings.present?
31
+ from_hash(settings)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,20 @@
1
+ module Vectra
2
+ class Detections < Api
3
+
4
+ attr_reader :id
5
+
6
+ def self.target
7
+ "detections"
8
+ end
9
+
10
+ def self.all
11
+ request
12
+ end
13
+
14
+ def self.get(id)
15
+ request("/#{id}", false)
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,20 @@
1
+ module Vectra
2
+ class Hosts < Api
3
+
4
+ attr_reader :name
5
+
6
+ def self.target
7
+ "hosts"
8
+ end
9
+
10
+ def self.all
11
+ request
12
+ end
13
+
14
+ def self.get(id)
15
+ request("/#{id}", false)
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,3 @@
1
+ module Vectra
2
+ VERSION = '0.0.2'
3
+ end
@@ -0,0 +1,27 @@
1
+ require 'rspec/core'
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'vectra')
4
+
5
+ # Create the share API context
6
+ # so we can pass stuff between
7
+ # the different tests
8
+ RSpec.shared_context "shared environment", :a => :b do
9
+
10
+ before(:all) do
11
+
12
+ # Set endpoint details
13
+ @endpoint_url = 'https://10.200.10.88/api/'
14
+ @username = "api"
15
+ @password = "AbpdWjFFKuu3XVdKKXjMZbard3H"
16
+
17
+ end
18
+
19
+ end
20
+
21
+ # Seems to run tests more than once if we do RSpec.configure more than once
22
+ #unless RSpec.configuration.color_enabled == true
23
+ RSpec.configure do |config|
24
+ config.color = true
25
+ config.formatter = :documentation
26
+ end
27
+ #end
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe Vectra::Api, 'Configure' do
4
+ include_context "shared environment"
5
+
6
+ it 'configures correctly' do
7
+ Vectra.configure do |config|
8
+ config.endpoint = @endpoint_url
9
+ config.username = @username
10
+ config.password = @password
11
+ end
12
+ end
13
+
14
+ it 'gets all hosts' do
15
+ puts Vectra::Hosts.all
16
+ end
17
+
18
+ it 'gets host by id' do
19
+ puts Vectra::Hosts.get(1)
20
+ end
21
+
22
+ it 'gets all detections' do
23
+ puts Vectra::Detections.all
24
+ end
25
+
26
+ it 'gets detection by id' do
27
+ puts Vectra::Detections.get(95)
28
+ end
29
+
30
+ end
data/vectra.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # Created by hand, like a real man
2
+ # coding: utf-8
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'vectra/version'
6
+
7
+ Gem::Specification.new do |s|
8
+
9
+ s.name = 'vectra'
10
+ s.version = Vectra::VERSION
11
+ s.date = '2015-02-23'
12
+ s.summary = "Vectra API Client"
13
+ s.description = "Easily interface with the Vectra API for consuming detections, threats and events"
14
+ s.authors = ["Mike Mackintosh"]
15
+ s.email = 'm@zyp.io'
16
+ s.homepage =
17
+ 'http://github.com/mikemackintosh/ruby-vectra'
18
+
19
+ s.license = 'MIT'
20
+
21
+ s.require_paths = ["lib"]
22
+ s.files = `git ls-files -z`.split("\x0")
23
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
25
+
26
+ s.add_dependency 'httparty'
27
+ s.add_dependency 'fattr'
28
+
29
+ s.add_development_dependency "bundler"
30
+ s.add_development_dependency "rake"
31
+ s.add_development_dependency "rspec"
32
+ s.add_development_dependency "webmock"
33
+
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vectra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Mackintosh
@@ -94,13 +94,31 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Vectra API Client
97
+ description: Easily interface with the Vectra API for consuming detections, threats
98
+ and events
98
99
  email: m@zyp.io
99
100
  executables: []
100
101
  extensions: []
101
102
  extra_rdoc_files: []
102
- files: []
103
- homepage: http://github.com/mikemackintosh/vectra
103
+ files:
104
+ - ".gitignore"
105
+ - ".rock.yml"
106
+ - ".rspec"
107
+ - ".travis.yml"
108
+ - Gemfile
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - lib/vectra.rb
113
+ - lib/vectra/api.rb
114
+ - lib/vectra/config.rb
115
+ - lib/vectra/detections.rb
116
+ - lib/vectra/hosts.rb
117
+ - lib/vectra/version.rb
118
+ - spec/spec_helper.rb
119
+ - spec/vectra/vectra_spec.rb
120
+ - vectra.gemspec
121
+ homepage: http://github.com/mikemackintosh/ruby-vectra
104
122
  licenses:
105
123
  - MIT
106
124
  metadata: {}
@@ -124,4 +142,6 @@ rubygems_version: 2.2.2
124
142
  signing_key:
125
143
  specification_version: 4
126
144
  summary: Vectra API Client
127
- test_files: []
145
+ test_files:
146
+ - spec/spec_helper.rb
147
+ - spec/vectra/vectra_spec.rb