identikey 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -10
- data/lib/identikey/administration/digipass.rb +4 -4
- data/lib/identikey/administration/session.rb +3 -3
- data/lib/identikey/administration/session_query.rb +1 -1
- data/lib/identikey/administration/user.rb +5 -5
- data/lib/identikey/authentication.rb +1 -1
- data/lib/identikey/base.rb +6 -6
- data/lib/identikey/version.rb +1 -1
- data/lib/identikey.rb +16 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1710a5f6fbcfc83e269476074afdedb5be773bc9d90e296fa87bda8799c09a6e
|
4
|
+
data.tar.gz: 23db861c5791fdac119b75ec14aeedf48701a8c7080cf423ca4197bbce355d06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 525ef84c5dfbba3f8f9dba1a412961df59c2e59f1d28010fc067cf4aed0f4b52327772a4b525a446b35b9dbfd9dbc6d5bb18372fa3e9a3dd1c3faf17764afb3b
|
7
|
+
data.tar.gz: 595dc7ba66db94432d0961c91588bb5051d690683ca89afc5b3606c8cbbae00ae4a1791845c42935a9d7f0be09f5bc3b5e6fb667ff18cfed6512e97f73fb48d4
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Identikey
|
2
2
|
|
3
|
-
This library is a thin
|
3
|
+
This library is a thin yet incomplete wrapper of the VASCO Identikey SOAP API.
|
4
4
|
|
5
5
|
Vasco Identikey has been recently re-branded as OneSpan Authentication Server.
|
6
6
|
|
@@ -18,7 +18,7 @@ port 8888/TCP the SOAP protocol over HTTPS.
|
|
18
18
|
Add this line to your application's Gemfile:
|
19
19
|
|
20
20
|
```ruby
|
21
|
-
gem 'identikey'
|
21
|
+
gem 'identikey'
|
22
22
|
```
|
23
23
|
|
24
24
|
And then execute:
|
@@ -64,7 +64,7 @@ By default, all SOAP requests and responses are logged to `log/identikey.log`.
|
|
64
64
|
|
65
65
|
If you want to reduce the logging level please use:
|
66
66
|
|
67
|
-
```
|
67
|
+
```ruby
|
68
68
|
Identikey::Authentication.configure do
|
69
69
|
log_level :info # or one of [:debug, :warn, :error, :fatal]
|
70
70
|
end
|
@@ -72,7 +72,7 @@ end
|
|
72
72
|
|
73
73
|
Or to disable it altogether (not recommended):
|
74
74
|
|
75
|
-
```
|
75
|
+
```ruby
|
76
76
|
Identikey::Authentication.configure do
|
77
77
|
log false
|
78
78
|
end
|
@@ -84,15 +84,15 @@ amend it to suit your needs.
|
|
84
84
|
|
85
85
|
The only option whose semantics differ from the default is `filters`, as
|
86
86
|
it adds handling the faulty parameter passing design in Identikey, where
|
87
|
-
the same elements are used to transmit different business
|
87
|
+
the same elements are used to transmit different business informations.
|
88
88
|
|
89
89
|
By default, sensitive values attribute are filtered out from the logs.
|
90
90
|
Other attributes to filter out can be specified by prefixing them with
|
91
|
-
`identikey:`.
|
91
|
+
`identikey:`.
|
92
92
|
|
93
93
|
Example, filter out `CREDFLD_PASSWORD` and `CREDFLD_USERID`:
|
94
94
|
|
95
|
-
```
|
95
|
+
```ruby
|
96
96
|
Identikey::Authentication.configure do
|
97
97
|
filters [ 'identikey:CREDFLD_PASSWORD', 'identikey:CREDFLD_USERID' ]
|
98
98
|
end
|
@@ -100,9 +100,9 @@ end
|
|
100
100
|
|
101
101
|
Please note that the following attributes are filtered out by default:
|
102
102
|
|
103
|
-
* CREDFLD_PASSWORD
|
104
|
-
* CREDFLD_STATIC_PASSWORD
|
105
|
-
* CREDFLD_SESSION_ID
|
103
|
+
* `CREDFLD_PASSWORD`
|
104
|
+
* `CREDFLD_STATIC_PASSWORD`
|
105
|
+
* `CREDFLD_SESSION_ID`
|
106
106
|
|
107
107
|
Please note that if you set your custom filters, these will override the
|
108
108
|
defaults and you should also take care of filtering the above parameters
|
@@ -45,7 +45,7 @@ module Identikey
|
|
45
45
|
:digipass_execute_VIEW, serial_no: serial_no)
|
46
46
|
|
47
47
|
if stat != 'STAT_SUCCESS'
|
48
|
-
raise Identikey::
|
48
|
+
raise Identikey::NotFound, "Find digipass failed: #{stat} - #{error}"
|
49
49
|
end
|
50
50
|
|
51
51
|
replace(digipass)
|
@@ -60,7 +60,7 @@ module Identikey
|
|
60
60
|
:digipass_execute_UNASSIGN, serial_no: self.serial)
|
61
61
|
|
62
62
|
if stat != 'STAT_SUCCESS'
|
63
|
-
raise Identikey::
|
63
|
+
raise Identikey::OperationFailed, "Assign digipass failed: #{stat} - #{error}"
|
64
64
|
end
|
65
65
|
|
66
66
|
replace(digipass)
|
@@ -71,7 +71,7 @@ module Identikey
|
|
71
71
|
:digipass_execute_ASSIGN, serial_no: self.serial, username: username, domain: domain)
|
72
72
|
|
73
73
|
if stat != 'STAT_SUCCESS'
|
74
|
-
raise Identikey::
|
74
|
+
raise Identikey::OperationFailed, "Unassign digipass failed: #{stat} - #{error}"
|
75
75
|
end
|
76
76
|
|
77
77
|
replace(digipass)
|
@@ -84,7 +84,7 @@ module Identikey
|
|
84
84
|
# Stat is useless here - it reports whether the call or not has
|
85
85
|
# succeeded, not whether the OTP is valid
|
86
86
|
if stat != 'STAT_SUCCESS'
|
87
|
-
raise Identikey::
|
87
|
+
raise Identikey::OperationFailed, "Test OTP failed: #{stat} - #{error}"
|
88
88
|
end
|
89
89
|
|
90
90
|
appl['DIGIPASSAPPLFLD_RESULT_CODE'] == '0'
|
@@ -26,7 +26,7 @@ module Identikey
|
|
26
26
|
stat, sess, error = @client.logon(username: @username, password: @password, domain: @domain)
|
27
27
|
|
28
28
|
if stat != 'STAT_SUCCESS'
|
29
|
-
raise Identikey::
|
29
|
+
raise Identikey::LogonFailed, "logon failed: #{stat} - #{error}"
|
30
30
|
end
|
31
31
|
|
32
32
|
@privileges = parse_privileges sess['CREDFLD_LOGICAL_ADMIN_PRIVILEGES']
|
@@ -47,7 +47,7 @@ module Identikey
|
|
47
47
|
stat, _, error = @client.logoff session_id: @session_id
|
48
48
|
|
49
49
|
unless stat == 'STAT_ADMIN_SESSION_STOPPED' || stat == 'STAT_SUCCESS'
|
50
|
-
raise Identikey::
|
50
|
+
raise Identikey::LogonFailed, "logoff failed: #{stat} - #{error}"
|
51
51
|
end
|
52
52
|
|
53
53
|
@privileges = nil
|
@@ -103,7 +103,7 @@ module Identikey
|
|
103
103
|
|
104
104
|
def require_logged_on!
|
105
105
|
unless logged_on?
|
106
|
-
raise Identikey::
|
106
|
+
raise Identikey::UsageError, "Session is not logged on at the moment"
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -6,7 +6,7 @@ module Identikey
|
|
6
6
|
stat, sessions, error = session.execute(:admin_session_query)
|
7
7
|
|
8
8
|
if stat != 'STAT_SUCCESS'
|
9
|
-
raise Identikey::
|
9
|
+
raise Identikey::OperationFailed, "query failed: #{stat} - #{error}"
|
10
10
|
end
|
11
11
|
|
12
12
|
sessions.map do |sess|
|
@@ -37,7 +37,7 @@ module Identikey
|
|
37
37
|
:user_execute_VIEW, username: username, domain: domain)
|
38
38
|
|
39
39
|
if stat != 'STAT_SUCCESS'
|
40
|
-
raise Identikey::
|
40
|
+
raise Identikey::NotFound, "Find user failed: #{stat} - #{error}"
|
41
41
|
end
|
42
42
|
|
43
43
|
replace(user, persisted: true)
|
@@ -68,7 +68,7 @@ module Identikey
|
|
68
68
|
})
|
69
69
|
|
70
70
|
if stat != 'STAT_SUCCESS'
|
71
|
-
raise Identikey::
|
71
|
+
raise Identikey::OperationFailed, "Save user failed: #{stat} - #{error}"
|
72
72
|
end
|
73
73
|
|
74
74
|
replace(user, persisted: true)
|
@@ -76,18 +76,18 @@ module Identikey
|
|
76
76
|
|
77
77
|
def destroy!
|
78
78
|
unless self.persisted?
|
79
|
-
raise Identikey::
|
79
|
+
raise Identikey::UsageError, "User #{self.username} is not persisted"
|
80
80
|
end
|
81
81
|
|
82
82
|
unless self.username && self.domain
|
83
|
-
raise Identikey::
|
83
|
+
raise Identikey::UsageError, "User #{self} is missing username and/or domain"
|
84
84
|
end
|
85
85
|
|
86
86
|
stat, _, error = @session.execute(
|
87
87
|
:user_execute_DELETE, username: username, domain: domain)
|
88
88
|
|
89
89
|
if stat != 'STAT_SUCCESS'
|
90
|
-
raise Identikey::
|
90
|
+
raise Identikey::OperationFailed, "Delete user failed: #{stat} - #{error}"
|
91
91
|
end
|
92
92
|
|
93
93
|
@persisted = false
|
@@ -34,7 +34,7 @@ module Identikey
|
|
34
34
|
return true
|
35
35
|
else
|
36
36
|
error_message = result['CREDFLD_STATUS_MESSAGE']
|
37
|
-
raise Identikey::
|
37
|
+
raise Identikey::OperationFailed, "OTP Validation error (#{status}): #{error_message}"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/lib/identikey/base.rb
CHANGED
@@ -134,11 +134,11 @@ module Identikey
|
|
134
134
|
body = resp.body
|
135
135
|
|
136
136
|
if body.size.zero?
|
137
|
-
raise Identikey::
|
137
|
+
raise Identikey::ParseError, "Empty response received"
|
138
138
|
end
|
139
139
|
|
140
140
|
unless body.key?(root_element)
|
141
|
-
raise Identikey::
|
141
|
+
raise Identikey::ParseError, "Expected response to have #{root_element}, found #{body.keys.join(', ')}"
|
142
142
|
end
|
143
143
|
|
144
144
|
# The root results element
|
@@ -155,7 +155,7 @@ module Identikey
|
|
155
155
|
# The results element
|
156
156
|
#
|
157
157
|
unless root.key?(:results)
|
158
|
-
raise Identikey::
|
158
|
+
raise Identikey::ParseError, "Results element not found below #{root_element}"
|
159
159
|
end
|
160
160
|
|
161
161
|
results = root[:results]
|
@@ -163,7 +163,7 @@ module Identikey
|
|
163
163
|
# Result code
|
164
164
|
#
|
165
165
|
unless results.key?(:result_codes)
|
166
|
-
raise Identikey::
|
166
|
+
raise Identikey::ParseError, "Result codes not found below #{root_element}"
|
167
167
|
end
|
168
168
|
|
169
169
|
result_code = results[:result_codes][:status_code_enum] || 'STAT_UNKNOWN'
|
@@ -171,7 +171,7 @@ module Identikey
|
|
171
171
|
# Result attributes
|
172
172
|
#
|
173
173
|
unless results.key?(:result_attribute)
|
174
|
-
raise Identikey::
|
174
|
+
raise Identikey::ParseError, "Result attribute not found below #{root_element}"
|
175
175
|
end
|
176
176
|
|
177
177
|
results_attr = results[:result_attribute]
|
@@ -257,7 +257,7 @@ module Identikey
|
|
257
257
|
next
|
258
258
|
|
259
259
|
else
|
260
|
-
raise Identikey::
|
260
|
+
raise Identikey::UsageError, "#{name} type #{value.class} is unsupported"
|
261
261
|
end
|
262
262
|
|
263
263
|
{ attributeID: name.to_s,
|
data/lib/identikey/version.rb
CHANGED
data/lib/identikey.rb
CHANGED
@@ -6,5 +6,21 @@ require 'identikey/authentication'
|
|
6
6
|
require 'identikey/administration'
|
7
7
|
|
8
8
|
module Identikey
|
9
|
+
# Generic error class
|
9
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
|
10
26
|
end
|