devise-radius-authenticatable 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -36,14 +36,15 @@ This will update the devise.rb initializer. The IP and SECRET parameters specify
36
36
 
37
37
  Options:
38
38
 
39
- [--uid-field=UID_FIELD] # What database column to use for the UID
40
- # Default: uid
41
- [--port=PORT] # The port to connect to the radius server on
42
- # Default: 1812
43
- [--timeout=TIMEOUT] # How long to wait for a response from the radius server
44
- # Default: 60
45
- [--retries=RETRIES] # How many times to retry a radius request
46
- # Default: 0
39
+ [--uid-field=UID_FIELD] # What database column to use for the UID
40
+ # Default: uid
41
+ [--port=PORT] # The port to connect to the radius server on
42
+ # Default: 1812
43
+ [--timeout=TIMEOUT] # How long to wait for a response from the radius server
44
+ # Default: 60
45
+ [--retries=RETRIES] # How many times to retry a radius request
46
+ # Default: 0
47
+ [--dictionary-path=DICTIONARY_PATH] # The path to load radius dictionary files from
47
48
 
48
49
  Documentation
49
50
  -------------
@@ -78,6 +79,4 @@ References
78
79
  * [Devise](http://github.com/plataformatec/devise)
79
80
  * [Warden](http://github.com/hassox/warden)
80
81
 
81
- Released under the MIT license
82
-
83
- Copyright (c) 2012 Calvin Bascom
82
+ Copyright (c) 2012 Calvin Bascom Released under the MIT license
@@ -35,6 +35,7 @@ module Devise
35
35
  # * +radius_uid_field+: The database column to store the UID in
36
36
  # * +radius_uid_generator+: A proc that takes the username and server as parameters
37
37
  # and returns a string representing the UID
38
+ # * +radius_dictionary_path+: The path containing the radius dictionary files to load
38
39
  #
39
40
  # == Callbacks
40
41
  #
@@ -68,6 +69,9 @@ module Devise
68
69
  :reply_timeout => self.class.radius_server_timeout,
69
70
  :retries_number => self.class.radius_server_retries
70
71
  }
72
+ if self.class.radius_dictionary_path
73
+ options[:dict] = Radiustar::Dictionary.new(self.class.radius_dictionary_path)
74
+ end
71
75
 
72
76
  req = Radiustar::Request.new("#{server}:#{port}", options)
73
77
  reply = req.authenticate(username, password, secret)
@@ -94,7 +98,7 @@ module Devise
94
98
  Devise::Models.config(self, :radius_server, :radius_server_port,
95
99
  :radius_server_secret, :radius_server_timeout,
96
100
  :radius_server_retries, :radius_uid_field,
97
- :radius_uid_generator)
101
+ :radius_uid_generator, :radius_dictionary_path)
98
102
 
99
103
  # Invoked by the RadiusAuthenticatable stratgey to perform the authentication
100
104
  # against the radius server. The username is extracted from the authentication
@@ -26,6 +26,9 @@ module Devise
26
26
  # The procedure to use to build the unique identifier for the radius user
27
27
  mattr_accessor :radius_uid_generator
28
28
  @@radius_uid_generator = Proc.new { |username, server| "#{username}@#{server}" }
29
+
30
+ # The path to load radius dictionary files from
31
+ mattr_accessor :radius_dictionary_path
29
32
  end
30
33
 
31
34
  Devise.add_module(:radius_authenticatable, :route => :session, :strategy => true,
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module RadiusAuthenticatable
3
- VERSION = "0.0.1".freeze
3
+ VERSION = "0.0.2".freeze
4
4
  end
5
5
  end
@@ -22,6 +22,8 @@ module DeviseRadiusAuthenticatable
22
22
  :desc => 'How long to wait for a response from the radius server')
23
23
  class_option(:retries, :default => 0,
24
24
  :desc => 'How many times to retry a radius request')
25
+ class_option(:dictionary_path, :default => nil,
26
+ :desc => 'The path to load radius dictionary files from')
25
27
 
26
28
  def install
27
29
  inject_into_file("config/initializers/devise.rb", default_devise_settings,
@@ -72,6 +74,13 @@ module DeviseRadiusAuthenticatable
72
74
  # config.radius_uid_generator = Proc.new do |username, server|
73
75
  # "\#{username}@\#{server}"
74
76
  # end
77
+
78
+ # There is a very basic radius dictionary provided by default. Most of the time
79
+ # this will not be sufficient, so this configuration option allows you to
80
+ # specify the path that contains all of the radius dictionary files that should
81
+ # be loaded.
82
+ #
83
+ # config.radius_dictionary_path = '#{options[:dictionary_path]}'
75
84
  CONFIG
76
85
  end
77
86
  end
@@ -7,7 +7,8 @@ class Configurable < Admin
7
7
  :radius_uid_field => :email,
8
8
  :radius_uid_generator => Proc.new { |username, server|
9
9
  "#{username}_#{server}"
10
- })
10
+ },
11
+ :radius_dictionary_path => Rails.root.join('config/dictionaries'))
11
12
  end
