rubius2 0.1.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.
- checksums.yaml +7 -0
- data/.autotest +12 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +66 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/lib/generators/rubius/install_generator.rb +11 -0
- data/lib/generators/rubius/templates/radius-dictionary +892 -0
- data/lib/generators/rubius/templates/rubius.yml +13 -0
- data/lib/generators/rubius/templates/rubius_initializer.rb +2 -0
- data/lib/rubius.rb +7 -0
- data/lib/rubius/authenticator.rb +112 -0
- data/lib/rubius/dictionary.rb +86 -0
- data/lib/rubius/exceptions.rb +6 -0
- data/lib/rubius/packet.rb +156 -0
- data/lib/rubius/rails.rb +18 -0
- data/lib/rubius/string.rb +14 -0
- data/rubius.gemspec +87 -0
- data/test/helper.rb +98 -0
- data/test/test_authenticator.rb +84 -0
- data/test/test_dictionary.rb +68 -0
- data/test/test_rails.rb +62 -0
- data/test/test_string.rb +40 -0
- metadata +171 -0
data/test/helper.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'test/unit'
|
13
|
+
require 'shoulda'
|
14
|
+
require 'mocha'
|
15
|
+
|
16
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
17
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
18
|
+
require 'rubius'
|
19
|
+
|
20
|
+
class Test::Unit::TestCase
|
21
|
+
end
|
22
|
+
|
23
|
+
RADIUS_DICTIONARY = [
|
24
|
+
"# -*- text -*-",
|
25
|
+
"#",
|
26
|
+
"# Attributes and values defined in RFC 2865.",
|
27
|
+
"ATTRIBUTE User-Name 1 string",
|
28
|
+
"ATTRIBUTE User-Password 2 string encrypt=1",
|
29
|
+
"ATTRIBUTE Service-Type 6 integer",
|
30
|
+
"",
|
31
|
+
"# Values",
|
32
|
+
"VALUE Service-Type Login-User 1",
|
33
|
+
"VALUE Service-Type Framed-User 2",
|
34
|
+
"VALUE Service-Type Callback-Login-User 3",
|
35
|
+
"",
|
36
|
+
"# -*- text -*-",
|
37
|
+
"#",
|
38
|
+
"# dictionary.cisco",
|
39
|
+
"VENDOR Cisco 9",
|
40
|
+
"",
|
41
|
+
"BEGIN-VENDOR Cisco",
|
42
|
+
"",
|
43
|
+
"ATTRIBUTE Cisco-AVPair 1 string",
|
44
|
+
"ATTRIBUTE Cisco-NAS-Port 2 string",
|
45
|
+
"ATTRIBUTE Cisco-Disconnect-Cause 195 integer",
|
46
|
+
"",
|
47
|
+
"VALUE Cisco-Disconnect-Cause Unknown 2",
|
48
|
+
"VALUE Cisco-Disconnect-Cause CLID-Authentication-Failure 4",
|
49
|
+
"#",
|
50
|
+
"",
|
51
|
+
"VENDOR Juniper 2636",
|
52
|
+
"",
|
53
|
+
"BEGIN-VENDOR Juniper",
|
54
|
+
"",
|
55
|
+
"ATTRIBUTE Juniper-Local-User-Name 1 string"
|
56
|
+
]
|
57
|
+
|
58
|
+
DICT_BROKEN_VENDOR = [
|
59
|
+
"# broken vendor line follows (missing id):",
|
60
|
+
"VENDOR Microsoft",
|
61
|
+
"",
|
62
|
+
"ATTRIBUTE Not-Included 8344 string",
|
63
|
+
"",
|
64
|
+
"# non-broken vendor:",
|
65
|
+
"VENDOR Apple 25",
|
66
|
+
"ATTRIBUTE Is-Cool 1337 integer",
|
67
|
+
"",
|
68
|
+
"VENDOR NoId id"
|
69
|
+
]
|
70
|
+
|
71
|
+
DICT_BROKEN_ATTR = [
|
72
|
+
"# broken attribute line:",
|
73
|
+
"VENDOR IBM 123",
|
74
|
+
"",
|
75
|
+
"ATTRIBUTE IBM-Attr-Included 5137 string",
|
76
|
+
"ATTRIBUTE IBM-Attr-NotIncluded 5138",
|
77
|
+
"ATTRIBUTE IBM-Attr-NotIncluded2 asdf integer",
|
78
|
+
"ATTRIBUTE IBM-Attr-Included2 5139 string",
|
79
|
+
""
|
80
|
+
]
|
81
|
+
|
82
|
+
CONFIG_FILE = {
|
83
|
+
'development' => {
|
84
|
+
'host' => '127.0.0.1',
|
85
|
+
'port' => 1812,
|
86
|
+
'timeout' => 10,
|
87
|
+
'secret' => 'development-secret',
|
88
|
+
'dictionary' => 'radius-dictionary'
|
89
|
+
},
|
90
|
+
'production' => {
|
91
|
+
'host' => '10.1.0.254',
|
92
|
+
'port' => 1812,
|
93
|
+
'timeout' => 10,
|
94
|
+
'secret' => 'production-secret',
|
95
|
+
'dictionary' => 'radius-dictionary',
|
96
|
+
'nas_ip' => '10.1.0.1'
|
97
|
+
}
|
98
|
+
}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestAuthenticator < Test::Unit::TestCase
|
4
|
+
context "A Rubius::Authenticator instance" do
|
5
|
+
setup do
|
6
|
+
Process.stubs(:pid).returns(93354)
|
7
|
+
|
8
|
+
UDPSocket.any_instance
|
9
|
+
UDPSocket.any_instance.stubs(:addr).returns(["AF_INET", 65194, "10.1.0.45", "10.1.0.45"])
|
10
|
+
|
11
|
+
@authenticator = Rubius::Authenticator.instance
|
12
|
+
end
|
13
|
+
|
14
|
+
should "generate an identifier" do
|
15
|
+
assert_equal 170, @authenticator.instance_eval { @identifier }
|
16
|
+
end
|
17
|
+
|
18
|
+
should "increment the identifier" do
|
19
|
+
identifier = @authenticator.instance_eval { @identifier }
|
20
|
+
identifier += 1
|
21
|
+
|
22
|
+
assert @authenticator.instance_eval { increment_identifier! }
|
23
|
+
|
24
|
+
assert_equal identifier, @authenticator.instance_eval { @identifier }
|
25
|
+
end
|
26
|
+
|
27
|
+
should "overflow the identifier beyond 255" do
|
28
|
+
@authenticator.instance_eval { @identifier = 254 }
|
29
|
+
assert_equal 254, @authenticator.instance_eval { @identifier }
|
30
|
+
|
31
|
+
assert @authenticator.instance_eval { increment_identifier! }
|
32
|
+
assert_equal 255, @authenticator.instance_eval { @identifier }
|
33
|
+
|
34
|
+
assert @authenticator.instance_eval { increment_identifier! }
|
35
|
+
assert_equal 0, @authenticator.instance_eval { @identifier }
|
36
|
+
|
37
|
+
assert @authenticator.instance_eval { increment_identifier! }
|
38
|
+
assert_equal 1, @authenticator.instance_eval { @identifier }
|
39
|
+
end
|
40
|
+
|
41
|
+
context "supplied with a configuration file" do
|
42
|
+
should "read and parse the configuration file" do
|
43
|
+
YAML.stubs(:load_file).returns(CONFIG_FILE)
|
44
|
+
|
45
|
+
@authenticator.init_from_config("rubius.yml", 'development')
|
46
|
+
assert_equal 'development-secret', @authenticator.instance_eval { @secret }
|
47
|
+
end
|
48
|
+
|
49
|
+
should "use Rails.env if env is not passed and running in a Rails application" do
|
50
|
+
YAML.stubs(:load_file).returns(CONFIG_FILE)
|
51
|
+
::Rails.stubs(:env).returns('production')
|
52
|
+
|
53
|
+
@authenticator.init_from_config("rubius.yml")
|
54
|
+
assert_equal 'production-secret', @authenticator.instance_eval { @secret }
|
55
|
+
end
|
56
|
+
|
57
|
+
should "handle a non-existent config file" do
|
58
|
+
YAML.stubs(:load_file).raises(Errno::ENOENT)
|
59
|
+
::Rails.stubs(:env).returns('production')
|
60
|
+
|
61
|
+
assert_raises Rubius::MissingConfiguration do
|
62
|
+
@authenticator.init_from_config("/does/not/exist/rubius.yml")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
should "handle an empty config section" do
|
67
|
+
YAML.stubs(:load_file).returns(CONFIG_FILE)
|
68
|
+
::Rails.stubs(:env).returns('staging')
|
69
|
+
|
70
|
+
assert_raises Rubius::MissingEnvironmentConfiguration do
|
71
|
+
@authenticator.init_from_config("rubius.yml")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
should "setup a connection to the specified server" do
|
76
|
+
YAML.stubs(:load_file).returns(CONFIG_FILE)
|
77
|
+
::Rails.stubs(:env).returns('production')
|
78
|
+
UDPSocket.any_instance.stubs(:connect).with('10.1.0.254', 1812).returns(true)
|
79
|
+
|
80
|
+
assert @authenticator.init_from_config("rubius.yml")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestDictionary < Test::Unit::TestCase
|
4
|
+
context "A Rubius::Dictionary" do
|
5
|
+
setup do
|
6
|
+
@dictionary = Rubius::Dictionary.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "provided with a valid RADIUS dictionary file" do
|
10
|
+
setup do
|
11
|
+
IO.stubs(:readlines).returns(RADIUS_DICTIONARY)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "load and parse it" do
|
15
|
+
assert @dictionary.load("filename")
|
16
|
+
|
17
|
+
assert_equal "Cisco", @dictionary.vendor_name(9)
|
18
|
+
assert_equal "Juniper", @dictionary.vendor_name(2636)
|
19
|
+
|
20
|
+
assert_equal "Service-Type", @dictionary.attribute_name(6)
|
21
|
+
assert_equal "string", @dictionary.attribute_type(2, 9)
|
22
|
+
assert_equal 1, @dictionary.attribute_id("Juniper-Local-User-Name", 2636)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "provided with a non-existant RADIUS dictionary file" do
|
27
|
+
setup do
|
28
|
+
IO.stubs(:readlines).raises(Errno::ENOENT)
|
29
|
+
end
|
30
|
+
|
31
|
+
should "raise an exception" do
|
32
|
+
assert_raise Rubius::InvalidDictionaryError do
|
33
|
+
@dictionary.load("/no/existing/file")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "provided with a malformed RADIUS dictionary file" do
|
39
|
+
should "handle broken VENDOR lines" do
|
40
|
+
IO.stubs(:readlines).returns(RADIUS_DICTIONARY+DICT_BROKEN_VENDOR)
|
41
|
+
|
42
|
+
assert @dictionary.load("filename")
|
43
|
+
|
44
|
+
assert !@dictionary.vendors.include?("Microsoft")
|
45
|
+
assert_nil @dictionary.attribute_name(8344)
|
46
|
+
|
47
|
+
assert @dictionary.vendors.include?("Apple")
|
48
|
+
assert_equal "Is-Cool", @dictionary.attribute_name(1337, 25)
|
49
|
+
|
50
|
+
assert !@dictionary.vendors.include?("NoId")
|
51
|
+
end
|
52
|
+
|
53
|
+
should "handle broken ATTRIBUTE lines" do
|
54
|
+
IO.stubs(:readlines).returns(RADIUS_DICTIONARY+DICT_BROKEN_ATTR)
|
55
|
+
|
56
|
+
assert @dictionary.load("filename")
|
57
|
+
|
58
|
+
assert_equal 'IBM-Attr-Included', @dictionary.attribute_name(5137, 123)
|
59
|
+
assert_nil @dictionary.attribute_name(5138, 123)
|
60
|
+
assert_equal 'IBM-Attr-Included2', @dictionary.attribute_name(5139, 123)
|
61
|
+
end
|
62
|
+
|
63
|
+
should "handle broken VALUE lines" do
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/test/test_rails.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Rails; end
|
4
|
+
|
5
|
+
class TestRails < Test::Unit::TestCase
|
6
|
+
context "a Rubius::Rails.init call" do
|
7
|
+
context "in a standalone application" do
|
8
|
+
setup do
|
9
|
+
Object.instance_eval{ remove_const("Rails") } if defined?(::Rails)
|
10
|
+
end
|
11
|
+
|
12
|
+
context "without any parameters" do
|
13
|
+
should "try to load the config file at current_dir/config/rubius.yml with the 'development' environment" do
|
14
|
+
Rubius::Authenticator.any_instance.stubs(:init_from_config).with(File.join(FileUtils.pwd, 'config', 'rubius.yml'), 'development').returns(true)
|
15
|
+
assert Rubius::Rails.init
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "with path specified" do
|
20
|
+
should "try to load the config at the specified path with the 'development' environment" do
|
21
|
+
config_file = File.join('path', 'to', 'config')
|
22
|
+
|
23
|
+
Rubius::Authenticator.any_instance.stubs(:init_from_config).with(File.join(config_file, 'rubius.yml'), 'development').returns(true)
|
24
|
+
|
25
|
+
assert Rubius::Rails.init(config_file)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "in a Rails application" do
|
31
|
+
setup do
|
32
|
+
::Rails.stubs(:env).returns('stubbed')
|
33
|
+
::Rails.stubs(:root).returns('/home/rails')
|
34
|
+
end
|
35
|
+
|
36
|
+
should "use Rails path and environment" do
|
37
|
+
Rubius::Authenticator.any_instance.stubs(:init_from_config).with(File.join('/', 'home', 'rails', 'config', 'rubius.yml'), 'stubbed').returns(true)
|
38
|
+
assert Rubius::Rails.init
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with a non-existant configuration file" do
|
43
|
+
should "raise an exception" do
|
44
|
+
Rubius::Authenticator.any_instance.stubs(:init_from_config).raises(Rubius::MissingConfiguration)
|
45
|
+
|
46
|
+
assert_raises Rubius::MissingConfiguration do
|
47
|
+
Rubius::Rails.init('/bla')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with a configuration file thats missing the current environment" do
|
53
|
+
should "raise an exception" do
|
54
|
+
Rubius::Authenticator.any_instance.stubs(:init_from_config).raises(Rubius::MissingEnvironmentConfiguration)
|
55
|
+
|
56
|
+
assert_raises Rubius::MissingEnvironmentConfiguration do
|
57
|
+
Rubius::Rails.init('/bla')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/test/test_string.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestString < Test::Unit::TestCase
|
4
|
+
should "define a xor method" do
|
5
|
+
assert String.method_defined?(:xor)
|
6
|
+
end
|
7
|
+
|
8
|
+
should "return correct string when xor-ed with an empty string" do
|
9
|
+
str1 = "test string"
|
10
|
+
str2 = ""
|
11
|
+
|
12
|
+
result = str1.xor(str2)
|
13
|
+
assert_equal str1, result
|
14
|
+
|
15
|
+
result2 = result.xor(str2)
|
16
|
+
assert_equal str1, result2
|
17
|
+
end
|
18
|
+
|
19
|
+
should "return correct string when xor-ed with a longer string" do
|
20
|
+
str1 = "test string"
|
21
|
+
str2 = "longer test string"
|
22
|
+
|
23
|
+
result = str1.xor(str2)
|
24
|
+
assert_equal "\x18\n\x1D\x13E\x01T\x06\f\x1D\x13", result
|
25
|
+
|
26
|
+
result2 = result.xor(str2)
|
27
|
+
assert_equal str1, result2
|
28
|
+
end
|
29
|
+
|
30
|
+
should "return correct string when xor-ed with a shorter string" do
|
31
|
+
str1 = "test string"
|
32
|
+
str2 = "short s"
|
33
|
+
|
34
|
+
result = str1.xor(str2)
|
35
|
+
assert_equal "\a\r\x1C\x06TS\a\x01\x01\x01\x15", result
|
36
|
+
|
37
|
+
result2 = result.xor(str2)
|
38
|
+
assert_equal str1, result2
|
39
|
+
end
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubius2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ralph Rooding
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: shoulda
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jeweler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.5.2
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.5.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rcov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.4.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.4.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: autotest-standalone
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.5.5
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 4.5.5
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.9.12
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.9.12
|
111
|
+
description: Rubius provides a simple interface to RADIUS authentication
|
112
|
+
email: ralph@izerion.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files:
|
116
|
+
- LICENSE.txt
|
117
|
+
- README.rdoc
|
118
|
+
files:
|
119
|
+
- ".autotest"
|
120
|
+
- Gemfile
|
121
|
+
- LICENSE.txt
|
122
|
+
- README.rdoc
|
123
|
+
- Rakefile
|
124
|
+
- VERSION
|
125
|
+
- lib/generators/rubius/install_generator.rb
|
126
|
+
- lib/generators/rubius/templates/radius-dictionary
|
127
|
+
- lib/generators/rubius/templates/rubius.yml
|
128
|
+
- lib/generators/rubius/templates/rubius_initializer.rb
|
129
|
+
- lib/rubius.rb
|
130
|
+
- lib/rubius/authenticator.rb
|
131
|
+
- lib/rubius/dictionary.rb
|
132
|
+
- lib/rubius/exceptions.rb
|
133
|
+
- lib/rubius/packet.rb
|
134
|
+
- lib/rubius/rails.rb
|
135
|
+
- lib/rubius/string.rb
|
136
|
+
- rubius.gemspec
|
137
|
+
- test/helper.rb
|
138
|
+
- test/test_authenticator.rb
|
139
|
+
- test/test_dictionary.rb
|
140
|
+
- test/test_rails.rb
|
141
|
+
- test/test_string.rb
|
142
|
+
homepage: http://github.com/bytemine/rubius
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.2.2
|
163
|
+
signing_key:
|
164
|
+
specification_version: 3
|
165
|
+
summary: A simple ruby RADIUS authentication gem
|
166
|
+
test_files:
|
167
|
+
- test/helper.rb
|
168
|
+
- test/test_authenticator.rb
|
169
|
+
- test/test_dictionary.rb
|
170
|
+
- test/test_rails.rb
|
171
|
+
- test/test_string.rb
|