tuwien_logon 0.1.1 → 0.2.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.
- data/VERSION +1 -1
- data/lib/tuwien_logon/configuration.rb +3 -1
- data/test/test_authentication.rb +101 -0
- data/tuwien_logon.gemspec +3 -2
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -4,13 +4,15 @@ module TuwienLogon
|
|
4
4
|
class Configuration
|
5
5
|
include Singleton
|
6
6
|
|
7
|
-
attr_accessor :authentication_url, :user_info_url, :secret, :user_info_params
|
7
|
+
attr_accessor :authentication_url, :user_info_url, :secret, :user_info_params, :time_tolerance, :server_time_offset
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@authentication_url = 'https://iu.zid.tuwien.ac.at/AuthServ.authenticate'
|
11
11
|
@user_info_url = 'https://iu.zid.tuwien.ac.at/AuthServ.userInfo'
|
12
12
|
@secret = '123456'
|
13
13
|
@user_info_params = [:oid, :firstname, :lastname, :title, :matriculation_number, :institute_symbol]
|
14
|
+
@time_tolerance = 5
|
15
|
+
@server_time_offset = 0
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'tuwien_logon/authentication'
|
3
|
+
|
4
|
+
class TestAuthentication < Test::Unit::TestCase
|
5
|
+
include TuwienLogon::Authentication
|
6
|
+
|
7
|
+
context 'The authentication' do
|
8
|
+
setup do
|
9
|
+
@time = Time.now
|
10
|
+
@authentication = Authentication.new 1, 'client', 'secret', 0, @time
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'generate the correct skey' do
|
14
|
+
assert_equal correct_key(@authentication, @time), @authentication.skey
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'generate the incorrect skey' do
|
18
|
+
key = Digest::SHA1.hexdigest("1clientsecret")
|
19
|
+
|
20
|
+
assert_not_equal key, @authentication.skey
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'generate the correct skey with time offset' do
|
24
|
+
offset = 10
|
25
|
+
assert_equal correct_key(@authentication, @time + offset * 10), @authentication.skey(offset)
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'generate the incorrect skey with wrong time offset' do
|
29
|
+
assert_not_equal correct_key(@authentication, @time + 1000), @authentication.skey(10)
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'validate a correct key' do
|
33
|
+
assert @authentication.valid? correct_key(@authentication, @time)
|
34
|
+
end
|
35
|
+
|
36
|
+
should 'not validate an incorrect key' do
|
37
|
+
assert !(@authentication.valid? correct_key(@authentication, @time + 10))
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'validate a correct key with tolerance' do
|
41
|
+
@authentication.tolerance = 5
|
42
|
+
assert @authentication.valid? correct_key(@authentication, @time + 50)
|
43
|
+
assert @authentication.valid? correct_key(@authentication, @time - 50)
|
44
|
+
end
|
45
|
+
|
46
|
+
should 'not validate a key out of tolerance' do
|
47
|
+
@authentication.tolerance = 5
|
48
|
+
assert !(@authentication.valid? correct_key(@authentication, @time + 100))
|
49
|
+
assert !(@authentication.valid? correct_key(@authentication, @time - 100))
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'method' do
|
53
|
+
should 'raise an exception if there are not all required arguments' do
|
54
|
+
[:user_id, :host, :skey].each do |param|
|
55
|
+
hash = authentication_hash(@authentication)
|
56
|
+
hash.delete param
|
57
|
+
assert_raise(RuntimeError) { authenticated? hash }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
should 'authenticate a valid user' do
|
62
|
+
assert authenticated? authentication_hash(@authentication)
|
63
|
+
end
|
64
|
+
|
65
|
+
should 'not authenticate an invalid user' do
|
66
|
+
hash = authentication_hash(@authentication)
|
67
|
+
hash[:user_id] = 2
|
68
|
+
|
69
|
+
assert !(authenticated? hash)
|
70
|
+
end
|
71
|
+
|
72
|
+
should 'authenticate a user with time offset' do
|
73
|
+
hash = authentication_hash(@authentication)
|
74
|
+
hash[:server_time_offset] = 1000
|
75
|
+
hash[:time] = Time.now - 1000
|
76
|
+
|
77
|
+
assert authenticated? hash
|
78
|
+
end
|
79
|
+
|
80
|
+
should 'not authenticate a user with wrong time offset' do
|
81
|
+
hash = authentication_hash(@authentication)
|
82
|
+
hash[:server_time_offset] = 1000
|
83
|
+
|
84
|
+
assert !(authenticated? hash)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def correct_key(authentication, time)
|
90
|
+
Digest::SHA1.hexdigest("#{authentication.user_id}#{time.to_i / 10}#{authentication.client_host_name}#{authentication.secret}")
|
91
|
+
end
|
92
|
+
|
93
|
+
def authentication_hash(authentication)
|
94
|
+
{
|
95
|
+
:user_id => @authentication.user_id,
|
96
|
+
:host => @authentication.client_host_name,
|
97
|
+
:skey => correct_key(@authentication, @time),
|
98
|
+
:secret => @authentication.secret
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
data/tuwien_logon.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tuwien_logon}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Clemens Helm"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-21}
|
13
13
|
s.description = %q{Provides an authentication solution for ruby applications being used at the Vienna University of Technology}
|
14
14
|
s.email = %q{clemens.helm@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.summary = %q{Ruby client for Vienna UT authentication service}
|
41
41
|
s.test_files = [
|
42
42
|
"test/helper.rb",
|
43
|
+
"test/test_authentication.rb",
|
43
44
|
"test/test_tuwien_logon.rb",
|
44
45
|
"test/test_user_info.rb",
|
45
46
|
"test/test_user_info_request.rb"
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Clemens Helm
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-21 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -86,6 +86,7 @@ specification_version: 3
|
|
86
86
|
summary: Ruby client for Vienna UT authentication service
|
87
87
|
test_files:
|
88
88
|
- test/helper.rb
|
89
|
+
- test/test_authentication.rb
|
89
90
|
- test/test_tuwien_logon.rb
|
90
91
|
- test/test_user_info.rb
|
91
92
|
- test/test_user_info_request.rb
|