soar-registry-identity 4.0.3 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,91 @@
1
+ DROP TABLE IF EXISTS `Client`;
2
+ CREATE TABLE `Client` (
3
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
4
+ `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
5
+ `Client_Number` varchar(15) NOT NULL DEFAULT '',
6
+ `Privil` varchar(15) NOT NULL DEFAULT '',
7
+ `Active` enum('0','1') NOT NULL DEFAULT '0',
8
+ `ActiveUntil` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
9
+ `MaxDomains` int(11) NOT NULL DEFAULT '100',
10
+ `Title` varchar(10) DEFAULT NULL,
11
+ `First_Name` varchar(70) DEFAULT NULL,
12
+ `Surname` varchar(70) DEFAULT NULL,
13
+ `Company` varchar(70) DEFAULT NULL,
14
+ `Street` varchar(70) DEFAULT NULL,
15
+ `Postal_Code` varchar(10) DEFAULT NULL,
16
+ `Suburb` varchar(70) NOT NULL DEFAULT '',
17
+ `Country` varchar(70) NOT NULL DEFAULT '0',
18
+ `City` varchar(70) NOT NULL DEFAULT '',
19
+ `CountryGroup` enum('0','1','2') NOT NULL DEFAULT '0',
20
+ `Telephone` varchar(50) DEFAULT NULL,
21
+ `Cellphone` varchar(50) NOT NULL DEFAULT '',
22
+ `ID_Number` varchar(30) DEFAULT NULL,
23
+ `Date_Of_Birth` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
24
+ `Fax` varchar(50) DEFAULT NULL,
25
+ `RipeHandle` varchar(16) NOT NULL DEFAULT '',
26
+ `Login` varchar(15) DEFAULT NULL,
27
+ `Password` varchar(30) DEFAULT NULL,
28
+ `FromEmail1` varchar(40) NOT NULL DEFAULT '',
29
+ `FromEmail2` varchar(40) DEFAULT NULL,
30
+ `FromEmail3` varchar(40) DEFAULT NULL,
31
+ `PublicKey` mediumtext NOT NULL,
32
+ `Newsletter` enum('0','1') NOT NULL DEFAULT '0',
33
+ `Notice` enum('0','1') NOT NULL DEFAULT '1',
34
+ `Notifyemail` varchar(100) DEFAULT NULL,
35
+ `Notifyemail_Robot` varchar(100) NOT NULL DEFAULT '',
36
+ `Notifyemail_Traffic` varchar(100) DEFAULT NULL,
37
+ `Notifyemail_Invoice` text,
38
+ `FreeTraffic` decimal(4,2) DEFAULT NULL,
39
+ `Bank_Branch_Code` varchar(8) DEFAULT NULL,
40
+ `Bank_Account_Number` varchar(30) DEFAULT NULL,
41
+ `Bank_Account_Holder` varchar(60) DEFAULT NULL,
42
+ `Bank_Account_Type` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0',
43
+ `Bank_Name` varchar(60) NOT NULL DEFAULT '',
44
+ `Bank_Branch_Location` varchar(60) NOT NULL DEFAULT '',
45
+ `Reseller` enum('0','1') NOT NULL DEFAULT '0',
46
+ `Reseller_Proof` varchar(60) NOT NULL DEFAULT '',
47
+ `CreditCardNumber` varchar(30) NOT NULL DEFAULT '',
48
+ `CreditCardExpiration` varchar(6) NOT NULL DEFAULT '',
49
+ `CreditCardName` varchar(15) NOT NULL DEFAULT '',
50
+ `payment_method` enum('Unspecified','Cash','Debit Order') NOT NULL DEFAULT 'Unspecified',
51
+ `Mother_ID` varchar(12) NOT NULL DEFAULT '',
52
+ `ChargeVAT` enum('0','1') NOT NULL DEFAULT '1',
53
+ `Summary_Invoice` enum('0','1') NOT NULL DEFAULT '0',
54
+ `Separate_Invoice` enum('0','1') NOT NULL DEFAULT '0',
55
+ `Email_Format` enum('0','1','2','3') NOT NULL DEFAULT '1',
56
+ `Dedi_Graph` enum('0','1') NOT NULL DEFAULT '1',
57
+ `TaxID` varchar(20) NOT NULL DEFAULT '',
58
+ `Discount` decimal(4,2) DEFAULT NULL,
59
+ `ChargeRobotSetup` enum('0','1','2') DEFAULT NULL,
60
+ `ClientCreated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
61
+ `Comment` text,
62
+ `Advice` mediumtext NOT NULL,
63
+ `Vat_Number` varchar(30) DEFAULT NULL,
64
+ `Rejection_Counter` tinyint(11) DEFAULT '0',
65
+ `Marketing` enum('Print','Brainstorm','ComputerActive','Google','ITWeb','Mouth','Website','Search','Designer','Hetzner','Other','SA Computer Magazine','Entrepreneur Magazine','Financial Mail') DEFAULT NULL,
66
+ `Marketing_other` mediumtext,
67
+ `Billing_First_Name` varchar(70) NOT NULL DEFAULT '',
68
+ `Billing_Surname` varchar(70) NOT NULL DEFAULT '',
69
+ `Billing_Telephone` varchar(50) NOT NULL DEFAULT '',
70
+ `Billing_Cellphone` varchar(50) NOT NULL DEFAULT '',
71
+ `Tech_First_Name` varchar(70) NOT NULL DEFAULT '',
72
+ `Tech_Surname` varchar(70) NOT NULL DEFAULT '',
73
+ `Notifyemail_Tech` varchar(100) NOT NULL DEFAULT '',
74
+ `Tech_Telephone` varchar(50) NOT NULL DEFAULT '',
75
+ `Tech_Cellphone` varchar(50) NOT NULL DEFAULT '',
76
+ `Verified` enum('0','1') NOT NULL DEFAULT '1',
77
+ `mass_update_notification_sent` enum('1','2','3','more','no') NOT NULL DEFAULT 'no',
78
+ `mass_update_submission_sent` enum('yes','no') NOT NULL DEFAULT 'no',
79
+ `contact_Confirmed` enum('True','False') NOT NULL DEFAULT 'True',
80
+ `is_test_profile` enum('0','1') DEFAULT '0',
81
+ `Google` enum('None','Eligible','Emailed','Issued') NOT NULL DEFAULT 'None',
82
+ `Google_Value_ID` int(11) NOT NULL DEFAULT '0',
83
+ `Google_Expiry` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
84
+ `app_installer_active` tinyint(1) DEFAULT '1',
85
+ PRIMARY KEY (`ID`),
86
+ KEY `Login` (`Login`),
87
+ KEY `Password` (`Password`),
88
+ KEY `Notifyemail_Invoice` (`Notifyemail_Invoice`(20)),
89
+ KEY `Client_Number` (`Client_Number`)
90
+ ) ENGINE=InnoDB AUTO_INCREMENT=185532 DEFAULT CHARSET=latin1;
91
+
@@ -0,0 +1,27 @@
1
+ {
2
+ "table_name": "identity_roles",
3
+ "key_schema": [
4
+ {
5
+ "attribute_name": "identity_uuid",
6
+ "key_type": "HASH"
7
+ },
8
+ {
9
+ "attribute_name": "identity_role",
10
+ "key_type": "RANGE"
11
+ }
12
+ ],
13
+ "attribute_definitions": [
14
+ {
15
+ "attribute_name": "identity_uuid",
16
+ "attribute_type": "S"
17
+ },
18
+ {
19
+ "attribute_name": "identity_role",
20
+ "attribute_type": "S"
21
+ }
22
+ ],
23
+ "provisioned_throughput": {
24
+ "read_capacity_units": 10,
25
+ "write_capacity_units": 10
26
+ }
27
+ }
@@ -0,0 +1,201 @@
1
+ require 'faker'
2
+ require 'soar/registry/identity'
3
+ require 'soar/registry/directory'
4
+ require 'soar/authentication/identity_uuid_translator/provider/customer'
5
+ require 'soar/authentication/identity_uuid_translator/uuid_generator'
6
+
7
+ module Soar
8
+ module Registry
9
+ module Identity
10
+ module Test
11
+ module OrchestrationProvider
12
+ module Customer
13
+ class Uuid
14
+
15
+ def initialize
16
+ Faker::UniqueGenerator.clear
17
+ @identity = {
18
+ ID: Faker::Number.unique.number(4).to_i,
19
+ First_Name: Faker::Name.unique.first_name,
20
+ Surname: Faker::Name.unique.last_name,
21
+ Notifyemail_Invoice: "#{Faker::Internet.unique.email}",
22
+ Client_Number: "C#{Faker::Number.unique.number(10)}"
23
+ }
24
+ @identity_uuid = Soar::Authentication::IdentityUuidTranslator::UuidGenerator.generate("#{Soar::Authentication::IdentityUuidTranslator::Provider::Customer::PREFIX}#{@identity[:ID]}")
25
+ end
26
+
27
+ def given_identity_directory
28
+ wait_for_database do
29
+ @identity_directory_config = YAML.load_file("config/#{ENV['CUSTOMER_DIRECTORY_CONFIG_FILE']}")
30
+ @identity_directory = Soar::Registry::Directory.new(
31
+ Soar::Registry::Directory::Provider::Mysql.new(@identity_directory_config['config'].map { |k, v| [k.to_sym, v] }.to_h)
32
+ )
33
+ end
34
+ end
35
+
36
+ def given_roles_directory
37
+ @roles_directory_config = YAML.load_file("config/#{ENV['ROLES_DIRECTORY_CONFIG_FILE']}")
38
+ @roles_directory = Soar::Registry::Directory.new(
39
+ Soar::Registry::Directory::Provider::DynamoDb.new(@roles_directory_config['config'].map { |k, v| [k.to_sym, v]}.to_h)
40
+ )
41
+ end
42
+
43
+ def given_roles
44
+ @roles = generate_roles()
45
+ wait_for_database {
46
+ create_roles_table(@roles_directory, @roles_directory_config)
47
+ populate_roles_table(@roles_directory, @roles, @identity_uuid)
48
+ }
49
+ end
50
+
51
+ def given_role_with_attributes
52
+ @roles = generate_roles()
53
+ @roles[0][:attributes] = {
54
+ profiles: [@identity[:Client_Number], "C#{Faker::Number.unique.number(10)}"]
55
+ }
56
+ wait_for_database {
57
+ create_roles_table(@roles_directory, @roles_directory_config)
58
+ populate_roles_table(@roles_directory, @roles, @identity_uuid)
59
+ }
60
+ end
61
+
62
+ def given_identity
63
+ wait_for_database do
64
+ create_identity_table(@identity_directory)
65
+ @identity_directory.put(@identity)
66
+ end
67
+ end
68
+
69
+ def given_identity_registry
70
+ identity_provider = Soar::Registry::Identity::Provider::Customer::Uuid.new({
71
+ identity: {
72
+ directory: @identity_directory,
73
+ fetch_index: 'ID',
74
+ search_index: 'Notifyemail_Invoice'
75
+ },
76
+ roles: {
77
+ directory: @roles_directory,
78
+ fetch_index: ['identity_uuid', 'identity_role'],
79
+ search_index: 'identity_uuid'
80
+ }
81
+ })
82
+
83
+ @idr = Soar::Registry::Identity.new(identity_provider)
84
+ end
85
+
86
+ def get_roles
87
+ @result = @idr.get_roles(@identity_uuid)
88
+ end
89
+
90
+ def get_role_attributes
91
+ @result = @idr.get_attributes(@identity_uuid, @roles.nil? ? Faker::Company.unique.profession : @roles[0][:role])
92
+ end
93
+
94
+ def get_identity_attributes
95
+ @result = @idr.get_attributes(@identity_uuid)
96
+ end
97
+
98
+ def identity_attributes?
99
+ roles = {}
100
+ @roles.each do |entry|
101
+ roles[entry[:role]] = {}
102
+ end if not @roles.nil?
103
+ expectation = {
104
+ "identity_uuid" => @identity_uuid,
105
+ "firstname" => @identity[:First_Name],
106
+ "lastname" => @identity[:Surname],
107
+ "email" => @identity[:Notifyemail_Invoice],
108
+ "roles" => roles
109
+ }
110
+ @result == expectation
111
+ end
112
+
113
+ def nil?
114
+ @result == nil
115
+ end
116
+
117
+ def role_with_empty_attributes?
118
+ @result == {
119
+ @roles[0][:role] => {}
120
+ }
121
+ end
122
+
123
+ def role_with_attributes?
124
+ role_with_attributes = {
125
+ @roles[0][:role] => Hashie.stringify_keys(@roles[0][:attributes])
126
+ }
127
+ @result == role_with_attributes
128
+ end
129
+
130
+ def roles?
131
+ roles = @roles.map do |entry|
132
+ entry[:role]
133
+ end
134
+ @result.sort == roles.sort
135
+ end
136
+
137
+ def no_roles?
138
+ @result == []
139
+ end
140
+
141
+ def identity_error?
142
+ # this is not currently possible
143
+ @result == []
144
+ end
145
+
146
+ private
147
+
148
+ def generate_roles()
149
+ return [{
150
+ source: "#{Soar::Authentication::IdentityUuidTranslator::Provider::Customer::PREFIX}#{@identity[:ID]}",
151
+ role: Soar::Authentication::IdentityUuidTranslator::Provider::Customer::ROLE
152
+ },{
153
+ role: Faker::Company.unique.profession
154
+ }]
155
+ end
156
+
157
+ def populate_roles_table(roles_directory, roles, identity_uuid)
158
+ roles.each { |role|
159
+ entry = {
160
+ "identity_uuid" => identity_uuid,
161
+ "identity_role" => role[:role]
162
+ }
163
+ entry['identity_source'] = role[:source] if role.key?(:source)
164
+ entry['identity_role_attributes'] = role[:attributes] if role.key?(:attributes)
165
+ roles_directory.put(entry)
166
+ }
167
+ end
168
+
169
+ def create_roles_table(roles_directory, roles_directory_config)
170
+ roles_directory.provider.recreate_table({
171
+ name: roles_directory_config['config']['table']['name'],
172
+ structure: JSON.parse(File.read("lib/soar/registry/identity/test/fixtures/roles_table.json"))
173
+ })
174
+ end
175
+
176
+ def create_identity_table(identity_directory)
177
+ identity_directory.provider.client.query("DROP TABLE IF EXISTS `Client`")
178
+ identity_directory.provider.client.query("CREATE TABLE Client ( ID int(11) NOT NULL AUTO_INCREMENT, Client_Number varchar(15) NOT NULL DEFAULT '', First_Name varchar(70) DEFAULT NULL, Surname varchar(70) DEFAULT NULL, Notifyemail_Invoice text, PRIMARY KEY (ID), KEY Notifyemail_Invoice (Notifyemail_Invoice(20)), KEY Client_Number (Client_Number))")
179
+ end
180
+
181
+ def deep_copy(o)
182
+ Marshal.load(Marshal.dump(o))
183
+ end
184
+
185
+ def wait_for_database
186
+ return 10.times do |i|
187
+ begin
188
+ break yield
189
+ rescue Soar::Registry::Directory::Error::NetworkingError, Net::LDAP::Error => e
190
+ sleep(10)
191
+ end
192
+ end
193
+ end
194
+
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,207 @@
1
+ require 'faker'
2
+ require 'soar/registry/identity'
3
+ require 'soar/registry/directory'
4
+ require 'securerandom'
5
+ require 'soar/authentication/identity_uuid_translator'
6
+
7
+ module Soar
8
+ module Registry
9
+ module Identity
10
+ module Test
11
+ module OrchestrationProvider
12
+ module Staff
13
+ class Uuid
14
+
15
+ def initialize
16
+ Faker::UniqueGenerator.clear
17
+ @identity_directory_config = YAML.load_file("config/#{ENV['STAFF_DIRECTORY_CONFIG_FILE']}")
18
+ firstname = Faker::Name.first_name
19
+ lastname = Faker::Name.last_name
20
+ @identity = {
21
+ dn: "cn=#{firstname} #{lastname},#{@identity_directory_config['config']['base']}",
22
+ attributes: {
23
+ cn: "#{firstname} #{lastname}",
24
+ givenName: firstname,
25
+ mail: "#{firstname.downcase}.#{lastname.downcase}@hetzner.co.za",
26
+ objectclass: ["inetOrgPerson", "top"],
27
+ sn: lastname
28
+ }
29
+ }
30
+
31
+ @identity_uuid = SecureRandom.uuid
32
+
33
+ end
34
+
35
+ def given_roles_directory
36
+ @roles_directory_config = YAML.load_file("config/#{ENV['ROLES_DIRECTORY_CONFIG_FILE']}")
37
+ @roles_directory = Soar::Registry::Directory.new(
38
+ Soar::Registry::Directory::Provider::DynamoDb.new(@roles_directory_config['config'].map { |k, v| [k.to_sym, v]}.to_h )
39
+ )
40
+ end
41
+
42
+ def given_identity_directory
43
+ @identity_directory = Soar::Registry::Directory.new(
44
+ Soar::Registry::Directory::Provider::Ldap.new(@identity_directory_config['config'].map{ |k, v| [k.to_sym, v]}.to_h)
45
+ )
46
+
47
+ end
48
+
49
+ def given_identity
50
+ wait_for_database do
51
+ @identity_directory.provider.delete(@identity[:dn])
52
+ @identity_directory.put(@identity)
53
+ @identity_uuid = @identity_directory.search('mail', @identity[:attributes][:mail])[0][:entryuuid]
54
+ end
55
+ end
56
+
57
+ def given_roles
58
+ @roles = generate_roles()
59
+ wait_for_database do
60
+ create_roles_database(@roles_directory_config, @roles_directory)
61
+ populate_roles_database(@roles_directory, @roles, @identity_uuid)
62
+ end
63
+ end
64
+
65
+ def given_role_with_attributes
66
+ @roles = generate_roles()
67
+ @roles[0][:attributes] = {
68
+ Faker::Hacker.noun => Faker::Hacker.verb
69
+ }
70
+ wait_for_database do
71
+ create_roles_database(@roles_directory_config, @roles_directory)
72
+ populate_roles_database(@roles_directory, @roles, @identity_uuid)
73
+ end
74
+ end
75
+
76
+ def given_identity_registry
77
+ identity_provider = Soar::Registry::Identity::Provider::Staff::Uuid.new({
78
+ identity: {
79
+ directory: @identity_directory,
80
+ fetch_index: 'entryuuid',
81
+ search_index: 'mail'
82
+ },
83
+ roles: {
84
+ directory: @roles_directory,
85
+ fetch_index: ['identity_uuid', 'identity_role'],
86
+ search_index: 'identity_uuid'
87
+ }
88
+ })
89
+
90
+ @idr = Soar::Registry::Identity.new(identity_provider)
91
+ end
92
+
93
+ def get_roles
94
+ begin
95
+ @result = @idr.get_roles(@identity_uuid)
96
+ rescue SoarIdm::IdentityError => e
97
+ @error = e
98
+ end
99
+ end
100
+
101
+ def get_identity_attributes
102
+ @result = @idr.get_attributes(@identity_uuid)
103
+ end
104
+
105
+ def get_role_attributes
106
+ @result = @idr.get_attributes(@identity_uuid, @roles.nil? ? Faker::Company.unique.profession : @roles[0][:role])
107
+ end
108
+
109
+ def identity_attributes?
110
+ roles = {}
111
+ @roles.each do |entry|
112
+ roles[entry[:role]] = {}
113
+ end if not @roles.nil?
114
+ @result == {
115
+ "identity_uuid" => @identity_uuid,
116
+ "firstname" => @identity[:attributes][:givenName],
117
+ "lastname" => @identity[:attributes][:sn],
118
+ "email" => @identity[:attributes][:mail],
119
+ "roles" => roles
120
+ }
121
+ end
122
+
123
+ def role_with_attributes?
124
+ role_with_attributes = {
125
+ @roles[0][:role] => Hashie.stringify_keys(@roles[0][:attributes])
126
+ }
127
+ @result == role_with_attributes
128
+ end
129
+
130
+ def nil?
131
+ @result == nil
132
+ end
133
+
134
+ def role_with_empty_attributes?
135
+ @result == {
136
+ @roles[0][:role] => {}
137
+ }
138
+ end
139
+
140
+ def roles?
141
+
142
+ roles = @roles.map do |entry|
143
+ entry[:role]
144
+ end
145
+ @result.sort == roles.sort
146
+ end
147
+
148
+ def no_roles?
149
+ @result == []
150
+ end
151
+
152
+ def identity_error?
153
+ @error.is_a?(SoarIdm::IdentityError)
154
+ end
155
+
156
+ private
157
+
158
+ def create_roles_database(directory_config, directory)
159
+ directory.provider.recreate_table({
160
+ name: directory_config['config']['table']['name'],
161
+ structure: JSON.parse(File.read("lib/soar/registry/identity/test/fixtures/roles_table.json"))
162
+ })
163
+ end
164
+
165
+ def populate_roles_database(roles_directory, roles, identity_uuid)
166
+ roles.each do |role|
167
+ entry = {
168
+ "identity_uuid" => identity_uuid,
169
+ "identity_role" => role[:role]
170
+ }
171
+ entry['identity_source'] = role[:source] if role.key?(:source)
172
+ entry['identity_role_attributes'] = role[:attributes] if role.key?(:attributes)
173
+ roles_directory.put(entry)
174
+ end
175
+ end
176
+
177
+ def generate_roles()
178
+ roles = [{
179
+ role: Faker::Company.unique.profession
180
+ }, {
181
+ role: Faker::Company.unique.profession
182
+ }, {
183
+ role: Faker::Company.unique.profession
184
+ }, {
185
+ role: Faker::Company.unique.profession
186
+ }]
187
+ roles[0][:source] = "#{Soar::Authentication::IdentityUuidTranslator::Provider::Staff::PREFIX}#{@identity_uuid}"
188
+ return roles
189
+ end
190
+
191
+ def wait_for_database
192
+ return 10.times do |i|
193
+ begin
194
+ break yield
195
+ rescue Soar::Registry::Directory::Error::NetworkingError, Net::LDAP::Error => e
196
+ sleep(10)
197
+ end
198
+ end
199
+ end
200
+
201
+ end
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end