identikey 0.5.1 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b55edf8d9a08412a4ce162b70b130f149a0ea1047c97a14a301056aa5c41350
4
- data.tar.gz: eac60565c851f0ee3d100171a804d60e5804bb59539ad83b81c09d92b0a811f8
3
+ metadata.gz: 7eb968c0e5dd54488d15939d79d81ebccbf7052c93e3da22ff77bad6fc623106
4
+ data.tar.gz: d90c163b2fdebaf21e6386a721c8f17b4ec0248dd44394e234c646007842a5fd
5
5
  SHA512:
6
- metadata.gz: bdcc16f8fa44bc513e44b6ed6b2ef5c3259cdc251568e2719a410306b033c27a1cc7542f19707ce1ae4803b6d1a7b0466a549f1a7a1ef93812c3e6bf70f26160
7
- data.tar.gz: f55cbd706367e52d32394c4e220146fec6ea0a0a881c3871d71a186b0857a58ecb19357e54837a67950b25647ad45a6125cdc7bf1f96ad83870734957e6f7394
6
+ metadata.gz: 984d1e2f3b20b1d882568d70e338420062ba54b89b26b5f7c9495fd92ee2f5507db7d1da38c4d45662c32fc478c68ac88622d3b69a8c50bb6a617b01a9761d7b
7
+ data.tar.gz: 1c8092afbd35a441141c9830422a26467fc1fd851cbb9eee3109e8e69edea710de97b1ab22041c66869f5a84ea2bc6a29d6e465142b0dba3727f2453cd0831a5
data/.gitignore CHANGED
@@ -6,14 +6,18 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /spec/test.env
9
+ /spec/examples.txt
9
10
  /tmp/
10
11
  /log/
11
12
  /sdk
13
+ /dpx
12
14
 
13
15
  Gemfile.lock
14
16
 
15
17
  .byebug_history
16
18
 
19
+ .env
20
+
17
21
  # vim swap files
18
22
 
19
23
  .*.sw?
@@ -0,0 +1,23 @@
1
+ # Note: The cmd option is now required due to the increasing number of ways
2
+ # rspec may be run, below are examples of the most common uses.
3
+ # * bundler: 'bundle exec rspec'
4
+ # * bundler binstubs: 'bin/rspec'
5
+ # * spring: 'bin/rspec' (This will use spring if running and you have
6
+ # installed the spring binstubs per the docs)
7
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
8
+ # * 'just' rspec: 'rspec'
9
+
10
+ guard :rspec, cmd: "bundle exec rspec" do
11
+ require "guard/rspec/dsl"
12
+ dsl = Guard::RSpec::Dsl.new(self)
13
+
14
+ # RSpec files
15
+ rspec = dsl.rspec
16
+ watch(rspec.spec_helper) { rspec.spec_dir }
17
+ watch(rspec.spec_support) { rspec.spec_dir }
18
+ watch(rspec.spec_files)
19
+
20
+ # Ruby files
21
+ ruby = dsl.ruby
22
+ dsl.watch_spec_files_for(ruby.lib_files)
23
+ end
data/README.md CHANGED
@@ -186,15 +186,21 @@ your application.
186
186
 
187
187
  ## Development
188
188
 
189
- After checking out the repo, run `bin/setup` to install dependencies. Then,
190
- run `rake` to run the tests. You can also run `bin/console` for an interactive
191
- prompt that will allow you to experiment.
189
+ After checking out the repo, run `bin/setup` to install dependencies.
192
190
 
193
- To run specs, please copy `spec/test.env.example` into `spec/test.env` and
191
+ Then, please copy `spec/test.env.example` into `spec/test.env` and
194
192
  populate it with your Identikey Authentication Server host, username, password
195
- and domain. You also need the Identikey SDK, that can be placed in `/sdk` and
193
+ and domain.
194
+
195
+ You also need the Identikey SDK, that can be placed in `sdk/` and
196
196
  its WSDL paths as well referenced in the `spec/test.env` file.
197
197
 
198
+ Then, run `rake` to run the tests.
199
+
200
+ You can also run `bin/console` for an interactive prompt that will allow you
201
+ to experiment. It requires the same environment variables required by the
202
+ specs.
203
+
198
204
  To install this gem onto your local machine, run `bundle exec rake install`.
199
205
 
200
206
  To release a new version, update the version number in `version.rb`, and then
data/Rakefile CHANGED
@@ -6,3 +6,9 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
6
6
  end
7
7
 
