soar-registry-identity 3.0.2 → 4.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/README.md +71 -34
- data/lib/soar/registry/identity/error.rb +9 -0
- data/lib/soar/registry/identity/factory.rb +22 -0
- data/lib/soar/registry/identity/model.rb +20 -1
- data/lib/soar/registry/identity/provider/{staff/base.rb → customer/client_number.rb} +22 -26
- data/lib/soar/registry/identity/provider/customer/email.rb +69 -0
- data/lib/soar/registry/identity/provider/{staff/id.rb → customer/uuid.rb} +7 -3
- data/lib/soar/registry/identity/provider/staff/email.rb +50 -5
- data/lib/soar/registry/identity/provider/staff/uuid.rb +81 -0
- data/lib/soar/registry/identity/test/fixtures/customer/identities.json +18 -0
- data/lib/soar/registry/identity/test/fixtures/roles.json +52 -0
- data/lib/soar/registry/identity/test/fixtures/staff/identities.json +19 -0
- metadata +26 -14
- data/lib/soar/registry/identity/provider/staff/translator/default.rb +0 -31
- data/lib/soar/registry/identity/test/fixtures/dynamodb.json +0 -44
- data/lib/soar/registry/identity/test/fixtures/ldap.json +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d7b3dcf75590e0d3806f28fa54f2765ff2aab25
|
4
|
+
data.tar.gz: 31469380e9669d0e0da94c57de7167e0e9c506f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33d2533b2fe38a15db6bccbb3387d8ff06c9e7bb0ce35540553a7de9cd05de933d316cfaa62f647fc18b369cd5831a8b787645ee1314c902c90f8f675fe58b26
|
7
|
+
data.tar.gz: c08238ffa602bebe50dc16873a3d30d5eae57a8412718464511127bcabda2b88036979e787c111962829372cb01f30561036a82ea88ed4acc12defd533d5267a
|
data/README.md
CHANGED
@@ -4,64 +4,98 @@
|
|
4
4
|
|
5
5
|
### Example data
|
6
6
|
```javascript
|
7
|
-
|
8
|
-
"uuid": "
|
7
|
+
identities = [{
|
8
|
+
"uuid": "62936e70-1815-439b-bf89-8492855a7e6b",
|
9
9
|
"email": "test+publisher@hetzner.co.za",
|
10
|
-
"roles": {
|
11
|
-
"staff": {
|
12
|
-
"department": "technical"
|
13
|
-
},
|
14
|
-
"configuration_publisher": {
|
15
|
-
"configuration_identifiers": ["*"]
|
16
|
-
}
|
17
|
-
}
|
18
10
|
}]
|
11
|
+
|
19
12
|
```
|
20
13
|
|
21
14
|
### Directory
|
22
15
|
Create a directory provider
|
23
16
|
|
24
17
|
```ruby
|
25
|
-
require 'soar/registry/directory'
|
26
|
-
directory_provider = Soar::Registry::Directory::Provider::Stub.new(
|
27
|
-
|
28
|
-
|
18
|
+
> require 'soar/registry/directory'
|
19
|
+
> directory_provider = Soar::Registry::Directory::Provider::Stub.new(
|
20
|
+
table: "identities",
|
21
|
+
index: ["uuid", "email"]
|
29
22
|
)
|
30
23
|
```
|
31
24
|
|
32
25
|
Create a directory
|
33
26
|
```ruby
|
34
|
-
directory = Soar::Registry::Directory.new(directory_provider)
|
27
|
+
> directory = Soar::Registry::Directory.new(directory_provider)
|
35
28
|
```
|
36
29
|
|
37
|
-
###
|
38
|
-
|
30
|
+
### Instantiation
|
31
|
+
|
32
|
+
#### Manual instantiation
|
39
33
|
|
40
|
-
|
34
|
+
##### Staff Email IDR
|
35
|
+
Search for identifiers by email address. Used by [soar-authentication-identity](https://github.com/hetznerZA/soar-authentication-identity) to translate an authenticated identifier to an UUID.
|
41
36
|
```ruby
|
42
37
|
require 'soar/registry/identity'
|
43
|
-
identity_provider = Soar::Registry::Identity::Provider::Staff::
|
38
|
+
identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new({
|
39
|
+
directory: directory,
|
40
|
+
fetch_index: 'uuid',
|
41
|
+
search_index: 'email'
|
42
|
+
})
|
44
43
|
```
|
45
44
|
|
46
|
-
Create an IDR
|
47
45
|
```ruby
|
48
|
-
@
|
46
|
+
@email_idr = Soar::Registry::Identity.new(identity_provider)
|
49
47
|
```
|
50
48
|
|
51
|
-
|
52
|
-
|
49
|
+
#### Factory instantiation
|
50
|
+
|
51
|
+
##### Create a selector
|
53
52
|
```ruby
|
54
|
-
require '
|
55
|
-
|
53
|
+
> require 'object_selector'
|
54
|
+
> selector = ObjectSelector.new(
|
55
|
+
ObjectSelector::Provider::RegexRuleList.new({
|
56
|
+
rules: [
|
57
|
+
{
|
58
|
+
regex: /\A[\w+\-.]+@hetzner.co.za\z/i,
|
59
|
+
object: Soar::Registry::Identity::Provider::Staff::Email.new({
|
60
|
+
directory: Object.new,
|
61
|
+
fetch_index: SecureRandom.hex,
|
62
|
+
search_index: SecureRandom.hex
|
63
|
+
})
|
64
|
+
},
|
65
|
+
{
|
66
|
+
regex: /\A[\w+\-.]+@.+/i,
|
67
|
+
object: Soar::Registry::Identity::Provider::Customer::Email.new({
|
68
|
+
directory: Object.new,
|
69
|
+
fetch_index: SecureRandom.hex,
|
70
|
+
search_index: SecureRandom.hex
|
71
|
+
})
|
72
|
+
},
|
73
|
+
{
|
74
|
+
regex: /\A[CF]{0,1}\d+\z/,
|
75
|
+
object: Soar::Registry::Identity::Provider::Customer::ClientNumber.new({
|
76
|
+
directory: Object.new,
|
77
|
+
fetch_index: SecureRandom.hex,
|
78
|
+
search_index: SecureRandom.hex
|
79
|
+
})
|
80
|
+
}
|
81
|
+
]
|
82
|
+
})
|
83
|
+
)
|
56
84
|
```
|
57
85
|
|
86
|
+
##### Get an IDR
|
58
87
|
```ruby
|
59
|
-
|
88
|
+
> selector_value = 'your-string-here'
|
89
|
+
idr = Soar::Registry::Identity::Factory.create({
|
90
|
+
value: selector_value,
|
91
|
+
selector: selector
|
92
|
+
})
|
60
93
|
```
|
61
94
|
|
62
|
-
###
|
95
|
+
### Use your IDR
|
96
|
+
|
97
|
+
##### Getting a list of identifiers
|
63
98
|
```ruby
|
64
|
-
> identifiers = @id_idr.get_identifiers("identity-820d5660-2204-4f7d-8c04-746313439b81")
|
65
99
|
> identifiers = @email_idr.get_identifiers("admin@hetzner.co.za")
|
66
100
|
> puts identifiers.inspect
|
67
101
|
["admin@hetzner.co.za", "identity-820d5660-2204-4f7d-8c04-746313439b81"]
|
@@ -69,7 +103,8 @@ identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new(directo
|
|
69
103
|
|
70
104
|
### Getting a list of roles
|
71
105
|
```ruby
|
72
|
-
> roles = @
|
106
|
+
> roles = @uuid_idr.get_roles("identity-820d5660-2204-4f7d-8c04-746313439b81")
|
107
|
+
> # get_roles is not applicable to staff email idr
|
73
108
|
> puts roles.inspect
|
74
109
|
["staff", "configuration_publisher", "configuration_consumer"]
|
75
110
|
```
|
@@ -77,7 +112,8 @@ identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new(directo
|
|
77
112
|
### Getting a hash of attributes for a role
|
78
113
|
```ruby
|
79
114
|
> role = 'staff'
|
80
|
-
> attributes = @
|
115
|
+
> attributes = @uuid_idr.get_attributes("identity-820d5660-2204-4f7d-8c04-746313439b81", role)
|
116
|
+
> # get_attributes is not applicable to staff email idr
|
81
117
|
> puts attributes.inspect
|
82
118
|
{
|
83
119
|
"staff": {
|
@@ -89,7 +125,8 @@ identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new(directo
|
|
89
125
|
|
90
126
|
### Getting a hash of all attributes
|
91
127
|
```ruby
|
92
|
-
> attributes = @
|
128
|
+
> attributes = @uuid_idr.get_attributes("identity-820d5660-2204-4f7d-8c04-746313439b81")
|
129
|
+
> # get_attributes is not applicate to staff email idr
|
93
130
|
> puts attributes.inspect
|
94
131
|
{
|
95
132
|
"identity_id" => "identity-820d5660-2204-4f7d-8c04-746313439b81",
|
@@ -114,7 +151,6 @@ identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new(directo
|
|
114
151
|
}
|
115
152
|
```
|
116
153
|
|
117
|
-
|
118
154
|
## Tests
|
119
155
|
|
120
156
|
### Local
|
@@ -124,8 +160,9 @@ $ bundle exec rspec
|
|
124
160
|
|
125
161
|
### CI
|
126
162
|
```bash
|
127
|
-
docker-compose --file docker-compose.ci.yml
|
128
|
-
EXIT_CODE=$(docker ps -a -f "name=
|
163
|
+
docker-compose --file docker-compose.ci.yml --project-name soar-registry-identity up --abort-on-container-exit --remove-orphans --build --force-recreate
|
164
|
+
EXIT_CODE=$(docker ps -a -f "name=soarregistryidentity_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}");
|
165
|
+
docker-compose --file docker-compose.ci.yml --project-name soar-registry-identity down --rmi local
|
129
166
|
exit $EXIT_CODE;
|
130
167
|
```
|
131
168
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'soar/registry/identity'
|
2
|
+
|
3
|
+
module Soar
|
4
|
+
module Registry
|
5
|
+
module Identity
|
6
|
+
class Factory
|
7
|
+
|
8
|
+
##
|
9
|
+
# @param [String] value
|
10
|
+
# @param [ObjectSelector] selector
|
11
|
+
# @raise [ObjectSelector::Error::NoMatchError]
|
12
|
+
# @return [Soar::Registry::Identity]
|
13
|
+
##
|
14
|
+
def self.create(value: , selector: )
|
15
|
+
identity_provider = selector.select(value)
|
16
|
+
return Soar::Registry::Identity.new(identity_provider)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,22 +1,41 @@
|
|
1
1
|
require 'soar/registry/identity/provider/staff/email'
|
2
|
-
require 'soar/registry/identity/provider/staff/
|
2
|
+
require 'soar/registry/identity/provider/staff/uuid'
|
3
|
+
require 'soar/registry/identity/provider/customer/client_number'
|
4
|
+
require 'soar/registry/identity/provider/customer/email'
|
3
5
|
|
4
6
|
module Soar
|
5
7
|
module Registry
|
6
8
|
module Identity
|
7
9
|
class Model
|
10
|
+
|
11
|
+
attr_reader :provider
|
12
|
+
|
8
13
|
def initialize(provider)
|
9
14
|
@provider = provider
|
10
15
|
end
|
11
16
|
|
17
|
+
##
|
18
|
+
# @param [String] identifier
|
19
|
+
# @return [Array<String>] list of roles
|
20
|
+
##
|
12
21
|
def get_roles(identifier)
|
13
22
|
@provider.get_roles(identifier)
|
14
23
|
end
|
15
24
|
|
25
|
+
##
|
26
|
+
# @param [String] identifier
|
27
|
+
# @param [String] role
|
28
|
+
# @return [Hash] if a role is specified the returned hash is keyed by role
|
29
|
+
# else it's keyed by attribute name
|
30
|
+
##
|
16
31
|
def get_attributes(identifier, role = nil)
|
17
32
|
@provider.get_attributes(identifier, role)
|
18
33
|
end
|
19
34
|
|
35
|
+
##
|
36
|
+
# @param [String] identifier
|
37
|
+
# @return [Array<String>] list of identifiers
|
38
|
+
##
|
20
39
|
def get_identifiers(identifier)
|
21
40
|
@provider.get_identifiers(identifier)
|
22
41
|
end
|
@@ -1,36 +1,28 @@
|
|
1
1
|
require 'soar_idm/soar_idm'
|
2
|
-
require 'soar/registry/identity/provider/staff/translator/default'
|
3
2
|
|
4
3
|
module Soar
|
5
4
|
module Registry
|
6
5
|
module Identity
|
7
6
|
module Provider
|
8
|
-
module
|
9
|
-
class
|
10
|
-
|
11
|
-
attr_reader :directory
|
12
|
-
attr_reader :translator
|
7
|
+
module Customer
|
8
|
+
class ClientNumber < SoarIdm::IdmApi
|
13
9
|
|
14
10
|
##
|
15
|
-
# @param
|
11
|
+
# @param [Soar::Registry::Directory] directory
|
16
12
|
##
|
17
|
-
def initialize(directory:
|
18
|
-
@translator = Soar::Registry::Identity::Provider::Staff::Translator::Default.new
|
13
|
+
def initialize(directory:, fetch_index: , search_index: )
|
19
14
|
@directory = directory
|
15
|
+
@fetch_index = fetch_index
|
16
|
+
@search_index = search_index
|
20
17
|
end
|
21
18
|
|
22
19
|
##
|
23
|
-
# @param [
|
24
|
-
# @return [
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
roles = []
|
30
|
-
identity['roles'].each do |role, attributes|
|
31
|
-
roles << role
|
32
|
-
end
|
33
|
-
roles
|
20
|
+
# @param [String] identifier, an email address that uniquely identifies an identity
|
21
|
+
# @return [Hash] an identity
|
22
|
+
##
|
23
|
+
def calculate_identities(identity_identifier)
|
24
|
+
entries = @directory.search(@search_index, identity_identifier)
|
25
|
+
return entries.empty? ? [] : [entries[0]]
|
34
26
|
end
|
35
27
|
|
36
28
|
##
|
@@ -46,25 +38,29 @@ module Soar
|
|
46
38
|
identifiers
|
47
39
|
end
|
48
40
|
|
41
|
+
##
|
42
|
+
# @param [Hash] identity
|
43
|
+
# @return [Array] list of roles
|
44
|
+
def calculate_roles(identity)
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
49
48
|
##
|
50
49
|
# @param [Hash] identity
|
51
50
|
# @param [String] role
|
52
51
|
# @return [Hash] A hash of attributes
|
53
52
|
def calculate_attributes(identity, role)
|
54
|
-
|
55
|
-
return nil if not entry
|
56
|
-
identity = @translator.get_identity(entry)
|
57
|
-
{ role => identity['roles'][role] }
|
53
|
+
raise NotImplementedError
|
58
54
|
end
|
59
55
|
|
60
56
|
##
|
61
57
|
# @param [Hash] identity
|
62
58
|
# @return [Hash] Hash of attributes keyed by role
|
63
59
|
def calculate_all_attributes(identity)
|
64
|
-
|
65
|
-
@translator.get_identity(entry)
|
60
|
+
raise NotImplementedError
|
66
61
|
end
|
67
62
|
|
63
|
+
|
68
64
|
end
|
69
65
|
end
|
70
66
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'soar_idm/soar_idm'
|
2
|
+
|
3
|
+
module Soar
|
4
|
+
module Registry
|
5
|
+
module Identity
|
6
|
+
module Provider
|
7
|
+
module Customer
|
8
|
+
class Email < SoarIdm::IdmApi
|
9
|
+
|
10
|
+
##
|
11
|
+
# @param [Soar::Registry::Directory] directory
|
12
|
+
##
|
13
|
+
def initialize(directory:, fetch_index: , search_index: )
|
14
|
+
@directory = directory
|
15
|
+
@fetch_index = fetch_index
|
16
|
+
@search_index = search_index
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# @param [String] identifier, an email address that uniquely identifies an identity
|
21
|
+
# @return [Hash] an identity
|
22
|
+
##
|
23
|
+
def calculate_identities(identity_identifier)
|
24
|
+
entries = @directory.search(@search_index, identity_identifier)
|
25
|
+
return entries.empty? ? [] : [entries[0]]
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# @param [Hash] identity
|
30
|
+
# @return [Array] list of identifiers
|
31
|
+
##
|
32
|
+
def calculate_identifiers(identity)
|
33
|
+
indexes = @directory.index
|
34
|
+
identifiers = []
|
35
|
+
indexes.each { |index|
|
36
|
+
identifiers << identity[index]
|
37
|
+
}
|
38
|
+
identifiers
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# @param [Hash] identity
|
43
|
+
# @return [Array] list of roles
|
44
|
+
def calculate_roles(identity)
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# @param [Hash] identity
|
50
|
+
# @param [String] role
|
51
|
+
# @return [Hash] A hash of attributes
|
52
|
+
def calculate_attributes(identity, role)
|
53
|
+
raise NotImplementedError
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# @param [Hash] identity
|
58
|
+
# @return [Hash] Hash of attributes keyed by role
|
59
|
+
def calculate_all_attributes(identity)
|
60
|
+
raise NotImplementedError
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -1,11 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'soar_idm/soar_idm'
|
2
2
|
|
3
3
|
module Soar
|
4
4
|
module Registry
|
5
5
|
module Identity
|
6
6
|
module Provider
|
7
|
-
module
|
8
|
-
|
7
|
+
module Customer
|
8
|
+
|
9
|
+
##
|
10
|
+
# Work in progress. Do not use.
|
11
|
+
##
|
12
|
+
class Uuid < SoarIdm::IdmApi
|
9
13
|
|
10
14
|
##
|
11
15
|
# @param [String] identifier, a primary key that uniquely identifies an identity
|
@@ -1,21 +1,66 @@
|
|
1
|
-
require '
|
1
|
+
require 'soar_idm/soar_idm'
|
2
2
|
|
3
3
|
module Soar
|
4
4
|
module Registry
|
5
5
|
module Identity
|
6
6
|
module Provider
|
7
7
|
module Staff
|
8
|
-
class Email <
|
8
|
+
class Email < SoarIdm::IdmApi
|
9
|
+
|
10
|
+
##
|
11
|
+
# @param [Soar::Registry::Directory] directory
|
12
|
+
##
|
13
|
+
def initialize(directory:, fetch_index:, search_index:)
|
14
|
+
@directory = directory
|
15
|
+
@fetch_index = fetch_index
|
16
|
+
@search_index = search_index
|
17
|
+
end
|
9
18
|
|
10
19
|
##
|
11
20
|
# @param [String] identifier, an email address that uniquely identifies an identity
|
12
21
|
# @return [Hash] an identity
|
13
22
|
##
|
14
|
-
def calculate_identities(
|
15
|
-
entries = @directory.search(@
|
16
|
-
return entries.empty? ? [] : [
|
23
|
+
def calculate_identities(identity_identifier)
|
24
|
+
entries = @directory.search(@search_index, identity_identifier)
|
25
|
+
return entries.empty? ? [] : [entries[0]]
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# @param [Hash] identity
|
30
|
+
# @return [Array] list of identifiers
|
31
|
+
##
|
32
|
+
def calculate_identifiers(identity)
|
33
|
+
indexes = @directory.index
|
34
|
+
identifiers = []
|
35
|
+
indexes.each { |index|
|
36
|
+
identifiers << identity[index]
|
37
|
+
}
|
38
|
+
identifiers
|
17
39
|
end
|
18
40
|
|
41
|
+
##
|
42
|
+
# @param [Hash] identity
|
43
|
+
# @return [Array] list of roles
|
44
|
+
def calculate_roles(identity)
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# @param [Hash] identity
|
50
|
+
# @param [String] role
|
51
|
+
# @return [Hash] A hash of attributes
|
52
|
+
def calculate_attributes(identity, role)
|
53
|
+
raise NotImplementedError
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# @param [Hash] identity
|
58
|
+
# @return [Hash] Hash of attributes keyed by role
|
59
|
+
def calculate_all_attributes(identity)
|
60
|
+
raise NotImplementedError
|
61
|
+
end
|
62
|
+
|
63
|
+
|
19
64
|
end
|
20
65
|
end
|
21
66
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'soar_idm/soar_idm'
|
2
|
+
|
3
|
+
module Soar
|
4
|
+
module Registry
|
5
|
+
module Identity
|
6
|
+
module Provider
|
7
|
+
module Staff
|
8
|
+
|
9
|
+
##
|
10
|
+
# Work in progress. Do not use.
|
11
|
+
##
|
12
|
+
class Uuid < SoarIdm::IdmApi
|
13
|
+
|
14
|
+
##
|
15
|
+
# @param [Hash] directories
|
16
|
+
# @option directories [Object] :identity
|
17
|
+
# @option directories [Object] :role
|
18
|
+
##
|
19
|
+
def initialize(directories:, fetch_index: "entryuuid")
|
20
|
+
raise Soar::Registry::Identity::Error::MissingRequiredDirectoryError, ':identity key is required' if not directories.key?(:identity)
|
21
|
+
@identity_directory = directories[:identity]
|
22
|
+
@roles_directory = directories.key?(:roles) ? directories[:roles] : directories[:identity]
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# @param [Hash] identity
|
27
|
+
# @return [Array] list of roles
|
28
|
+
def calculate_roles(identity)
|
29
|
+
entry = @roles_directory.fetch(identity[@roles_directory.index[0]])
|
30
|
+
return nil if not entry
|
31
|
+
roles = []
|
32
|
+
entry['roles'].each do |role, attributes|
|
33
|
+
roles << role
|
34
|
+
end
|
35
|
+
roles
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# @param [Hash] identity
|
40
|
+
# @return [Array] list of identifiers
|
41
|
+
##
|
42
|
+
def calculate_identifiers(identity)
|
43
|
+
indexes = @identity_directory.index
|
44
|
+
identifiers = []
|
45
|
+
indexes.each { |index|
|
46
|
+
identifiers << identity[index]
|
47
|
+
}
|
48
|
+
identifiers
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# @param [Hash] identity
|
53
|
+
# @param [String] role
|
54
|
+
# @return [Hash] A hash of attributes
|
55
|
+
def calculate_attributes(identity, role)
|
56
|
+
entry = @roles_directory.fetch(identity[@roles_directory.index[0]])
|
57
|
+
return nil if not entry
|
58
|
+
{ role => entry['roles'][role] }
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# @param [Hash] identity
|
63
|
+
# @return [Hash] Hash of attributes keyed by role
|
64
|
+
def calculate_all_attributes(identity)
|
65
|
+
@directory.fetch(identity[@roles_directory.index[0]])
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# @param [String] identifier, a primary key that uniquely identifies an identity
|
70
|
+
# @return [Hash] an identity
|
71
|
+
##
|
72
|
+
def calculate_identities(identifier)
|
73
|
+
return [@identity_directory.fetch(identifier)]
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"ID": 1,
|
4
|
+
"Notifyemail_Invoice": "identity1@example.com",
|
5
|
+
"Client_Number": "C123456789"
|
6
|
+
},
|
7
|
+
{
|
8
|
+
"ID": 2,
|
9
|
+
"Notifyemail_Invoice": "identity2@example.com",
|
10
|
+
"Client_Number": "C135791113"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"ID": 3,
|
14
|
+
"Notifyemail_Invoice": "identity3@example.com",
|
15
|
+
"Client_Number": "C2468101214"
|
16
|
+
}
|
17
|
+
]
|
18
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"identity_uuid": "62936e70-1815-439b-bf89-8492855a7e6b",
|
4
|
+
"role": "staff",
|
5
|
+
"attributes": {
|
6
|
+
"department": "technical"
|
7
|
+
}
|
8
|
+
},
|
9
|
+
{
|
10
|
+
"identity_uuid": "62936e70-1815-439b-bf89-8492855a7e6b",
|
11
|
+
"role": "configuration_publisher",
|
12
|
+
"attributes": {
|
13
|
+
"configuration_identifiers": ["*"]
|
14
|
+
}
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"identity_uuid": "43353f18-8afe-11e6-ae22-56b6b6499611",
|
18
|
+
"role": "staff",
|
19
|
+
"attributes": {
|
20
|
+
"department": "technical"
|
21
|
+
}
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"identity_uuid": "43353f18-8afe-11e6-ae22-56b6b6499611",
|
25
|
+
"role": "configuration_consumer",
|
26
|
+
"attributes": {
|
27
|
+
"configuration_identifiers": ["*"]
|
28
|
+
}
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"identity_uuid": "820d5660-2204-4f7d-8c04-746313439b81",
|
32
|
+
"role": "staff",
|
33
|
+
"attributes": {
|
34
|
+
"department": "technical"
|
35
|
+
}
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"identity_uuid": "820d5660-2204-4f7d-8c04-746313439b81",
|
39
|
+
"role": "configuration_publisher",
|
40
|
+
"attributes": {
|
41
|
+
"configuration_identifiers": ["*"]
|
42
|
+
}
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"identity_uuid": "820d5660-2204-4f7d-8c04-746313439b81",
|
46
|
+
"role": "configuration_consumer",
|
47
|
+
"attributes": {
|
48
|
+
"configuration_identifiers": ["*"]
|
49
|
+
}
|
50
|
+
}
|
51
|
+
]
|
52
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"entryuuid": "62936e70-1815-439b-bf89-8492855a7e6b",
|
4
|
+
"mail": "test+publisher@hetzner.co.za"
|
5
|
+
},
|
6
|
+
{
|
7
|
+
"entryuuid": "43353f18-8afe-11e6-ae22-56b6b6499611",
|
8
|
+
"mail": "test+consumer@hetzner.co.za"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"entryuuid": "820d5660-2204-4f7d-8c04-746313439b81",
|
12
|
+
"mail": "admin@hetzner.co.za"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"entryuuid": "1ff472a6-8df3-4f13-82c3-89fde26db3cf",
|
16
|
+
"mail": "none@example.com"
|
17
|
+
}
|
18
|
+
]
|
19
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soar-registry-identity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.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-
|
11
|
+
date: 2017-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: soar_idm
|
@@ -30,20 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 4.0.5
|
33
|
+
version: '5.0'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
44
|
-
|
40
|
+
version: '5.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: object_selector
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
45
53
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
54
|
+
version: '1.0'
|
47
55
|
description: Registry of identities
|
48
56
|
email: charles.mulder@hetzner.co.za
|
49
57
|
executables: []
|
@@ -52,13 +60,17 @@ extra_rdoc_files: []
|
|
52
60
|
files:
|
53
61
|
- README.md
|
54
62
|
- lib/soar/registry/identity.rb
|
63
|
+
- lib/soar/registry/identity/error.rb
|
64
|
+
- lib/soar/registry/identity/factory.rb
|
55
65
|
- lib/soar/registry/identity/model.rb
|
56
|
-
- lib/soar/registry/identity/provider/
|
66
|
+
- lib/soar/registry/identity/provider/customer/client_number.rb
|
67
|
+
- lib/soar/registry/identity/provider/customer/email.rb
|
68
|
+
- lib/soar/registry/identity/provider/customer/uuid.rb
|
57
69
|
- lib/soar/registry/identity/provider/staff/email.rb
|
58
|
-
- lib/soar/registry/identity/provider/staff/
|
59
|
-
- lib/soar/registry/identity/
|
60
|
-
- lib/soar/registry/identity/test/fixtures/
|
61
|
-
- lib/soar/registry/identity/test/fixtures/
|
70
|
+
- lib/soar/registry/identity/provider/staff/uuid.rb
|
71
|
+
- lib/soar/registry/identity/test/fixtures/customer/identities.json
|
72
|
+
- lib/soar/registry/identity/test/fixtures/roles.json
|
73
|
+
- lib/soar/registry/identity/test/fixtures/staff/identities.json
|
62
74
|
homepage: https://gitlab.host-h.net/registries/identity
|
63
75
|
licenses:
|
64
76
|
- MIT
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Soar
|
2
|
-
module Registry
|
3
|
-
module Identity
|
4
|
-
module Provider
|
5
|
-
module Staff
|
6
|
-
module Translator
|
7
|
-
class Default
|
8
|
-
|
9
|
-
##
|
10
|
-
# @param [Hash] entry a single entry from datasource
|
11
|
-
# @returns [Hash] identity a single identity
|
12
|
-
##
|
13
|
-
def get_identity(entry)
|
14
|
-
return entry
|
15
|
-
end
|
16
|
-
|
17
|
-
##
|
18
|
-
# @param [Array] entries a list of entries from data source
|
19
|
-
# @return [Array] identities a list of identities
|
20
|
-
##
|
21
|
-
def get_identities(entries)
|
22
|
-
return entries
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"uuid": "identity-62936e70-1815-439b-bf89-8492855a7e6b",
|
4
|
-
"roles": {
|
5
|
-
"staff": {
|
6
|
-
"department": "technical"
|
7
|
-
},
|
8
|
-
"configuration_publisher": {
|
9
|
-
"configuration_identifiers": ["*"]
|
10
|
-
}
|
11
|
-
}
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"uuid": "identity-43353f18-8afe-11e6-ae22-56b6b6499611",
|
15
|
-
"roles": {
|
16
|
-
"staff": {},
|
17
|
-
"configuration_consumer": {
|
18
|
-
"configuration_identifiers": ["*"]
|
19
|
-
}
|
20
|
-
|
21
|
-
}
|
22
|
-
},
|
23
|
-
{
|
24
|
-
"uuid": "identity-820d5660-2204-4f7d-8c04-746313439b81",
|
25
|
-
"roles": {
|
26
|
-
"staff": {},
|
27
|
-
"configuration_publisher": {
|
28
|
-
"configuration_identifiers": ["*"]
|
29
|
-
},
|
30
|
-
"configuration_consumer": {
|
31
|
-
"configuration_identifiers": ["*"]
|
32
|
-
}
|
33
|
-
|
34
|
-
}
|
35
|
-
},
|
36
|
-
{
|
37
|
-
"uuid": "identity-1ff472a6-8df3-4f13-82c3-89fde26db3cf",
|
38
|
-
"roles": {
|
39
|
-
"customer": {},
|
40
|
-
"reseller": {}
|
41
|
-
}
|
42
|
-
}
|
43
|
-
]
|
44
|
-
|
@@ -1,19 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"entryuuid": "identity-62936e70-1815-439b-bf89-8492855a7e6b",
|
4
|
-
"mail": "test+publisher@hetzner.co.za"
|
5
|
-
},
|
6
|
-
{
|
7
|
-
"entryuuid": "identity-43353f18-8afe-11e6-ae22-56b6b6499611",
|
8
|
-
"mail": "test+consumer@hetzner.co.za"
|
9
|
-
},
|
10
|
-
{
|
11
|
-
"entryuuid": "identity-820d5660-2204-4f7d-8c04-746313439b81",
|
12
|
-
"mail": "admin@hetzner.co.za"
|
13
|
-
},
|
14
|
-
{
|
15
|
-
"entryuuid": "identity-1ff472a6-8df3-4f13-82c3-89fde26db3cf",
|
16
|
-
"mail": "none@example.com"
|
17
|
-
}
|
18
|
-
]
|
19
|
-
|