identikey 0.5.0 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17806b4e8996eac32014f37f34d9e698b4668e5fd196e1102e2a30c0eb349757
4
- data.tar.gz: 26e36da28a662d259e538ef2936d8b03a883c0e38e450a5350e548a336336ed7
3
+ metadata.gz: 9ddf98e9f2ab268487c380bab954e3fefebcdd729e81f74a5f1267ada748d8b8
4
+ data.tar.gz: 43bb94510b8cb9e6176da71ba4742891419e4591053ded611d753538d545e895
5
5
  SHA512:
6
- metadata.gz: cf8893d1ae7931194b59c54d0f3a6addd824869c116859ae534f36bb5a6619cebdb1f0e87bb6d8c74c4a67988470053abb2985b6d58e2011d59a0b16eeaf1eeb
7
- data.tar.gz: 0c4e3661f8b518f55382490c9af060580d1982f2762904afeef435e9c544e0309e6ced8230bbea0e4b3e23451a544828bd10dc486858d8fc3ca03b792e191437
6
+ metadata.gz: 386ea4bc06bb5258ce0e3fa928880c3e3faae70198744c5c562c1ac8ab44b1961dfd82724e905e610432715c2ef105ff751055002489f41ea4d595652821a4b4
7
+ data.tar.gz: 3b7081b38c22f4da4bd74360467b6b4e9951d69e376b49ca47e314a6e2185257a00357fb131a5769b94ece4b39929d741baaba7e6e1330ba334e1c85ba08d5b7
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
@@ -32,4 +32,7 @@ Gem::Specification.new do |spec|
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
@@ -1,26 +1,7 @@
1
1
  require 'savon'
2
2
 
3
3
  require 'identikey/version'
4
+ require 'identikey/error'
4
5
  require 'identikey/unsigned'
5
6
  require 'identikey/authentication'
6
7
  require 'identikey/administration'
7
-
8
- module Identikey
9
- # Generic error class
10
- class Error < StandardError; end
11
-
12
- # Raised when the user is not doing things correctly
13
- class UsageError < Error; end
14
-
15
- # Raised when the received XML does not conform to documentation
16
- class ParseError < Error; end
17
-
18
- # Raised when something is "not found", such as an user or a digipass.
19
- class NotFound < Error; end
20
-
21
- # Raised when Admin logon failed
22
- class LogonFailed < Error; end
23
-
24
- # Raised when read/write operations fail
25
- class OperationFailed < Error; end
26
- 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,9 +6,11 @@ module Identikey
6
6
  new(session).find(username, domain)
7
7
  end
8
8
 
9
- def self.search(session:, query:, options: {})
10
- if query.key?(:has_digipass) && [true, false].include?(query[:has_digipass])
11
- query[:has_digipass] = query[:has_digipass] ? 'Assigned' : 'Unassigned'
9
+ def self.search(session:, query:, options: {}, log: false)
10
+ [:has_digipass, :not_has_digipass].each do |funky_boolean|
11
+ if query.key?(funky_boolean) && [true, false].include?(query[funky_boolean])
12
+ query[funky_boolean] = query[funky_boolean] ? 'Assigned' : 'Unassigned'
13
+ end
12
14
  end
13
15
 
14
16
  query_keys = {
@@ -27,10 +29,12 @@ module Identikey
27
29
 
28
30
  stat, users, error = session.execute(:user_query,
29
31
  attributes: Base.search_attributes_from(query, attribute_map: query_keys),
30
- query_options: Base.search_options_from(options))
32
+ query_options: Base.search_options_from(options),
33
+ log: log
34
+ )
31
35
 
32
36
  case stat
33
- when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user) }
37
+ when 'STAT_SUCCESS' then (users||[]).map {|user| new(session, user, persisted: true) }
34
38
  when 'STAT_NOT_FOUND' then []
35
39
  else
36
40
  raise Identikey::Error, "Search user failed: #{stat} - #{error}"
@@ -57,11 +61,17 @@ module Identikey
57
61
  attr_accessor :expired
58
62
  attr_accessor :last_auth_attempt_at
59
63
  attr_accessor :description
64
+ attr_accessor :passwd_last_set_at
65
+ attr_accessor :has_password
60
66
 
