soar-registry-directory 6.0.0 → 7.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/lib/soar/registry/directory/model.rb +4 -4
- data/lib/soar/registry/directory/provider/ldap.rb +13 -12
- data/lib/soar/registry/directory/provider/mysql.rb +8 -8
- data/lib/soar/registry/directory/test/provider/ldap.rb +27 -28
- data/lib/soar/registry/directory/test/provider/mysql.rb +14 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 184dcc7503dc83106a910320501e0051fb27e815
|
4
|
+
data.tar.gz: 286fc633c8ff058630867e01d34fad23fafe9bcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44e58322123aa440c2f668d3efa2c9d2f69c69826a4dd4b093e867e8fe1b46b88419b5014b74c55d0b71910ceaf6155b0ccc66109ba57303360bdb5c227ecb88
|
7
|
+
data.tar.gz: 4715812e40e690ddf0cb151f9b98e062bfcdb82dcb2c22a5a814a8ac8028ca43ecd8fc0f53539c4724a89eefe3212ac45089afd485e65aaf673721c65382d149
|
@@ -19,7 +19,7 @@ module Soar
|
|
19
19
|
end
|
20
20
|
|
21
21
|
##
|
22
|
-
# @param [Hash] entity
|
22
|
+
# @param [Hash{String => }] entity
|
23
23
|
# @return [Boolean]
|
24
24
|
# @raise [Soar::Registry::Directory::Error::NetworkingError, Soar::Registry::Directory::Error::DuplicateEntryError]
|
25
25
|
##
|
@@ -29,7 +29,7 @@ module Soar
|
|
29
29
|
|
30
30
|
##
|
31
31
|
# @param [String] primary_key
|
32
|
-
# @return [Hash] entry
|
32
|
+
# @return [Hash{String => }] entry
|
33
33
|
# @raise [Soar::Registry:::Directory::Error::NoEntriesFound] if primary key not found
|
34
34
|
# @raise [Soar::Registry::Directory::Error::NetworkingError]
|
35
35
|
##
|
@@ -40,7 +40,7 @@ module Soar
|
|
40
40
|
##
|
41
41
|
# @param [String] key
|
42
42
|
# @param [String] value
|
43
|
-
# @return [Array] list of entries
|
43
|
+
# @return [Array<Hash{String => }>] list of entries
|
44
44
|
# @raise [ArgumentError, Soar::Registry::Directory::Error::NetworkingError]
|
45
45
|
##
|
46
46
|
def search(key, value)
|
@@ -48,7 +48,7 @@ module Soar
|
|
48
48
|
end
|
49
49
|
|
50
50
|
##
|
51
|
-
# @return [Array] a list of provider specific indexes
|
51
|
+
# @return [Array<String>] a list of provider specific indexes
|
52
52
|
# @raise [Soar::Registry::Directory::Error::NetworkingError]
|
53
53
|
##
|
54
54
|
def index
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'soar/registry/directory/error'
|
2
2
|
require 'net/ldap'
|
3
|
+
require 'hashie'
|
3
4
|
|
4
5
|
module Soar
|
5
6
|
module Registry
|
@@ -22,7 +23,7 @@ module Soar
|
|
22
23
|
##
|
23
24
|
def initialize(config: , base: , attributes: , index: , credentials: )
|
24
25
|
adapt_exceptions do
|
25
|
-
@index = index
|
26
|
+
@index = index
|
26
27
|
@attributes = attributes
|
27
28
|
@config = {
|
28
29
|
host: config['host'],
|
@@ -42,7 +43,7 @@ module Soar
|
|
42
43
|
end
|
43
44
|
|
44
45
|
##
|
45
|
-
# @param [Hash{
|
46
|
+
# @param [Hash{String => String, Number, Array}] entry
|
46
47
|
# @return [Boolean]
|
47
48
|
# @raise [Soar::Registry::Directory::Error::DuplicateEntryError]
|
48
49
|
##
|
@@ -50,15 +51,15 @@ module Soar
|
|
50
51
|
adapt_exceptions do
|
51
52
|
|
52
53
|
@index.each { |index|
|
53
|
-
if (entry[
|
54
|
-
result = search(index, entry[
|
54
|
+
if (entry['attributes'].keys.include?(index))
|
55
|
+
result = search(index, entry['attributes'][index])
|
55
56
|
raise Soar::Registry::Directory::Error::DuplicateEntryError if result.length > 0
|
56
57
|
end
|
57
58
|
}
|
58
59
|
|
59
60
|
@client.add({
|
60
|
-
dn: entry[
|
61
|
-
attributes: entry[
|
61
|
+
dn: entry['dn'],
|
62
|
+
attributes: entry['attributes'].map { |k, v| [k.to_sym, v] }.to_h
|
62
63
|
})
|
63
64
|
return true
|
64
65
|
end
|
@@ -66,7 +67,7 @@ module Soar
|
|
66
67
|
|
67
68
|
##
|
68
69
|
# @param [String] primary key of the identity ie. the first index
|
69
|
-
# @return [Hash{
|
70
|
+
# @return [Hash{String => String, Number, Array}] single matching entry
|
70
71
|
# @raise [Soar::Registry::Directory::Error::NoEntriesFoundError] if primary key not found
|
71
72
|
# @raise [Soar::Registry::Directory::Error::MultipleEntriesFound] if multiple matches found
|
72
73
|
##
|
@@ -81,9 +82,9 @@ module Soar
|
|
81
82
|
raise Soar::Registry::Directory::Error::MultipleEntriesFound if result.length > 1
|
82
83
|
response = {}
|
83
84
|
@attributes.each { |attribute|
|
84
|
-
response[attribute
|
85
|
+
response[attribute] = result[0][attribute.to_sym][0]
|
85
86
|
}
|
86
|
-
response
|
87
|
+
return response
|
87
88
|
end
|
88
89
|
end
|
89
90
|
|
@@ -91,7 +92,7 @@ module Soar
|
|
91
92
|
##
|
92
93
|
# @param [String] key
|
93
94
|
# @param [String] value
|
94
|
-
# @return [Array<Hash{
|
95
|
+
# @return [Array<Hash{String => String, Array, Number}>] list of matching entries
|
95
96
|
# @raise [ArgumentError] if value or named index is not specified
|
96
97
|
##
|
97
98
|
def search(key, value)
|
@@ -106,7 +107,7 @@ module Soar
|
|
106
107
|
entries.each { |entry|
|
107
108
|
response = {}
|
108
109
|
@attributes.each { |attribute|
|
109
|
-
response[attribute
|
110
|
+
response[attribute] = entry[attribute.to_sym][0]
|
110
111
|
}
|
111
112
|
result << response
|
112
113
|
}
|
@@ -139,7 +140,7 @@ module Soar
|
|
139
140
|
def adapt_exceptions
|
140
141
|
begin
|
141
142
|
yield
|
142
|
-
rescue Net::LDAP::BindingInformationInvalidError, Net::LDAP::ConnectionRefusedError, Errno::ECONNREFUSED => e
|
143
|
+
rescue Net::LDAP::BindingInformationInvalidError, Net::LDAP::NoBindResultError, Net::LDAP::ConnectionRefusedError, Errno::ECONNREFUSED => e
|
143
144
|
raise Soar::Registry::Directory::Error::NetworkingError, e.message
|
144
145
|
end
|
145
146
|
end
|
@@ -38,7 +38,7 @@ module Soar
|
|
38
38
|
end
|
39
39
|
|
40
40
|
##
|
41
|
-
# @param [Hash{
|
41
|
+
# @param [Hash{String => String, Number}] entry
|
42
42
|
# @return [Boolean]
|
43
43
|
##
|
44
44
|
def put(entry)
|
@@ -51,7 +51,7 @@ module Soar
|
|
51
51
|
|
52
52
|
##
|
53
53
|
# @param [String] primary key the first index
|
54
|
-
# @return [Hash{
|
54
|
+
# @return [Hash{String => String, Number}] single matching entry
|
55
55
|
# @raise [Soar::Registry::Directory::Error::NoEntriesFoundError] if primary key not found
|
56
56
|
# @raise [Soar::Registry::Directory::Error::MultipleEntriesFound] if multiple matches found
|
57
57
|
##
|
@@ -66,16 +66,16 @@ module Soar
|
|
66
66
|
field.name
|
67
67
|
}
|
68
68
|
result = mysql_statement.fetch
|
69
|
-
|
69
|
+
return Hash[result.map.with_index { |value, index|
|
70
70
|
[field_names[index.to_i], value]
|
71
|
-
}]
|
71
|
+
}]
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
##
|
76
76
|
# @param [String] key should be in indexed in db schema
|
77
77
|
# @param [String] value
|
78
|
-
# @return [Array<Hash{
|
78
|
+
# @return [Array<Hash{String => String, Number}>] list of matching entries
|
79
79
|
# @raise [ArgumentError] if value or named index is not specified
|
80
80
|
##
|
81
81
|
def search(key, value)
|
@@ -91,9 +91,9 @@ module Soar
|
|
91
91
|
mysql_statement.each { |entry|
|
92
92
|
result << Hash[entry.map.with_index { |value, index|
|
93
93
|
[field_names[index.to_i], value]
|
94
|
-
}]
|
94
|
+
}]
|
95
95
|
}
|
96
|
-
result
|
96
|
+
return result
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -104,7 +104,7 @@ module Soar
|
|
104
104
|
adapt_exceptions do
|
105
105
|
index = []
|
106
106
|
@client.query("SHOW INDEX FROM Client").each_hash { |entry|
|
107
|
-
index << entry['Column_name']
|
107
|
+
index << entry['Column_name']
|
108
108
|
}
|
109
109
|
index
|
110
110
|
end
|
@@ -11,22 +11,22 @@ module Soar
|
|
11
11
|
def initialize
|
12
12
|
@configuration = YAML.load_file("config/#{ENV['CONFIG_FILE']}")
|
13
13
|
@base = @configuration['provider']['config']['base']
|
14
|
-
@index = @configuration['provider']['config']['index']
|
14
|
+
@index = @configuration['provider']['config']['index']
|
15
15
|
@entries = [{
|
16
|
-
dn
|
17
|
-
attributes
|
18
|
-
cn
|
19
|
-
mail
|
20
|
-
objectclass
|
21
|
-
sn
|
16
|
+
"dn" => "cn=John Smith,#{@base}",
|
17
|
+
"attributes" => {
|
18
|
+
"cn" => "John Smith",
|
19
|
+
"mail" => "test@example.com",
|
20
|
+
"objectclass" => ["inetOrgPerson", "top"],
|
21
|
+
"sn" => "Smith"
|
22
22
|
}
|
23
23
|
}, {
|
24
|
-
dn
|
25
|
-
attributes
|
26
|
-
cn
|
27
|
-
mail
|
28
|
-
objectclass
|
29
|
-
sn
|
24
|
+
"dn" => "cn=Sarel Cilliers,#{@base}",
|
25
|
+
"attributes" => {
|
26
|
+
"cn" => "Sarel Cilliers",
|
27
|
+
"mail" => "sarel@example.com",
|
28
|
+
"objectclass" => ["inetOrgPerson", "top"],
|
29
|
+
"sn" => "Cilliers"
|
30
30
|
}
|
31
31
|
}]
|
32
32
|
@connection_retries = 6
|
@@ -38,7 +38,7 @@ module Soar
|
|
38
38
|
provider = provider_class.new(@configuration['provider']['config'].map { |k,v| [k.to_sym, v] }.to_h )
|
39
39
|
@directory = Soar::Registry::Directory.new(provider)
|
40
40
|
@entries.each { |entry|
|
41
|
-
provider.delete(entry[
|
41
|
+
provider.delete(entry['dn'])
|
42
42
|
}
|
43
43
|
rescue Soar::Registry::Directory::Error::NetworkingError => e
|
44
44
|
raise if @connection_retries == 0
|
@@ -55,8 +55,8 @@ module Soar
|
|
55
55
|
def given_existing_data
|
56
56
|
@entries.each{ |entry|
|
57
57
|
@directory.put(entry)
|
58
|
-
result = @directory.search("mail", entry[
|
59
|
-
entry[
|
58
|
+
result = @directory.search("mail", entry['attributes']['mail'])
|
59
|
+
entry['attributes']['entryuuid'] = result[0][@index[0]]
|
60
60
|
}
|
61
61
|
end
|
62
62
|
|
@@ -70,7 +70,6 @@ module Soar
|
|
70
70
|
password: @configuration['provider']['config']['credentials']['password']
|
71
71
|
}
|
72
72
|
})
|
73
|
-
|
74
73
|
end
|
75
74
|
|
76
75
|
def put_duplicate_entry
|
@@ -84,8 +83,8 @@ module Soar
|
|
84
83
|
def put_entry
|
85
84
|
begin
|
86
85
|
@directory.put(@entries[0])
|
87
|
-
result = @directory.search("mail", @entries[0][
|
88
|
-
@entries[0][
|
86
|
+
result = @directory.search("mail", @entries[0]['attributes']['mail'])
|
87
|
+
@entries[0]['attributes']['entryuuid'] = result[0][@index[0]]
|
89
88
|
rescue Soar::Registry::Directory::Error::NetworkingError => e
|
90
89
|
@error = e
|
91
90
|
end
|
@@ -93,7 +92,7 @@ module Soar
|
|
93
92
|
|
94
93
|
def search_for_entry
|
95
94
|
begin
|
96
|
-
@result = @directory.search("mail", @entries[0][
|
95
|
+
@result = @directory.search("mail", @entries[0]['attributes']['mail'])
|
97
96
|
rescue Soar::Registry::Directory::Error::NetworkingError => e
|
98
97
|
@error = e
|
99
98
|
end
|
@@ -109,7 +108,7 @@ module Soar
|
|
109
108
|
|
110
109
|
def fetch_entry
|
111
110
|
begin
|
112
|
-
@result = @directory.fetch(@entries[0][
|
111
|
+
@result = @directory.fetch(@entries[0]['attributes']['entryuuid'])
|
113
112
|
rescue Soar::Registry::Directory::Error::NoEntriesFoundError, Soar::Registry::Directory::Error::NetworkingError => e
|
114
113
|
@error = e
|
115
114
|
end
|
@@ -120,15 +119,15 @@ module Soar
|
|
120
119
|
end
|
121
120
|
|
122
121
|
def persisted?
|
123
|
-
result = @directory.fetch(@entries[0][
|
124
|
-
entry = @entries[0][
|
125
|
-
entry.delete(
|
122
|
+
result = @directory.fetch(@entries[0]['attributes']['entryuuid'])
|
123
|
+
entry = @entries[0]['attributes']
|
124
|
+
entry.delete('objectclass')
|
126
125
|
result == entry
|
127
126
|
end
|
128
127
|
|
129
128
|
def returned?
|
130
|
-
entry = @entries[0][
|
131
|
-
entry.delete(
|
129
|
+
entry = @entries[0]['attributes']
|
130
|
+
entry.delete('objectclass')
|
132
131
|
@result == [entry]
|
133
132
|
end
|
134
133
|
|
@@ -137,8 +136,8 @@ module Soar
|
|
137
136
|
end
|
138
137
|
|
139
138
|
def single_entry?
|
140
|
-
entry = @entries[0][
|
141
|
-
entry.delete(
|
139
|
+
entry = @entries[0]['attributes']
|
140
|
+
entry.delete('objectclass')
|
142
141
|
@result == entry
|
143
142
|
end
|
144
143
|
|
@@ -12,20 +12,20 @@ module Soar
|
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@configuration = YAML.load_file("config/#{ENV['CONFIG_FILE']}")
|
15
|
-
@index = @configuration['provider']['config']['index']
|
15
|
+
@index = @configuration['provider']['config']['index']
|
16
16
|
@attributes = @configuration['provider']['config']['attributes']
|
17
17
|
@entries = [{
|
18
|
-
ID
|
19
|
-
Client_Number
|
20
|
-
Notifyemail_Invoice
|
21
|
-
First_Name
|
22
|
-
Surname
|
18
|
+
"ID" => 1,
|
19
|
+
"Client_Number" => "C123456789",
|
20
|
+
"Notifyemail_Invoice" => "johnconner@example.com",
|
21
|
+
"First_Name" => 'John',
|
22
|
+
"Surname" => 'Connor'
|
23
23
|
}, {
|
24
|
-
ID
|
25
|
-
First_Name
|
26
|
-
Surname
|
27
|
-
Client_Number
|
28
|
-
Notifyemail_Invoice
|
24
|
+
"ID" => 2,
|
25
|
+
"First_Name" => 'Sarah',
|
26
|
+
"Surname" => 'Connor',
|
27
|
+
"Client_Number" => "C101112134",
|
28
|
+
"Notifyemail_Invoice" => "sarahconnor@example.com"
|
29
29
|
}]
|
30
30
|
@connection_retries = 6
|
31
31
|
end
|
@@ -73,7 +73,7 @@ module Soar
|
|
73
73
|
|
74
74
|
def search_for_entry
|
75
75
|
begin
|
76
|
-
@result = @directory.search("Notifyemail_Invoice", @entries[0][
|
76
|
+
@result = @directory.search("Notifyemail_Invoice", @entries[0]['Notifyemail_Invoice'])
|
77
77
|
rescue Soar::Registry::Directory::Error::NetworkingError => e
|
78
78
|
@error = e.message
|
79
79
|
end
|
@@ -89,14 +89,14 @@ module Soar
|
|
89
89
|
|
90
90
|
def fetch_entry
|
91
91
|
begin
|
92
|
-
@result = @directory.fetch(@entries[0][
|
92
|
+
@result = @directory.fetch(@entries[0]['ID'])
|
93
93
|
rescue Soar::Registry::Directory::Error::NoEntriesFoundError, Soar::Registry::Directory::Error::NetworkingError => e
|
94
94
|
@error = e.message
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
def persisted?
|
99
|
-
@directory.fetch(@entries[0][
|
99
|
+
@directory.fetch(@entries[0]['ID']) == @entries[0]
|
100
100
|
end
|
101
101
|
|
102
102
|
def returned?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soar-registry-directory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Mulder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashy_db
|