12
13
 
13
14
  describe Devise::Models::RadiusAuthenticatable do
@@ -41,6 +42,10 @@ describe Devise::Models::RadiusAuthenticatable do
41
42
  Configurable.radius_uid_generator.call('test', '1.2.3.4').should == 'test_1.2.3.4'
42
43
  end
43
44
 
45
+ it "allows configuration of the radius dictionary path" do
46
+ Configurable.radius_dictionary_path.should == Rails.root.join('config/dictionaries')
47
+ end
48
+
44
49
  it "extracts radius credentials based on the configured authentication keys" do
45
50
  swap(Devise, :authentication_keys => [:username, :domain]) do
46
51
  auth_hash = { :username => 'cbascom', :password => 'testing' }
@@ -110,14 +115,19 @@ describe Devise::Models::RadiusAuthenticatable do
110
115
 
111
116
  it "passes the configured options when building the radius request" do
112
117
  server_url = "#{Admin.radius_server}:#{Admin.radius_server_port}"
113
- server_options = {
114
- :reply_timeout => Admin.radius_server_timeout,
115
- :retries_number => Admin.radius_server_retries
116
- }
117
118
  @admin.valid_radius_password?('testuser', 'password')
118
119
 
119
120
  radius_server.url.should == server_url
120
- radius_server.options.should == server_options
121
+ radius_server.options[:reply_timeout].should == Admin.radius_server_timeout
122
+ radius_server.options[:retries_number].should == Admin.radius_server_retries
123
+ radius_server.options[:dict].should be_a(Radiustar::Dictionary)
124
+ end
125
+
126
+ it "does not add the :dict option if no dictionary path is configured" do
127
+ swap(Admin, :radius_dictionary_path => nil) do
128
+ @admin.valid_radius_password?('testuser', 'password')
129
+ radius_server.options.should_not have_key(:dict)
130
+ end
121
131
  end
122
132
 
123
133
  it "returns false when the password is incorrect" do
@@ -27,11 +27,13 @@ describe DeviseRadiusAuthenticatable::InstallGenerator do
27
27
  it { should contain("config.radius_server_retries = 0") }
28
28
  it { should contain("config.radius_uid_field = :uid") }
29
29
  it { should contain("config.radius_uid_generator =") }
30
+ it { should contain("config.radius_dictionary_path =") }
30
31
  end
31
32
 
32
33
  context "with custom options" do
33
34
  before { run_generator ['1.1.1.2', 'password', '--port=1813', '--timeout=120',
34
- '--retries=3', '--uid_field=email'] }
35
+ '--retries=3', '--uid_field=email',
36
+ '--dictionary_path=/tmp/dictionaries'] }
35
37
 
36
38
  it { should contain('==> Configuration for radius_authenticatable') }
37
39
  it { should contain("config.radius_server = '1.1.1.2'") }
@@ -41,6 +43,7 @@ describe DeviseRadiusAuthenticatable::InstallGenerator do
41
43
  it { should contain("config.radius_server_retries = 3") }
42
44
  it { should contain("config.radius_uid_field = :email") }
43
45
  it { should contain("config.radius_uid_generator =") }
46
+ it { should contain("config.radius_dictionary_path = '/tmp/dictionaries'") }
44
47
  end
45
48
  end
46
49
  end
@@ -214,6 +214,13 @@ Devise.setup do |config|
214
214
  # "#{username}@#{server}"
215
215
  # end
216
216
 
217
+ # There is a very basic radius dictionary provided by default. Most of the time
218
+ # this will not be sufficient, so this configuration option allows you to
219
+ # specify the path that contains all of the radius dictionary files that should
220
+ # be loaded.
221
+ #
222
+ config.radius_dictionary_path = Rails.root.join('config/dictionaries')
223
+
217
224
  # ==> Scopes configuration
218
225
  # Turn scoped views on. Before rendering "sessions/new", it will first check for
219
226
  # "users/sessions/new". It's turned off by default because it's slower if you
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.1
4
+ version: 0.0.2
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-05 00:00:00.000000000 Z
12
+ date: 2012-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: devise