qualys 0.1.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 +7 -0
- data/.gitignore +5 -0
- data/.rock.yml +17 -0
- data/.rspec +2 -0
- data/LICENSE.txt +22 -0
- data/README.md +52 -0
- data/Rakefile +27 -0
- data/config/.gitkeep +0 -0
- data/lib/qualys.rb +30 -0
- data/lib/qualys/api.rb +66 -0
- data/lib/qualys/auth.rb +42 -0
- data/lib/qualys/config.rb +35 -0
- data/lib/qualys/scans.rb +20 -0
- data/lib/qualys/version.rb +3 -0
- data/qualys.gemspec +37 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 82d46fe75c445a67a07782c8ea2b9f92011e7f9e
|
4
|
+
data.tar.gz: 79fb99dbdcbf7bb6da466cd91b806662c7979c2f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 90601d93e13d3d24b2779290f5a112a5c8fb2edd84f89f193353364fd9c420390dab5aa7e7e435c9d05725b06b6e70639160618e2797411150715ceff698dc95
|
7
|
+
data.tar.gz: d01666b6aefab5de181db30b3ec30df00aac9531e951f07324234001f770f024f413fbbc149e2e39acae006bb16e5ae57ad1723cdeaf78ff934cdb7571db3cc2
|
data/.gitignore
ADDED
data/.rock.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
runtime: ruby21
|
2
|
+
build_gem: |
|
3
|
+
rm -rf *.gem
|
4
|
+
gem build qualys.gemspec
|
5
|
+
|
6
|
+
push_gem: exec gem push *.gem
|
7
|
+
|
8
|
+
gem: |
|
9
|
+
rm -rf *.gem
|
10
|
+
gem build qualys.gemspec
|
11
|
+
gem push *.gem
|
12
|
+
|
13
|
+
sublime: |
|
14
|
+
rock run bin/test.rb
|
15
|
+
|
16
|
+
todo: |
|
17
|
+
find bin lib spec -type f -exec grep -Hni --color "todo" {} \; > TODO
|
data/.rspec
ADDED
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,52 @@
|
|
1
|
+
# Ruby Qualys API v2
|
2
|
+
A Ruby extension for interfacing with Qualys v2 API.
|
3
|
+
|
4
|
+
[](https://rubygems.org/gems/qualys)
|
5
|
+
|
6
|
+
[](https://gemnasium.com/mikemackintosh/ruby-qualys)
|
7
|
+
|
8
|
+
[](https://rubygems.org/gems/qualys)
|
9
|
+
|
10
|
+
### Introduction
|
11
|
+
|
12
|
+
I had the need to pull stats and details from Qualys automatically to collect and alert on metrics. Let's face it, in 2015, email alerts just don't cut it anymore.
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
Like any other gem:
|
17
|
+
|
18
|
+
```shell
|
19
|
+
gem install qualys
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Below you can find details on the configuration and usage of the Qualys API Client.
|
25
|
+
|
26
|
+
### Configuration
|
27
|
+
|
28
|
+
Before utilizing the API, you must configure it. You can configure it with a block like below, or by passing in a `Hash#` or load a yaml file.
|
29
|
+
```ruby
|
30
|
+
Qualys.configure do |config|
|
31
|
+
config.username = @email
|
32
|
+
config.password = @password
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
or configure using a `yaml` doc:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
Qualys::Config.load!("config/qualys.yaml")
|
40
|
+
```
|
41
|
+
|
42
|
+
### Getting Scans
|
43
|
+
|
44
|
+
You can easily get a list of all scans within your Qualys account by accessing the following methods:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
scans = Qualys::Scans.all
|
48
|
+
```
|
49
|
+
|
50
|
+
## References
|
51
|
+
|
52
|
+
The API was built using the following documentation: https://www.qualys.com/docs/qualys-api-v2-quick-reference.pdf
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'rubocop/rake_task'
|
5
|
+
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new do |spec|
|
9
|
+
spec.verbose = false
|
10
|
+
spec.pattern = './spec/{*/**/}*_spec.rb'
|
11
|
+
end
|
12
|
+
|
13
|
+
task :test do
|
14
|
+
ENV['RACK_ENV'] = 'test'
|
15
|
+
|
16
|
+
require './spec/spec_helper'
|
17
|
+
Rake::Task['spec'].invoke
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Run RuboCop on the lib directory'
|
21
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
22
|
+
task.patterns = ['lib/**/*.rb']
|
23
|
+
# only show the files with failures
|
24
|
+
task.formatters = ['progress']
|
25
|
+
# don't abort rake on failure
|
26
|
+
task.fail_on_error = false
|
27
|
+
end
|
data/config/.gitkeep
ADDED
File without changes
|
data/lib/qualys.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'json'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
require 'qualys/version'
|
6
|
+
|
7
|
+
require 'qualys/config'
|
8
|
+
require 'qualys/api'
|
9
|
+
require 'qualys/auth'
|
10
|
+
|
11
|
+
require 'qualys/scans'
|
12
|
+
|
13
|
+
|
14
|
+
module Qualys
|
15
|
+
|
16
|
+
extend self
|
17
|
+
|
18
|
+
def configure
|
19
|
+
block_given? ? yield(Config) : Config
|
20
|
+
%w(username password).each do |key|
|
21
|
+
if Qualys::Config.instance_variable_get("@#{key}").nil?
|
22
|
+
raise Qualys::Config::RequiredOptionMissing,
|
23
|
+
"Configuration parameter missing: '#{key}'. " +
|
24
|
+
"Please add it to the Qualys.configure block"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
alias_method :config, :configure
|
29
|
+
|
30
|
+
end
|
data/lib/qualys/api.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module Qualys
|
2
|
+
class Api
|
3
|
+
|
4
|
+
class InvalidResponse < RuntimeError; end
|
5
|
+
class AuthorizationRequired < RuntimeError; end
|
6
|
+
class UnauthorizedRequest < RuntimeError; end
|
7
|
+
|
8
|
+
# Set the current production endpoint
|
9
|
+
PRODUCTION_ENDPOINT = 'https://qualysapi.qualys.com/api/2.0/fo/'
|
10
|
+
|
11
|
+
# Set HTTParty defaults
|
12
|
+
HTTParty::Basement.default_options.update(base_uri: PRODUCTION_ENDPOINT)
|
13
|
+
HTTParty::Basement.default_options.update(headers: {
|
14
|
+
"X-Requested-With" => "Qualys Ruby Client v#{Qualys::VERSION}"
|
15
|
+
})
|
16
|
+
|
17
|
+
#
|
18
|
+
#
|
19
|
+
def self.api_get(url, options={})
|
20
|
+
|
21
|
+
unless Qualys::Config.session_key.nil?
|
22
|
+
HTTParty::Basement.default_cookies.add_cookies(Qualys::Config.session_key)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Send Request
|
26
|
+
response = HTTParty.get(url, options)
|
27
|
+
|
28
|
+
# Check if you need to be authorized
|
29
|
+
if response.code.eql?(401)
|
30
|
+
raise Qualys::Api::AuthorizationRequired, "Please Login Before Communicating With The API"
|
31
|
+
elsif response.code.eql?(403)
|
32
|
+
raise Qualys::Api::UnauthorizedRequest, "You either sent an invalid request or do not have access to that add-on"
|
33
|
+
elsif !response.code.eql?(200)
|
34
|
+
raise Qualys::Api::InvalidResponse, "Invalid Response Received"
|
35
|
+
end
|
36
|
+
|
37
|
+
# return the response
|
38
|
+
response
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
#
|
43
|
+
def self.api_post(url, options={})
|
44
|
+
|
45
|
+
unless Qualys::Config.session_key.nil?
|
46
|
+
HTTParty::Basement.default_cookies.add_cookies(Qualys::Config.session_key)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Send Request
|
50
|
+
response = HTTParty.post(url, options)
|
51
|
+
|
52
|
+
# Check if you need to be authorized
|
53
|
+
if response.code.eql?(401)
|
54
|
+
raise Qualys::Api::AuthorizationRequired, "Please Configure A Username and Password Before Communicating With The API"
|
55
|
+
elsif response.code.eql?(403)
|
56
|
+
raise Qualys::Api::UnauthorizedRequest, "You either sent an invalid request or do not have access to that add-on"
|
57
|
+
elsif response.code.eql?(500)
|
58
|
+
raise Qualys::Api::InvalidResponse, "Invalid Response Received"
|
59
|
+
end
|
60
|
+
|
61
|
+
# return the response
|
62
|
+
response
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
data/lib/qualys/auth.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Qualys
|
2
|
+
class Auth < Api
|
3
|
+
class InvalidLogin < RuntimeError; end
|
4
|
+
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# Do Login
|
8
|
+
def self.login
|
9
|
+
|
10
|
+
# Request a login
|
11
|
+
response = self.api_post('session/', {
|
12
|
+
:body => {
|
13
|
+
:action => 'login',
|
14
|
+
:username => Qualys::Config.username,
|
15
|
+
:password => Qualys::Config.password
|
16
|
+
}
|
17
|
+
})
|
18
|
+
|
19
|
+
# set the session key
|
20
|
+
Qualys::Config.session_key = response.header['Set-Cookie']
|
21
|
+
true
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
# Set Logout
|
26
|
+
def self.logout
|
27
|
+
|
28
|
+
# Request a login
|
29
|
+
response = self.api_post('session/', {
|
30
|
+
:body => {
|
31
|
+
:action => 'logout',
|
32
|
+
}
|
33
|
+
})
|
34
|
+
|
35
|
+
# set the session key
|
36
|
+
Qualys::Config.session_key = nil
|
37
|
+
true
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Qualys
|
2
|
+
module Config
|
3
|
+
class RequiredOptionMissing < RuntimeError; end
|
4
|
+
extend self
|
5
|
+
|
6
|
+
attr_accessor :username, :password, :session_key
|
7
|
+
|
8
|
+
# Configure Qualys from a hash. This is usually called after parsing a
|
9
|
+
# yaml config file such as qualys.yaml.
|
10
|
+
#
|
11
|
+
# @example Configure Qualys.
|
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 Qualys.yml file. This can be used for
|
22
|
+
# easy setup with frameworks other than Rails.
|
23
|
+
#
|
24
|
+
# @example Configure Qualys.
|
25
|
+
# Qualys.load!("/path/to/qualys.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)['api']
|
30
|
+
if settings.is_a? Hash
|
31
|
+
from_hash(settings)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/qualys/scans.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Qualys
|
2
|
+
class Scans < Api
|
3
|
+
|
4
|
+
def self.all
|
5
|
+
response = api_get("scan/", { :query => { :action => 'list' }})
|
6
|
+
scanlist = response.parsed_response['SCAN_LIST_OUTPUT']['RESPONSE']['SCAN_LIST']
|
7
|
+
puts scanlist.inspect
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.each
|
11
|
+
@events.each do |event|
|
12
|
+
yield event
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class Scan
|
19
|
+
end
|
20
|
+
end
|
data/qualys.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
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 'qualys/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
|
9
|
+
s.name = 'qualys'
|
10
|
+
s.version = Qualys::VERSION
|
11
|
+
s.date = '2015-02-25'
|
12
|
+
s.summary = "qualys API Client"
|
13
|
+
s.description = "Easily interface with the qualys for consuming events"
|
14
|
+
s.authors = ["Mike Mackintosh"]
|
15
|
+
s.email = 'm@zyp.io'
|
16
|
+
s.homepage =
|
17
|
+
'http://github.com/mikemackintosh/ruby-qualys'
|
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 'json'
|
27
|
+
s.add_dependency 'erubis'
|
28
|
+
s.add_dependency 'httparty'
|
29
|
+
|
30
|
+
s.add_development_dependency "bundler"
|
31
|
+
s.add_development_dependency "rake"
|
32
|
+
s.add_development_dependency "rspec"
|
33
|
+
s.add_development_dependency "vcr"
|
34
|
+
s.add_development_dependency "webmock"
|
35
|
+
s.add_development_dependency "rubocop"
|
36
|
+
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qualys
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Mackintosh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: erubis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: httparty
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Easily interface with the qualys for consuming events
|
140
|
+
email: m@zyp.io
|
141
|
+
executables: []
|
142
|
+
extensions: []
|
143
|
+
extra_rdoc_files: []
|
144
|
+
files:
|
145
|
+
- ".gitignore"
|
146
|
+
- ".rock.yml"
|
147
|
+
- ".rspec"
|
148
|
+
- LICENSE.txt
|
149
|
+
- README.md
|
150
|
+
- Rakefile
|
151
|
+
- config/.gitkeep
|
152
|
+
- lib/qualys.rb
|
153
|
+
- lib/qualys/api.rb
|
154
|
+
- lib/qualys/auth.rb
|
155
|
+
- lib/qualys/config.rb
|
156
|
+
- lib/qualys/scans.rb
|
157
|
+
- lib/qualys/version.rb
|
158
|
+
- qualys.gemspec
|
159
|
+
homepage: http://github.com/mikemackintosh/ruby-qualys
|
160
|
+
licenses:
|
161
|
+
- MIT
|
162
|
+
metadata: {}
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
requirements: []
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.2.2
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: qualys API Client
|
183
|
+
test_files: []
|