8
8
  task :default => :spec
9
+
10
+ require 'code_counter/engine'
11
+ desc 'Print code statistics'
12
+ task :stats do
13
+ puts CodeCounter::Engine.new.to_s
14
+ end
@@ -3,8 +3,27 @@
3
3
  require 'bundler/setup'
4
4
  require 'identikey'
5
5
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
6
+ Identikey::Authentication.configure do
7
+ wsdl ENV.fetch('IK_WSDL_AUTH')
8
+ endpoint ENV.fetch('IK_HOST')
9
+ end
10
+
11
+ puts "Configured Auth WSDL #{ENV.fetch('IK_WSDL_AUTH')} against #{ENV.fetch('IK_HOST')}"
12
+
13
+ Identikey::Administration.configure do
14
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
15
+ endpoint ENV.fetch('IK_HOST')
16
+ end
17
+
18
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
19
+
20
+ $ik = Identikey::Administration::Session.new(
21
+ username: ENV.fetch('IK_USER'),
22
+ password: ENV.fetch('IK_PASS'),
23
+ domain: ENV.fetch('IK_DOMAIN')
24
+ )
25
+
26
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}. Find it in $ik variable"
8
27
 
9
28
  require "pry"
10
29
  Pry.start
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'identikey'
5
+ require 'json'
6
+
7
+ if ARGV.size != 1
8
+ $stderr.puts "Usage: #{$0} <users.json>"
9
+ exit 1
10
+ end
11
+
12
+ Identikey::Administration.configure do
13
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
14
+ endpoint ENV.fetch('IK_HOST')
15
+ end
16
+
17
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
18
+
19
+ $ik = Identikey::Administration::Session.new(
20
+ username: ENV.fetch('IK_USER'),
21
+ password: ENV.fetch('IK_PASS'),
22
+ domain: ENV.fetch('IK_DOMAIN')
23
+ )
24
+
25
+ $ik.logon
26
+
27
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}"
28
+
29
+ at_exit { $ik.logoff }
30
+
31
+ users = Identikey::Administration::User.search(session: $ik, query: {})
32
+ users_slim = users.map do |u|
33
+ { username: u.username,
34
+ email: u.email,
35
+ digipass: u.digipass,
36
+ disabled: u.disabled,
37
+ locked: u.locked,
38
+ expires_at: u.expires_at
39
+ }
40
+ end
41
+
42
+ File.write ARGV[0], users_slim.to_json
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'identikey'
5
+ require 'json'
6
+
7
+ if ARGV.size != 1
8
+ $stderr.puts "Usage: #{$0} <users.json>"
9
+ exit 1
10
+ end
11
+
12
+ Identikey::Administration.configure do
13
+ wsdl ENV.fetch('IK_WSDL_ADMIN')
14
+ endpoint ENV.fetch('IK_HOST')
15
+ end
16
+
17
+ puts "Configured Admin WSDL #{ENV.fetch('IK_WSDL_ADMIN')} against #{ENV.fetch('IK_HOST')}"
18
+
19
+ $ik = Identikey::Administration::Session.new(
20
+ username: ENV.fetch('IK_USER'),
21
+ password: ENV.fetch('IK_PASS'),
22
+ domain: ENV.fetch('IK_DOMAIN')
23
+ )
24
+
25
+ $ik.logon
26
+
27
+ puts "Opened admin session with #{ENV.fetch('IK_USER')}@#{ENV.fetch('IK_DOMAIN')} against #{ENV.fetch('IK_HOST')}"
28
+
29
+ at_exit { $ik.logoff }
30
+
31
+ users = JSON.load File.read ARGV[0]
32
+
33
+ users.each do |import|
34
+
35
+ puts "Looking up #{import['username']}"
36
+ ik_user = begin
37
+ Identikey::Administration::User.find(session: $ik, username: import['username'], domain: ENV.fetch('IK_DOMAIN'))
38
+ rescue => e
39
+ puts "Cannot look up #{import['username']}: #{e.message}"
40
+ nil
41
+ end
42
+
43
+ unless ik_user
44
+ puts "User #{import['username']} not found, creating"
45
+
46
+ ik_user = Identikey::Administration::User.new($ik,
47
+ 'USERFLD_USERID' => import['username'],
48
+ 'USERFLD_EMAIL' => import['email'],
49
+ 'USERFLD_DOMAIN' => ENV.fetch('IK_DOMAIN'),
50
+ 'USERFLD_LOCAL_AUTH' => 'Default',
51
+ 'USERFLD_BACKEND_AUTH' => 'Default',
52
+ 'USERFLD_DISABLED' => import['disabled'],
53
+ 'USERFLD_LOCKED' => import['locked'],
54
+ 'USERFLD_EXPIRATION_TIME' => import['expires_at']
55
+ )
56
+
57
+ begin
58
+ ik_user.save!
59
+ puts "User #{import['username']} created"
60
+ rescue => e
61
+
62
+ puts "Cannot create #{import['username']}: #{e.message}"
63
+
64
+ next
65
+ end
66
+ end
67
+
68
+ missing_digipass = import['digipass'] - ik_user.digipass
69
+
70
+ missing_digipass.each do |digipass|
71
+ puts "Assigining digipass #{digipass} to #{import['username']}"
72
+
73
+ ik_token = begin
74
+ Identikey::Administration::Digipass.find(session: $ik, serial_no: digipass)
75
+ rescue => e
76
+ puts "Digipass #{digipass} was not found"
77
+ next
78
+ end
79
+
80
+ begin
81
+ ik_token.assign! import['username'], ENV.fetch('IK_DOMAIN')
82
+ rescue => e
83
+ puts "Digipass #{digipass} could not be assigned to #{import['username']}: #{e.message}"
84
+ end
85
+
86
+ puts "Assignment of digipass #{digipass} to #{import['username']} was successful"
87
+ end
88
+
89
+ end
@@ -25,11 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "savon", "~> 2.0"
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 2.0"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", ">= 12.3.3"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency 'pry'
31
31
  spec.add_development_dependency 'hirb'
