idr_client 0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/idr_client.rb +98 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f20475104672ed1c698969b86285488f338c00f1
4
+ data.tar.gz: 319f90522a9faf84c0943625e5c377957e5b5d04
5
+ SHA512:
6
+ metadata.gz: 433ad64347ae2b4eb1065d595933e1ecf7e0a4142bb1f1ec0d19e737b38f9b99105a5022abb820788eabf13670bb89a5f3a620381ba0a003898c578f1b842c2b
7
+ data.tar.gz: fbe1fd2885a18f881dae520d186a44e72c26328261e965087bee19c06bd06e38d4a42d70647c64519db044ed6314e71c69d08a03856763210fa7f449d520c12d
data/lib/idr_client.rb ADDED
@@ -0,0 +1,98 @@
1
+ require 'uri'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'soar_idm/soar_idm'
5
+
6
+ module SoarSc
7
+
8
+ class IdrClient < SoarIdm::IdmApi
9
+
10
+ class MissingRequiredAttributeError < StandardError; end
11
+ class CommunicationError < StandardError; end
12
+ class UnsupportedResponseError < StandardError; end
13
+
14
+ attr_accessor :roles_uri
15
+ attr_accessor :attributes_uri
16
+
17
+ def initialize(http=Net::HTTP)
18
+ @http = http
19
+ end
20
+
21
+ def get_roles(subject_identifier)
22
+ begin
23
+ super(subject_identifier)
24
+ rescue MissingRequiredAttributeError => error
25
+ raise error
26
+ rescue JSON::ParserError => error
27
+ raise UnsupportedResponseError, error.message
28
+ rescue StandardError => error
29
+ raise CommunicationError, error.message
30
+ end
31
+ end
32
+
33
+ def get_attributes(subject_identifier, role = nil)
34
+ begin
35
+ super(subject_identifier, role)
36
+ rescue MissingRequiredAttributeError => error
37
+ raise error
38
+ rescue JSON::ParserError => error
39
+ raise UnsupportedResponseError, error.message
40
+ rescue StandardError => error
41
+ raise CommunicationError, error.message
42
+ end
43
+ end
44
+
45
+ def attributes_uri=(attributes_uri)
46
+ raise URI::InvalidURIError if not valid_url?(attributes_uri)
47
+ @attributes_uri = URI.parse(attributes_uri)
48
+ end
49
+
50
+ def roles_uri=(roles_uri)
51
+ raise URI::InvalidURIError if not valid_url?(roles_uri)
52
+ @roles_uri = URI.parse(roles_uri)
53
+ end
54
+
55
+ private
56
+
57
+ def calculate_identities(entity_identifier)
58
+ [entity_identifier]
59
+ end
60
+
61
+ def calculate_all_attributes(identity)
62
+ response = ask_idr(identity, nil, @attributes_uri)
63
+ response['data']['attributes']
64
+ end
65
+
66
+ def calculate_roles(identity)
67
+ raise MissingRequiredAttributeError, 'Missing required roles_uri' if @roles_uri.nil?
68
+ response = ask_idr(identity, nil, @roles_uri)
69
+ response['data']['roles']
70
+ end
71
+
72
+ def calculate_attributes(identity, role)
73
+ raise MissingRequiredAttributeError, 'Missing required @attributes_uri attribute' if @attributes_uri.nil?
74
+ response = ask_idr(identity, role, @attributes_uri)
75
+ response['data']['attributes'][role]
76
+ end
77
+
78
+ def ask_idr(identifier, role = nil, url)
79
+ response = @http.start(url.host, url.port) do |http|
80
+ params = build_params(identifier, role)
81
+ http.get(url.path + params)
82
+ end
83
+ JSON.parse(response.body)
84
+ end
85
+
86
+ def build_params(identifier, role = nil)
87
+ params = "?identifier=#{identifier}"
88
+ params += "&role=#{role}" if not role.nil?
89
+ params
90
+ end
91
+
92
+ def valid_url?(uri)
93
+ result = uri =~ /\A#{URI::regexp(['http', 'https'])}\z/
94
+ not result.nil?
95
+ end
96
+
97
+ end
98
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: idr_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Charles Mulder
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: soar_idm
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.3'
41
+ description: Ruby client for communicating with Hetzner identity registries
42
+ email: charles.mulder@hetzner.co.za
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/idr_client.rb
48
+ homepage: http://rubygems.org/gems/hola
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.4.6
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Identity registry client
72
+ test_files: []