WiKID 3.0.2 → 3.2.3
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 +15 -0
- data/doc/README +1 -1
- data/lib/WiKID.rb +841 -591
- data/lib/WiKID_version.rb +5 -0
- data/share/data/WiKID-ca.pem +39 -0
- data/test-options-dist.rb +10 -0
- data/test/ts_load_wikid.rb +21 -0
- data/test/ts_wikid.rb +187 -33
- metadata +67 -42
@@ -0,0 +1,39 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIG4jCCBMqgAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBpTEiMCAGCSqGSIb3DQEJ
|
3
|
+
ARYTY2FAd2lraWRzeXN0ZW1zLmNvbTELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dl
|
4
|
+
b3JnaWExEDAOBgNVBAcMB0F0bGFudGExGjAYBgNVBAoMEVdpS0lEIFN5c3RlbXMg
|
5
|
+
SW5jMRQwEgYDVQQLDAtDQSBTZXJ2aWNlczEcMBoGA1UEAwwTY2Eud2lraWRzeXN0
|
6
|
+
ZW1zLmNvbTAeFw0xMzA0MTcxMTQzMzhaFw0yMzA0MTcxMTQzMzhaMIGlMSIwIAYJ
|
7
|
+
KoZIhvcNAQkBFhNjYUB3aWtpZHN5c3RlbXMuY29tMQswCQYDVQQGEwJVUzEQMA4G
|
8
|
+
A1UECAwHR2VvcmdpYTEQMA4GA1UEBwwHQXRsYW50YTEaMBgGA1UECgwRV2lLSUQg
|
9
|
+
U3lzdGVtcyBJbmMxFDASBgNVBAsMC0NBIFNlcnZpY2VzMRwwGgYDVQQDDBNjYS53
|
10
|
+
aWtpZHN5c3RlbXMuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
|
11
|
+
qFrO3TUybKfA38FH7rXhQEMnpy+59vwZJns6j8NcYyyUbeEZXY8vQ7VSCLjro7bF
|
12
|
+
wBbAAvt3z+XWPWwqS7njtmm4H8b1xnwp2waBooXawCY0GWKsD6sRUmA42E3y++li
|
13
|
+
+J/mz2BrdZ/srWxh5wyrn/TkgzBlRUgwbF6qKPb14l9NhPi8MtWfrrqkdBYsBZFd
|
14
|
+
MW6vTj/pDusQwWxxQKf4tIWM2mOoB51YKJqLiNr4i7Ke3vqErz5EsTTl2Srbuxqr
|
15
|
+
jo45XV7JaB4lsxecbm1mQmWo1e5n37EEVSwj8H64H7b59/n//eGQGSZjs2vAyzUe
|
16
|
+
A0QAluYjioMXX1yg52dHCBtmqseDfamhCZ9MyqwSqFu/w6vFbFvqZQns7NoUxWar
|
17
|
+
736Wp6+IfpnO7irD/EeP6JZOgX+TV1ZyjEyEf5oDutsfTx8Zn+OG2vR9/7nfHnYo
|
18
|
+
3yZYX6Nj8qWcODuCSzpBD5RSMsmYSf53YM3OTCo1xAq0f3C9t4syGmaQDidGR8Mr
|
19
|
+
OOhDF0rtSHgi8EXqBgA4KT/KXcoogLnlMSxy4TUq7l0wrUVZ4STMXhG7MWK49g0w
|
20
|
+
DqY/mhQ1GcJyBQ89ClGajsGiA90DIjnVVLRHaDvy5bKEgJigUdpC/kf9W0IO025k
|
21
|
+
KtaptwHi6SMsSKbCRhr5dsew4Q6CW6YTwXIwDjrPuKUCAwEAAaOCARkwggEVMB0G
|
22
|
+
A1UdDgQWBBT+OIb6dSVaXUQ8D5ApW5lzz0yhOzARBglghkgBhvhCAQEEBAMCBkAw
|
23
|
+
DAYDVR0TBAUwAwEB/zCB0gYDVR0jBIHKMIHHgBT+OIb6dSVaXUQ8D5ApW5lzz0yh
|
24
|
+
O6GBq6SBqDCBpTEiMCAGCSqGSIb3DQEJARYTY2FAd2lraWRzeXN0ZW1zLmNvbTEL
|
25
|
+
MAkGA1UEBhMCVVMxEDAOBgNVBAgTB0dlb3JnaWExEDAOBgNVBAcTB0F0bGFudGEx
|
26
|
+
GjAYBgNVBAoTEVdpS0lEIFN5c3RlbXMgSW5jMRQwEgYDVQQLEwtDQSBTZXJ2aWNl
|
27
|
+
czEcMBoGA1UEAxMTY2Eud2lraWRzeXN0ZW1zLmNvbYIBAjANBgkqhkiG9w0BAQQF
|
28
|
+
AAOCAgEAHDO4GqAB0u3DlcgrFmqJghJoUTNMz1EkyvrZui/Q0qp5V5fu5CoKdwuZ
|
29
|
+
r1iitBUW0rhn83CEZ5efFQu6ua7YdHsxpD4jX3OBjrCELQOAYEGiZd1G8EupfEU4
|
30
|
+
4JTAY2LlANToITmOTslzVwCJ5znGlPEjLF2xYF3xMAH8zqkhfFeZi+xDPcdgpUmk
|
31
|
+
lT2YUn3FZMxXMV6h8ANw72iCMON82uifBMsVQ3G/MG0qFCyeiYqj9gYMDO8yXqTM
|
32
|
+
ftuy4UBOOBWHJWpTy7JXlaYyLcEVJXeq92KH/MwHaG6xpyT8CyPGZpv4yyaNE9YO
|
33
|
+
f9g3XbEWUa5eHWo0qVVmf4tF3wfyG/gQ/TdFVJHcqGTpPtLmumM49+Bbbd/Ohoea
|
34
|
+
3Jc1ZwPIxu/W76bs0ZK530me8vzq0Wzo2cKc77gi2zByasdMh6hwY4Q7oYeh6kqh
|
35
|
+
fLq3dc3Hv5jgzU2ivbkOnyFs6wxLjub+Gklkg65IKyYMLIG/OVDuns3kUnJnXO+i
|
36
|
+
Kkol7KbkxI3oZypsOqXMUFZ+4TYUMs+xWSD2kmi3Vp/XaiUiaiZ3ZTIbHpnqK6HC
|
37
|
+
sFcMy5yGnNYJqudi5ZfbYuvVLJcqj1q6xY8+b/4bgbingKH2v97uBSePp+Mb6Sol
|
38
|
+
qoln8zxXi9eQMDI+rfAZtpztGXcwlyjpuyivCFnYm+jftz3gEwk=
|
39
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,10 @@
|
|
1
|
+
## rename to test-options.rb and set the parameter per your environment
|
2
|
+
|
3
|
+
DOMAIN_CODE = "127000000001"
|
4
|
+
SERVER_HOST = "127.0.0.1"
|
5
|
+
SERVER_PORT = 8388
|
6
|
+
|
7
|
+
CLIENT_KEY_FILE = File.join(File.dirname(__FILE__), 'network-client.pem')
|
8
|
+
CLIENT_KEY_PASS = 'changeme'
|
9
|
+
|
10
|
+
JCMD_REGISTER = "java -cp lib/wikidtoken-3.1.23.jar:lib/wikid-tokentest.jar com.wikidsystems.test.JavaSETokenTester register"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestLoadWiKID < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_load_module
|
8
|
+
|
9
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'WiKID'
|
13
|
+
loaded = 1
|
14
|
+
rescue
|
15
|
+
loaded = 0
|
16
|
+
end
|
17
|
+
assert(loaded == 1, "Unable to load WiKID module!")
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/test/ts_wikid.rb
CHANGED
@@ -1,52 +1,206 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
|
-
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
5
|
+
require 'WiKID'
|
6
|
+
require 'SecureRandom'
|
7
|
+
require 'rexml/document'
|
8
|
+
include REXML
|
9
|
+
|
10
|
+
TEST_OPTIONS_FILE = File.join(File.dirname(__FILE__), "..", "test-options.rb")
|
11
|
+
config_file_exists = FileTest.exists?(TEST_OPTIONS_FILE)
|
12
|
+
if config_file_exists
|
13
|
+
require TEST_OPTIONS_FILE
|
14
|
+
end
|
15
|
+
|
16
|
+
SERVER_HOST = "127.0.0.1" if !defined?(SERVER_HOST)
|
17
|
+
DOMAIN_CODE = "127000000001" if !defined?(DOMAIN_CODE)
|
18
|
+
SERVER_PORT = 8388 if !defined?(SERVER_PORT)
|
19
|
+
CLIENT_KEY_FILE = '' if !defined?(CLIENT_KEY_FILE)
|
20
|
+
CLIENT_KEY_PASS = '' if !defined?(CLIENT_KEY_PASS)
|
21
|
+
|
22
|
+
puts "* Running with server: #{SERVER_HOST}:#{SERVER_PORT}"
|
5
23
|
|
6
24
|
class TestWiKID < Test::Unit::TestCase
|
7
25
|
|
8
|
-
|
26
|
+
def test_init_module
|
27
|
+
|
28
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
29
|
+
|
30
|
+
assert_not_nil(wc, "WiKID module successfully loaded!")
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_check_keys
|
35
|
+
|
36
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
37
|
+
assert_nothing_raised do
|
38
|
+
|
39
|
+
wc.checkKeys()
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_invalid_user_registration
|
44
|
+
|
45
|
+
username = 'test'
|
46
|
+
domaincode = DOMAIN_CODE
|
47
|
+
|
48
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
49
|
+
|
50
|
+
regcode = ""
|
51
|
+
result = wc.registerUsername(username, regcode, domaincode)
|
52
|
+
assert_not_equal(0, result, "Properly failed to register user")
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_valid_user_registration
|
57
|
+
|
58
|
+
username = 'test-' + SecureRandom.uuid
|
59
|
+
domaincode = DOMAIN_CODE
|
60
|
+
|
61
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
62
|
+
|
63
|
+
output=`#{JCMD_REGISTER} #{DOMAIN_CODE}`
|
64
|
+
matches = /code=(\w+)/.match(output)
|
65
|
+
regcode = matches[1] || ''
|
66
|
+
result = wc.registerUsername(username, regcode, DOMAIN_CODE)
|
67
|
+
|
68
|
+
assert_equal(0, result, "Failed to register user")
|
69
|
+
|
70
|
+
# cleanup
|
71
|
+
wc.deleteUser(username, domaincode)
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_invalid_pin
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_valid_pin
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_find_user
|
84
|
+
|
85
|
+
username = 'test-' + SecureRandom.uuid
|
86
|
+
domaincode = DOMAIN_CODE
|
87
|
+
|
88
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
89
|
+
|
90
|
+
output=`#{JCMD_REGISTER} #{DOMAIN_CODE}`
|
91
|
+
matches = /code=(\w+)/.match(output)
|
92
|
+
regcode = matches[1] || ''
|
93
|
+
result = wc.registerUsername(username, regcode, DOMAIN_CODE)
|
94
|
+
|
95
|
+
user_xml = wc.findUser(username, domaincode)
|
96
|
+
|
97
|
+
user_id = XPath.first(user_xml, '//user-id/text()')
|
98
|
+
|
99
|
+
assert_equal(user_id, username, "Failed to lookup user")
|
100
|
+
|
101
|
+
# cleanup
|
102
|
+
wc.deleteUser(username, domaincode)
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
def test_update_user
|
108
|
+
|
109
|
+
username = 'test-' + SecureRandom.uuid
|
110
|
+
domaincode = DOMAIN_CODE
|
111
|
+
|
112
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
113
|
+
|
114
|
+
output=`#{JCMD_REGISTER} #{DOMAIN_CODE}`
|
115
|
+
matches = /code=(\w+)/.match(output)
|
116
|
+
regcode = matches[1] || ''
|
117
|
+
wc.registerUsername(username, regcode, DOMAIN_CODE)
|
118
|
+
|
119
|
+
## get the XML string to modify with
|
120
|
+
user_xml = wc.findUser(username, domaincode)
|
121
|
+
|
122
|
+
## 1. modify the number of bad attempts
|
123
|
+
attempts = XPath.first(user_xml, '//bad-passcode-attempts/text()')
|
124
|
+
assert_equal(0, attempts, "Number of bad attempts is aleady non-zero!")
|
125
|
+
|
126
|
+
user_xml.elements['bad-passcode-attempts'].text = 2
|
127
|
+
|
128
|
+
result = wc.updateUser(username, domaincode, user_xml)
|
129
|
+
assert_equal(true, result, "Failed to modify the number of bad attempts!")
|
130
|
+
|
131
|
+
user_xml = wc.findUser(username, domaincode)
|
132
|
+
attempts = XPath.first(user_xml, '//bad-passcode-attempts/text()')
|
133
|
+
assert_equal(2, attempts, "Failed to correctly set the the number of bad attempts!")
|
134
|
+
|
135
|
+
## 2. modify the user status
|
136
|
+
status = XPath.first(user_xml, '//status/text()')
|
137
|
+
assert_equal(1, status, "Status is already disabled!")
|
138
|
+
|
139
|
+
user_xml.elements['status'].text = 0
|
140
|
+
|
141
|
+
result = wc.updateUser(username, domaincode, user_xml)
|
142
|
+
assert_equal(true, result, "Failed to modify the status!")
|
143
|
+
|
144
|
+
user_xml = wc.findUser(username, domaincode)
|
145
|
+
status = XPath.first(user_xml, '//status/text()')
|
146
|
+
assert_equal(0, status, "Failed to modify the status value!")
|
147
|
+
|
148
|
+
## 3. modify the user note
|
149
|
+
note = XPath.first(user_xml, '//note/text()')
|
150
|
+
assert_equal('', note.to_s, "Note is already non-empty!")
|
151
|
+
|
152
|
+
new_note_text = "This is a test note"
|
153
|
+
user_xml.elements['note'].text = new_note_text
|
154
|
+
|
155
|
+
result = wc.updateUser(username, domaincode, user_xml)
|
156
|
+
assert_equal(true, result, "Failed to modify the note!")
|
157
|
+
|
158
|
+
user_xml = wc.findUser(username, domaincode)
|
159
|
+
note = XPath.first(user_xml, '//note/text()')
|
160
|
+
assert_equal(new_note_text, note.to_s, "Failed to modity the note value!")
|
161
|
+
|
162
|
+
# cleanup
|
163
|
+
wc.deleteUser(username, domaincode)
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_delete_unknown_user
|
168
|
+
|
169
|
+
username = 'junk-test-' + SecureRandom.uuid
|
170
|
+
domaincode = DOMAIN_CODE
|
171
|
+
|
172
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
173
|
+
|
174
|
+
result = wc.deleteUser(username, domaincode)
|
175
|
+
|
176
|
+
assert_equal(false, result, "Unable to delete unknown user")
|
177
|
+
|
178
|
+
# cleanup
|
179
|
+
wc.deleteUser(username, domaincode)
|
9
180
|
|
10
|
-
|
11
|
-
require 'rubygems'
|
12
|
-
loaded = 1
|
13
|
-
rescue Exception
|
14
|
-
# puts "WARNING: RubyGems not installed"
|
15
|
-
loaded = 0
|
16
|
-
end
|
17
|
-
assert(loaded == 1, "Unable to load RubyGems!")
|
181
|
+
end
|
18
182
|
|
19
|
-
|
20
|
-
# puts "Loaded RubyGems #{Gem::RubyGemsVersion} ..."
|
183
|
+
def test_delete_user
|
21
184
|
|
22
|
-
|
23
|
-
|
24
|
-
end
|
185
|
+
username = 'test-' + SecureRandom.uuid
|
186
|
+
domaincode = DOMAIN_CODE
|
25
187
|
|
26
|
-
|
188
|
+
wc = WiKID::Auth.new(SERVER_HOST, SERVER_PORT, CLIENT_KEY_FILE, CLIENT_KEY_PASS)
|
27
189
|
|
28
|
-
|
190
|
+
output=`#{JCMD_REGISTER} #{DOMAIN_CODE}`
|
191
|
+
matches = /code=(\w+)/.match(output)
|
192
|
+
regcode = matches[1] || ''
|
193
|
+
wc.registerUsername(username, regcode, DOMAIN_CODE)
|
29
194
|
|
30
|
-
|
31
|
-
require_gem 'WiKID'
|
32
|
-
loaded = 1
|
33
|
-
rescue
|
34
|
-
loaded = 0
|
35
|
-
end
|
36
|
-
assert(loaded == 1, "Unable to load WiKID module!")
|
195
|
+
result = wc.deleteUser(username, domaincode)
|
37
196
|
|
38
|
-
|
197
|
+
assert_equal(true, result, "Failed to delete user")
|
39
198
|
|
40
|
-
|
199
|
+
user_xml = wc.findUser(username, domaincode)
|
41
200
|
|
42
|
-
|
43
|
-
server_port = -1
|
44
|
-
client_key_file = "/path/to/nowhere.pem"
|
45
|
-
client_key_pass = "changeme"
|
201
|
+
assert_nil(user_xml, "User not deleted")
|
46
202
|
|
47
|
-
|
48
|
-
assert_not_nil(wc, "WiKID module successfully loaded!")
|
203
|
+
end
|
49
204
|
|
50
|
-
end
|
51
205
|
|
52
206
|
end
|
metadata
CHANGED
@@ -1,60 +1,85 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: WiKID
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.2.3
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Greg Haygood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
date: 2015-02-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
16
41
|
description:
|
17
|
-
email:
|
42
|
+
email:
|
43
|
+
- ghaygood@wikidsystems.com
|
18
44
|
executables: []
|
19
|
-
|
20
45
|
extensions: []
|
21
|
-
|
22
|
-
|
23
|
-
- doc/
|
24
|
-
files:
|
25
|
-
- lib/WiKID.rb
|
26
|
-
- doc/example
|
27
|
-
- doc/rubygems-0.8.11.security-patch.diff
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- doc/LICENSE.txt
|
28
49
|
- doc/MANIFEST
|
29
50
|
- doc/README
|
30
|
-
- doc/
|
31
|
-
-
|
51
|
+
- doc/rubygems-0.8.11.security-patch.diff
|
52
|
+
- lib/WiKID.rb
|
53
|
+
- lib/WiKID_version.rb
|
54
|
+
- share/data/WiKID-ca.pem
|
55
|
+
- test-options-dist.rb
|
56
|
+
- test/ts_load_wikid.rb
|
32
57
|
- test/ts_wikid.rb
|
33
|
-
|
34
|
-
|
58
|
+
homepage: https://rubygems.org/gems/WiKID
|
59
|
+
licenses:
|
60
|
+
- LGPL
|
61
|
+
metadata: {}
|
35
62
|
post_install_message:
|
36
63
|
rdoc_options: []
|
37
|
-
|
38
|
-
require_paths:
|
64
|
+
require_paths:
|
39
65
|
- lib
|
40
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version:
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
version: "0"
|
51
|
-
version:
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.9.3
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
52
76
|
requirements: []
|
53
|
-
|
54
|
-
|
55
|
-
rubygems_version: 1.1.0
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.4.1
|
56
79
|
signing_key:
|
57
|
-
specification_version:
|
80
|
+
specification_version: 4
|
58
81
|
summary: A network client module for the WiKID Strong Authentication system
|
59
|
-
test_files:
|
60
|
-
|
82
|
+
test_files:
|
83
|
+
- test/ts_load_wikid.rb
|
84
|
+
- test/ts_wikid.rb
|
85
|
+
has_rdoc:
|