devise-radius-authenticatable 0.0.2 → 0.0.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.
@@ -1,2 +1,8 @@
1
1
  require 'devise/radius_authenticatable'
2
2
 
3
+ module Devise
4
+ module RadiusAuthenticatable
5
+ autoload :TestHelpers, 'devise/radius_authenticatable/test_helpers'
6
+ end
7
+ end
8
+
@@ -0,0 +1,126 @@
1
+ require 'singleton'
2
+
3
+ module Devise
4
+ module RadiusAuthenticatable
5
+ # The Devise::RadiusAuthenticatable::TestHelpers module provides a very simple stub
6
+ # server through the RadiusServer class. It modifies the Radiustar::Request.new
7
+ # method to create a request in the stub server that can be used to check that the
8
+ # proper information is passed to the radius server. It also modifies the
9
+ # Radiustar::Request#authenticate method to perform authentication against the stub
10
+ # server.
11
+ #
12
+ # The RadiusServer class offers a simple interface for creating users prior to your
13
+ # tests. The create_radius_user method allows for the creation of a radius user
14
+ # within the stub server. The radius_server method provides the RadiusServer instance
15
+ # that test assertions can be performed against.
16
+ #
17
+ # The stub server is a singleton class to provide easy access. This means that it
18
+ # needs to have all state cleared out between tests. The clear_radius_users and
19
+ # clear_radius_request methods offer an easy way to clear the user and request info
20
+ # out of the server between tests.
21
+ module TestHelpers
22
+ def radius_server
23
+ RadiusServer.instance
24
+ end
25
+
26
+ def create_radius_user(username, password, attributes = {})
27
+ RadiusServer.instance.add_user(username, password, attributes)
28
+ end
29
+
30
+ def clear_radius_users
31
+ RadiusServer.instance.clear_users
32
+ end
33
+
34
+ def clear_radius_request
35
+ RadiusServer.instance.clear_request
36
+ end
37
+
38
+ # Stub RadiusServer that allows testing of radius authentication without a real
39
+ # server.
40
+ class RadiusServer
41
+ include Singleton
42
+
43
+ attr_reader :url, :options
44
+
45
+ def initialize
46
+ clear_users
47
+ clear_request
48
+ end
49
+
50
+ # Stores the information about the radius request that would have been sent to
51
+ # the radius server. This information can be queried to determine that the
52
+ # proper information is being sent.
53
+ def create_request(url, options)
54
+ @url = url
55
+ @options = options
56
+ end
57
+
58
+ # Clear the request information that is stored.
59
+ def clear_request
60
+ @url = nil
61
+ @options = nil
62
+ end
63
+
64
+ # Add a user to the radius server to use for authentication purposes. A couple
65
+ # of default attributes will be returned in the auth response if no attributes
66
+ # are supplied when creating the user.
67
+ def add_user(username, password, attributes = {})
68
+ @users[username] = {}
69
+ @users[username][:password] = password
70
+ if attributes.empty?
71
+ @users[username][:attributes] = {
72
+ 'User-Name' => username,
73
+ 'Filter-Id' => 60
74
+ }
75
+ else
76
+ @users[username][:attributes] = attributes
77
+ end
78
+ end
79
+
80
+ # Clear the users that have been configured for the radius server.
81
+ def clear_users
82
+ @users = {}
83
+ end
84
+
85
+ # Accessor to retrieve the attributes configured for the specified user.
86
+ def attributes(username)
87
+ @users[username][:attributes]
88
+ end
89
+
90
+ # Called to perform authentication using the specified username and password. If
91
+ # the authentication is successful, an Access-Accept is returned along with the
92
+ # radius attributes configured for the user. If authentication fails, an
93
+ # Access-Reject is returned.
94
+ def authenticate(username, password)
95
+ if @users[username] && @users[username][:password] == password
96
+ { :code => 'Access-Accept' }.merge(@users[username][:attributes])
97
+ else
98
+ { :code => 'Access-Reject' }
99
+ end
100
+ end
101
+ end
102
+
103
+ def self.included(mod)
104
+ Radiustar::Request.class_eval do
105
+ def initialize(url, options = {})
106
+ Devise::RadiusAuthenticatable::TestHelpers::RadiusServer.instance.
107
+ create_request(url, options)
108
+ end
109
+
110
+ def authenticate(username, password, secret)
111
+ Devise::RadiusAuthenticatable::TestHelpers::RadiusServer.instance.
112
+ authenticate(username, password)
113
+ end
114
+ end
115
+
116
+ if mod.respond_to?(:after)
117
+ mod.after(:each) do
118
+ Devise::RadiusAuthenticatable::TestHelpers::RadiusServer.instance.
119
+ clear_request
120
+ Devise::RadiusAuthenticatable::TestHelpers::RadiusServer.instance.clear_users
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module RadiusAuthenticatable
3
- VERSION = "0.0.2".freeze
3
+ VERSION = "0.0.3".freeze
4
4
  end
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -22,4 +22,6 @@ RSpec.configure do |config|
22
22
  config.run_all_when_everything_filtered = true
