challah 1.5.0 → 2.0.0.beta2
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 +5 -5
- data/CHANGELOG.md +32 -0
- data/README.md +6 -39
- data/VERSION +1 -1
- data/app/controllers/sessions_controller.rb +11 -10
- data/app/models/authorization.rb +2 -0
- data/lib/challah/audit.rb +38 -36
- data/lib/challah/authenticators/api_key.rb +4 -2
- data/lib/challah/authenticators/password.rb +3 -1
- data/lib/challah/authenticators.rb +5 -3
- data/lib/challah/concerns/authorizeable.rb +4 -0
- data/lib/challah/concerns/user/attributeable.rb +37 -29
- data/lib/challah/concerns/user/authenticateable.rb +4 -2
- data/lib/challah/concerns/user/authorizable.rb +16 -12
- data/lib/challah/concerns/user/findable.rb +13 -10
- data/lib/challah/concerns/user/passwordable.rb +5 -3
- data/lib/challah/concerns/user/provideable.rb +22 -20
- data/lib/challah/concerns/user/statusable.rb +3 -21
- data/lib/challah/concerns/user/validateable.rb +3 -1
- data/lib/challah/concerns/userable.rb +1 -3
- data/lib/challah/controller.rb +69 -65
- data/lib/challah/cookie_store.rb +7 -5
- data/lib/challah/encrypter.rb +4 -2
- data/lib/challah/engine.rb +5 -18
- data/lib/challah/providers/password_provider.rb +9 -7
- data/lib/challah/providers.rb +3 -1
- data/lib/challah/random.rb +6 -4
- data/lib/challah/routes.rb +6 -6
- data/lib/challah/session.rb +27 -25
- data/lib/challah/signup.rb +5 -3
- data/lib/challah/simple_cookie_store.rb +82 -80
- data/lib/challah/techniques/api_key_technique.rb +2 -2
- data/lib/challah/techniques/password_technique.rb +2 -1
- data/lib/challah/techniques/token_technique.rb +3 -1
- data/lib/challah/techniques.rb +2 -0
- data/lib/challah/test.rb +6 -0
- data/lib/challah/validators/email_validator.rb +2 -0
- data/lib/challah/validators/password_validator.rb +5 -3
- data/lib/challah/version.rb +3 -1
- data/lib/challah.rb +2 -5
- data/lib/generators/challah_generator.rb +17 -0
- data/lib/generators/templates/migration.erb +39 -0
- data/lib/tasks/setup.rake +7 -3
- metadata +63 -26
- data/db/migrate/20120127150433_create_users.rb +0 -29
- data/db/migrate/20121116210759_create_authorizations.rb +0 -22
- data/lib/challah/plugins.rb +0 -54
@@ -4,6 +4,7 @@ module Challah
|
|
4
4
|
# To use a different storage method for persisting a session, just create
|
5
5
|
# a new class that responds to +read+, +save+ and +destroy+
|
6
6
|
class SimpleCookieStore
|
7
|
+
|
7
8
|
def initialize(session)
|
8
9
|
@session = session
|
9
10
|
end
|
@@ -13,7 +14,7 @@ module Challah
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def inspect
|
16
|
-
"#<SimpleCookieStore:0x#{object_id.to_s(16)} valid=#{existing?}>"
|
17
|
+
"#<SimpleCookieStore:0x#{ object_id.to_s(16) } valid=#{ existing? }>"
|
17
18
|
end
|
18
19
|
|
19
20
|
def read
|
@@ -29,107 +30,108 @@ module Challah
|
|
29
30
|
|
30
31
|
private
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def clear
|
34
|
+
cookies.delete(session_cookie_name, domain: domain)
|
35
|
+
cookies.delete(validation_cookie_name, domain: domain)
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
def cookie_values
|
39
|
+
session_cookie && session_cookie.to_s.split(joiner)
|
40
|
+
end
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
def cookies
|
43
|
+
request.cookie_jar
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
def default_cookie_prefix
|
47
|
+
Challah.options[:cookie_prefix]
|
48
|
+
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
def domain
|
51
|
+
request.session_options[:domain]
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
# Do the cookies exist, and are they valid?
|
55
|
+
def existing?
|
56
|
+
exists = false
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
if session_cookie && validation_cookie
|
59
|
+
session_tmp = session_cookie.to_s
|
60
|
+
validation_tmp = validation_cookie.to_s
|
60
61
|
|
61
|
-
|
62
|
-
|
62
|
+
if validation_tmp == validation_cookie_value(session_tmp)
|
63
|
+
exists = true
|
64
|
+
end
|
63
65
|
end
|
66
|
+
|
67
|
+
exists
|
64
68
|
end
|
65
69
|
|
66
|
-
|
67
|
-
|
70
|
+
def expiration
|
71
|
+
@expiration ||= 1.month.from_now
|
72
|
+
end
|
68
73
|
|
69
|
-
|
70
|
-
|
71
|
-
|
74
|
+
def joiner
|
75
|
+
"@"
|
76
|
+
end
|
72
77
|
|
73
|
-
|
74
|
-
|
75
|
-
|
78
|
+
def prefix
|
79
|
+
@prefix ||= [ default_cookie_prefix, user_model_id ].compact.join("-")
|
80
|
+
end
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
|
82
|
+
def request
|
83
|
+
raise "No Request Provided" unless @session && @session.request
|
84
|
+
@session.request
|
85
|
+
end
|
80
86
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
87
|
+
def session_cookie
|
88
|
+
cookies[session_cookie_name]
|
89
|
+
end
|
85
90
|
|
86
|
-
|
87
|
-
|
88
|
-
|
91
|
+
def session_cookie_name
|
92
|
+
"#{ prefix }-s"
|
93
|
+
end
|
89
94
|
|
90
|
-
|
91
|
-
|
92
|
-
|
95
|
+
def session_cookie_value
|
96
|
+
"#@token#{ joiner }#@user_id"
|
97
|
+
end
|
93
98
|
|
94
|
-
|
95
|
-
|
96
|
-
|
99
|
+
def user_model_id
|
100
|
+
if @session && @session.user_model && @session.user_model.table_name != "users"
|
101
|
+
Encrypter.md5(@session.user_model.table_name).slice(0..5)
|
102
|
+
end
|
103
|
+
end
|
97
104
|
|
98
|
-
|
99
|
-
|
100
|
-
Encrypter.md5(@session.user_model.table_name).slice(0..5)
|
105
|
+
def validation_cookie
|
106
|
+
cookies[validation_cookie_name]
|
101
107
|
end
|
102
|
-
end
|
103
108
|
|
104
|
-
|
105
|
-
|
106
|
-
|
109
|
+
def validation_cookie_name
|
110
|
+
"#{ prefix }-v"
|
111
|
+
end
|
107
112
|
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
def validation_cookie_value(value = nil)
|
114
|
+
value = session_cookie_value unless value
|
115
|
+
Encrypter.md5(value)
|
116
|
+
end
|
111
117
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
118
|
+
def write_cookies!
|
119
|
+
cookies[session_cookie_name] = {
|
120
|
+
value: session_cookie_value,
|
121
|
+
expires: expiration,
|
122
|
+
secure: false,
|
123
|
+
httponly: true,
|
124
|
+
domain: domain
|
125
|
+
}
|
126
|
+
|
127
|
+
cookies[validation_cookie_name] = {
|
128
|
+
value: validation_cookie_value,
|
129
|
+
expires: expiration,
|
130
|
+
secure: false,
|
131
|
+
httponly: true,
|
132
|
+
domain: domain
|
133
|
+
}
|
134
|
+
end
|
116
135
|
|
117
|
-
def write_cookies!
|
118
|
-
cookies[session_cookie_name] = {
|
119
|
-
value: session_cookie_value,
|
120
|
-
expires: expiration,
|
121
|
-
secure: false,
|
122
|
-
httponly: true,
|
123
|
-
domain: domain
|
124
|
-
}
|
125
|
-
|
126
|
-
cookies[validation_cookie_name] = {
|
127
|
-
value: validation_cookie_value,
|
128
|
-
expires: expiration,
|
129
|
-
secure: false,
|
130
|
-
httponly: true,
|
131
|
-
domain: domain
|
132
|
-
}
|
133
|
-
end
|
134
136
|
end
|
135
137
|
end
|
@@ -5,7 +5,7 @@ module Challah
|
|
5
5
|
attr_accessor :user_model
|
6
6
|
|
7
7
|
def initialize(session)
|
8
|
-
@key
|
8
|
+
@key = session.key? ? session.key : nil
|
9
9
|
end
|
10
10
|
|
11
11
|
def authenticate
|
@@ -16,7 +16,7 @@ module Challah
|
|
16
16
|
unless @key.to_s.blank?
|
17
17
|
user = user_model.find_by_api_key(@key)
|
18
18
|
|
19
|
-
if user
|
19
|
+
if user && user.valid_session?
|
20
20
|
return user
|
21
21
|
end
|
22
22
|
end
|
@@ -12,7 +12,7 @@ module Challah
|
|
12
12
|
|
13
13
|
# if we can successfully authenticate, return a User instance, otherwise nil
|
14
14
|
def authenticate
|
15
|
-
if username?
|
15
|
+
if username? && password?
|
16
16
|
user = user_model.find_for_session(username)
|
17
17
|
|
18
18
|
if user
|
@@ -49,5 +49,6 @@ module Challah
|
|
49
49
|
def username
|
50
50
|
@username
|
51
51
|
end
|
52
|
+
|
52
53
|
end
|
53
54
|
end
|
@@ -18,6 +18,8 @@ module Challah
|
|
18
18
|
# This is turned off by default and must be manually enabled for security reasons.
|
19
19
|
return nil unless Challah.options[:token_enabled]
|
20
20
|
|
21
|
+
return nil unless token.present?
|
22
|
+
|
21
23
|
if user = user_model.where(api_key: token).first
|
22
24
|
if user.valid_session?
|
23
25
|
return user
|
@@ -41,7 +43,7 @@ module Challah
|
|
41
43
|
|
42
44
|
private
|
43
45
|
|
44
|
-
|
46
|
+
attr_reader :token
|
45
47
|
|
46
48
|
end
|
47
49
|
end
|
data/lib/challah/techniques.rb
CHANGED
@@ -54,6 +54,7 @@ module Challah
|
|
54
54
|
# +ApiKeyTechnique+.
|
55
55
|
#
|
56
56
|
module Techniques
|
57
|
+
|
57
58
|
# Register a new technique class. Pass in a name as an identifier, and the class to use
|
58
59
|
# when attempting to authenticate.
|
59
60
|
def register_technique(name, klass)
|
@@ -69,5 +70,6 @@ module Challah
|
|
69
70
|
def techniques
|
70
71
|
@techniques.dup
|
71
72
|
end
|
73
|
+
|
72
74
|
end
|
73
75
|
end
|
data/lib/challah/test.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module Challah
|
2
|
+
|
2
3
|
# Used to persist session data in test mode instead of using cookies. Stores the session
|
3
4
|
# data lazily in a global var, accessible across the testing environment.
|
4
5
|
class TestSessionStore
|
6
|
+
|
5
7
|
def initialize(session = nil)
|
6
8
|
@session = session
|
7
9
|
end
|
@@ -22,6 +24,7 @@ module Challah
|
|
22
24
|
$challah_test_session = "#{ token }@#{ user_id }"
|
23
25
|
true
|
24
26
|
end
|
27
|
+
|
25
28
|
end
|
26
29
|
|
27
30
|
module Testing
|
@@ -39,17 +42,20 @@ module Challah
|
|
39
42
|
alias_method :logout, :signout
|
40
43
|
|
41
44
|
end
|
45
|
+
|
42
46
|
end
|
43
47
|
|
44
48
|
if defined?(ActionController::TestCase)
|
45
49
|
Challah.options[:storage_class] = Challah::TestSessionStore
|
46
50
|
|
47
51
|
class ActionController::TestCase
|
52
|
+
|
48
53
|
include Challah::Testing
|
49
54
|
|
50
55
|
setup do
|
51
56
|
$challah_test_session = nil
|
52
57
|
end
|
58
|
+
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
@@ -6,6 +6,7 @@ module Challah
|
|
6
6
|
# validates :email, :presence => true, :email => true
|
7
7
|
# end
|
8
8
|
class EmailValidator < ActiveModel::EachValidator
|
9
|
+
|
9
10
|
# Called automatically by ActiveModel validation..
|
10
11
|
def validate_each(record, attribute, value)
|
11
12
|
unless value =~ EmailValidator.pattern
|
@@ -17,5 +18,6 @@ module Challah
|
|
17
18
|
def self.pattern
|
18
19
|
/\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,}\z/
|
19
20
|
end
|
21
|
+
|
20
22
|
end
|
21
23
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Challah
|
2
2
|
class PasswordValidator < ActiveModel::Validator
|
3
|
+
|
3
4
|
# Check to make sure a valid password and confirmation were set
|
4
5
|
def validate(record)
|
5
|
-
if record.password_provider?
|
6
|
-
if record.new_record?
|
6
|
+
if record.password_provider? || options[:force]
|
7
|
+
if record.new_record? && record.password.to_s.blank? && !record.password_changed?
|
7
8
|
record.errors.add :password, :blank
|
8
9
|
elsif record.password_changed?
|
9
10
|
if record.password.to_s.size < 4
|
@@ -14,5 +15,6 @@ module Challah
|
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
18
|
+
|
17
19
|
end
|
18
|
-
end
|
20
|
+
end
|
data/lib/challah/version.rb
CHANGED
data/lib/challah.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "challah/version"
|
2
2
|
|
3
3
|
module Challah
|
4
|
+
|
4
5
|
autoload :Audit, "challah/audit"
|
5
6
|
|
6
7
|
autoload :CookieStore, "challah/cookie_store"
|
@@ -9,7 +10,6 @@ module Challah
|
|
9
10
|
autoload :Authenticators, "challah/authenticators"
|
10
11
|
autoload :Controller, "challah/controller"
|
11
12
|
autoload :Encrypter, "challah/encrypter"
|
12
|
-
autoload :Plugins, "challah/plugins"
|
13
13
|
autoload :Providers, "challah/providers"
|
14
14
|
autoload :Random, "challah/random"
|
15
15
|
autoload :Session, "challah/session"
|
@@ -74,10 +74,6 @@ module Challah
|
|
74
74
|
register_technique :password, PasswordTechnique
|
75
75
|
register_technique :token, TokenTechnique
|
76
76
|
|
77
|
-
# Set up plugin registering capability
|
78
|
-
extend Plugins
|
79
|
-
@plugins ||= {}
|
80
|
-
|
81
77
|
# Set up authenticators
|
82
78
|
extend Authenticators
|
83
79
|
@authenticators ||= {}
|
@@ -91,6 +87,7 @@ module Challah
|
|
91
87
|
@providers ||= {}
|
92
88
|
|
93
89
|
register_provider :password, PasswordProvider
|
90
|
+
|
94
91
|
end
|
95
92
|
|
96
93
|
require "challah/engine" if defined?(Rails)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "rails/generators/active_record"
|
2
|
+
|
3
|
+
class ChallahGenerator < Rails::Generators::Base
|
4
|
+
|
5
|
+
include ActiveRecord::Generators::Migration
|
6
|
+
|
7
|
+
source_root File.expand_path("../templates", __FILE__)
|
8
|
+
|
9
|
+
def copy_migration
|
10
|
+
migration_template "migration.erb", "db/migrate/challah_create_users.rb", migration_version: migration_version
|
11
|
+
end
|
12
|
+
|
13
|
+
def migration_version
|
14
|
+
"[#{ Rails::VERSION::MAJOR }.#{ Rails::VERSION::MINOR }]"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ChallahCreateUsers < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def change
|
3
|
+
create_table :users do |t|
|
4
|
+
t.string :first_name
|
5
|
+
t.string :last_name
|
6
|
+
t.string :email
|
7
|
+
t.string :email_hash
|
8
|
+
t.string :persistence_token
|
9
|
+
t.string :api_key
|
10
|
+
t.datetime :last_session_at
|
11
|
+
t.integer :session_count, default: 0
|
12
|
+
t.integer :failed_auth_count, default: 0
|
13
|
+
t.bigint :created_by, default: 0
|
14
|
+
t.bigint :updated_by, default: 0
|
15
|
+
t.integer :status, default: 0 # defaults to :active
|
16
|
+
t.timestamps null: true
|
17
|
+
end
|
18
|
+
|
19
|
+
add_index :users, :first_name
|
20
|
+
add_index :users, :last_name
|
21
|
+
add_index :users, :email
|
22
|
+
add_index :users, :api_key
|
23
|
+
|
24
|
+
create_table :authorizations do |t|
|
25
|
+
t.references :user
|
26
|
+
t.string :provider, limit: 50
|
27
|
+
t.string :uid
|
28
|
+
t.string :token, limit: 500
|
29
|
+
t.datetime :expires_at
|
30
|
+
t.datetime :last_session_at
|
31
|
+
t.integer :session_count, default: 0
|
32
|
+
t.timestamps null: true
|
33
|
+
end
|
34
|
+
|
35
|
+
add_index :authorizations, [ :user_id, :provider ]
|
36
|
+
add_index :authorizations, :uid
|
37
|
+
add_index :authorizations, :token
|
38
|
+
end
|
39
|
+
end
|
data/lib/tasks/setup.rake
CHANGED
@@ -3,6 +3,10 @@ namespace :challah do
|
|
3
3
|
task :setup => [ "challah:setup:migrations", "challah:unpack:user", "db:migrate", "challah:banner" ]
|
4
4
|
|
5
5
|
task :banner do
|
6
|
+
is_rails5 = Rails.version.start_with? "5"
|
7
|
+
|
8
|
+
cmd = is_rails5 ? "rails" : "rake"
|
9
|
+
|
6
10
|
banner = <<-str
|
7
11
|
|
8
12
|
==========================================================================
|
@@ -15,7 +19,7 @@ namespace :challah do
|
|
15
19
|
|
16
20
|
If you want to create a new user now, just run:
|
17
21
|
|
18
|
-
|
22
|
+
#{ cmd } challah:users:create
|
19
23
|
|
20
24
|
==========================================================================
|
21
25
|
|
@@ -26,8 +30,8 @@ namespace :challah do
|
|
26
30
|
|
27
31
|
namespace :setup do
|
28
32
|
task :migrations do
|
29
|
-
puts "
|
30
|
-
|
33
|
+
puts "Setting up migrations..."
|
34
|
+
sh "rails generate challah"
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
metadata
CHANGED
@@ -1,51 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: challah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Tornow
|
8
8
|
- Phillip Ridlen
|
9
9
|
- Nathaniel Watts
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: highline
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - "~>"
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '1.7'
|
22
19
|
- - ">="
|
23
20
|
- !ruby/object:Gem::Version
|
24
21
|
version: 1.7.1
|
22
|
+
- - "<"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '3'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
|
-
- - "~>"
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: '1.7'
|
32
29
|
- - ">="
|
33
30
|
- !ruby/object:Gem::Version
|
34
31
|
version: 1.7.1
|
32
|
+
- - "<"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rails
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 5.2.0
|
42
|
+
- - "<"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '8'
|
42
45
|
type: :runtime
|
43
46
|
prerelease: false
|
44
47
|
version_requirements: !ruby/object:Gem::Requirement
|
45
48
|
requirements:
|
46
49
|
- - ">="
|
47
50
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
51
|
+
version: 5.2.0
|
52
|
+
- - "<"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '8'
|
49
55
|
- !ruby/object:Gem::Dependency
|
50
56
|
name: rake
|
51
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,28 +86,28 @@ dependencies:
|
|
80
86
|
requirements:
|
81
87
|
- - "~>"
|
82
88
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
89
|
+
version: '4.0'
|
84
90
|
type: :development
|
85
91
|
prerelease: false
|
86
92
|
version_requirements: !ruby/object:Gem::Requirement
|
87
93
|
requirements:
|
88
94
|
- - "~>"
|
89
95
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
96
|
+
version: '4.0'
|
91
97
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
98
|
+
name: factory_bot_rails
|
93
99
|
requirement: !ruby/object:Gem::Requirement
|
94
100
|
requirements:
|
95
101
|
- - "~>"
|
96
102
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
103
|
+
version: '6.1'
|
98
104
|
type: :development
|
99
105
|
prerelease: false
|
100
106
|
version_requirements: !ruby/object:Gem::Requirement
|
101
107
|
requirements:
|
102
108
|
- - "~>"
|
103
109
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
110
|
+
version: '6.1'
|
105
111
|
- !ruby/object:Gem::Dependency
|
106
112
|
name: sqlite3
|
107
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,7 +122,35 @@ dependencies:
|
|
116
122
|
- - "~>"
|
117
123
|
- !ruby/object:Gem::Version
|
118
124
|
version: '1.3'
|
119
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec_junit_formatter
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.2'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.2'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: appraisal
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: Authorization and session management for Rails apps
|
120
154
|
email:
|
121
155
|
- john@johntornow.com
|
122
156
|
- p@rdln.net
|
@@ -134,8 +168,6 @@ files:
|
|
134
168
|
- app/views/sessions/access_denied.html.erb
|
135
169
|
- app/views/sessions/new.html.erb
|
136
170
|
- config/locales/en.yml
|
137
|
-
- db/migrate/20120127150433_create_users.rb
|
138
|
-
- db/migrate/20121116210759_create_authorizations.rb
|
139
171
|
- lib/challah.rb
|
140
172
|
- lib/challah/audit.rb
|
141
173
|
- lib/challah/authenticators.rb
|
@@ -155,7 +187,6 @@ files:
|
|
155
187
|
- lib/challah/cookie_store.rb
|
156
188
|
- lib/challah/encrypter.rb
|
157
189
|
- lib/challah/engine.rb
|
158
|
-
- lib/challah/plugins.rb
|
159
190
|
- lib/challah/providers.rb
|
160
191
|
- lib/challah/providers/password_provider.rb
|
161
192
|
- lib/challah/random.rb
|
@@ -171,14 +202,21 @@ files:
|
|
171
202
|
- lib/challah/validators/email_validator.rb
|
172
203
|
- lib/challah/validators/password_validator.rb
|
173
204
|
- lib/challah/version.rb
|
205
|
+
- lib/generators/challah_generator.rb
|
206
|
+
- lib/generators/templates/migration.erb
|
174
207
|
- lib/tasks/crud.rake
|
175
208
|
- lib/tasks/setup.rake
|
176
209
|
- lib/tasks/unpack.rake
|
177
210
|
homepage: https://github.com/jdtornow/challah
|
178
211
|
licenses:
|
179
212
|
- MIT
|
180
|
-
metadata:
|
181
|
-
|
213
|
+
metadata:
|
214
|
+
bug_tracker_uri: https://github.com/jdtornow/challah/issues
|
215
|
+
changelog_uri: https://github.com/jdtornow/challah/releases
|
216
|
+
homepage_uri: https://github.com/jdtornow/challah
|
217
|
+
source_code_uri: https://github.com/jdtornow/challah
|
218
|
+
wiki_uri: https://github.com/jdtornow/challah/wiki
|
219
|
+
post_install_message:
|
182
220
|
rdoc_options: []
|
183
221
|
require_paths:
|
184
222
|
- lib
|
@@ -186,16 +224,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
224
|
requirements:
|
187
225
|
- - ">="
|
188
226
|
- !ruby/object:Gem::Version
|
189
|
-
version: 2.
|
227
|
+
version: 2.5.0
|
190
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
229
|
requirements:
|
192
230
|
- - ">="
|
193
231
|
- !ruby/object:Gem::Version
|
194
232
|
version: 1.8.11
|
195
233
|
requirements: []
|
196
|
-
|
197
|
-
|
198
|
-
signing_key:
|
234
|
+
rubygems_version: 3.2.32
|
235
|
+
signing_key:
|
199
236
|
specification_version: 4
|
200
237
|
summary: Rails authentication and sessions
|
201
238
|
test_files: []
|