32
32
  spec.add_development_dependency 'byebug'
33
33
  spec.add_development_dependency 'simplecov'
34
34
  spec.add_development_dependency 'dotenv'
35
+ spec.add_development_dependency 'guard-rspec'
36
+ spec.add_development_dependency 'vacman_controller'
37
+ spec.add_development_dependency 'code_counter'
35
38
  end
@@ -61,12 +61,7 @@ module Identikey
61
61
  # `log:` keyword is set to false.
62
62
  #
63
63
  def ping(session_id:, log:)
64
- old_log = client.globals[:log]
65
- client.globals[:log] = log
66
-
67
- sessionalive(session_id: session_id)
68
- ensure
69
- client.globals[:log] = old_log
64
+ logging_to(log) { sessionalive(session_id: session_id) }
70
65
  end
71
66
 
72
67
  def admin_session_query(session_id:)
@@ -150,17 +145,58 @@ module Identikey
150
145
  )
151
146
  end
152
147
 
148
+ def user_execute_RESET_PASSWORD(session_id:, username:, domain:)
149
+ user_execute(
150
+ session_id: session_id,
151
+ cmd: 'USERCMD_RESET_PASSWORD',
152
+ attributes: typed_attributes_list_from(
153
+ USERFLD_USERID: username,
154
+ USERFLD_DOMAIN: domain
155
+ )
156
+ )
157
+ end
153
158
 
154
- def user_query(session_id:, attributes:, query_options:)
155
- resp = super(message: {
156
- sessionID: session_id,
157
- attributeSet: {
158
- attributes: typed_attributes_query_list_from(attributes)
159
- },
160
- queryOptions: query_options
161
- })
159
+ def user_execute_SET_PASSWORD(session_id:, username:, domain:, password:)
160
+ user_execute(
161
+ session_id: session_id,
162
+ cmd: 'USERCMD_SET_PASSWORD',
163
+ attributes: typed_attributes_list_from(
164
+ USERFLD_USERID: username,
165
+ USERFLD_DOMAIN: domain,
166
+ USERFLD_NEW_PASSWORD: password,
167
+ USERFLD_CONFIRM_NEW_PASSWORD: password
168
+ )
169
+ )
170
+ end
162
171
 
163
- parse_response resp, :user_query_response
172
+ def user_execute_UNLOCK(session_id:, username:, domain:)
173
+ user_execute(
174
+ session_id: session_id,
175
+ cmd: 'USERCMD_UNLOCK',
176
+ attributes: typed_attributes_list_from(
177
+ USERFLD_USERID: username,
178
+ USERFLD_DOMAIN: domain
179
+ )
180
+ )
181
+ end
182
+
183
+ # Executes a userQuery command that searches users. By default, it doesn't
184
+ # log anywhere. To enable logging to a specific destination, pass a logger
185
+ # as the log: option. To log to the default destination, pass `true` as
186
+ # the log: option.
187
+ #
188
+ def user_query(session_id:, attributes:, query_options:, log: false)
189
+ logging_to(log) do
190
+ resp = super(message: {
191
+ sessionID: session_id,
192
+ attributeSet: {
193
+ attributes: typed_attributes_query_list_from(attributes)
194
+ },
195
+ queryOptions: query_options
196
+ })
197
+
198
+ parse_response resp, :user_query_response
199
+ end
164
200
  end
