isaca 0.1.9 → 1.0.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 +4 -4
- data/Gemfile.lock +47 -1
- data/Guardfile +42 -0
- data/Rakefile +1 -0
- data/isaca.gemspec +3 -0
- data/lib/isaca/attribute_error.rb +7 -0
- data/lib/isaca/connection_error.rb +4 -0
- data/lib/isaca/models/authenticate_user.rb +28 -9
- data/lib/isaca/models/countries.rb +16 -2
- data/lib/isaca/models/get_user_details_by_token.rb +23 -20
- data/lib/isaca/partner_key_error.rb +4 -0
- data/lib/isaca/requests/authenticate_user.rb +21 -7
- data/lib/isaca/requests/countries.rb +10 -6
- data/lib/isaca/requests/explicit_countries.rb +10 -6
- data/lib/isaca/requests/get_user_details_by_token.rb +18 -7
- data/lib/isaca/requests/log_out.rb +19 -3
- data/lib/isaca/requests/report_consent.rb +27 -9
- data/lib/isaca/requests/request.rb +35 -14
- data/lib/isaca/service_error.rb +4 -0
- data/lib/isaca/session_error.rb +4 -0
- data/lib/isaca/version.rb +1 -1
- data/lib/isaca.rb +8 -11
- metadata +50 -7
- data/.travis.yml +0 -5
- data/lib/isaca/models/explicit_countries.rb +0 -11
- data/lib/isaca/models/geographical.rb +0 -17
- data/lib/isaca/models/submit_cpe.rb +0 -6
- data/lib/isaca/requests/submit_cpe.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62f3b9deda4ee74b614e8cd5d91110bb4eb0da73
|
4
|
+
data.tar.gz: a400dfad4b30039ac630c7318dce4b49aae298ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f70a43588de692625dd4ffcb898eb52dcc3a3c9d45057903b44ff2467e1e1414e97428b2773403913688e795f8ce1c9cba038f640f77faa84d8c5f275d5e49eb
|
7
|
+
data.tar.gz: 97e79e074276c450560219b636168878e063befbec908052f265327572586967b196d471abe33400889ea98328e9312be67bbc3e42ce31cce7b11d26bf9a5ace
|
data/Gemfile.lock
CHANGED
@@ -1,25 +1,71 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
isaca (0.
|
4
|
+
isaca (0.2.0)
|
5
5
|
faraday (~> 0.14.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
+
ansi (1.5.0)
|
11
|
+
builder (3.2.3)
|
12
|
+
coderay (1.1.2)
|
10
13
|
faraday (0.14.0)
|
11
14
|
multipart-post (>= 1.2, < 3)
|
15
|
+
ffi (1.9.25)
|
16
|
+
formatador (0.2.5)
|
17
|
+
guard (2.14.2)
|
18
|
+
formatador (>= 0.2.4)
|
19
|
+
listen (>= 2.7, < 4.0)
|
20
|
+
lumberjack (>= 1.0.12, < 2.0)
|
21
|
+
nenv (~> 0.1)
|
22
|
+
notiffany (~> 0.0)
|
23
|
+
pry (>= 0.9.12)
|
24
|
+
shellany (~> 0.0)
|
25
|
+
thor (>= 0.18.1)
|
26
|
+
guard-compat (1.2.1)
|
27
|
+
guard-minitest (2.4.6)
|
28
|
+
guard-compat (~> 1.2)
|
29
|
+
minitest (>= 3.0)
|
30
|
+
listen (3.1.5)
|
31
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
32
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
33
|
+
ruby_dep (~> 1.2)
|
34
|
+
lumberjack (1.0.13)
|
35
|
+
method_source (0.9.0)
|
12
36
|
minitest (5.10.3)
|
37
|
+
minitest-reporters (1.3.0)
|
38
|
+
ansi
|
39
|
+
builder
|
40
|
+
minitest (>= 5.0)
|
41
|
+
ruby-progressbar
|
13
42
|
multipart-post (2.0.0)
|
43
|
+
nenv (0.3.0)
|
44
|
+
notiffany (0.1.1)
|
45
|
+
nenv (~> 0.1)
|
46
|
+
shellany (~> 0.0)
|
47
|
+
pry (0.11.3)
|
48
|
+
coderay (~> 1.1.0)
|
49
|
+
method_source (~> 0.9.0)
|
14
50
|
rake (10.4.2)
|
51
|
+
rb-fsevent (0.10.3)
|
52
|
+
rb-inotify (0.9.10)
|
53
|
+
ffi (>= 0.5.0, < 2)
|
54
|
+
ruby-progressbar (1.9.0)
|
55
|
+
ruby_dep (1.5.0)
|
56
|
+
shellany (0.0.1)
|
57
|
+
thor (0.20.0)
|
15
58
|
|
16
59
|
PLATFORMS
|
17
60
|
ruby
|
18
61
|
|
19
62
|
DEPENDENCIES
|
20
63
|
bundler (~> 1.16)
|
64
|
+
guard (~> 2.14)
|
65
|
+
guard-minitest (~> 2.4)
|
21
66
|
isaca!
|
22
67
|
minitest (~> 5.0)
|
68
|
+
minitest-reporters (~> 1.3)
|
23
69
|
rake (~> 10.0)
|
24
70
|
|
25
71
|
BUNDLED WITH
|
data/Guardfile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
guard :minitest do
|
19
|
+
# with Minitest::Unit
|
20
|
+
watch(%r{^test/(.*)\/?(.*)\_test.rb$})
|
21
|
+
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}#{m[2]}_test.rb"; }
|
22
|
+
watch(%r{^test/test_helper\.rb$}) { 'test' }
|
23
|
+
|
24
|
+
# with Minitest::Spec
|
25
|
+
# watch(%r{^spec/(.*)_spec\.rb$})
|
26
|
+
# watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
27
|
+
# watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
|
28
|
+
|
29
|
+
# Rails 4
|
30
|
+
# watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
|
31
|
+
# watch(%r{^app/controllers/application_controller\.rb$}) { 'test/controllers' }
|
32
|
+
# watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
|
33
|
+
# watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
|
34
|
+
# watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
|
35
|
+
# watch(%r{^test/.+_test\.rb$})
|
36
|
+
# watch(%r{^test/test_helper\.rb$}) { 'test' }
|
37
|
+
|
38
|
+
# Rails < 4
|
39
|
+
# watch(%r{^app/controllers/(.*)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" }
|
40
|
+
# watch(%r{^app/helpers/(.*)\.rb$}) { |m| "test/helpers/#{m[1]}_test.rb" }
|
41
|
+
# watch(%r{^app/models/(.*)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" }
|
42
|
+
end
|
data/Rakefile
CHANGED
data/isaca.gemspec
CHANGED
@@ -24,4 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.16"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "minitest", "~> 5.0"
|
27
|
+
spec.add_development_dependency 'minitest-reporters', '~> 1.3'
|
28
|
+
spec.add_development_dependency 'guard', '~> 2.14'
|
29
|
+
spec.add_development_dependency 'guard-minitest', '~> 2.4'
|
27
30
|
end
|
@@ -1,18 +1,37 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Model
|
3
|
+
# Class that is used as an object representation of the response from {ISACA::Request::AuthenticateUser}
|
3
4
|
class AuthenticateUser
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
# The ISACA error -- ISACA documentation on this is currently limited.
|
6
|
+
attr_reader :error
|
7
|
+
# The ISACA error code -- ISACA documentation on this is currently limited.
|
8
|
+
attr_reader :error_code
|
9
|
+
# Whether or not the session is valid
|
10
|
+
attr_reader :is_valid
|
11
|
+
# Session value or error message
|
12
|
+
attr_reader :value
|
8
13
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
|
15
|
+
# @param [Hash] params Parameters to create the object with
|
16
|
+
# @option params [String] :Error Required
|
17
|
+
# @option params [String] :ErrorCode Required
|
18
|
+
# @option params [String] :IsValid Required
|
19
|
+
# @option params [String] :Value Required
|
20
|
+
def initialize(params)
|
21
|
+
raise AttributeError.new(:Error, self.class.name, params) unless params.has_key?(:Error)
|
22
|
+
raise AttributeError.new(:ErrorCode, self.class.name, params) unless params.has_key?(:ErrorCode)
|
23
|
+
raise AttributeError.new(:IsValid, self.class.name, params) unless params.has_key?(:IsValid)
|
24
|
+
raise AttributeError.new(:Value, self.class.name, params) unless params.has_key?(:Value)
|
25
|
+
|
26
|
+
@error = params[:Error]
|
27
|
+
@error_code = params[:ErrorCode]
|
28
|
+
@is_valid = params[:IsValid]
|
29
|
+
@value = params[:Value]
|
14
30
|
end
|
15
31
|
|
32
|
+
# Helper method for checking the validity of a session
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
16
35
|
def is_valid?
|
17
36
|
is_valid
|
18
37
|
end
|
@@ -1,11 +1,25 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Model
|
3
3
|
class Countries
|
4
|
-
|
4
|
+
attr_reader :countries
|
5
5
|
|
6
6
|
def initialize(countries)
|
7
|
-
@countries = countries
|
7
|
+
@countries = countries.map { |c| Country.new(c[:CODE], c[:DESCRIPTION]) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def includes_country?(value)
|
11
|
+
@countries.each { |country| return true if country_matches?(country, value) }
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def country_matches?(country, value)
|
18
|
+
value.downcase!
|
19
|
+
country.code.downcase == value || country.description.downcase == value
|
8
20
|
end
|
9
21
|
end
|
22
|
+
|
23
|
+
Country = Struct.new(:code, :description)
|
10
24
|
end
|
11
25
|
end
|
@@ -1,36 +1,39 @@
|
|
1
|
+
# An object representation of the GetUserDetailsByToken endpoint
|
1
2
|
module ISACA
|
2
3
|
module Model
|
3
4
|
class GetUserDetailsByToken
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
attr_reader :imis_id
|
6
|
+
attr_reader :enterprise_id
|
7
|
+
attr_reader :first_name
|
8
|
+
attr_reader :last_name
|
9
|
+
attr_reader :email
|
10
|
+
attr_reader :username
|
11
|
+
attr_reader :country
|
12
|
+
attr_reader :privacy
|
13
|
+
attr_reader :marketing
|
13
14
|
|
14
15
|
def initialize(hash)
|
15
|
-
|
16
|
-
@enterprise_id = hash['Ent_ID']
|
17
|
-
@first_name = hash['First_Name']
|
18
|
-
@last_name = hash['Last_Name']
|
19
|
-
@email = hash['Email']
|
20
|
-
@username = hash['UserName']
|
21
|
-
@country = hash['Country']
|
16
|
+
raise AttributeError.new(:ID, self.class.name, hash) unless hash.has_key?(:ID) && hash[:ID]
|
22
17
|
|
23
|
-
|
18
|
+
@imis_id = hash[:ID]
|
19
|
+
@enterprise_id = hash[:Ent_ID]
|
20
|
+
@first_name = hash[:First_Name]
|
21
|
+
@last_name = hash[:Last_Name]
|
22
|
+
@email = hash[:Email]
|
23
|
+
@username = hash[:UserName]
|
24
|
+
@country = hash[:Country]
|
25
|
+
|
26
|
+
if hash[:PRIVACY] == '1'
|
24
27
|
@privacy = true
|
25
|
-
elsif hash[
|
28
|
+
elsif hash[:PRIVACY] == '0'
|
26
29
|
@privacy = false
|
27
30
|
else
|
28
31
|
@privacy = nil
|
29
32
|
end
|
30
33
|
|
31
|
-
if hash[
|
34
|
+
if hash[:MARKETING] == '1'
|
32
35
|
@marketing = true
|
33
|
-
elsif hash[
|
36
|
+
elsif hash[:MARKETING] == '0'
|
34
37
|
@marketing = false
|
35
38
|
else
|
36
39
|
@marketing = nil
|
@@ -1,17 +1,31 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
|
-
|
3
|
+
class AuthenticateUser
|
4
|
+
# Method used to generate a session token.
|
5
|
+
#
|
6
|
+
# @raise [ISACA::SessionError] Raised if the returned session is invalid
|
7
|
+
#
|
8
|
+
# @return [ISACA::Model::AuthenticateUser] Returns an object representation of the response
|
4
9
|
def self.get(username, password)
|
5
|
-
response =
|
10
|
+
response = self.send_request(username, password)
|
11
|
+
|
12
|
+
model = ISACA::Model::AuthenticateUser.new(JSON.parse(response.body, {symbolize_names: true}))
|
13
|
+
raise SessionError.new(model.value) unless model.is_valid?
|
14
|
+
|
15
|
+
model
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
# Method used to send the request -- exists for easy stubbing during tests
|
20
|
+
#
|
21
|
+
# @param username [String]
|
22
|
+
# @param password [String]
|
23
|
+
def self.send_request(username, password)
|
24
|
+
ISACA::Request.get do |request|
|
6
25
|
request.path = request.path + '/AuthenticateUser'
|
7
26
|
request.params['username'] = username
|
8
27
|
request.params['password'] = password
|
9
28
|
end
|
10
|
-
|
11
|
-
data = JSON.parse(response.body)
|
12
|
-
ISACA.logger.debug(data) if ISACA.configuration.debug
|
13
|
-
|
14
|
-
response.status == 200 ? ISACA::Model::AuthenticateUser.new(data) : nil
|
15
29
|
end
|
16
30
|
end
|
17
31
|
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
3
|
module Countries
|
4
|
+
# Method used to fetch all countries
|
4
5
|
def self.get
|
5
|
-
response =
|
6
|
+
response = self.send_request
|
7
|
+
ISACA::Model::Countries.new(JSON.parse(response.body, symbolize_names: true))
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# Method used to send the request -- exists for easy testing purposes
|
13
|
+
def self.send_request
|
14
|
+
ISACA::Request.get do |request|
|
6
15
|
uri = URI(ISACA.configuration.url)
|
7
16
|
request.path = "#{uri.scheme}://#{uri.hostname}:#{uri.port}/isacaservices/countries.json"
|
8
17
|
end
|
9
|
-
|
10
|
-
data = JSON.parse(response.body)
|
11
|
-
ISACA.logger.debug(data) if ISACA.configuration.debug
|
12
|
-
|
13
|
-
response.status == 200 ? ISACA::Model::Countries.new(data) : nil
|
14
18
|
end
|
15
19
|
end
|
16
20
|
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
3
|
module ExplicitCountries
|
4
|
+
# Method used to fetch all of the ExplicitCountries
|
4
5
|
def self.get
|
5
|
-
response =
|
6
|
+
response = self.send_request
|
7
|
+
ISACA::Model::Countries.new(JSON.parse(response.body, symbolize_names: true))
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# Method used to send the request -- exists for easy testing purposes
|
13
|
+
def self.send_request
|
14
|
+
ISACA::Request.get do |request|
|
6
15
|
uri = URI(ISACA.configuration.url)
|
7
16
|
request.path = "#{uri.scheme}://#{uri.hostname}:#{uri.port}/isacaservices/explicitcountries.json"
|
8
17
|
end
|
9
|
-
|
10
|
-
data = JSON.parse(response.body)
|
11
|
-
ISACA.logger.debug(data) if ISACA.configuration.debug
|
12
|
-
|
13
|
-
response.status == 200 ? ISACA::Model::ExplicitCountries.new(data) : nil
|
14
18
|
end
|
15
19
|
end
|
16
20
|
end
|
@@ -1,16 +1,27 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
|
-
|
3
|
+
class GetUserDetailsByToken
|
4
|
+
# Method used to get user information by token
|
5
|
+
#
|
6
|
+
# @raise [ISACA::AttributeError] Raised if the returned IMIS ID is nil or the ID key is missing
|
7
|
+
#
|
8
|
+
# @return [ISACA::Model::GetUserDetailsByToken] Returns an object representation of the response
|
4
9
|
def self.get(token)
|
5
|
-
response =
|
10
|
+
response = self.send_request(token)
|
11
|
+
|
12
|
+
data = JSON.parse(JSON.parse(response.body, quirks_mode: true), {symbolize_names: true})
|
13
|
+
ISACA::Model::GetUserDetailsByToken.new(data)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
# Method used to send the request -- exists for easy stubbing during tests
|
18
|
+
#
|
19
|
+
# @param token [String]
|
20
|
+
def self.send_request(token)
|
21
|
+
ISACA::Request.get do |request|
|
6
22
|
request.path = request.path + '/GetUserDetailsByToken'
|
7
23
|
request.params['token'] = token
|
8
24
|
end
|
9
|
-
|
10
|
-
data = JSON.parse(JSON.parse(response.body, quirks_mode: true))
|
11
|
-
ISACA.logger.debug(data) if ISACA.configuration.debug
|
12
|
-
|
13
|
-
response.status == 200 ? ISACA::Model::GetUserDetailsByToken.new(data) : nil
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|
@@ -1,13 +1,29 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
3
|
module LogOut
|
4
|
+
# Method used to destroy a user session
|
5
|
+
#
|
6
|
+
# @param token [String] Session token to be destroyed
|
7
|
+
#
|
8
|
+
# @raise [ISACA::ServiceError] An error is raised if this ever fails. See [ISACA::Request]
|
9
|
+
#
|
10
|
+
# @return [Faraday::Response] Returns a response object
|
4
11
|
def self.get(token)
|
5
|
-
|
12
|
+
send_request(token)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# Method used to send request -- exists to ease testing
|
18
|
+
#
|
19
|
+
# @param token [String] Session token to be destroyed
|
20
|
+
#
|
21
|
+
# @return [Faraday::Response] Returns a response object
|
22
|
+
def self.send_request(token)
|
23
|
+
ISACA::Request.get do |request|
|
6
24
|
request.path = request.path + '/LogOut'
|
7
25
|
request.params['token'] = token
|
8
26
|
end
|
9
|
-
|
10
|
-
response.status == 200
|
11
27
|
end
|
12
28
|
end
|
13
29
|
end
|
@@ -1,20 +1,38 @@
|
|
1
1
|
module ISACA
|
2
2
|
module Request
|
3
3
|
module ReportConsent
|
4
|
+
# Method used to report marketing consent and acceptance of the privacy policy. ISACA assumes that when you
|
5
|
+
# send this request that the user has accepted the privacy statement. Plan your user interface with this in mind
|
6
|
+
# and only submit this request when you have validated the acceptance of the privacy policy.
|
7
|
+
#
|
8
|
+
# @param imis_id [String] The ISACA ID of the user reporting consent
|
9
|
+
# @param options [Hash] Optional. If not provided, marketing consent will default to NO [0].
|
10
|
+
#
|
11
|
+
# == Options
|
12
|
+
# [marketing] Consent for marketing. Acceptable values are 0 [for NO] and 1 [for YES].
|
13
|
+
#
|
14
|
+
# @return [Faraday::Response] Returns a response object
|
4
15
|
def self.get(imis_id, options={})
|
5
|
-
|
6
|
-
|
7
|
-
|
16
|
+
self.send_request(imis_id, {marketing: 0}.merge(options))
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
8
20
|
|
9
|
-
|
21
|
+
# Method used to send request -- exists to ease testing
|
22
|
+
#
|
23
|
+
# @param imis_id [String] The ISACA ID of the user reporting consent
|
24
|
+
# @param options [Hash] Optional. If not provided, marketing consent will default to NO [0].
|
25
|
+
#
|
26
|
+
# == Options
|
27
|
+
# [marketing] Consent for marketing. Acceptable values are 0 [for NO] and 1 [for YES].
|
28
|
+
#
|
29
|
+
# @return [Faraday::Response] Returns a response object
|
30
|
+
def self.send_request(imis_id, options={})
|
31
|
+
ISACA::Request.get do |request|
|
10
32
|
request.path = request.path + '/ReportConsent'
|
11
|
-
request.params['MarketingConsent'] =
|
33
|
+
request.params['MarketingConsent'] = options[:marketing]
|
12
34
|
request.params['iMISID'] = imis_id
|
13
35
|
end
|
14
|
-
|
15
|
-
ISACA.logger.debug(response) if ISACA.configuration.debug
|
16
|
-
|
17
|
-
response.status == 200
|
18
36
|
end
|
19
37
|
end
|
20
38
|
end
|
@@ -2,28 +2,51 @@ require 'faraday'
|
|
2
2
|
|
3
3
|
module ISACA
|
4
4
|
module Request
|
5
|
-
|
5
|
+
# Generic GET request used to build REST calls
|
6
|
+
#
|
7
|
+
# @raise [ISACA::ServiceError] Raised because server returned a 400 response code. Bad request.
|
8
|
+
# @raise [ISACA::PartnerKey] The partner has provided an invalid API Key.
|
9
|
+
# @raise [ISACA::ServiceError] Raised because the server returned a 500 response code. Server error.
|
10
|
+
#
|
11
|
+
# @return [Faraday::Response] Returns a Faraday Response object
|
12
|
+
def self.get # :yields: [Faraday::Request] Yields a request object.
|
6
13
|
conn = Faraday.new(url: ISACA.configuration.url)
|
7
14
|
conn.ssl.verify_mode = OpenSSL::SSL::VERIFY_NONE unless ISACA.configuration.verify_ssl
|
8
15
|
|
9
|
-
conn.get do |request|
|
16
|
+
response = conn.get do |request|
|
10
17
|
set_default_request_options(request)
|
11
|
-
yield(request)
|
18
|
+
yield(request) if block_given?
|
12
19
|
end
|
20
|
+
|
21
|
+
ISACA.logger.debug("\n" + response.inspect + "\n") if ISACA.configuration.debug
|
22
|
+
response.success? ? response : raise_response_error(response)
|
13
23
|
end
|
14
24
|
|
15
|
-
|
16
|
-
conn = Faraday.new(url: ISACA.configuration.url)
|
17
|
-
conn.ssl.verify_mode = OpenSSL::SSL::VERIFY_NONE unless ISACA.configuration.verify_ssl
|
25
|
+
private
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
# Testing Request#get is difficult so this method was created for easier testing and stubbing
|
28
|
+
#
|
29
|
+
# @raise [ISACA::ServiceError] Raises a type of service error depending on status code
|
30
|
+
#
|
31
|
+
# @param response [Faraday::Response] Accepts a response object
|
32
|
+
def self.raise_response_error(response)
|
33
|
+
case response.status
|
34
|
+
when 400
|
35
|
+
raise ServiceError.new('A bad request was sent to the ISACA server.')
|
36
|
+
when 403
|
37
|
+
raise PartnerKeyError.new('Access denied as the provided partner key is not valid.')
|
38
|
+
when 404
|
39
|
+
raise ServiceError.new('Endpoint not found.')
|
40
|
+
when 500
|
41
|
+
raise ServiceError.new('An error occurred on the ISACA server.')
|
42
|
+
else
|
43
|
+
raise ServiceError.new("Response returned an unhandled status code: #{response.status}")
|
22
44
|
end
|
23
45
|
end
|
24
46
|
|
25
|
-
|
26
|
-
|
47
|
+
# Helper method used to set common request headers used throughout the API
|
48
|
+
#
|
49
|
+
# @param request [Faraday::Request] The request to which the headers are applied
|
27
50
|
def self.set_default_request_options(request)
|
28
51
|
uri = URI(ISACA.configuration.url)
|
29
52
|
request.path = uri.path
|
@@ -32,6 +55,4 @@ module ISACA
|
|
32
55
|
request.params['secPass'] = ISACA.configuration.secret_pass
|
33
56
|
end
|
34
57
|
end
|
35
|
-
end
|
36
|
-
|
37
|
-
Faraday::Response
|
58
|
+
end
|
data/lib/isaca/version.rb
CHANGED
data/lib/isaca.rb
CHANGED
@@ -8,19 +8,20 @@ require 'isaca/requests/explicit_countries'
|
|
8
8
|
require 'isaca/requests/get_user_by_id'
|
9
9
|
require 'isaca/requests/get_user_details_by_token'
|
10
10
|
require 'isaca/requests/report_consent'
|
11
|
-
require 'isaca/requests/submit_cpe'
|
12
11
|
require 'isaca/requests/log_out'
|
13
12
|
|
14
|
-
# Concerns
|
15
|
-
require 'isaca/models/geographical'
|
16
|
-
|
17
13
|
# Models
|
18
14
|
require 'isaca/models/authenticate_user'
|
19
15
|
require 'isaca/models/countries'
|
20
|
-
require 'isaca/models/explicit_countries'
|
21
16
|
require 'isaca/models/get_user_by_id'
|
22
17
|
require 'isaca/models/get_user_details_by_token'
|
23
|
-
|
18
|
+
|
19
|
+
# Errors
|
20
|
+
require 'isaca/service_error'
|
21
|
+
require 'isaca/connection_error'
|
22
|
+
require 'isaca/partner_key_error'
|
23
|
+
require 'isaca/session_error'
|
24
|
+
require 'isaca/attribute_error'
|
24
25
|
|
25
26
|
# Everything else where order load order does not matter
|
26
27
|
require 'isaca/version'
|
@@ -57,7 +58,7 @@ module ISACA
|
|
57
58
|
attr_accessor :secret_pass
|
58
59
|
attr_accessor :user_agent
|
59
60
|
attr_accessor :verify_ssl
|
60
|
-
|
61
|
+
attr_accessor :logger
|
61
62
|
attr_accessor :debug
|
62
63
|
|
63
64
|
def initialize
|
@@ -97,10 +98,6 @@ module ISACA
|
|
97
98
|
|
98
99
|
raise ConfigurationError.new(msg)
|
99
100
|
end
|
100
|
-
|
101
|
-
def logger=(logger)
|
102
|
-
ISACA.logger = logger
|
103
|
-
end
|
104
101
|
end
|
105
102
|
|
106
103
|
class ConfigurationError < StandardError; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isaca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Orahood
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -66,6 +66,48 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '5.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-reporters
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.14'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.14'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard-minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.4'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.4'
|
69
111
|
description: A wrapper for the ISACA Partners API
|
70
112
|
email:
|
71
113
|
- morahood@gmail.com
|
@@ -74,23 +116,23 @@ extensions: []
|
|
74
116
|
extra_rdoc_files: []
|
75
117
|
files:
|
76
118
|
- ".gitignore"
|
77
|
-
- ".travis.yml"
|
78
119
|
- Gemfile
|
79
120
|
- Gemfile.lock
|
121
|
+
- Guardfile
|
80
122
|
- README.md
|
81
123
|
- Rakefile
|
82
124
|
- bin/console
|
83
125
|
- bin/setup
|
84
126
|
- isaca.gemspec
|
85
127
|
- lib/isaca.rb
|
128
|
+
- lib/isaca/attribute_error.rb
|
129
|
+
- lib/isaca/connection_error.rb
|
86
130
|
- lib/isaca/helpers.rb
|
87
131
|
- lib/isaca/models/authenticate_user.rb
|
88
132
|
- lib/isaca/models/countries.rb
|
89
|
-
- lib/isaca/models/explicit_countries.rb
|
90
|
-
- lib/isaca/models/geographical.rb
|
91
133
|
- lib/isaca/models/get_user_by_id.rb
|
92
134
|
- lib/isaca/models/get_user_details_by_token.rb
|
93
|
-
- lib/isaca/
|
135
|
+
- lib/isaca/partner_key_error.rb
|
94
136
|
- lib/isaca/requests/authenticate_user.rb
|
95
137
|
- lib/isaca/requests/countries.rb
|
96
138
|
- lib/isaca/requests/explicit_countries.rb
|
@@ -99,7 +141,8 @@ files:
|
|
99
141
|
- lib/isaca/requests/log_out.rb
|
100
142
|
- lib/isaca/requests/report_consent.rb
|
101
143
|
- lib/isaca/requests/request.rb
|
102
|
-
- lib/isaca/
|
144
|
+
- lib/isaca/service_error.rb
|
145
|
+
- lib/isaca/session_error.rb
|
103
146
|
- lib/isaca/version.rb
|
104
147
|
homepage: ''
|
105
148
|
licenses: []
|
data/.travis.yml
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module ISACA
|
2
|
-
module Model
|
3
|
-
module Geographical
|
4
|
-
attr_accessor :countries
|
5
|
-
|
6
|
-
def includes_country?(value)
|
7
|
-
value.downcase!
|
8
|
-
|
9
|
-
countries.each do |country|
|
10
|
-
return true if country['CODE'].downcase == value || country['DESCRIPTION'].downcase == value
|
11
|
-
end
|
12
|
-
|
13
|
-
false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module ISACA
|
2
|
-
module Request
|
3
|
-
module SubmitCPE
|
4
|
-
def self.get(imis_id, result, cpe)
|
5
|
-
response = ISACA::Request.get do |request|
|
6
|
-
request.path = request.path + '/SubmitCPE'
|
7
|
-
request.params['id'] = imis_id
|
8
|
-
request.params['result'] = result
|
9
|
-
request.params['cpe'] = cpe
|
10
|
-
end
|
11
|
-
|
12
|
-
data = JSON.parse(response.body)
|
13
|
-
ISACA.logger.debug(data) if ISACA.configuration.debug
|
14
|
-
|
15
|
-
response.status == 200 ? ISACA::Model::SubmitCPE.new(data) : nil
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|