casino-devise_active_record_authenticator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9f5bbc516702db7543111e2eb59f1e878f4d4164
4
+ data.tar.gz: 0701c8de19d02823519641f795aa3078b9504c79
5
+ SHA512:
6
+ metadata.gz: aaf9d38783603946aa52e76b912b217b80958efafe859a9ff14447aa8119f5122c473bd2c9791c992ea87c433c3748c88560c4c2461a3aea9eeb57e4895e5320
7
+ data.tar.gz: 1bd3314c9311aac1c43700e0be2e83df806c7cec076c44b95a6c34c9b62d80dc50b855346395bce9c6065c1c11efd90f111e78f759e4cfecf71dc09cfa7962c5
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ /Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ casino-deviseactiverecord_authenticator
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0-p195
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.1
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ Original work Copyright (c) 2013 Nils Caspar
2
+ Modified work Copyright 2015 Daniel Armanto
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ Provides mechanism to authenticate againts [Devise](https://github.com/plataformatec/devise) data as an authenticator for [CASino](https://github.com/rbCAS/CASino). Only Active User is considered as valid user.
2
+
3
+ This is the implementation (inspired) of http://bentoncreation.com/post/74392403766/devise-cas-using-devise-cas-authenticatable-and
4
+
5
+ The base of this code is [rbCAS/CASino-activerecord_authenticator](https://github.com/rbCAS/casino-activerecord_authenticator)
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ require 'rake'
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ task :default => :spec
7
+
8
+ desc 'Run all specs'
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
10
+ spec.pattern = FileList['spec/**/*_spec.rb']
11
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'casino/devise_activerecord_authenticator/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'casino-devise_active_record_authenticator'
7
+ s.version = CASino::DeviseActiveRecordAuthenticator::VERSION
8
+ s.authors = ['Nils Caspar', 'Raffael Schmid', 'Daniel Armanto']
9
+ s.email = ['ncaspar@me.com', 'raffael@yux.ch', 'armanto@gmail.com']
10
+ s.homepage = 'http://rbcas.org/'
11
+ s.license = 'MIT'
12
+ s.summary = 'Provides mechanism to authenticate Devise data as an authenticator for CASino. Only active user is considered valid'
13
+ s.description = 'This gem can be used to allow the CASino backend to authenticate against an SQL server using ActiveRecord (specific to Devise data).'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+
20
+ s.add_development_dependency 'rake', '~> 10.0'
21
+ s.add_development_dependency 'rspec', '~> 2.12'
22
+ s.add_development_dependency 'simplecov', '~> 0.7'
23
+ s.add_development_dependency 'sqlite3', '~> 1.3.7'
24
+ s.add_development_dependency 'coveralls'
25
+
26
+ s.add_runtime_dependency 'activerecord', '~> 4.1.0'
27
+ s.add_runtime_dependency 'unix-crypt', '~> 1.1'
28
+ s.add_runtime_dependency 'bcrypt', '~> 3.0'
29
+ s.add_runtime_dependency 'casino', '>= 3.0.0', '< 5.0.0'
30
+ s.add_runtime_dependency 'phpass-ruby', '~> 0.1'
31
+ end
@@ -0,0 +1 @@
1
+ require 'casino-devise_activerecord_authenticator'
@@ -0,0 +1,2 @@
1
+ require 'casino/devise_activerecord_authenticator/version'
2
+ require 'casino/devise_activerecord_authenticator'
@@ -0,0 +1,112 @@
1
+ require 'active_record'
2
+ require 'unix_crypt'
3
+ require 'bcrypt'
4
+ require 'phpass'
5
+
6
+ class CASino::DeviseActiveRecordAuthenticator
7
+
8
+ class AuthDatabase < ::ActiveRecord::Base
9
+ self.abstract_class = true
10
+ end
11
+
12
+ # @param [Hash] options
13
+ def initialize(options)
14
+ if !options.respond_to?(:deep_symbolize_keys)
15
+ raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
16
+ end
17
+ @options = options.deep_symbolize_keys
18
+ raise ArgumentError, "Table name is missing" unless @options[:table]
19
+ if @options[:model_name]
20
+ model_name = @options[:model_name]
21
+ else
22
+ model_name = @options[:table]
23
+ if @options[:connection][:database]
24
+ model_name = "#{@options[:connection][:database].gsub(/[^a-zA-Z]+/, '')}_#{model_name}"
25
+ end
26
+ model_name = model_name.classify
27
+ end
28
+ model_class_name = "#{self.class.to_s}::#{model_name}"
29
+ eval <<-END
30
+ class #{model_class_name} < AuthDatabase
31
+ self.table_name = "#{@options[:table]}"
32
+ self.inheritance_column = :_type_disabled
33
+ end
34
+ END
35
+
36
+ @model = model_class_name.constantize
37
+ @model.establish_connection @options[:connection]
38
+ end
39
+
40
+ def validate(username, password)
41
+ #user = find_by_email!(username)
42
+
43
+ user = @model.send("find_by_#{@options[:username_column]}!", username)
44
+ password_from_database = user.send(@options[:password_column])
45
+
46
+
47
+
48
+ if valid_password?(password, password_from_database) && active_for_authentication?(user)
49
+ user_data(user)
50
+ else
51
+ false
52
+ end
53
+
54
+ rescue ActiveRecord::RecordNotFound
55
+ false
56
+ end
57
+
58
+ def load_user_data(username)
59
+ user = @model.send("find_by_#{@options[:username_column]}!", username)
60
+ user_data(user)
61
+ rescue ActiveRecord::RecordNotFound
62
+ nil
63
+ end
64
+
65
+ private
66
+
67
+ def user_data(user)
68
+ { username: user.send(@options[:username_column]), extra_attributes: extra_attributes(user) }
69
+ end
70
+
71
+ def valid_password?(password, password_from_database)
72
+ return false if password_from_database.blank?
73
+ magic = password_from_database.split('$')[1]
74
+ case magic
75
+ when /\A2a?\z/
76
+ valid_password_with_bcrypt?(password, password_from_database)
77
+ when /\AH\z/, /\AP\z/
78
+ valid_password_with_phpass?(password, password_from_database)
79
+ else
80
+ valid_password_with_unix_crypt?(password, password_from_database)
81
+ end
82
+ end
83
+
84
+ def valid_password_with_bcrypt?(password, password_from_database)
85
+ password_with_pepper = password + @options[:pepper].to_s
86
+ BCrypt::Password.new(password_from_database) == password_with_pepper
87
+ end
88
+
89
+ def valid_password_with_unix_crypt?(password, password_from_database)
90
+ UnixCrypt.valid?(password, password_from_database)
91
+ end
92
+
93
+ def valid_password_with_phpass?(password, password_from_database)
94
+ Phpass.new().check(password, password_from_database)
95
+ end
96
+
97
+ def active_for_authentication?(user)
98
+ !!user.confirmed_at
99
+ end
100
+
101
+ def extra_attributes(user)
102
+ attributes = {}
103
+ extra_attributes_option.each do |attribute_name, database_column|
104
+ attributes[attribute_name] = user.send(database_column)
105
+ end
106
+ attributes
107
+ end
108
+
109
+ def extra_attributes_option
110
+ @options[:extra_attributes] || {}
111
+ end
112
+ end
@@ -0,0 +1,5 @@
1
+ module CASino
2
+ class DeviseActiveRecordAuthenticator
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,204 @@
1
+ require 'spec_helper'
2
+ require 'casino/devise_activerecord_authenticator'
3
+
4
+ describe CASino::DeviseActiveRecordAuthenticator do
5
+
6
+ let(:pepper) { nil }
7
+ let(:extra_attributes) {{ email: 'mail_address' }}
8
+ let(:options) do
9
+ {
10
+ connection: {
11
+ adapter: 'sqlite3',
12
+ database: '/tmp/casino-test-auth.sqlite'
13
+ },
14
+ table: 'users',
15
+ username_column: 'username',
16
+ password_column: 'password',
17
+ pepper: pepper,
18
+ extra_attributes: extra_attributes
19
+ }
20
+ end
21
+ let(:faulty_options){ options.merge(table: nil) }
22
+ let(:user_class) { described_class::TmpcasinotestauthsqliteUser }
23
+
24
+ subject { described_class.new(options) }
25
+
26
+ before do
27
+ subject # ensure everything is initialized
28
+
29
+ ::ActiveRecord::Base.establish_connection options[:connection]
30
+
31
+ ActiveRecord::Migration.suppress_messages do
32
+ ActiveRecord::Schema.define do
33
+ create_table :users do |t|
34
+ t.string :username
35
+ t.string :password
36
+ t.string :mail_address
37
+ t.datetime :confirmed_at
38
+ end
39
+ end
40
+ end
41
+
42
+ user_class.create!(
43
+ username: 'test',
44
+ password: '$5$cegeasjoos$vPX5AwDqOTGocGjehr7k1IYp6Kt.U4FmMUa.1l6NrzD', # password: testpassword
45
+ mail_address: 'mail@example.org',
46
+ confirmed_at: Time.now)
47
+ end
48
+
49
+ after do
50
+ ActiveRecord::Migration.suppress_messages do
51
+ ActiveRecord::Schema.define do
52
+ drop_table :users
53
+ end
54
+ end
55
+ end
56
+
57
+ describe 'custom model name' do
58
+ let(:model_name) { 'DongerRaiser' }
59
+ before do
60
+ options[:model_name] = model_name
61
+ end
62
+
63
+ it 'should create the model with the name specified' do
64
+ described_class.new(options)
65
+ expect(described_class.const_get(model_name)).to be_a Class
66
+ end
67
+ end
68
+
69
+ describe 'invalid yaml input' do
70
+ context 'no hash input' do
71
+ it 'throws an argument error if the supplied input was not hash' do
72
+ expect{described_class.new("string")}.to raise_error ArgumentError
73
+ end
74
+ it 'does not throw an error if the correct hash was supplied' do
75
+ expect{described_class.new(options)}.not_to raise_error
76
+ end
77
+ end
78
+ context 'invalid table name' do
79
+ it 'throws an argument error if the table was nil/not supplied' do
80
+ expect{described_class.new(faulty_options)}.to raise_error ArgumentError
81
+ end
82
+ end
83
+ end
84
+
85
+ describe '#load_user_data' do
86
+ context 'valid username' do
87
+ it 'returns the username' do
88
+ subject.validate('test', 'testpassword')[:username].should eq('test')
89
+ end
90
+
91
+ it 'returns the extra attributes' do
92
+ subject.load_user_data('test')[:extra_attributes][:email].should eq('mail@example.org')
93
+ end
94
+ end
95
+
96
+ context 'invalid username' do
97
+ it 'returns nil' do
98
+ subject.load_user_data('does-not-exist').should eq(nil)
99
+ end
100
+ end
101
+ end
102
+
103
+ describe '#validate' do
104
+
105
+ context 'valid username' do
106
+ context 'valid password' do
107
+ it 'returns the username' do
108
+ subject.validate('test', 'testpassword')[:username].should eq('test')
109
+ end
110
+
111
+ it 'returns the extra attributes' do
112
+ subject.validate('test', 'testpassword')[:extra_attributes][:email].should eq('mail@example.org')
113
+ end
114
+
115
+ context 'when no extra attributes given' do
116
+ let(:extra_attributes) { nil }
117
+
118
+ it 'returns an empty hash for extra attributes' do
119
+ subject.validate('test', 'testpassword')[:extra_attributes].should eq({})
120
+ end
121
+ end
122
+ end
123
+
124
+ context 'invalid password' do
125
+ it 'returns false' do
126
+ subject.validate('test', 'wrongpassword').should eq(false)
127
+ end
128
+ end
129
+
130
+ context 'NULL password field' do
131
+ it 'returns false' do
132
+ user = user_class.first
133
+ user.password = nil
134
+ user.save!
135
+
136
+ subject.validate('test', 'wrongpassword').should eq(false)
137
+ end
138
+ end
139
+
140
+ context 'empty password field' do
141
+ it 'returns false' do
142
+ user = user_class.first
143
+ user.password = ''
144
+ user.save!
145
+
146
+ subject.validate('test', 'wrongpassword').should eq(false)
147
+ end
148
+ end
149
+ end
150
+
151
+ context 'invalid username' do
152
+ it 'returns false' do
153
+ subject.validate('does-not-exist', 'testpassword').should eq(false)
154
+ end
155
+ end
156
+
157
+ context 'support for bcrypt' do
158
+ before do
159
+ user_class.create!(
160
+ username: 'test2',
161
+ password: '$2a$10$dRFLSkYedQ05sqMs3b265e0nnJSoa9RhbpKXU79FDPVeuS1qBG7Jq', # password: testpassword2
162
+ mail_address: 'mail@example.org',
163
+ confirmed_at: Time.now)
164
+
165
+ end
166
+
167
+ it 'is able to handle bcrypt password hashes' do
168
+ subject.validate('test2', 'testpassword2').should be_instance_of(Hash)
169
+ end
170
+ end
171
+
172
+ context 'support for bcrypt with pepper' do
173
+ let(:pepper) { 'abcdefg' }
174
+
175
+ before do
176
+ user_class.create!(
177
+ username: 'test3',
178
+ password: '$2a$10$ndCGPWg5JFMQH/Kl6xKe.OGNaiG7CFIAVsgAOJU75Q6g5/FpY5eX6', # password: testpassword3, pepper: abcdefg
179
+ mail_address: 'mail@example.org',
180
+ confirmed_at: Time.now)
181
+ end
182
+
183
+ it 'is able to handle bcrypt password hashes' do
184
+ subject.validate('test3', 'testpassword3').should be_instance_of(Hash)
185
+ end
186
+ end
187
+
188
+ context 'support for phpass' do
189
+ before do
190
+ user_class.create!(
191
+ username: 'test4',
192
+ password: '$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0', # password: test12345
193
+ mail_address: 'mail@example.org',
194
+ confirmed_at: Time.now)
195
+ end
196
+
197
+ it 'is able to handle phpass password hashes' do
198
+ subject.validate('test4', 'test12345').should be_instance_of(Hash)
199
+ end
200
+ end
201
+
202
+ end
203
+
204
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'simplecov'
5
+ require 'coveralls'
6
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
7
+ SimpleCov.start do
8
+ add_filter '/spec'
9
+ end
10
+
11
+ require 'rspec'
12
+ require 'casino-devise_activerecord_authenticator'
13
+
14
+ # Requires supporting files with custom matchers and macros, etc,
15
+ # in ./support/ and its subdirectories.
16
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
17
+
18
+ RSpec.configure do |config|
19
+ # Run specs in random order to surface order dependencies. If you find an
20
+ # order dependency and want to debug it, you can fix the order by providing
21
+ # the seed, which is printed after each run.
22
+ # --seed 1234
23
+ config.order = 'random'
24
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: casino-devise_active_record_authenticator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nils Caspar
8
+ - Raffael Schmid
9
+ - Daniel Armanto
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-02-25 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '10.0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: '10.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rspec
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: '2.12'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ version: '2.12'
43
+ - !ruby/object:Gem::Dependency
44
+ name: simplecov
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: '0.7'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: '0.7'
57
+ - !ruby/object:Gem::Dependency
58
+ name: sqlite3
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: 1.3.7
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 1.3.7
71
+ - !ruby/object:Gem::Dependency
72
+ name: coveralls
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: activerecord
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: 4.1.0
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 4.1.0
99
+ - !ruby/object:Gem::Dependency
100
+ name: unix-crypt
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ version: '1.1'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: '1.1'
113
+ - !ruby/object:Gem::Dependency
114
+ name: bcrypt
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ~>
118
+ - !ruby/object:Gem::Version
119
+ version: '3.0'
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '3.0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: casino
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 3.0.0
134
+ - - <
135
+ - !ruby/object:Gem::Version
136
+ version: 5.0.0
137
+ type: :runtime
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: 3.0.0
144
+ - - <
145
+ - !ruby/object:Gem::Version
146
+ version: 5.0.0
147
+ - !ruby/object:Gem::Dependency
148
+ name: phpass-ruby
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: '0.1'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ~>
159
+ - !ruby/object:Gem::Version
160
+ version: '0.1'
161
+ description: This gem can be used to allow the CASino backend to authenticate against
162
+ an SQL server using ActiveRecord (specific to Devise data).
163
+ email:
164
+ - ncaspar@me.com
165
+ - raffael@yux.ch
166
+ - armanto@gmail.com
167
+ executables: []
168
+ extensions: []
169
+ extra_rdoc_files: []
170
+ files:
171
+ - .gitignore
172
+ - .rspec
173
+ - .ruby-gemset
174
+ - .ruby-version
175
+ - .travis.yml
176
+ - Gemfile
177
+ - LICENSE.txt
178
+ - README.md
179
+ - Rakefile
180
+ - casino-devise-activerecord_authenticator.gemspec
181
+ - lib/casino-devise_active_record_authenticator.rb
182
+ - lib/casino-devise_activerecord_authenticator.rb
183
+ - lib/casino/devise_activerecord_authenticator.rb
184
+ - lib/casino/devise_activerecord_authenticator/version.rb
185
+ - spec/casino_core/activerecord_authenticator_spec.rb
186
+ - spec/spec_helper.rb
187
+ homepage: http://rbcas.org/
188
+ licenses:
189
+ - MIT
190
+ metadata: {}
191
+ post_install_message:
192
+ rdoc_options: []
193
+ require_paths:
194
+ - lib
195
+ required_ruby_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ requirements: []
206
+ rubyforge_project:
207
+ rubygems_version: 2.4.2
208
+ signing_key:
209
+ specification_version: 4
210
+ summary: Provides mechanism to authenticate Devise data as an authenticator for CASino.
211
+ Only active user is considered valid
212
+ test_files:
213
+ - spec/casino_core/activerecord_authenticator_spec.rb
214
+ - spec/spec_helper.rb