soar-registry-identity 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 484df2d3ddb8d8e2b5438fbad4b64f5082cbdf2b
4
+ data.tar.gz: 0115319b3e7636d6e5bd6cdf7eace3975dbadfdb
5
+ SHA512:
6
+ metadata.gz: 015afb53bd02703e74b64e9ae518f60267eefa7c3965b0ad6a37505767c1240d2ab18bb92726af2775fbad2053299944e6dcfc145d284604fc351bcae8ac883b
7
+ data.tar.gz: 5ba3a6752b13b05e30888b6c3ef9967863e0c3db21f222a219924c9e433c64c6a6478e17bb4f6f503f3972eb2cdb4d899c84d1a4279a247dbb8f167061eee6af
data/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # Registry of identities
2
+
3
+ ## Quickstart
4
+
5
+ ### Directory
6
+ Create a directory provider
7
+
8
+ ```ruby
9
+ require 'soar/registry/directory'
10
+ directory_provider = Soar::Registry::Directory::Provider::Stub.new
11
+ ```
12
+
13
+ Create a directory
14
+ ```ruby
15
+ directory = Soar::Registry::Directory.new({
16
+ provider: directory_provider
17
+ })
18
+ ```
19
+
20
+ ### Staff UUID IDR
21
+ Search for staff by UUID.
22
+
23
+ Create an identity provider. (Remember to pass in the directory)
24
+ ```ruby
25
+ require 'soar/registry/identity'
26
+ identity_provider = Soar::Registry::Identity::Provider::Staff::Id.new(directory)
27
+ ```
28
+
29
+ Create an IDR
30
+ ```ruby
31
+ @id_idr = Soar::Registry::Identity.new(provider: identity_provider)
32
+ ```
33
+
34
+ ### Staff Email IDR
35
+ Search for staff by email address. (Remember to pass in the directory)
36
+ ```ruby
37
+ require 'soar/registry/identity'
38
+ identity_provider = Soar::Registry::Identity::Provider::Staff::Email.new(directory)
39
+ ```
40
+
41
+ ```ruby
42
+ @email_idr = Soar::Registry::Identity.new(provider: identity_provider)
43
+ ```
44
+
45
+ ### Getting a list of identifiers
46
+ ```ruby
47
+ > identifiers = @id_idr.get_identifiers("identity-820d5660-2204-4f7d-8c04-746313439b81")
48
+ > identifiers = @email_idr.get_identifiers("admin@hetzner.co.za")
49
+ > puts identifiers.inspect
50
+ ["admin@hetzner.co.za", "identity-820d5660-2204-4f7d-8c04-746313439b81"]
51
+ ```
52
+
53
+ ### Getting a list of roles
54
+ ```ruby
55
+ > roles = @id_idr.get_roles("identity-820d5660-2204-4f7d-8c04-746313439b81")
56
+ > roles = @email_idr.get_roles("admin@hetzner.co.za")
57
+ > puts roles.inspect
58
+ ["staff", "configuration_publisher", "configuration_consumer"]
59
+ ```
60
+
61
+ ### Getting a hash of attributes for a role
62
+ ```ruby
63
+ > role = 'staff'
64
+ > attributes = @id_idr.get_attributes("identity-820d5660-2204-4f7d-8c04-746313439b81", role)
65
+ > attributes = @email_idr.get_attributes("admin@hetzner.co.za", role)
66
+ > puts attributes.inspect
67
+ {
68
+ "staff": {
69
+ "department": "technical"
70
+ }
71
+ }
72
+
73
+ ```
74
+
75
+ ### Getting a hash of all attributes
76
+ ```ruby
77
+ > attributes = @id_idr.get_attributes("identity-820d5660-2204-4f7d-8c04-746313439b81")
78
+ > attributes = @email_idr.get_attributes("admin@hetzner.co.za")
79
+ > puts attributes.inspect
80
+ {
81
+ "identity_id" => "identity-820d5660-2204-4f7d-8c04-746313439b81",
82
+ "entity_id"=> "entity-bad85eb9-0713-4da7-8d36-07a8e4b00eab",
83
+ "email"=> "admin@hetzner.co.za",
84
+ "roles"=> {
85
+ "staff"=> {},
86
+ "configuration_publisher"=> {
87
+ "configuration_identifiers"=> ["*"]
88
+ },
89
+ "configuration_consumer"=> {
90
+ "configuration_identifiers"=> ["*"]
91
+ }
92
+ },
93
+ "address"=> {
94
+ "detail"=> "Belvedere Office Park, Unit F",
95
+ "street"=> "Bella Rosa Street",
96
+ "suburb"=> "Tygervalley",
97
+ "city"=> "Durbanville",
98
+ "postal"=> "7550"
99
+ }
100
+ }
101
+ ```
102
+
103
+
104
+ ## Tests
105
+
106
+ ### Local
107
+ ```bash
108
+ $ bundle exec rspec
109
+ ```
110
+
111
+ ### CI
112
+ ```bash
113
+ docker-compose --file docker-compose.ci.yml up --abort-on-container-exit --remove-orphans --build --force-recreate
114
+ EXIT_CODE=$(docker ps -a -f "name=soar-registry-identity-provider-staff" -q | xargs docker inspect -f "{{ .State.ExitCode }}");
115
+ exit $EXIT_CODE;
116
+ ```
117
+
118
+ ## Resources
119
+ * [DynamoDBLocal](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html)
120
+ * [Multiple AWS Credentials](https://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs)
121
+ * [AWS SDK for Ruby](http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Ruby.html)
122
+
123
+ ## References
124
+ * [soar idm](https://github.hetzner.co.za/hetznerZA/soar_idm/blob/master/lib/soar_idm/soar_idm.rb)
125
+ * [Domain analysis](https://docs.google.com/a/hetzner.co.za/drawings/d/1vGdzjKPD3gzn1e0bsC4liFCyxY31Qjjxe3y41beVBzw/edit?usp=sharing)
126
+ * [staff idr](https://github.hetzner.co.za/hetznerZA/idr_staff/blob/master/idr_staff/lib/idr_staff/staff_idr.rb)
@@ -0,0 +1,11 @@
1
+ require 'soar/registry/identity/model'
2
+
3
+ module Soar
4
+ module Registry
5
+ module Identity
6
+ def self.new(provider: nil)
7
+ Soar::Registry::Identity::Model.new(provider: provider)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ require 'soar/registry/identity/provider/staff/email'
2
+ require 'soar/registry/identity/provider/staff/id'
3
+
4
+ module Soar
5
+ module Registry
6
+ module Identity
7
+ class Model
8
+ def initialize(provider: nil)
9
+ @provider = provider
10
+ end
11
+
12
+ def get_roles(identifier)
13
+ @provider.get_roles(identifier)
14
+ end
15
+
16
+ def get_attributes(identifier, role = nil)
17
+ @provider.get_attributes(identifier, role)
18
+ end
19
+
20
+ def get_identifiers(identifier)
21
+ @provider.get_identifiers(identifier)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,75 @@
1
+ require 'soar_idm/soar_idm'
2
+ require 'soar/registry/identity/provider/staff/translator/default'
3
+
4
+ module Soar
5
+ module Registry
6
+ module Identity
7
+ module Provider
8
+ module Staff
9
+ class Base < SoarIdm::IdmApi
10
+
11
+ attr_reader :directory
12
+ attr_reader :translator
13
+
14
+ ##
15
+ # @param [Hash] configuration
16
+ ##
17
+ def initialize(directory)
18
+ @translator = Soar::Registry::Identity::Provider::Staff::Translator::Default.new
19
+ @directory = directory
20
+ end
21
+
22
+ ##
23
+ # @param [Hash] identity
24
+ # @return [Array] list of roles
25
+ def calculate_roles(identity)
26
+ entry = @directory.fetch(identity[@directory.index[0]])
27
+ return nil if not entry
28
+ identity = @translator.get_identity(entry)
29
+ roles = []
30
+ identity['roles'].each do |role, attributes|
31
+ roles << role
32
+ end
33
+ roles
34
+ end
35
+
36
+ ##
37
+ # @param [Hash] identity
38
+ # @return [Array] list of identifiers
39
+ ##
40
+ def calculate_identifiers(identity)
41
+ indexes = @directory.index
42
+ entry = @directory.fetch(identity[@directory.index[0]])
43
+ identity = @translator.get_identity(entry)
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 = @directory.fetch(identity[@directory.index[0]])
57
+ return nil if not entry
58
+ identity = @translator.get_identity(entry)
59
+ { role => identity['roles'][role] }
60
+ end
61
+
62
+ ##
63
+ # @param [Hash] identity
64
+ # @return [Hash] Hash of attributes keyed by role
65
+ def calculate_all_attributes(identity)
66
+ entry = @directory.fetch(identity[@directory.index[0]])
67
+ @translator.get_identity(entry)
68
+ end
69
+
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,24 @@
1
+ require 'soar/registry/identity/provider/staff/base'
2
+
3
+ module Soar
4
+ module Registry
5
+ module Identity
6
+ module Provider
7
+ module Staff
8
+ class Email < Base
9
+
10
+ ##
11
+ # @param [String] identifier, an email address that uniquely identifies an identity
12
+ # @return [Hash] an identity
13
+ ##
14
+ def calculate_identities(identifier)
15
+ entries = @directory.search("email", identifier )
16
+ return [@translator.get_identity(entries)[0]]
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ require 'soar/registry/identity/provider/staff/base'
2
+
3
+ module Soar
4
+ module Registry
5
+ module Identity
6
+ module Provider
7
+ module Staff
8
+ class Id < Base
9
+
10
+ ##
11
+ # @param [String] identifier, a primary key that uniquely identifies an identity
12
+ # @return [Hash] an identity
13
+ ##
14
+ def calculate_identities(identifier)
15
+ return [@translator.get_identity(@directory.fetch(identifier))]
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,31 @@
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
@@ -0,0 +1,60 @@
1
+ [
2
+ {
3
+ "uuid": "identity-62936e70-1815-439b-bf89-8492855a7e6b",
4
+ "entity_id": "entity-2d931510-d99f-494a-8c67-87feb05e1594",
5
+ "email": "test+publisher@hetzner.co.za",
6
+ "roles": {
7
+ "staff": {
8
+ "department": "technical"
9
+ },
10
+ "configuration_publisher": {
11
+ "configuration_identifiers": ["*"]
12
+ }
13
+ }
14
+ },
15
+ {
16
+ "uuid": "identity-43353f18-8afe-11e6-ae22-56b6b6499611",
17
+ "entity_id": "entity-2d931510-d99f-494a-8c67-87feb05e1594",
18
+ "email": "test+consumer@hetzner.co.za",
19
+ "roles": {
20
+ "staff": {},
21
+ "configuration_consumer": {
22
+ "configuration_identifiers": ["*"]
23
+ }
24
+
25
+ }
26
+ },
27
+ {
28
+ "uuid": "identity-820d5660-2204-4f7d-8c04-746313439b81",
29
+ "entity_id": "entity-bad85eb9-0713-4da7-8d36-07a8e4b00eab",
30
+ "email": "admin@hetzner.co.za",
31
+ "roles": {
32
+ "staff": {},
33
+ "configuration_publisher": {
34
+ "configuration_identifiers": ["*"]
35
+ },
36
+ "configuration_consumer": {
37
+ "configuration_identifiers": ["*"]
38
+ }
39
+
40
+ },
41
+ "address": {
42
+ "detail": "Belvedere Office Park, Unit F",
43
+ "street": "Bella Rosa Street",
44
+ "suburb": "Tygervalley",
45
+ "city": "Durbanville",
46
+ "postal": "7550"
47
+ }
48
+ },
49
+ {
50
+ "uuid": "identity-1ff472a6-8df3-4f13-82c3-89fde26db3cf",
51
+ "entity_id": "entity-bad85eb9-0713-4da7-8d36-07a8e4b00eab",
52
+ "email": "none@example.com",
53
+ "client_nr": "C123456789",
54
+ "roles": {
55
+ "customer": {},
56
+ "reseller": {}
57
+ }
58
+ }
59
+ ]
60
+
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: soar-registry-identity
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: 2016-11-29 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: soar-registry-directory
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.1
41
+ description: Registry of identities
42
+ email: charles.mulder@hetzner.co.za
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - README.md
48
+ - lib/soar/registry/identity.rb
49
+ - lib/soar/registry/identity/model.rb
50
+ - lib/soar/registry/identity/provider/staff/base.rb
51
+ - lib/soar/registry/identity/provider/staff/email.rb
52
+ - lib/soar/registry/identity/provider/staff/id.rb
53
+ - lib/soar/registry/identity/provider/staff/translator/default.rb
54
+ - lib/soar/registry/identity/test/fixtures/entries.json
55
+ homepage: https://gitlab.host-h.net/registries/identity
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.5.1
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Identity Registry
79
+ test_files: []