165
201
 
166
202
 
@@ -260,5 +296,24 @@ module Identikey
260
296
  )
261
297
  end
262
298
 
299
+ private
300
+ # Allows temporarily overriding the log destination. If it
301
+ # is set to `false` then logging is disabled altogether.
302
+ # If it is set to `true`, then this is a no-op.
303
+ #
304
+ def logging_to(destination)
305
+ old_log = client.globals[:log]
306
+
307
+ unless destination === true
308
+ client.globals[:log] = destination
309
+ end
310
+
311
+ yield
312
+
313
+ ensure
314
+ client.globals[:log] = old_log
315
+ end
316
+
317
+
263
318
  end
264
319
  end
@@ -6,7 +6,7 @@ module Identikey
6
6
  new(session).find(username, domain)
7
7
  end
8
8
 
9
- def self.search(session:, query:, options: {})
9
+ def self.search(session:, query:, options: {}, log: false)
10
10
  [:has_digipass, :not_has_digipass].each do |funky_boolean|
11
11
  if query.key?(funky_boolean) && [true, false].include?(query[funky_boolean])
12
12
  query[funky_boolean] = query[funky_boolean] ? 'Assigned' : 'Unassigned'
@@ -29,10 +29,12 @@ module Identikey
29
29
 
30
30
  stat, users, error = session.execute(:user_query,
31
31
  attributes: Base.search_attributes_from(query, attribute_map: query_keys),
32
- query_options: Base.search_options_from(options))
32
+ query_options: Base.search_options_from(options),
33
+ log: log
34
+ )
33
35
 
34
36
  case stat
35
- when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user) }
37
+ when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user, persisted: true) }
36
38
  when 'STAT_NOT_FOUND' then []
37
39
  else
38
40
  raise Identikey::Error, "Search user failed: #{stat} - #{error}"
@@ -59,11 +61,17 @@ module Identikey
59
61
  attr_accessor :expired
60
62
  attr_accessor :last_auth_attempt_at
61
63
  attr_accessor :description
64
+ attr_accessor :passwd_last_set_at
65
+ attr_accessor :has_password
62
66
 
63
- def initialize(session, user = nil)
67
+ alias locked? locked
68
+ alias digipass? has_digipass
69
+ alias password? has_password
70
+
71
+ def initialize(session, user = nil, persisted: false)
64
72
  @session = session
65
73
 
66
- replace(user) if user
74
+ replace(user, persisted: persisted) if user
67
75
  end
68
76
 
69
77
  def find(username, domain)
@@ -102,26 +110,20 @@ module Identikey
102
110
  })
103
111
 
104
112
  if stat != 'STAT_SUCCESS'
105
- raise Identikey::OperationFailed, "Save user failed: #{stat} - #{error}"
113
+ raise Identikey::OperationFailed, "Save user #{self.username} failed: #{stat} - #{error}"
106
114
  end
107
115
 
108
116
  replace(user, persisted: true)
109
117
  end
110
118
 
111
119
  def destroy!
112
- unless self.persisted?
113
- raise Identikey::UsageError, "User #{self.username} is not persisted"
114
- end
115
-
116
- unless self.username && self.domain
117
- raise Identikey::UsageError, "User #{self} is missing username and/or domain"
118
- end
120
+ ensure_persisted!
119
121
 
120
122
  stat, _, error = @session.execute(
121
123
  :user_execute_DELETE, username: username, domain: domain)
122
124
 
123
125
  if stat != 'STAT_SUCCESS'
124
- raise Identikey::OperationFailed, "Delete user failed: #{stat} - #{error}"
126
+ raise Identikey::OperationFailed, "Delete user #{self.username} failed: #{stat} - #{error}"
125
127
  end
126
128
 
127
129
  @persisted = false
@@ -129,6 +131,51 @@ module Identikey
129
131
  self
130
132
  end
131
133
 