23
23
  config.filter_run :focus
24
24
  config.order = 'random'
25
+
26
+ config.include Devise::RadiusAuthenticatable::TestHelpers
25
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-radius-authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-21 00:00:00.000000000 Z
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: devise
@@ -225,6 +225,7 @@ files:
225
225
  - lib/devise-radius-authenticatable.rb
226
226
  - lib/devise/models/radius_authenticatable.rb
227
227
  - lib/devise/radius_authenticatable.rb
228
+ - lib/devise/radius_authenticatable/test_helpers.rb
228
229
  - lib/devise/radius_authenticatable/version.rb
229
230
  - lib/devise/strategies/radius_authenticatable.rb
230
231
  - lib/generators/devise_radius_authenticatable/install_generator.rb
@@ -294,7 +295,6 @@ files:
294
295
  - spec/spec_helper.rb
295
296
  - spec/support/devise_helpers.rb
296
297
  - spec/support/generator_helpers.rb
297
- - spec/support/radius_helpers.rb
298
298
  homepage: http://github.com/cbascom/devise-radius-authenticatable
299
299
  licenses: []
300
300
  post_install_message:
@@ -386,4 +386,3 @@ test_files:
386
386
  - spec/spec_helper.rb
387
387
  - spec/support/devise_helpers.rb
388
388
  - spec/support/generator_helpers.rb
389
- - spec/support/radius_helpers.rb
@@ -1,84 +0,0 @@
1
- class Radiustar::Request
2
- def initialize(url, options = {})
3
- RadiusServer.instance.create_request(url, options)
4
- end
5
-
6
- def authenticate(username, password, secret)
7
- RadiusServer.instance.authenticate(username, password)
8
- end
9
- end
10
-
11
- class RadiusServer
12
- attr_reader :url, :options
13
-
14
- def self.instance
15
- @@server ||= new
16
- end
17
-
18
- def initialize
19
- clear_users
20
- clear_request
21
- end
22
-
23
- def create_request(url, options)
24
- @url = url
25
- @options = options
26
- end
27
-
28
- def clear_request
29
- @url = nil
30
- @options = nil
31
- end
32
-
33
- def add_user(username, password, attributes = {})
34
- @users[username] = {}
35
- @users[username][:password] = password
36
- if attributes.empty?
37
- @users[username][:attributes] = {
38
- 'User-Name' => username,
39
- 'Filter-Id' => 60
40
- }
41
- else
42
- @users[username][:attributes] = attributes
43
- end
44
- end
45
-
46
- def clear_users
47
- @users = {}
48
- end
49
-
50
- def attributes(username)
51
- @users[username][:attributes]
52
- end
53
-
54
- def authenticate(username, password)
55
- if @users[username] && @users[username][:password] == password
56
- { :code => 'Access-Accept' }.merge(@users[username][:attributes])
57
- else
58
- { :code => 'Access-Reject' }
59
- end
60
- end
61
- end
62
-
63
- module RadiusHelpers
64
- def radius_server
65
- RadiusServer.instance
66
- end
67
-
68
- def create_radius_user(username, password, attributes = {})
69
- RadiusServer.instance.add_user(username, password, attributes)
70
- end
71
-
72
- def clear_radius_users
73
- RadiusServer.instance.clear_users
74
- end
75
- end
76
-
77
- RSpec::configure do |c|
78
- c.include RadiusHelpers
79
-
80
- c.after(:each) do
81
- RadiusServer.instance.clear_request
82
- RadiusServer.instance.clear_users
83
- end
84
- end