61
- 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)
62
72
  @session = session
63
73
 
64
- replace(user) if user
74
+ replace(user, persisted: persisted) if user
65
75
  end
66
76
 
67
77
  def find(username, domain)
@@ -100,26 +110,20 @@ module Identikey
100
110
  })
101
111
 
102
112
  if stat != 'STAT_SUCCESS'
103
- raise Identikey::OperationFailed, "Save user failed: #{stat} - #{error}"
113
+ raise Identikey::OperationFailed, "Save user #{self.username} failed: #{stat} - #{error}"
104
114
  end
105
115
 
106
116
  replace(user, persisted: true)
107
117
  end
108
118
 
109
119
  def destroy!
110
- unless self.persisted?
111
- raise Identikey::UsageError, "User #{self.username} is not persisted"
112
- end
113
-
114
- unless self.username && self.domain
115
- raise Identikey::UsageError, "User #{self} is missing username and/or domain"
116
- end
120
+ ensure_persisted!
117
121
 
118
122
  stat, _, error = @session.execute(
119
123
  :user_execute_DELETE, username: username, domain: domain)
120
124
 
121
125
  if stat != 'STAT_SUCCESS'
122
- raise Identikey::OperationFailed, "Delete user failed: #{stat} - #{error}"
126
+ raise Identikey::OperationFailed, "Delete user #{self.username} failed: #{stat} - #{error}"
123
127
  end
124
128
 
125
129
  @persisted = false
@@ -127,6 +131,51 @@ module Identikey
127
131
  self
128
132
  end
129
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
+
130
179
  protected
131
180
  def replace(user, persisted: false)
132
181
  self.username = user['USERFLD_USERID']
@@ -149,11 +198,23 @@ module Identikey
149
198
  self.expired = user['USERFLD_EXPIRED']
150
199
  self.last_auth_attempt_at = user['USERFLD_LASTAUTHREQ_TIME']
151
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?
152
203
 
153
204
  @persisted = persisted
154
205
 
155
206
  self
156
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
157
218
  end
158
219
 
159
220
  end
@@ -28,13 +28,13 @@ module Identikey
28
28
  end
29
29
 
30
30
  def self.validate!(user, domain, otp)
31
- status, result, _ = new.auth_user(user, domain, otp)
31
+ status, result, error_stack = new.auth_user(user, domain, otp)
32
32
 
33
33
  if otp_validated_ok?(status, result)
34
34
  return true
35
35
  else
36
36
  error_message = result['CREDFLD_STATUS_MESSAGE']
37
- raise Identikey::OperationFailed, "OTP Validation error (#{status}): #{error_message}"
37
+ raise Identikey::OperationFailed.new("OTP Validation error (#{status}): #{error_message}", error_stack)
38
38
  end
39
39
  end
40
40
 
@@ -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
@@ -0,0 +1,27 @@
1
+ module Identikey
2
+ # Generic error class
3
+ class Error < StandardError
4
+ def initialize(message, error_stack = nil)
5
+ super(message)
6
+
7
+ @error_stack = error_stack
8
+ end
9
+
10
+ attr_reader :error_stack
11
+ end
12
+
13
+ # Raised when the user is not doing things correctly
14
+ class UsageError < Error; end
15
+
16
+ # Raised when the received XML does not conform to documentation
17
+ class ParseError < Error; end
18
+
19
+ # Raised when something is "not found", such as an user or a digipass.
20
+ class NotFound < Error; end
21
+
22
+ # Raised when Admin logon failed
23
+ class LogonFailed < Error; end
24
+
25
+ # Raised when read/write operations fail
26
+ class OperationFailed < Error; end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Identikey
2
- VERSION = "0.5.0"
2
+ VERSION = "0.7.0"
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.0
4
+ version: 0.7.0
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-10-23 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
@@ -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
@@ -160,6 +205,7 @@ files:
160
205
  - lib/identikey/administration/user.rb
161
206
  - lib/identikey/authentication.rb
162
207
  - lib/identikey/base.rb
208
+ - lib/identikey/error.rb
163
209
  - lib/identikey/unsigned.rb
164
210
  - lib/identikey/version.rb
165
211
  - log/.keep