134
+ def clear_password!
135
+ ensure_persisted!
136
+
137
+ stat, _, error = @session.execute(
138
+ :user_execute_RESET_PASSWORD, username: username, domain: domain)
139
+
140
+ if stat != 'STAT_SUCCESS'
141
+ raise Identikey::OperationFailed, "Clear user #{self.username} password failed: #{stat} - #{error}"
142
+ end
143
+
144
+ self.has_password = false
145
+
146
+ true
147
+ end
148
+
149
+ def set_password!(password)
150
+ ensure_persisted!
151
+
152
+ stat, _, error = @session.execute(
153
+ :user_execute_SET_PASSWORD, username: username, domain: domain, password: password)
154
+
155
+ if stat != 'STAT_SUCCESS'
156
+ raise Identikey::OperationFailed, "Set user #{self.username} password failed: #{stat} - #{error}"
157
+ end
158
+
159
+ self.has_password = true
160
+
161
+ true
162
+ end
163
+
164
+ def unlock!
165
+ ensure_persisted!
166
+
167
+ stat, _, error = @session.execute(
168
+ :user_execute_UNLOCK, username: username, domain: domain)
169
+
170
+ if stat != 'STAT_SUCCESS'
171
+ raise Identikey::OperationFailed, "Unlock user #{self.username} failed: #{stat} - #{error}"
172
+ end
173
+
174
+ self.locked = false
175
+
176
+ true
177
+ end
178
+
132
179
  protected
133
180
  def replace(user, persisted: false)
134
181
  self.username = user['USERFLD_USERID']
@@ -151,11 +198,23 @@ module Identikey
151
198
  self.expired = user['USERFLD_EXPIRED']
152
199
  self.last_auth_attempt_at = user['USERFLD_LASTAUTHREQ_TIME']
153
200
  self.description = user['USERFLD_DESCRIPTION']
201
+ self.passwd_last_set_at = user['USERFLD_LAST_PASSWORD_SET_TIME']
202
+ self.has_password = !user['USERFLD_PASSWORD'].nil?
154
203
 
155
204
  @persisted = persisted
156
205
 
157
206
  self
158
207
  end
208
+
209
+ def ensure_persisted!
210
+ unless self.persisted?
211
+ raise Identikey::UsageError, "User #{self.username} is not persisted"
212
+ end
213
+
214
+ unless self.username && self.domain
215
+ raise Identikey::UsageError, "User #{self} is missing username and/or domain"
216
+ end
217
+ end
159
218
  end
160
219
 
161
220
  end
@@ -264,8 +264,8 @@ module Identikey
264
264
  parse = /^(not_)?(.*)/i.match(full_name.to_s)
265
265
  name = parse[2]
266
266
 
267
- options = []
268
- options.push(negative: true) if !parse[1].nil?
267
+ options = {}
268
+ options[:negative] = true if !parse[1].nil?
269
269
 
270
270
  type, value = case value
271
271
 
@@ -275,8 +275,8 @@ module Identikey
275
275
  when Integer
276
276
  [ 'xsd:int', value.to_s ]
277
277
 
278
- when DateTime, Time
279
- [ 'xsd:datetime', value.utc.iso8601 ]
278
+ when Time
279
+ [ 'xsd:dateTime', value.utc.iso8601 ]
280
280
 
281
281
  when TrueClass, FalseClass
282
282
  [ 'xsd:boolean', value.to_s ]
@@ -285,7 +285,7 @@ module Identikey
285
285
  [ 'xsd:string', value.to_s ]
286
286
 
287
287
  when NilClass
288
- options.push(null: true)
288
+ options[:null] = true
289
289
  [ 'xsd:string', '' ]
290
290
 
291
291
  else
@@ -1,3 +1,3 @@
1
1
  module Identikey
2
- VERSION = "0.5.1"
2
+ VERSION = "0.7.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: identikey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello Barnaba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-01 00:00:00.000000000 Z
11
+ date: 2020-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,48 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: vacman_controller
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: code_counter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
139
181
  description: This gem contains a SOAP client to consume Identikey API
140
182
  email:
141
183
  - vjt@openssl.it
@@ -146,10 +188,13 @@ files:
146
188
  - ".gitignore"
147
189
  - ".rspec"
148
190
  - Gemfile
191
+ - Guardfile
149
192
  - LICENSE.txt
150
193
  - README.md
151
194
  - Rakefile
152
195
  - bin/console
196
+ - bin/export
197
+ - bin/import
153
198
  - bin/setup
154
199
  - identikey.gemspec
155
200
  - lib/identikey.rb